Skip to content

impl(sprint-11/wave-B): D-CSV-2 — QualiaI4_16D type (8B, 16 i4 lanes) + OQ-CSV-1 ratified to Option α#384

Merged
AdaWorldAPI merged 3 commits into
mainfrom
claude/sprint-11-wave-b-qualia-i4
May 16, 2026
Merged

impl(sprint-11/wave-B): D-CSV-2 — QualiaI4_16D type (8B, 16 i4 lanes) + OQ-CSV-1 ratified to Option α#384
AdaWorldAPI merged 3 commits into
mainfrom
claude/sprint-11-wave-b-qualia-i4

Conversation

@AdaWorldAPI
Copy link
Copy Markdown
Owner

Summary

Sprint-11 Wave B = D-CSV-2 only (independent of PR #383's merge state). Adds the i4-16D packed qualia vector type to lance-graph-contract, with OQ-CSV-1 (qualia 16D per-dim assignment) ratified to Option α in this same PR.

OQ-CSV-1 ratification (autoattended decision in this PR)

The plan §7.2 proposed a felt-qualia vocab (Wisdom/Trust/Hope/etc.). Cross-check against the canonical surfaces (thinking-engine/src/qualia.rs::Qualia17D and contract::qualia::QualiaVector = [f32; 17]) revealed both use convergence observables (arousal/valence/tension/warmth/clarity/boundary/depth/velocity/entropy/coherence/intimacy/presence/assertion/receptivity/groundedness/expansion/integration). The plan footnote already flagged §7.2 as CONJECTURE pending qualia-engineer cross-check.

Ratified Option α: keep canonical observable vocab, drop dim 16 "integration" to fit 16 i4 lanes (recoverable on demand from valence + coherence + last_delta). Lower migration risk than a vocab swap.

D-CSV-2 implementation (W-B1, Sonnet)

  • QUALIA_I4_DIMS: usize = 16 + QUALIA_I4_LABELS: [&str; 16] matching AXIS_LABELS[0..16]
  • pub struct QualiaI4_16D(pub u64) #[repr(C, align(8))] — exactly 8 bytes, 16 i4 lanes (9× compression vs [f32; 18])
  • get(dim) -> i8 / set(dim, value) / with(dim, value) with i4 signed pack/unpack via (raw << 4) >> 4 arithmetic-shift sign-extension; clamp to −8..+7
  • from_f32_17d / to_f32_17d migration helpers (asymmetric quantization: positive × 7.0, negative × 8.0; dim 16 dropped on encode, zero-filled on decode)
  • magnitude(self) -> i8 = coherence.saturating_mul(valence) — per plan §7.2 Wisdom × Staunen → i8 intent, mapped to canonical vocab pair (one i8 multiply, SIMD-friendly)

Tests

8 new in cargo test -p lance-graph-contract qualia (14 pass / 0 fail total): size invariant (8 bytes), zero default, signed roundtrip across [-8, -7, -1, 0, 1, 7], clamp on overflow, field isolation, f32-17d round-trip with dim 16 dropped, label alignment with AXIS_LABELS[0..16], magnitude saturating_mul on extremes.

Board hygiene in this PR (per E-META-9)

  • STATUS_BOARD.md — D-CSV-2 transition Queued → In PR
  • AGENT_LOG.md — PREPEND wave-B fleet entry with OQ-CSV-1 ratification reasoning + open question on Wave C readiness

Wave C dependencies (next loop iteration)

Test plan

  • cargo test -p lance-graph-contract qualia — 14/14 pass
  • cargo check -p lance-graph-contract — clean
  • Contract crate remains zero-dep (no new dependencies)
  • No P0 found in main-thread code review (asymmetric quantization is intentional and documented)

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS


Generated by Claude Code

Copy link
Copy Markdown

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

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: 250bcbafb8

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

/// Out-of-range index returns 0 (defensive; bound check at call site preferred).
#[inline]
pub fn get(self, dim: usize) -> i8 {
if dim >= QUALIA_I4_DIMS { return 0; }
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Run rustfmt on the new qualia code

In this commit, rustfmt --check rewrites this one-line guard (and several other added lines in this file), so the documented merge gate will fail: AGENTS.md requires formatting Rust with cargo fmt --all and lists cargo fmt --manifest-path crates/lance-graph-contract/Cargo.toml -- --check as CI-gated. Please run rustfmt/cargo fmt before merging.

Useful? React with 👍 / 👎.

AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…ate)

CI gate `cargo fmt --manifest-path crates/lance-graph-contract/Cargo.toml -- --check`
flagged on PR #384 (codex P1 reviewer): the new D-CSV-2 code in
qualia.rs used single-line `if dim >= QUALIA_I4_DIMS { return 0; }`
guards that rustfmt 1.95 wants split across multiple lines. Also
the `pub use qualia::{...}` import in lib.rs was on a single long
line that rustfmt wants reformatted across multiple lines.

Pure mechanical reformat via `cargo fmt --manifest-path crates/lance-graph-contract/Cargo.toml`. No behavior change.

- qualia.rs: 41 insertions / 25 deletions — single-line `if`
  guards expanded; multi-line `for ... { let i = ...; *slot = if
  i >= 0 ... }` blocks reflowed; nibble pack/mask single-line
  expressions left intact where rustfmt accepts them
- lib.rs: 5 insertions / 2 deletions — long single-line `pub use
  qualia::{...}` import broken across multiple lines, items
  alphabetized within the use block per rustfmt 1.95 default

Validation:
- cargo clippy --manifest-path crates/lance-graph-contract/Cargo.toml --lib --tests -- -D warnings: clean
- cargo test --manifest-path crates/lance-graph-contract/Cargo.toml qualia: 14/14 pass

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…rite, no read-side change)

Wave C: phase 5a of the QualiaColumn migration per OQ-CSV-4
sibling-then-cutover ratification. Adds a sibling i4 column
ALONGSIDE the existing f32 `QualiaColumn`; double-write on every
push path; no read-side change. Phase 5b (separate follow-up PR)
flips readers + drops the f32 column.

Branched from PR #384 (`claude/sprint-11-wave-b-qualia-i4`) so
`QualiaI4_16D` from `lance-graph-contract::qualia` is available.
Will rebase onto main after PR #384 merges.

D-CSV-5a implementation (W-C1, Sonnet)
- NEW `pub struct QualiaI4Column(pub Box<[QualiaI4_16D]>)` mirroring
  `QualiaColumn` shape: `zeros(rows)`, `row(idx) -> QualiaI4_16D`,
  `set(row, value)`, `len()`/`is_empty()`, and bulk migration
  `from_f32(&QualiaColumn) -> Self` that runs `QualiaI4_16D::
  from_f32_17d` per row over the existing flat `Box<[f32]>` layout.
- EXTEND `BindSpace` with `pub qualia_i4: QualiaI4Column` field
  immediately after the existing `pub qualia: QualiaColumn`. Updates
  `BindSpace::zeros` to initialize both columns; updates `byte_size()`
  to include `8 * N` for the i4 column; updates Debug impl.
- `BindSpaceBuilder::push_typed` now double-writes: after the
  existing `self.bs.qualia.set(row, qualia)`, calls `self.bs.
  qualia_i4.set(row, QualiaI4_16D::from_f32_17d(qualia))`. Same
  pattern in `engine_bridge.rs:262` for the engine-side push.
- `lib.rs` re-exports `QualiaI4Column` alongside the existing
  `QualiaColumn`.

6 new tests in `bindspace::tests`:
- column zeros (length + all entries == ZERO)
- set_row + isolation (other rows unchanged)
- from_f32 parity (row k matches QualiaI4_16D::from_f32_17d of the
  flat slice for the same row)
- BindSpace::zeros populates BOTH columns
- byte_size increased by exactly 8 * N
- push_typed double-write produces identical i4 to the
  from_f32_17d-of-input

Out of scope (D-CSV-5b cutover, separate PR after this merges):
- removing the f32 QualiaColumn
- flipping any reader to use qualia_i4 instead of qualia
- migrating engine_bridge.rs to skip the f32 write
- changing push_typed's signature

Validation gap (env-side, not introduced by this PR)
`cargo test -p cognitive-shader-driver` does not work here because
the crate is listed in BOTH `[workspace.members]` AND `[workspace.
exclude]` of the root Cargo.toml — exclude wins, so `cargo -p` cannot
find it. `--manifest-path crates/cognitive-shader-driver/Cargo.toml`
hits a sibling-repo error in `/home/user/ndarray` (`blake3` crate
unresolved). Workspace-wide `cargo check --workspace --exclude
lance-graph --exclude lance-graph-catalog` finishes clean (CSD
absent from the actual check set due to the exclude list).
Structural changes match spec exactly; CI will run the actual tests.
The members/exclude conflict is a workspace-config bug worth filing
in TECH_DEBT separately — not in scope here.

Board hygiene in this PR (per E-META-9)
- STATUS_BOARD.md — D-CSV-5 row split into D-CSV-5a (this PR, **In
  PR**) and D-CSV-5b (next PR after this merges, **Queued**) per
  OQ-CSV-4 ratification
- AGENT_LOG.md — PREPEND wave-C fleet entry with the OQ-CSV-4
  ratification reasoning + validation-gap note + tech-debt
  observation on the members/exclude workspace conflict

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…+ [..17] slicing)

W-C1 sub-agent's full final delta — landed in this branch's stash
during the agent's runtime but was missed in the initial commit
sequence (commits 6d5e46e + 0296b68). Recovered via stash pop after
rebase onto Wave B's fmt-fixed HEAD.

Three real improvements
1. **`Cargo.toml`** — add `hpc-extras` to ndarray features. Fixes
   the `blake3` unresolved-crate compile failure that previously
   blocked `cargo test --manifest-path crates/cognitive-shader-driver/Cargo.toml` in this environment. With `hpc-extras` on,
   ndarray's HPC merkle_tree path compiles cleanly and tests run.
2. **`push_typed` 17-slice fix** in `bindspace.rs` — `QUALIA_DIMS`
   is 18, but `QualiaI4_16D::from_f32_17d` takes `&[f32; 17]`. The
   call was passing the 18-length slice via `&qualia` which would
   fail type-check. Fixed by copying the first 17 dims into a
   local `[f32; 17]` intermediate before conversion. The 18th dim
   (classification distance) is intentionally dropped per the i4-16D
   spec (already documented elsewhere).
3. **`bindspace_footprint_adds_columns` test update** — pre-existing
   footprint test asserted `byte_footprint() == 71777`. With the new
   `qualia_i4` column adding 8 bytes per row, the new value is
   71785. Comment + assertion updated to reflect the new layout.
4. Same `[..17]` slice tightening in the test's expected-i4 setup
   path (`arr17.copy_from_slice(&qualia_arg[..17])`) and in
   `engine_bridge.rs` paired write.

Test status (per W-C1 final report): **19/19 pass** in
`cargo test --manifest-path crates/cognitive-shader-driver/Cargo.toml bindspace`
(13 pre-existing + 6 new D-CSV-5a). The hpc-extras unblock means
local validation now works in this environment, matching CI.

Process incident
The W-C1 worker ran for ~13 minutes total. The bulk of its work was
already in commits 6d5e46e/0296b68 (recovered from a prior stash).
This commit captures the final 4-file delta the worker produced
late in its run. Combined with the rebase onto Wave B's HEAD
(picking up clippy + fmt fixes from PR #384), Wave C is now the
clean delta = `cognitive-shader-driver` D-CSV-5a sibling-column
implementation, nothing more.

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
claude added 3 commits May 16, 2026 02:51
…cation (Option α)

Wave-B sprint-11 Phase A substrate primitive: i4-16D packed qualia
vector (8 bytes, 9× compression vs the historical [f32; 18]) for the
upcoming `QualiaColumn` migration (D-CSV-5, Wave C).

OQ-CSV-1 ratification (autoattended)
The plan §7.2 proposed a felt-qualia vocab (Wisdom/Trust/Hope/etc.).
Cross-check against the canonical surfaces revealed:
- `crates/thinking-engine/src/qualia.rs::Qualia17D` uses convergence
  observables (arousal/valence/tension/warmth/clarity/boundary/depth/
  velocity/entropy/coherence/intimacy/presence/assertion/receptivity/
  groundedness/expansion/integration)
- `crates/lance-graph-contract/src/qualia.rs::QualiaVector = [f32; 17]`
  uses the same labels (`AXIS_LABELS`)
The plan footnote already flagged §7.2 as CONJECTURE pending qualia-
engineer cross-check. Ratified as Option α: keep the canonical
observable vocab, drop dim 16 "integration" to fit 16 i4 lanes
(integration is recoverable on demand from valence + coherence +
last cycle delta). Lower migration risk than a vocab swap.

D-CSV-2 implementation (W-B1, Sonnet)
- NEW `QUALIA_I4_DIMS: usize = 16` constant
- NEW `QUALIA_I4_LABELS: [&str; 16]` matching `AXIS_LABELS[0..16]`
- NEW `pub struct QualiaI4_16D(pub u64) #[repr(C, align(8))]` —
  exactly 8 bytes, 16 i4 lanes
- Accessors `get(dim) -> i8` / `set(dim, value)` / `with(dim, value)`
  with i4 signed pack/unpack via `(raw << 4) >> 4` arithmetic-shift
  sign-extension; clamp to −8..+7; defensive no-op on out-of-range dim
- Migration helpers `from_f32_17d(&QualiaVector) -> Self` and
  `to_f32_17d(self) -> QualiaVector`. Asymmetric quantization
  intentional: positive f32 × 7.0 (7 quanta in i4 [0, +7]); negative
  f32 × 8.0 (8 quanta in i4 [-8, -1]). Dim 16 ("integration") is
  dropped on encode and zero-filled on decode.
- `magnitude(self) -> i8` = `coherence.saturating_mul(valence)` —
  per plan §7.2 "Wisdom × Staunen → i8" intent, mapped to canonical
  vocab pair (intensity × valence-direction). One i8 multiply,
  SIMD-friendly.

8 new tests in `cargo test -p lance-graph-contract qualia`:
- size invariant (8 bytes)
- zero default (all dims = 0)
- signed roundtrip across [-8, -7, -1, 0, 1, 7]
- clamp on overflow (+100 → +7, -100 → -8)
- field isolation (writing dim 5 leaves dims 4, 6 untouched)
- from_f32_17d ↔ to_f32_17d round-trip with dim 16 dropped
- label alignment with `AXIS_LABELS[0..16]`
- magnitude saturating_mul correctness on extremes

Test status: 14/14 pass (8 new + 6 pre-existing). Contract crate
remains ZERO deps.

Board hygiene (per E-META-9 main-thread sentinel)
- STATUS_BOARD.md — D-CSV-2 row Queued → **In PR** with branch
  reference + OQ-CSV-1 ratification note
- AGENT_LOG.md — PREPEND wave-B fleet entry with the OQ-CSV-1
  ratification reasoning + 8-test coverage detail + open question
  on Wave C (D-CSV-5 needs cognitive-shader-driver crate which is
  referenced in CLAUDE.md but not in workspace members; investigation
  required before spawn)

Wave C dependencies (deferred to next loop iteration)
- D-CSV-5 (QualiaColumn migration in cognitive-shader-driver) — needs
  PR #383 merged (so v2 layout is on main) AND clarification on
  cognitive-shader-driver workspace membership
- D-CSV-6 (WitnessCorpus replacing SpoWitnessChain<32>) — depends on
  D-CSV-4 from PR #383
- D-CSV-7 (MailboxSoA integration) — depends on D-CSV-1 + D-CSV-4

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
CI clippy gate (`cargo clippy --lib --tests -- -D warnings`) flagged
the `for dim in 0..QUALIA_I4_DIMS { ... out[dim] = ... }` loop with
`clippy::needless_range_loop`. Rewrote with `iter_mut().enumerate().take(N)`
per the lint's recommendation. Pure mechanical refactor — no behavior
change; round-trip semantics + 14 qualia tests all still pass.

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
…ate)

CI gate `cargo fmt --manifest-path crates/lance-graph-contract/Cargo.toml -- --check`
flagged on PR #384 (codex P1 reviewer): the new D-CSV-2 code in
qualia.rs used single-line `if dim >= QUALIA_I4_DIMS { return 0; }`
guards that rustfmt 1.95 wants split across multiple lines. Also
the `pub use qualia::{...}` import in lib.rs was on a single long
line that rustfmt wants reformatted across multiple lines.

Pure mechanical reformat via `cargo fmt --manifest-path crates/lance-graph-contract/Cargo.toml`. No behavior change.

- qualia.rs: 41 insertions / 25 deletions — single-line `if`
  guards expanded; multi-line `for ... { let i = ...; *slot = if
  i >= 0 ... }` blocks reflowed; nibble pack/mask single-line
  expressions left intact where rustfmt accepts them
- lib.rs: 5 insertions / 2 deletions — long single-line `pub use
  qualia::{...}` import broken across multiple lines, items
  alphabetized within the use block per rustfmt 1.95 default

Validation:
- cargo clippy --manifest-path crates/lance-graph-contract/Cargo.toml --lib --tests -- -D warnings: clean
- cargo test --manifest-path crates/lance-graph-contract/Cargo.toml qualia: 14/14 pass

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
@AdaWorldAPI AdaWorldAPI force-pushed the claude/sprint-11-wave-b-qualia-i4 branch from 949b21a to 56e7e22 Compare May 16, 2026 02:51
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…rite, no read-side change)

Wave C: phase 5a of the QualiaColumn migration per OQ-CSV-4
sibling-then-cutover ratification. Adds a sibling i4 column
ALONGSIDE the existing f32 `QualiaColumn`; double-write on every
push path; no read-side change. Phase 5b (separate follow-up PR)
flips readers + drops the f32 column.

Branched from PR #384 (`claude/sprint-11-wave-b-qualia-i4`) so
`QualiaI4_16D` from `lance-graph-contract::qualia` is available.
Will rebase onto main after PR #384 merges.

D-CSV-5a implementation (W-C1, Sonnet)
- NEW `pub struct QualiaI4Column(pub Box<[QualiaI4_16D]>)` mirroring
  `QualiaColumn` shape: `zeros(rows)`, `row(idx) -> QualiaI4_16D`,
  `set(row, value)`, `len()`/`is_empty()`, and bulk migration
  `from_f32(&QualiaColumn) -> Self` that runs `QualiaI4_16D::
  from_f32_17d` per row over the existing flat `Box<[f32]>` layout.
- EXTEND `BindSpace` with `pub qualia_i4: QualiaI4Column` field
  immediately after the existing `pub qualia: QualiaColumn`. Updates
  `BindSpace::zeros` to initialize both columns; updates `byte_size()`
  to include `8 * N` for the i4 column; updates Debug impl.
- `BindSpaceBuilder::push_typed` now double-writes: after the
  existing `self.bs.qualia.set(row, qualia)`, calls `self.bs.
  qualia_i4.set(row, QualiaI4_16D::from_f32_17d(qualia))`. Same
  pattern in `engine_bridge.rs:262` for the engine-side push.
- `lib.rs` re-exports `QualiaI4Column` alongside the existing
  `QualiaColumn`.

6 new tests in `bindspace::tests`:
- column zeros (length + all entries == ZERO)
- set_row + isolation (other rows unchanged)
- from_f32 parity (row k matches QualiaI4_16D::from_f32_17d of the
  flat slice for the same row)
- BindSpace::zeros populates BOTH columns
- byte_size increased by exactly 8 * N
- push_typed double-write produces identical i4 to the
  from_f32_17d-of-input

Out of scope (D-CSV-5b cutover, separate PR after this merges):
- removing the f32 QualiaColumn
- flipping any reader to use qualia_i4 instead of qualia
- migrating engine_bridge.rs to skip the f32 write
- changing push_typed's signature

Validation gap (env-side, not introduced by this PR)
`cargo test -p cognitive-shader-driver` does not work here because
the crate is listed in BOTH `[workspace.members]` AND `[workspace.
exclude]` of the root Cargo.toml — exclude wins, so `cargo -p` cannot
find it. `--manifest-path crates/cognitive-shader-driver/Cargo.toml`
hits a sibling-repo error in `/home/user/ndarray` (`blake3` crate
unresolved). Workspace-wide `cargo check --workspace --exclude
lance-graph --exclude lance-graph-catalog` finishes clean (CSD
absent from the actual check set due to the exclude list).
Structural changes match spec exactly; CI will run the actual tests.
The members/exclude conflict is a workspace-config bug worth filing
in TECH_DEBT separately — not in scope here.

Board hygiene in this PR (per E-META-9)
- STATUS_BOARD.md — D-CSV-5 row split into D-CSV-5a (this PR, **In
  PR**) and D-CSV-5b (next PR after this merges, **Queued**) per
  OQ-CSV-4 ratification
- AGENT_LOG.md — PREPEND wave-C fleet entry with the OQ-CSV-4
  ratification reasoning + validation-gap note + tech-debt
  observation on the members/exclude workspace conflict

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…+ [..17] slicing)

W-C1 sub-agent's full final delta — landed in this branch's stash
during the agent's runtime but was missed in the initial commit
sequence (commits 6d5e46e + 0296b68). Recovered via stash pop after
rebase onto Wave B's fmt-fixed HEAD.

Three real improvements
1. **`Cargo.toml`** — add `hpc-extras` to ndarray features. Fixes
   the `blake3` unresolved-crate compile failure that previously
   blocked `cargo test --manifest-path crates/cognitive-shader-driver/Cargo.toml` in this environment. With `hpc-extras` on,
   ndarray's HPC merkle_tree path compiles cleanly and tests run.
2. **`push_typed` 17-slice fix** in `bindspace.rs` — `QUALIA_DIMS`
   is 18, but `QualiaI4_16D::from_f32_17d` takes `&[f32; 17]`. The
   call was passing the 18-length slice via `&qualia` which would
   fail type-check. Fixed by copying the first 17 dims into a
   local `[f32; 17]` intermediate before conversion. The 18th dim
   (classification distance) is intentionally dropped per the i4-16D
   spec (already documented elsewhere).
3. **`bindspace_footprint_adds_columns` test update** — pre-existing
   footprint test asserted `byte_footprint() == 71777`. With the new
   `qualia_i4` column adding 8 bytes per row, the new value is
   71785. Comment + assertion updated to reflect the new layout.
4. Same `[..17]` slice tightening in the test's expected-i4 setup
   path (`arr17.copy_from_slice(&qualia_arg[..17])`) and in
   `engine_bridge.rs` paired write.

Test status (per W-C1 final report): **19/19 pass** in
`cargo test --manifest-path crates/cognitive-shader-driver/Cargo.toml bindspace`
(13 pre-existing + 6 new D-CSV-5a). The hpc-extras unblock means
local validation now works in this environment, matching CI.

Process incident
The W-C1 worker ran for ~13 minutes total. The bulk of its work was
already in commits 6d5e46e/0296b68 (recovered from a prior stash).
This commit captures the final 4-file delta the worker produced
late in its run. Combined with the rebase onto Wave B's HEAD
(picking up clippy + fmt fixes from PR #384), Wave C is now the
clean delta = `cognitive-shader-driver` D-CSV-5a sibling-column
implementation, nothing more.

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
@AdaWorldAPI AdaWorldAPI merged commit 0751a8b into main May 16, 2026
5 checks passed
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…rite, no read-side change)

Wave C: phase 5a of the QualiaColumn migration per OQ-CSV-4
sibling-then-cutover ratification. Adds a sibling i4 column
ALONGSIDE the existing f32 `QualiaColumn`; double-write on every
push path; no read-side change. Phase 5b (separate follow-up PR)
flips readers + drops the f32 column.

Branched from PR #384 (`claude/sprint-11-wave-b-qualia-i4`) so
`QualiaI4_16D` from `lance-graph-contract::qualia` is available.
Will rebase onto main after PR #384 merges.

D-CSV-5a implementation (W-C1, Sonnet)
- NEW `pub struct QualiaI4Column(pub Box<[QualiaI4_16D]>)` mirroring
  `QualiaColumn` shape: `zeros(rows)`, `row(idx) -> QualiaI4_16D`,
  `set(row, value)`, `len()`/`is_empty()`, and bulk migration
  `from_f32(&QualiaColumn) -> Self` that runs `QualiaI4_16D::
  from_f32_17d` per row over the existing flat `Box<[f32]>` layout.
- EXTEND `BindSpace` with `pub qualia_i4: QualiaI4Column` field
  immediately after the existing `pub qualia: QualiaColumn`. Updates
  `BindSpace::zeros` to initialize both columns; updates `byte_size()`
  to include `8 * N` for the i4 column; updates Debug impl.
- `BindSpaceBuilder::push_typed` now double-writes: after the
  existing `self.bs.qualia.set(row, qualia)`, calls `self.bs.
  qualia_i4.set(row, QualiaI4_16D::from_f32_17d(qualia))`. Same
  pattern in `engine_bridge.rs:262` for the engine-side push.
- `lib.rs` re-exports `QualiaI4Column` alongside the existing
  `QualiaColumn`.

6 new tests in `bindspace::tests`:
- column zeros (length + all entries == ZERO)
- set_row + isolation (other rows unchanged)
- from_f32 parity (row k matches QualiaI4_16D::from_f32_17d of the
  flat slice for the same row)
- BindSpace::zeros populates BOTH columns
- byte_size increased by exactly 8 * N
- push_typed double-write produces identical i4 to the
  from_f32_17d-of-input

Out of scope (D-CSV-5b cutover, separate PR after this merges):
- removing the f32 QualiaColumn
- flipping any reader to use qualia_i4 instead of qualia
- migrating engine_bridge.rs to skip the f32 write
- changing push_typed's signature

Validation gap (env-side, not introduced by this PR)
`cargo test -p cognitive-shader-driver` does not work here because
the crate is listed in BOTH `[workspace.members]` AND `[workspace.
exclude]` of the root Cargo.toml — exclude wins, so `cargo -p` cannot
find it. `--manifest-path crates/cognitive-shader-driver/Cargo.toml`
hits a sibling-repo error in `/home/user/ndarray` (`blake3` crate
unresolved). Workspace-wide `cargo check --workspace --exclude
lance-graph --exclude lance-graph-catalog` finishes clean (CSD
absent from the actual check set due to the exclude list).
Structural changes match spec exactly; CI will run the actual tests.
The members/exclude conflict is a workspace-config bug worth filing
in TECH_DEBT separately — not in scope here.

Board hygiene in this PR (per E-META-9)
- STATUS_BOARD.md — D-CSV-5 row split into D-CSV-5a (this PR, **In
  PR**) and D-CSV-5b (next PR after this merges, **Queued**) per
  OQ-CSV-4 ratification
- AGENT_LOG.md — PREPEND wave-C fleet entry with the OQ-CSV-4
  ratification reasoning + validation-gap note + tech-debt
  observation on the members/exclude workspace conflict

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…+ [..17] slicing)

W-C1 sub-agent's full final delta — landed in this branch's stash
during the agent's runtime but was missed in the initial commit
sequence (commits 6d5e46e + 0296b68). Recovered via stash pop after
rebase onto Wave B's fmt-fixed HEAD.

Three real improvements
1. **`Cargo.toml`** — add `hpc-extras` to ndarray features. Fixes
   the `blake3` unresolved-crate compile failure that previously
   blocked `cargo test --manifest-path crates/cognitive-shader-driver/Cargo.toml` in this environment. With `hpc-extras` on,
   ndarray's HPC merkle_tree path compiles cleanly and tests run.
2. **`push_typed` 17-slice fix** in `bindspace.rs` — `QUALIA_DIMS`
   is 18, but `QualiaI4_16D::from_f32_17d` takes `&[f32; 17]`. The
   call was passing the 18-length slice via `&qualia` which would
   fail type-check. Fixed by copying the first 17 dims into a
   local `[f32; 17]` intermediate before conversion. The 18th dim
   (classification distance) is intentionally dropped per the i4-16D
   spec (already documented elsewhere).
3. **`bindspace_footprint_adds_columns` test update** — pre-existing
   footprint test asserted `byte_footprint() == 71777`. With the new
   `qualia_i4` column adding 8 bytes per row, the new value is
   71785. Comment + assertion updated to reflect the new layout.
4. Same `[..17]` slice tightening in the test's expected-i4 setup
   path (`arr17.copy_from_slice(&qualia_arg[..17])`) and in
   `engine_bridge.rs` paired write.

Test status (per W-C1 final report): **19/19 pass** in
`cargo test --manifest-path crates/cognitive-shader-driver/Cargo.toml bindspace`
(13 pre-existing + 6 new D-CSV-5a). The hpc-extras unblock means
local validation now works in this environment, matching CI.

Process incident
The W-C1 worker ran for ~13 minutes total. The bulk of its work was
already in commits 6d5e46e/0296b68 (recovered from a prior stash).
This commit captures the final 4-file delta the worker produced
late in its run. Combined with the rebase onto Wave B's HEAD
(picking up clippy + fmt fixes from PR #384), Wave C is now the
clean delta = `cognitive-shader-driver` D-CSV-5a sibling-column
implementation, nothing more.

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
Pre-existing assert_eq! macro single-line forms in W-D2's
witness_corpus.rs tests need multi-line wrapping per rustfmt 1.95
defaults. Pure mechanical reformat via `cargo fmt --manifest-path
crates/lance-graph/Cargo.toml`. No behavior change; 8/8 witness
tests still pass.

Same fmt-gate pattern as PR #383 (rustfmt 1.95 upgrade) and PR #384
(qualia.rs single-line guards).

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
Pre-existing assert_eq! macro single-line forms in W-D2's
witness_corpus.rs tests need multi-line wrapping per rustfmt 1.95
defaults. Pure mechanical reformat via `cargo fmt --manifest-path
crates/lance-graph/Cargo.toml`. No behavior change; 8/8 witness
tests still pass.

Same fmt-gate pattern as PR #383 (rustfmt 1.95 upgrade) and PR #384
(qualia.rs single-line guards).

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
… lines)

W-F12 final Sonnet worker output. Plan v2 revision capturing sprint-
11 outcomes + sprint-12 forward plan.

Mirrors v1 structure with §0..§18; every changed section marked
[UPDATED 2026-05-16] / 🆕 vs v1 (21 annotations); unchanged sections
labeled UNCHANGED from v1.

Highlights:
- §0 status delta — Phase A/B/C outcomes: D-CSV-1/3/4 (#383), D-CSV-2
  (#384), D-CSV-5a/6a+7 (#385/#386), D-CSV-8+9 (#387), D-CSV-10
  (W-F1)
- §5 L-1..L-20 implementation-outcome annotations (PR #+commit+
  accessor file per row)
- §6/§8 UNCHANGED architecture, annotated with shipping commits +
  TD pointers for deviations (SmallVec)
- §11 D-CSV-* table — D-CSV-1..12 status; D-CSV-13/14/15 NEW Phase E
  sprint-12 entries (SIMD vec, on-Think method migration, Jirak Σ10)
- §12 OQ table — all 6 OQs annotated with ratification
- §13 Risk — 10 risks (vs 6 in v1); §13.7–13.10 new from sprint-11
  observations (subagent isolation, E-META-10 alias, two-TrustTexture)
- §15-§16 phasing + test growth — sprint-11 confirmed ~58 tests;
  sprint-12 projected ~70+

Fleet status: **12 of 12 Sonnet workers complete.** Honest cross-
cutting Opus meta-review (W-Meta-Opus) dispatched next.

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…ntries (#383..#390)

PP-9 (Opus) prepended 8 PR entries to PR_ARC_INVENTORY.md (1537→1903
lines, +366 / +50,619 bytes). APPEND-ONLY rule respected — no prior
entries touched. Top→bottom reverse chronological:

#390 sprint-12/wave-G (In PR, `bad0875`) — grade A−. D-CSV-5b cutover
   + D-CSV-6b WitnessCorpus + D-CSV-13 batch + D-CSV-15 Jirak math.
#389 sprint-12 wave-F codex P2 follow-up — AttentionMaskBackend impl
   + canonical MailboxId (CSI-10).
#388 sprint-12 Wave F fleet (12 Sonnet + 1 Opus) — grade B. D-CSV-
   10/11/12 scaffolds + AttentionMask + plan v2.
#387 sprint-11 Wave E — grade A−. D-CSV-8 MUL i4 scalar + D-CSV-9
   8-channel transcoder (Option R-3).
#386 sprint-11 Wave D — grade B+. D-CSV-7 MailboxSoA + D-CSV-6a
   WitnessCorpus core.
#385 sprint-11 Wave C — grade B+. D-CSV-5a sibling QualiaI4Column.
#384 sprint-11 Wave B — grade A. D-CSV-2 QualiaI4_16D + OQ-CSV-1
   Option α ratification.
#383 sprint-11 Wave A — grade A−. D-CSV-1 v2 layout + D-CSV-3 signed
   mantissa + D-CSV-4 CollapseGateEmission.

Every entry mirrors the #381/#379 template — Header / Confidence /
Added / Locked / Deferred / Docs / Cross-refs — with forward+backward
linkages (#383#385#390 D-CSV-5 chain; E-META-10 catch in #383 →
iron-rule promotion in #390 W-G5; etc.).

Total PR headers in file: 28 (was 20). 13 of 14 planners done.
Only PP-13 (brutally-honest-tester agent) still in flight.

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