Skip to content

Module 6: #[track_caller] error macros for zero-cost location capture - #2

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/review-lance-graph-architecture-i6TKf
Mar 3, 2026
Merged

Module 6: #[track_caller] error macros for zero-cost location capture#2
AdaWorldAPI merged 1 commit into
mainfrom
claude/review-lance-graph-architecture-i6TKf

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Add plan_err!, config_err!, exec_err! macros that use #[track_caller]

  • std::panic::Location for zero-cost call-site capture (Gate 4/7).

Bridge design: macros call plan_err_at()/config_err_at()/exec_err_at() which convert std::panic::Location to snafu::Location. This gives ergonomic macros while maintaining compatibility with 148 existing snafu error creation sites across 18 files.

  • plan_err_at(), config_err_at(), exec_err_at(): #[track_caller] helpers
  • plan_err!, config_err!, exec_err!: format!() wrapper macros
  • 4 tests proving location capture works

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV

Add plan_err!, config_err!, exec_err! macros that use #[track_caller]
+ std::panic::Location for zero-cost call-site capture (Gate 4/7).

Bridge design: macros call plan_err_at()/config_err_at()/exec_err_at()
which convert std::panic::Location to snafu::Location. This gives
ergonomic macros while maintaining compatibility with 148 existing
snafu error creation sites across 18 files.

- plan_err_at(), config_err_at(), exec_err_at(): #[track_caller] helpers
- plan_err!, config_err!, exec_err!: format!() wrapper macros
- 4 tests proving location capture works

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
@AdaWorldAPI
AdaWorldAPI merged commit 3ef2354 into main Mar 3, 2026
AdaWorldAPI pushed a commit that referenced this pull request Mar 6, 2026
#1: RUSTYNUM IS MANDATORY — no hand-rolled numeric ops in lance_parser/
#2: NO SERDE_JSON ON THE HOT PATH — NodeParameterValue is not
serde_json::Value, they are not convertible, the fix is never
param_to_json()

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
AdaWorldAPI pushed a commit that referenced this pull request Apr 18, 2026
The 5th and foundational chess research direction: load the full
historical record (5B Lichess games + 10M master games + Syzygy
endgame tablebases) into our native encoding and make it queryable
via Cypher with semantic similarity.

Compression: 200B position-occurrences → ~325 GB on SSD after
CAM-PQ palette compression + FEN deduplication. ChessBase needs
600 GB for 10M games; we carry 500× more in half the space.

Three query classes impossible in any existing chess tool:
  - Semantic position similarity (palette distance is O(1))
  - Multi-hop NARS confidence paths (truth propagation)
  - Human-intuition move mining (engine-dispreferred but winning)

~1400 lines of new code, ~10 days focused work. Most infrastructure
already shipped (AriGraph, CausalEdge64, Cypher parser, BindSpace,
PaletteSemiring).

Recommended as Tier 0 substrate — every subsequent experiment (#2
style benchmark, #3 learning, #1 longitudinal) is measurably more
credible with 5 billion games behind it.

https://claude.ai/code/session_01SbYsmmbPf9YQuYbHZN52Zh
AdaWorldAPI pushed a commit that referenced this pull request Apr 20, 2026
Addresses all 5 follow-ups from .claude/knowledge/cam-pq-unified-pipeline.md:

#1 Wire register_cam_udfs in execute_with_context
  - CypherQuery::with_cam_codebook(codebook) builder method
  - execute_with_context auto-registers cam_distance + cam_heel_distance
    UDFs when codebook is set
  - One-line unblock for SQL/Cypher CAM-PQ queries

#2 Migrate cam_pq_calibrate output to Lance schema
  - codebook_to_lance() in lance-graph/src/cam_pq/storage.rs
  - Converts (codebook, fingerprints) -> (vectors_batch, codebook_batch)
  - Arrow RecordBatches ready for Lance write; bridges bgz-tensor's raw
    calibration output to the canonical storage format

#3 impl OrchestrationBridge for codec research (nd.* step-types)
  - codec_bridge.rs: CodecResearchBridge owns StepDomain::Ndarray
  - nd.tensors / nd.calibrate / nd.probe dispatch via codec_research
  - Parses args from step.reasoning as WireRequest JSON
  - Complements planner's lg.* bridge

#4 Generic OrchestrationBridge routing endpoint
  - POST /v1/shader/route — accepts WireUnifiedStep JSON
  - Composed bridge: tries CodecResearchBridge first (nd.*), falls
    through to PlannerAwareness (lg.*) if DomainUnavailable
  - planner_bridge.rs preserved as typed convenience (rich responses)
  - Both patterns coexist: generic route + typed Wire DTOs

#5 WireUnifiedStep + WireStepResult DTOs
  - Generic step envelope: {step_id, step_type, reasoning}
  - Generic result: {step_id, step_type, status, reasoning, confidence}
  - POST /v1/shader/route uses these; per-op endpoints stay for
    convenience with their richer typed responses

All 5 follow-ups delivered in one commit. 46/46 shader-driver tests
pass. lance-graph compiles clean.

https://claude.ai/code/session_01SbYsmmbPf9YQuYbHZN52Zh
AdaWorldAPI pushed a commit that referenced this pull request Apr 29, 2026
…UDF hard-fail

Closes two critical loose ends in the PR-F1 ColumnMaskRewriter UDF wrap:

Loose End #1 (security hole): masked columns leaked through WHERE / JOIN /
GROUP BY / aggregate nodes because the rewriter only walked top-level
Projection. `SELECT MAX(ssn) FROM users WHERE ssn = '...'` would expose
unmasked SSN values via the predicate and the aggregate.

Fix: replace top-level Projection match with full-tree expression rewrite.
Use `LogicalPlan::map_expressions` to dispatch to every node variant
(Filter, Projection, Aggregate, Join, Sort) and `Expr::transform_down` to
walk every nested expression. `TreeNodeRecursion::Jump` after a Column
replacement prevents infinite descent into the freshly-built mask
expression (relevant for Hash mode, which wraps the column in a
ScalarFunction whose argument IS the original column).

Loose End #2 (silent placeholder): RedactionMode::Hash returned
`lit("***REDACTED***")` — if the real hash UDF was forgotten in a follow-up,
every Hash-masked column would silently render as a string placeholder
with no surface signal that policy is mis-wired.

Fix: replace placeholder with reference to `policy_hash_v1`, an
unregistered ScalarUDFImpl whose `invoke_with_args` returns
`NotImplemented("policy_hash_v1 UDF not yet registered — see PR-F1b")`.
Plans build (so call sites compose), execution fails loud — loud > silent.
PR-F1b will replace the body with FNV-64 / SHA-256-truncated and register
the UDF in the SessionContext.

Failing-test-first:
- `test_where_clause_does_not_leak_unmasked_column` builds
  `Projection(id) → Filter(ssn = '123-45-6789') → TableScan(users)`,
  runs the rewriter, asserts the Filter predicate references the mask
  literal and not bare `users.ssn`. Failed pre-fix on commit 88c0dc8 —
  Filter still showed `users.ssn = Utf8("123-45-6789")`.
- `test_max_ssn_aggregate_is_masked` builds `Aggregate(MAX(ssn))`, asserts
  MAX argument is rewritten. Failed pre-fix — MAX(users.ssn) unchanged.
- `test_hash_mode_binds_not_yet_wired_udf_not_silent_placeholder` asserts
  `policy_hash_v1` appears and `***REDACTED***` does not. Failed pre-fix —
  plan emitted Utf8("***REDACTED***").

All 3 fail on the existing skeleton, all 3 pass post-fix. Total
lance-graph-callcenter --features auth-rls-lite test count: 70 passed
(15 policy + 55 other), 0 failed.

https://claude.ai/code/session_01NYGrxVopyszZYgLBxe4hgj
AdaWorldAPI added a commit that referenced this pull request Apr 30, 2026
…ring

F1 (MySQL <-> SPO oracle parity) shipped via MedCareV2 PRs #1, #2, #3,
medcare-rs PR #71, and lance-graph PR #309. The vision doc still claimed
F1 was "the next concrete deliverable". Rewrite section 7 to: state F1
has shipped, describe the LanceProbe -> ParityWitness -> DriftSink flow,
name the contract DTO
(lance-graph-callcenter::transcode::parallelbetrieb::DriftEvent), list
F1's known gaps (no latency claims; in-memory ring buffer), and state
F2 RBAC+audit wiring (medcare-rs adopting RlsRewriter) as the next
posture. No other sections touched.
AdaWorldAPI added a commit that referenced this pull request May 6, 2026
…ITICAL fixes required)

Meta-1 review surfaces 10 findings; 2 CRITICAL fixes block Round 2 opening:

CRITICAL #1: Doctor.Anamnese Full predicate-write violates BMV-Ä §57 append-only
  → fix: empty writable_predicates, keep only "append" action
CRITICAL #2: Receptionist clinical-blind fails safety (no Identity-read for
  allergy/triage lookup before scheduling)
  → fix: merge Patient permission to Detail-depth + 3 demographic writes,
    add Identity-read on Diagnosis + LabResult

HIGH #3-#4 (defer to Round 3 gate.rs): Diagnosis finalize/retract Escalate +
  Patient anonymize/merge/delete Escalate (GDPR Art.17 + §35 BDSG)
MEDIUM #5-#8 (backlog): Missing entities (Termin, Recall, ePA) + audit trail hook
LOW #9-#10 (backlog): PKV/GKV modulation + dynamic reason strings

Round 2 implications surfaced for W5/W8.
Round 3 implications surfaced for W9/W12 (Escalate wrapping + §73 SGB V test).

Concrete diff for W3-revision-2 included at end of file.
Next commit: W3-revision-2 applies the two CRITICAL fixes.
AdaWorldAPI added a commit that referenced this pull request May 6, 2026
…1 CRITICAL fix path)

Meta-2 review surfaces 5 findings; 1 CRITICAL flagged for verification:

CRITICAL #1: W7 hard-depends on StepDomain::MedCare which may not exist upstream
  → Recommended fix path: fetch lance-graph-contract/src/orchestration.rs to
    verify DomainProfile shape, then either confirm variant exists OR commit
    W7-revision-2 with inline-constructed DomainProfile fallback

MEDIUM #2: MedCareStack empty struct doc-comment overclaims as "facade"
  → Doc-only fix; defer to next field-growth commit

MEDIUM #3: Missing with_default_policies() builder
  → Backlog; lands when rls_registry field lands

LOW #4-#5: Cross-crate test + dev-deps deferred

Round 3 implications surfaced:
- W9 imports list (medcare_rbac::{policy, role, access})
- W10 lib.rs gate re-export shape
- W12 §73 SGB V tests must include BtM Escalate + Ueberweisung row visibility
  (Meta-1 carry-forward)

Sprint orchestrator: verify upstream StepDomain::MedCare before
committing W7-revision-2, OR apply fail-safe inline construction.
AdaWorldAPI added a commit that referenced this pull request May 6, 2026
…e (sprint closure)

Meta-3 final review surfaces 5 findings; ZERO CRITICAL:

HIGH #1: Action operations (Operation::Act) unreachable via gate
  → Doc note recommended; orchestration layer is the right home for action gating
HIGH #2: BtM Escalate "v1 limitation" tests use loose is_allowed() assertions
  → Recommend tightening to explicit assert_eq!(AccessDecision::Allow)
    for clearer future test-failure messages

MEDIUM #3: Three name paths for Policy (rbac, gate, lib)
  → Backlog; doc-only canonicalization
MEDIUM #4: 20-200 ns gate decision claim unbenchmarked
  → Backlog; criterion-based gate-bench follow-up
LOW #5: TD-MEMBRANE-FIRST-VS-ANY untested
  → Backlog; vacuous in v1 without divergence case

Sprint-wide closure:
- Round 1 (medcare-rbac): 26 tests, solid, 2 CRITICAL fixes applied
- Round 2 (medcare-realtime skeleton): 5 tests, 1 CRITICAL casing+HIPAA fix
- Round 3 (gate impl): 33 tests, 2 HIGH documentation gaps
- Total: 64 tests across 3 crates

VERDICT: Ship. POLICY-1 medcare-side seam CLOSED for v1. Topology I-1/I-2/I-3/I-4
upheld. PR #29 three TD caveats honestly carried forward.
AdaWorldAPI added a commit that referenced this pull request May 6, 2026
…closure

12 workers + 3 metas across 3 rounds, 4 CRITICAL fixes applied as inline
revisions (W3-rev2, W4-rev2, W7-rev2). Meta-3 final verdict: SHIP.

Total shipped:
- medcare-rs: 14 commits, 13 files, ~1,865 LOC, 64 tests
- lance-graph sprint-log: 21 commits (12 agent logs + 3 meta reviews +
  scaffolding + this synthesis)

POLICY-1 / MEMBRANE-GATE-1 medcare-side seam: SHIPPED v1
- Mirror of smb-office-rs#29 with regulatory adaptations
- Three TD caveats from PR #29 honestly carried forward
- Topology I-1/I-2/I-3/I-4 invariants preserved

Outstanding from Meta-3 (backlog):
- HIGH #1: Action ops doc note (5 min)
- HIGH #2: Tighten v1-limit assertions (10 min)
- MEDIUM #3-#4: Policy name canonicalization + bench harness
- LOW #5: TD-MEMBRANE-FIRST-VS-ANY test (vacuous in v1)

Synthesis includes:
- Findings summary (4 CRITICAL applied + 2 HIGH backlog)
- Topology invariant preservation table
- Upstream gaps surfaced (StepDomain verified, BMV-Ä retention, BtM Escalate)
- Test posture per-crate
- Recommended follow-up sprint scope (~half day)
- What the cca2a pattern validated this run
- Full branch state at sprint closure (commit lists for both repos)

Ready for CI verification + PR to medcare-rs main.
AdaWorldAPI pushed a commit that referenced this pull request May 7, 2026
Closes the governance loop for the #352#353#354 sequence on the
lance-graph side, plus the 5-PR cross-repo coordinated landing of
2026-05-07 (lance-graph #352/#353/#354, OGIT #2, woa-rs #2, MedCare-rs
#109).

PR_ARC_INVENTORY.md prepended with minimal #354 entry; lock notes:
- Append-only board hygiene survived 4 sequential prepends (incl. prior
  splat-osint) without any past-entry mutation. Confidence-line-only
  mutability policy is durable.
- Cross-repo coordinated landing pattern documented as a recipe:
  lance-graph plans → OGIT TTL → consumer integration → governance
  close-out.

LATEST_STATE.md table prepended with #354 row; "Last updated" advanced.

No new types, plans, or knowledge docs in this commit — pure governance.
Not opening a new PR for THIS commit (would be recursive
governance-on-governance unless explicitly requested).

https://claude.ai/code/session_01WevBiZ3jzVocu8fBpTY8sq
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…ix v1-temporal-corrupts-W3-Test-1 bug

Codex review flagged two consistency gaps on PR #381 that would either
produce uncompilable code or fail the regression suite for ordinary
v1 data. Both addressed in this patch.

W2 spec — pr-ce64-mb-2-causaledge64-v2.md
- §9 Test Plan rewritten: removed test_g_slot_roundtrip,
  test_g_slot_max_no_w_contamination, and all g_slot()/with_g_slot()/
  set_g_slot() assertions (no such API in v2 layout per L-3);
  with_routing signature corrected to (w: u8, t: TrustTexture);
  pack() signature corrected (no temporal arg per L-2);
  added test_inference_mantissa_signed_roundtrip,
  test_spare_isolation, test_mantissa_no_plasticity_contamination
- §10 risk matrix: fixed "bits 46-48 are G slot bits" → bits 46-49
  now hold 4b SIGNED mantissa, not G; not Option-C-conditional
- §11 OQ-FORWARD-REFACTOR: same Option-C → Option-F correction

W3 spec — pr-ce64-mb-2-pal8-nars-regression.md (CODEX P1 #2)
- §3 Test 1 (pal8_v1_v2_round_trip_zero_default): root-cause fix —
  temporal=1023 in v1 sets bits 52-61 which v2 has reclaimed for
  W/lens/spare; under v2 decode those bits alias to non-zero W=63,
  truth=Murky. Test would FAIL on ordinary v1 data. Rewritten to use
  temporal=0 (the only safe binary-migration value) so byte-identical
  round-trip is provable.
- §3 Test 1b (pal8_v1_nonzero_temporal_is_blocked_by_version_gate):
  NEW — proves the version gate is mandatory by asserting v1
  temporal=1023 DOES produce non-zero W/truth under v2 (the failure
  mode) and that PAL8 v2 reader rejects the v1 blob with
  PalDecodeError::MissingVersionByte.
- §3 Test 2 (pal8_v2_v2_round_trip_all_fields): dropped g_slot/
  set_g_slot + temporal/set_temporal calls; rewrote isolation matrix
  to cover mantissa↔W↔truth↔spare (the four v2 reclaim-zone fields)
- §3 Test 3 (pal8_round_trip_arbitrary, property test): same
- §4 NarsTables Test 1: rewrote NarsEngine extraction claim (no
  temporal in v2; mantissa added); dropped set_g_slot(31); added
  set_spare(0b111) for full reclaim-zone isolation
- §4 NarsTables Test 3 (nars_engine_to_from_causal_edge_isolates_new_fields):
  dropped g_slot references; added spare
- §5 EdgeColumn test: dropped g_slot/temporal; added mantissa+spare
- §8 W2-owned: corrected accessor list (inference_mantissa/w_slot/
  truth/spare; no G_SHIFT)
- §8 Agreement checklist: rewrote items 1-5 to Option F layout
- §10 OQ-3: pack_v2 vs setter API updated to 4 setters (not 3)

Process note: ~13 main-thread Edit calls in this fix; subagent
Python-via-Bash workaround used for the final risk-matrix line
fix after permission prompt feedback. Will follow up with
settings.local.json wildcard syntax adjustment.

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…ck semantic-routing bugs

Codex review on PR #383 surfaced three semantic-routing bugs all
sharing the root cause of "v1 API path bypasses v2 mantissa /
reclaim-zone semantics". Same anti-pattern as the W3 spec codex P1
from PR #381. All three fixed + paired with regression tests.

P1 #1 — forward() decoded weight.inference_type() (3-bit unsigned)
even under v2, so a v2 edge built with `with_inference_mantissa(-1)`
(Abduction direction) would read bits 46-48 as 0b111 = Reserved7 and
dispatch through the synthesis/default branch instead of Abduction.
Negative mantissas (Abduction, Counterfactual) silently produced
wrong NARS truth propagation.

Fix: under `causal-edge-v2-layout`, decode via
`InferenceType::from_mantissa(weight.inference_mantissa())` for the
match arm. Result re-stamped via `with_inference_mantissa(
resolved_infer.to_mantissa())` so the sign bit (49) survives pack()'s
v2 mantissa write (pack() needs the v1 enum value but to_mantissa()
maps it through correctly — see P2 fix below).

P1 #2 — set_temporal() unconditionally wrote bits 52-63 even under
v2 where those bits are plasticity[2] + W-slot + lens + spare. The
v1 learn() path calls set_temporal(current_time) after every
observation; that call clobbered W-slot routing state and corrupted
the reclaim zone for any edge that had been stamped via with_w_slot/
with_truth/etc. Same root cause as the pack() temporal-write bug
fixed in commit ab39d01 — just a different setter path that wasn't
gated.

Fix: feature-gate set_temporal() the same way as pack(): under v2,
the call is a complete no-op (the `t: u16` arg is silently dropped
with documented migration pointer to chain-position + AriGraph
Triplet.timestamp). learn() transitively becomes safe under v2 since
the only reclaim-zone write was the set_temporal call.

P2 — pack() under v2 wrote the raw `inference as u8` discriminant
into bits 46-48 (3-bit mask). With the v1 enum:
- Deduction=0, Induction=1, Abduction=2, Revision=3, Synthesis=4
- pack(Abduction) → bits 46-48 = 0b010, bit 49 = 0
- inference_mantissa() reads 4 bits as i4 → +2
- from_mantissa(+2) decodes as Induction, NOT Abduction

Silent semantic drift on every v2 pack() call for any non-Deduction
inference type.

Fix: under v2, pack() writes `inference.to_mantissa() as i4` (4 bits
including sign) so the round-trip pack→inference_mantissa→
from_mantissa preserves the semantic. The v1 branch keeps the
original 3-bit discriminant write for back-compat. forward()'s
final re-stamp (P1 #1 fix) covers the case where the resolved
InferenceType needs to be re-encoded after composition.

Three regression tests added to `v2_layout_tests.rs`:
- `test_forward_decodes_negative_mantissa_under_v2` — Abduction via
  mantissa=-1 must NOT alias Reserved7
- `test_set_temporal_no_op_under_v2` — set_temporal(1023) on an edge
  with w=42/truth=Fuzzy/spare=0b101 must leave the raw u64 unchanged
- `test_pack_uses_mantissa_mapping_under_v2` — pack(Abduction),
  pack(Counterfactual), pack(Intervention) all round-trip through
  inference_mantissa → from_mantissa with semantic identity preserved

Test status post-fix:
- v2 (default): 33 pass / 1 pre-existing fail (test_build_fast)
- v1 (no features): 16 pass / 1 pre-existing fail
- The 3 new regression tests prevent silent re-introduction

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…ixes (CSI-7/8/9)

The Opus honest meta-review (final of the 12+1 fleet) graded sprint-11
+ Wave F at **B** (down from W-F10 Sonnet draft's B+) and surfaced 3
P0 integration gaps where worker output never reached the build path
because lib.rs / workspace registration was orphaned between worker
DONE and meta-review SPAWN. Fixed all three in this commit.

W-Meta-Opus review (~/sprint-log-11/meta-review-opus.md, 161 lines)
- Independent per-worker grades W-F1..W-F12 (W-F10 placeholders filled)
- CSI-7..13 cross-cutting findings missed by Sonnet drafts
- Sprint-11 grade: B (not B+) — Wave F integration discipline lapsed
- Recommends promoting E-META-10 (v1-API-under-v2 alias) to iron rule
  in CLAUDE.md alongside I-SUBSTRATE-MARKOV / I-NOISE-FLOOR-JIRAK
- Sprint-12 spawn recommendation: YES, conditional on Wave F + #386
  merge

P0 fix #1 — CSI-7: sigma-tier-router workspace registration
- Added `crates/sigma-tier-router` to `Cargo.toml` workspace `members`
- Removed the self-declared `[workspace]` table from
  `crates/sigma-tier-router/Cargo.toml` (it forced the crate into
  standalone mode, preventing parent-workspace inclusion)
- Validation: `cargo test --manifest-path crates/sigma-tier-router/Cargo.toml` — 12/12 tests pass; clean cargo check

P0 fix #2 — CSI-8: cognitive-shader-driver lib.rs gaps
- Added `pub mod attention_mask;` and `pub mod attention_mask_actor;`
  at the top of the pub-mod block (alphabetically before bindspace)
- W-F2 + W-F3 modules now reachable to downstream consumers; tests
  will execute on workspace cargo test

P0 fix #3 — CSI-9: ndarray hpc/stream/mod.rs (cross-repo, this commit
prepares ndarray for the companion change)
- Edited `/home/user/ndarray/src/hpc/stream/mod.rs` to register
  `pub mod qualia;` + `pub mod splat_field;` alongside the existing
  `pub mod inference;` (W-F5 had registered itself; W-F4/W-F6 left
  orphans)
- Re-exports: `QualiaI4Row`, `QualiaStream`, `SplatField`,
  `SplatFieldStream`
- Validation: `cargo test --lib hpc::stream` in ndarray — **18/18
  pass** (6 each × 3 streams)
- The ndarray-side change requires a separate commit + push to
  the `/home/user/ndarray` repo (its own git history); main thread
  will land that as a sibling PR

Aggregate Wave F test totals (verified via Opus review)
- Rust impl workers (W-F1/2/3/4/5/6/7): 60 tests across 7 files
- Governance/doc workers (W-F8/9/10/11/12): 5 markdown files, ~1500
  LOC docs
- Opus meta-review: 161 lines
- Total Wave F LOC: ~5000 (code + docs + plans)

Remaining gaps (per Opus review, NOT P0 but tracked)
- W-F2's local `type MailboxId = u32` shadow alias (CSI-10) → keep
  for back-compat; sprint-12 refactor consolidates
- E-META-10 promotion to iron rule → sprint-12 work
- ndarray companion PR for CSI-9 → sibling commit

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 16, 2026
…tionMaskSoA + canonical MailboxId import

Codex P2 review on PR #388 flagged that `AttentionMaskActor` is public
but `AttentionMaskSoA` (the only production backend in the crate)
doesn't implement `AttentionMaskBackend`. Downstream consumers can't
add the impl themselves because they own neither the trait nor the
SoA (Rust orphan rules), so `AttentionMaskActor::new(AttentionMaskSoA::new(...))`
would force them to wrap in a local newtype.

Fix #1 — production-backend impl in attention_mask_actor.rs
Added `impl AttentionMaskBackend for crate::attention_mask::AttentionMaskSoA`
with the four trait methods delegating to the existing inherent
methods on AttentionMaskSoA. Now downstream consumers can wire the
two directly: `AttentionMaskActor::new(AttentionMaskSoA::new(4))`
works out of the box.

Fix #2 — collapses CSI-10 from the W-Meta-Opus honest review
The W-F2 worker had defined a local `pub type MailboxId = u32` in
attention_mask.rs (Opus CSI-10 entry: "W-F2 used local MailboxId
shadow alias"). Switched to `pub use lance_graph_contract::collapse_gate::MailboxId;`
— same underlying u32 so all method signatures stay compatible,
but now both attention_mask.rs and attention_mask_actor.rs reference
the SAME canonical type and the trait impl in fix #1 can be added
without type-mismatch concerns.

Test status: 14/14 attention_mask + attention_mask_actor tests pass.
Clean compile (modulo 2 pre-existing unused_mut warnings unrelated
to this change).

Branch rebased on main (post PR #385 merge) to pick up the ndarray
hpc-extras feature flag that W-C1 added; this resolves the blake3
unresolved-crate compile failure that hit cognitive-shader-driver
prior to rebase.

https://claude.ai/code/session_01UwJuKqP828qyX1VkLgGJFS
AdaWorldAPI pushed a commit that referenced this pull request May 18, 2026
…r-actor (Sprint 0)

Adds two new stub crates from the four-repo integration plan as
workspace-EXCLUDED scaffolds (additive contract shape; promoted to
members in Sprint 1/2 once heavy deps land).

* crates/lance-graph-tikv-provider/  (Glue #2, plan §5)
  TikvNodeTableProvider + TikvEdgeTableProvider stubs implementing
  datafusion::catalog::TableProvider + lance_graph_contract::provider
  markers. Bodies are Sprint 1 unimplemented!() with the trait shape
  pinned.

* crates/cognitive-shader-actor/  (Glue #4, plan §6)
  CognitiveShaderActor<S> wrapping any SupervisableShader (from the
  new lance_graph_contract::actor module) as a ractor::Actor with
  ShaderMessage enum + ShaderSupervisor stub. Bodies are Sprint 2
  unimplemented!() pending ractor::Actor signature confirmation.

Both crates depend only on lance-graph-contract = "0.2" (path) plus
their domain crates (tikv-client / ractor); no existing crate gains
or loses a dep. Workspace check stays unaffected (excluded).

Workers: LG-1, LG-2. Sprint 0 of the four-repo wave.
AdaWorldAPI pushed a commit that referenced this pull request Jun 18, 2026
… + extend constraint binding to _inherit-only classes

All three codex findings are real correctness issues. Fixing them tightens
the validation_kind classifier so a regenerated corpus does not pollute
downstream queries with false-positive kinds, and lifts the Odoo
"extend-in-place" idiom (the same shape #525 fixed for relational fields).

# codex #1 — `_inherit`-only classes' constraints attach to the bases

The original block flushed `local_constrains` inside `if model_name is not
None`, silently dropping `@api.constrains` methods on the common Odoo
extension form (`_inherit='account.move'` without `_name`). Now
`model_targets = [_name]` if set, else `list(_inherit)` underscored, and
constraints attach to *each* target.

Same shape #525 took for relational fields — kept consistent.

# codex #2 — `search_count(...) > 1` is uniqueness ONLY, not also range

The unconditional `Compare` walker added `range` for any
`< | > | <= | >=`, including the canonical uniqueness pattern
`<rs>.search_count(...) > 1`. That polluted every uniqueness method with
a stray `validation_kind=range`. Added `_is_uniqueness_call(left)` guard
so range is skipped when the LHS is a `search_count` call. Direct field-vs-
bound checks (`self.amount < 0`, `self.amount > 1000000`) still classify
as range.

# codex #3 — `not re.match(...)` is format ONLY, not also presence

The broad `UnaryOp(Not)` rule added `presence` for `if not re.match(...):`
and `if not <rs>.search(...):` — the negated-call wrap of format / lookup
checks, not presence checks. Restricted presence to truthiness of a
*value-like* operand (`Name` / `Attribute` / `Subscript`); negated calls
are skipped. Direct field truthiness (`if not self.partner:`) still
classifies as presence.

# Tests

8 new regression tests under `TestCodexFindings` (32 → 40 OK):

  - `test_constraints_bind_to_inherit_only_extension`
  - `test_constraints_bind_to_each_inherit_when_list`
  - `test_constraints_with_name_skip_inherit_targets`  (specificity)
  - `test_search_count_gt_is_only_uniqueness`
  - `test_field_range_check_still_classifies_range`  (specificity)
  - `test_negated_re_match_is_only_format`
  - `test_negated_search_is_only_lookup`
  - `test_direct_field_truthiness_is_still_presence`  (specificity)

Each kind has a paired specificity test ensuring the fix did not break
the canonical pattern.

  python3 -m unittest tests.test_spo_enrich : 40/40 OK (was 32)
AdaWorldAPI pushed a commit that referenced this pull request Jun 18, 2026
…h, so Cypher is its AST; board-ops + ontology-traversal + thinking-styles + SurrealQL egress are ONE AST

A kanban board IS a graph: card=GUID node, column/phase=state, move=edge
rewrite, dependency=edge, WIP=count constraint, transition rules=graph schema.
Cypher is the AST for graph patterns, so Cypher is the board's native
query/mutation language. The planner already shares one AST across
Cypher/Gremlin/SPARQL/GQL front-ends + SurrealQL adapter/egress + thinking-style
dispatch + kanban phases - odoo's ontology traversal through the SurrealQL AST
adapter is the existence proof. These are one AST seen from four sides, not four
subsystems. Refines E-GUID-IS-THE-GRAPH correction #2 (the lifecycle
state-machine IS a graph; "kanban is not traversal" was a false dichotomy).

Scope: "Cypher is the AST" = surface lowering to the shared IR/SurrealQL AST,
not a claim the nom parser emits SurrealQL today (DataFusion now; SurrealQL
lowering is the lite-unified gate #540). Wiring = Backend::MailboxSoa router
variant + Cypher->SurrealQL lowering behind lite-unified.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
AdaWorldAPI pushed a commit that referenced this pull request Jun 20, 2026
…iwar POC

Follow-up to merged #557; rolls in both codex P1 review findings + the
operator's 16-family-adapter edge model + the Callcenter slice + an aiwar
OSINT POC on the real graph.

soa_graph (codex P1 #1 + #2, operator model):
- classid IS the class (exact): project_snapshot / nearest_anchor include
  only rows where classid == domain.classid — a mixed-class board can't
  leak one domain's nodes/edges into another's view.
- 16 x 8-bit family-node adapters: the canonical EdgeBlock is read as 16
  family adapters (12 in-family + 4 out-of-family), each non-zero byte ->
  a FAMILY node by `family & 0xFF`, collision-aware (ambiguous low byte
  skipped, never mis-routed). Member-by-identity resolution removed -> the
  >255-member aliasing dissolves (resolution is family-level only).
  Trade: mixin dependency for extreme render stability + flexibility
  (E-FAMILY-ADAPTER-EDGES-ARE-RENDER-STABLE).

lance-graph-callcenter (the slice):
- graph_table (query-lite): GraphSnapshot -> `nodes` + `edges` arrow
  MemTable TableProviders + register_graph(SessionContext). The
  DataFusion / SQL / Cypher->SQL path (mirrors transcode::ontology_table).
- graph_gremlin (always-on, pure contract types): g(&snap).v().out()/
  .in_()/.out_e(label)/.values_kind() — the Gremlin POC = SurrealQL
  `->edge->` traversal kernel.

contract::aiwar + example (the POC the operator asked for):
- AiwarClassView (entity category ⇒ family id) + aiwar_node_rows ingest the
  real AdaWorldAPI/aiwar-neo4j-harvest/data/aiwar_graph.json into OSINT
  NodeRows; project_snapshot gives a Gotham graph whose family nodes ARE
  the categories. Example run: 221 entities/326 edges -> 281 nodes (221
  members + 60 family hubs) + 481 edges. q2 wires it to the Quadro-2 visual.

Tests: contract 703 lib (+5), clippy --all-targets -D warnings clean.
callcenter 10 graph tests (--features query, incl. live SQL roundtrip),
default build compiles graph_gremlin; new files clippy-clean (pre-existing
callcenter query-clippy debt logged TD-CALLCENTER-QUERY-CLIPPY). Board
updated (LATEST_STATE, AGENT_LOG, EPIPHANIES, TECH_DEBT, plan).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
AdaWorldAPI pushed a commit that referenced this pull request Jun 20, 2026
… fuse

codex P2 #1 (contract source unification): lance-graph + symbiont path-dep
lance-graph-contract; lance-graph-ogar git-dep'd it, so when composed Cargo
sees two distinct crates and OgarClassView impls the git ClassView, unusable
where the engine expects the path one. Fix: path-dep ../lance-graph-contract
(the canonical in-repo copy) + a [patch."…/lance-graph"] that folds
ogar-class-view's transitive git contract onto the SAME path copy = one source.
Documented the cargo limitation: an in-repo workspace root (symbiont) adding
this crate MUST repeat the patch ([patch] only applies at the workspace root).

codex P2 #2 (parity guard only ran in tests): the drift fuse was #[cfg(test)]
only, so a downstream cargo build never ran it — the "fails the build on drift"
claim was false for normal builds. Fix: added parity::COUNT_FUSE, a compile-time
const assert (mirror::CODEBOOK.len() == ogar_vocab::class_ids::ALL.len()) that
fires in ANY build (cargo build included) on add/remove drift; kept the runtime
assert_codebook_parity for the full id/domain bijection (tested + callable at
startup); corrected the docs to state both depths precisely (no overclaim).

Re-verified: cargo test --manifest-path crates/lance-graph-ogar/Cargo.toml 3/3
(the ogar_class_view_implements_contract_class_view test compiling proves
one-source unification), clippy -D warnings + fmt clean, no "patch not used".

Board: AGENT_LOG (cont.15).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
AdaWorldAPI pushed a commit that referenced this pull request Jul 4, 2026
…perator ruling)

Operator ruling 2026-07-04 ("mark all as migration mandatory"): the V1
contiguous-u24 node-key tail (family:u24 ++ identity:u24) is forbidden and its
migration to the V3 6×(u8:u8) facet is mandatory on every surface — upgrading the
le-contract §L7 #2 reconciliation from optional to a hard mandate.

- ISSUES.md ISS-V1-U24-TAIL-MIGRATION-MANDATORY: the full residue enumerated with
  file:line (ocr.rs:121, soa_graph.rs:412, aiwar.rs:104, action.rs:417/693,
  callcenter graph_table + OWL bytes[13..16] writers, ogar lib.rs:195, and the
  CLAUDE.md CANON doc), each mandatory, each gated per-site on v3-envelope-auditor.
  Records the mechanism (no new_v3 constructor; classid tail_variant resolves V3)
  and the gotcha (NodeGuid::new byte-packing does NOT align with the V3 reading —
  classid swap alone is insufficient). Test-only fold assertions exempt.
- EPIPHANIES.md E-V3-V1-U24-MIGRATION-MANDATORY: the ruling as policy.

Confirmed already V3-clean (no action): the Tesseract transcode arc
(contract::network FacetCascade #643, recoder, tesseract-recognizer, ruff
harvest) + OGAR render_class_with_methods (#150) — zero contiguous-u24.

Board-only; no code, no build step.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016b33swuXE23hKtqxsHu9p1
AdaWorldAPI pushed a commit that referenced this pull request Jul 10, 2026
perturbation-sim/examples/comma_quorum.rs — the Pythagorean-comma
vertical-quorum probe (E-COMMA-QUORUM-1 / E-COMMA-REPLAY-1), all
pre-registered gates PASS:

- quorum: comma stride (2395, coprime with M=4096 per D-QUANTGATE)
  holds N_eff 11.00/12 effective witnesses where strict alignment
  collapses to 1.00 (unit 2.49, rational 3.92)
- replay: any level regenerated from (GUID, envelope) is bit-identical
  and write-order-independent
- latent: a level never computed at write time passes quorum
  independence on first projection (max|rho|=0.156, dN_eff +0.83)
- economy: 82,176 B touched vs ~69 GB dense — the 64x64..256kx256k
  pyramid is never materialized

Honesty chronicle kept in the probe header: run #1 pre-registered FAIL
(3.24) diagnosed as the spectral-participation ceiling — the measured
boundary condition N_eff(comma) = min(L, spectral participation of the
detail field) — not tuned away; runs #2/#3 isolated envelope common-mode
and the Dirichlet sidelobe floor.

.claude/v3/FUTURE-DESIGN.md — the operator-requested meta board /
landing zone: 5-ruling index with measured results, the
ladybug-rs -> thinking-engine -> p64 -> driver -> SoA migration arc,
the thinking-engine unwired-gems wiring queue (CascadeChannels8 first),
the mid-flight value-tenant constraint. v3 README doc-map row added.

Board hygiene same-commit: EPIPHANIES prepend E-COMMA-QUORUM-MEASURED-1
(FINDING); STATUS_BOARD D-MTS-5 -> Measured GREEN; plan
temporal-markov-and-style-classes-v1 row updated; AGENT_LOG prepend.

chaoda_surge_epicenter.rs: rewrap-only cargo fmt sweep (whitespace,
PR #592 precedent). Probe + example clippy -D warnings clean.

Co-Authored-By: Claude <noreply@anthropic.com>
AdaWorldAPI pushed a commit that referenced this pull request Jul 10, 2026
bit per comma level matches the full CausalEdge64 awareness proxies

perturbation-sim/examples/comma_awareness.rs (zero-dep; D-MTS-5
machinery + NARS revision/deduction proxies; pre-registered gates,
honest run chronicle in the header):

- knee: comma lane k*=1 (2 explicit truth bits/edge vs the baseline's
  16) passes all three awareness proxies (|dE| 0.0084, surprise-bit
  agreement 0.9688, F-descent rho 0.9792); the aligned control needs
  k*=4
- mechanism measured: the comma walk is a low-discrepancy per-edge
  lattice, so de-dithered averaging is stratified sampling - comma k=1
  RMSE 0.0244 vs aligned 0.2503 (10x), worth ~3.4 effective bits ~
  log2(12)=3.58
- replay bit-identical across passes and level orders
- chronicle: run #1 G1 FAIL was a mis-registered gate (exact agreement
  demanded of a dithered-reconstruction path); fixed by a diagnosis
  MEASUREMENT - max disagree margin-to-threshold 1.7e-5 proves every
  flip is boundary noise; G1' re-registered STRICTER, run #2 all green
- fences: proxies, not the full ShaderDriver loop; D-MTS-6b
  (driver-integrated fixture) gates any real CausalEdge64 shrink;
  economy framed marginal-cost (the per-level slots are the pyramid's
  own envelope storage)

Board same-commit: EPIPHANIES E-COMMA-AWARENESS-MEASURED-1;
STATUS_BOARD D-MTS-6 -> Measured GREEN; FUTURE-DESIGN + plan rows;
AGENT_LOG entry (incl. PR #674 opening + the codex fix). Includes
fmt-only rewrap residue on planner style.rs/nars_engine.rs (cargo fmt
sweep, PR #592 precedent).

Co-Authored-By: Claude <noreply@anthropic.com>
AdaWorldAPI pushed a commit that referenced this pull request Jul 16, 2026
…(codex P2 #2 on #697)

PaletteDistanceTable.table is a private field with no slice export, so
the arm-A spec ("upload PaletteDistanceTable.table") was not
implementable outside bgz17 as written. Amended: the probe materializes
buf[a*256+b] = table.distance(a,b) over 0..256^2 — bit-identical to the
private buffer by construction, since distance() is the direct indexed
read table[a*256+b] (palette.rs:275-277) — and uses the same public
calls as the CPU oracle. A zero-copy `pub fn as_slice()` may be added
to bgz17 in the probe PR itself, never assumed to exist.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki
AdaWorldAPI pushed a commit that referenced this pull request Jul 17, 2026
…ng mask (CodeRabbit #719)

Address 3 of CodeRabbit's 5 findings (the spec-strengthening ones):
- §0c NEW authoritative table: concept u16 != classid; classid =
  compose_classid(canon, appid)=canon-high (canon<<16)|appid; propose
  appid 0x0000 (canon-only) for internal concepts; exact classids +
  read-mode tuples for every cognitive/chess concept + the board-row
  classid; BoardAggregates = tenant lane + board-row classid (both).
- §5 ValueSchema::Thinking: exact 10-tenant field mask (Cognitive hot set
  ∪ 3 triangle lanes), tenant_bytes 102 B; mandatory routing (every
  thinking/task classid -> Thinking, never Cognitive) + mandatory
  persist-side survive-baking test (TD-TRI-1-P4 #2 made concrete).
- header: byte-precision claim made conditional on the two open knobs.

Skipped 2 (with reason): STATUS_BOARD D-TRI-1 is a dashboard row that
transitions status in place by convention (not strict-append like
EPIPHANIES/PR_ARC); the INTEGRATION_PLANS entry matches the file's actual
per-entry format (the graphrag entry above it carries no Author/Confidence
field either).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Awg6TXocHcwTtc6eGsHcdD
AdaWorldAPI added a commit that referenced this pull request Jul 17, 2026
…undary) (#719)

* docs(plan): D-TRI-1 classid-half batched-mint spec — to the handoff boundary

The classid half of D-TRI-1, spec'd byte-precise so the doc-W4 council can
execute it mechanically post-S1. NO bytes minted (proposals only):
- chess 0x06 (episode/candidate/iteration/event — operator-ruled byte)
- Cognition task domain 0x03 (fan-out/counterfactual/synthesis/inference/
  deduction/extrapolation/syllogism — operator-ruled canonical; byte proposed)
- BoardAggregates value tenant @ row_offset 188 (U8x8 proposed)
- execution sequence (OGAR originates -> lance-graph mirrors + parity tests
  -> read-modes -> BoardAggregates lane), P4 ValueSchema::Thinking proposal
- S1/S3/S5 coordination with the graphrag arc (community-id S1-gated; never solo)

Two open knobs flagged for operator/council: Cognition byte 0x03,
BoardAggregates width. Handoff: the other session runs S1; the council mints.

Board: INTEGRATION_PLANS prepend + STATUS_BOARD D-TRI-1 (value-half MERGED,
classid-half SPEC READY).

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

* docs(plan): reserve 0x0300 Cognition domain root, task-row concept -> 0x0308 (Codex P2 #719)

Codex correctly flagged that cognitive_task at 0x0300 collides with the
codebook CC==0x00 domain-root convention (ogar_codebook.rs:4-6): every
promoted concept starts at 0x??01, and 0x??00 is the reserved domain root.
Reserved 0x0300 (root, not a CODEBOOK entry); the 7 task verbs stay at
0x0301-0x0307; the generic Tasks-SoA task-row concept moves to 0x0308.
Chess (§1) was already correct (0x0601). Added the codebook-root convention
note so the council never emits a 0x??00 row.

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

* docs(plan): concept-id vs classid mapping + exact ValueSchema::Thinking mask (CodeRabbit #719)

Address 3 of CodeRabbit's 5 findings (the spec-strengthening ones):
- §0c NEW authoritative table: concept u16 != classid; classid =
  compose_classid(canon, appid)=canon-high (canon<<16)|appid; propose
  appid 0x0000 (canon-only) for internal concepts; exact classids +
  read-mode tuples for every cognitive/chess concept + the board-row
  classid; BoardAggregates = tenant lane + board-row classid (both).
- §5 ValueSchema::Thinking: exact 10-tenant field mask (Cognitive hot set
  ∪ 3 triangle lanes), tenant_bytes 102 B; mandatory routing (every
  thinking/task classid -> Thinking, never Cognitive) + mandatory
  persist-side survive-baking test (TD-TRI-1-P4 #2 made concrete).
- header: byte-precision claim made conditional on the two open knobs.

Skipped 2 (with reason): STATUS_BOARD D-TRI-1 is a dashboard row that
transitions status in place by convention (not strict-append like
EPIPHANIES/PR_ARC); the INTEGRATION_PLANS entry matches the file's actual
per-entry format (the graphrag entry above it carries no Author/Confidence
field either).

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
AdaWorldAPI pushed a commit that referenced this pull request Jul 19, 2026
…tion

Adds two things to text_stream_to_soa: EMIT_SYMBOLS TSV export and a
canonical-surface-fidelity "manufactured" readout — the working codebook-
resolution leg for the jeans-in-"Rumi" OOV artifact.

Three-detector arc (all measured, 4 corpora):
- The genre-vector over-representation filter is FALSIFIED as an OOV detector:
  it flags the CENTRAL theme words (animal/farm #1/#2 in Animal Farm, mouse/
  wolf in Aesop) with the same score as jeans — over-representation is a
  property of both theme words and sinks.
- Canonical-surface-fidelity works (superset): flags jeans(100%)/box(99%),
  clears animal(69%)/farm/miss; Aesop 0 (clean). Also flags benign lemma-only
  inflection (labor/try) — the residual needs case preservation.
- Root cause of the worst artifacts = proper-noun collapse via case-destruction
  at deepnsm vocabulary.rs:344 (split_words lowercases before lookup): jeans<-
  Jean (a character), box<-Boxer (the horse).

Corpus-integrity: chasing jeans to root exposed that scratch "rumi.txt" is
Gutenberg #56097 "The Ranch Girls at Boarding School" (a novel), NOT Rumi.
Records E-CODEBOOK-OOV-SURFACE-FIDELITY-1; corrects the corpus label +
mechanism in E-GRAMMAR-HEURISTIC-CONTENT-FILTER-1 and the label in
E-COHERENCE-LENGTH-PROBE-1 (Status-line edits; both findings STAND — the
Q/coherence signature is strengthened: novel==novel signature).

LLM tail-cleaner stays credential-blocked (env keys reject auth; session
OAuth not repurposed).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016b33swuXE23hKtqxsHu9p1
AdaWorldAPI pushed a commit that referenced this pull request Jul 19, 2026
…tion

Adds two things to text_stream_to_soa: EMIT_SYMBOLS TSV export and a
canonical-surface-fidelity "manufactured" readout — the working codebook-
resolution leg for the jeans-in-"Rumi" OOV artifact.

Three-detector arc (all measured, 4 corpora):
- The genre-vector over-representation filter is FALSIFIED as an OOV detector:
  it flags the CENTRAL theme words (animal/farm #1/#2 in Animal Farm, mouse/
  wolf in Aesop) with the same score as jeans — over-representation is a
  property of both theme words and sinks.
- Canonical-surface-fidelity works (superset): flags jeans(100%)/box(99%),
  clears animal(69%)/farm/miss; Aesop 0 (clean). Also flags benign lemma-only
  inflection (labor/try) — the residual needs case preservation.
- Root cause of the worst artifacts = proper-noun collapse via case-destruction
  at deepnsm vocabulary.rs:344 (split_words lowercases before lookup): jeans<-
  Jean (a character), box<-Boxer (the horse).

Corpus-integrity: chasing jeans to root exposed that scratch "rumi.txt" is
Gutenberg #56097 "The Ranch Girls at Boarding School" (a novel), NOT Rumi.
Records E-CODEBOOK-OOV-SURFACE-FIDELITY-1; corrects the corpus label +
mechanism in E-GRAMMAR-HEURISTIC-CONTENT-FILTER-1 and the label in
E-COHERENCE-LENGTH-PROBE-1 (Status-line edits; both findings STAND — the
Q/coherence signature is strengthened: novel==novel signature).

LLM tail-cleaner stays credential-blocked (env keys reject auth; session
OAuth not repurposed).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016b33swuXE23hKtqxsHu9p1
AdaWorldAPI pushed a commit that referenced this pull request Jul 23, 2026
…ng (Codex P2 #2)

Codex flagged that the `rung == 0` guard only protects beliefs observed
BEFORE they were ever derived. A belief that is derived first and observed
later keeps its rung (>= 1) per S2's rung-in-place revision, yet now
carries real observation evidence — so a subsequent close_transitive that
finds a higher-expectation pure derivation would overwrite it, dropping
the observed evidence (e.g. derive A->C from A->B->C, observe A->C, then
add strong A->D->C).

Fix: gate on the stamp, not the rung. A pure derivation carries the empty
stamp (Stamp::default()); any belief with observation evidence has a
non-empty stamp (observe unions it in — and a derived belief's zero stamp
is disjoint from every source, so observing it always pools via revision).
`e.stamp != Stamp::default()` therefore catches both the purely-observed
(rung 0) and the derived-then-observed (rung >= 1) case.

Regression closure_does_not_overwrite_a_derived_then_observed_belief runs
Codex's exact scenario with the observed truth's expectation kept BELOW
the strong path's, so the guard (not the expectation test) is what
protects it. 92 crate tests + clippy -D warnings green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki
AdaWorldAPI pushed a commit that referenced this pull request Jul 23, 2026
…enant)

Operator green-lit adding a TEKAMOLO tenant (temporal/causal/modal/local,
256:256:256 each, + qualia). It is NOT a new layout — it is a NAMED
READING of the existing 12-byte content-blind facet payload in the
CascadeShape::G4D3 (4×3) carving, its four groups named as the adverbial
roles Temporal(when)/Kausal(why)/Modal(how)/Lokal(where), each a 3-byte
256:256:256 cascade.

TekamoloFacet(pub FacetCascade): every accessor delegates to the
canonical FacetCascade::cascade_byte(G4D3, group, level) — NO bytes of
its own, NO ENVELOPE_LAYOUT_VERSION bump, NO new ValueTenant. from_lanes
packs the four lanes; shared(other, role) is the per-axis shared-prefix
locality readout. Qualia already exists (value tenant #1 QualiaI4_16D,
untouched); a value facet needs no companion edge tenant (edges are the
orthogonal EdgeBlock + MaterializedEdges tenant #2).

The address side of the typed-relation frontier the House falsifier
identified: pairs with Copula::Rel(verb) edge-typing to give the ablation
centre-finder real articulation structure.

E-TEKAMOLO-FACET-IS-A-G4D3-READING-1.

Tests: 5 green (roundtrip, parity-with-cascade_byte, lane-isolation,
per-role shared-prefix, any-facet-reads-as-tekamolo). Gates: cargo test
-p lance-graph-contract --lib tekamolo_facet 5 passed; clippy
-p lance-graph-contract --lib -D warnings clean. v3-envelope-auditor pass
in flight.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki
AdaWorldAPI pushed a commit that referenced this pull request Jul 26, 2026
…real

Codex P2 (prepositional fronting) + CodeRabbit Major (Ps 5:2 segmentation)
were the SAME root cause: the whole-KJV `i—pray→thee` commit had only fired
via pg10 line-wrapping luck — the parser could not reach `for unto thee will
I pray` by design. Fixes in insight_right_corner_read.rs:
- unit split extended `.;\n` -> `.;:?!,\n` (KJV colons are clause
  separators; `?`/`!` were silently merging clauses — codex P2 #2; the
  comma-split also removes a cross-clause `unto him, Shall we go` capture)
- leading discourse-connective skip (for/and/but/...) + fronted
  recipient-PP skip. FRONT_PREPS deliberately ONLY unto/to: the re-run
  showed locative/source fronts commit role-WRONG edges (`of them shall ye
  buy` — them=source; `upon thee shall he offer` — thee=place; those belong
  to the Lokal lane, not the object slot). Precision over recall.
- two regressions added (Ps 5:2 shape; double-`?` multi-clause).

Whole-KJV re-run: 6 -> 21 commitments, 21/21 defensible on spot-check,
incl. the Ps 105:11 = 1 Chr 16:18 duplicate pair surfacing live (the
Phase-4 duplication caveat demonstrated). Board numbers corrected with a
dated note (same entry, this PR's unmerged content).

CodeRabbit Major (loader panic on empty PoS field): first-byte guard
applied to the shared pattern in ALL FOUR examples (right_corner,
witness_gated, reason_wired, coca_read) — skip malformed rows, never panic.

Also from the review round (ChatGPT refinements):
- witness.rs::has_fronted_argument documents the obl over-approximation
  honestly (governed vs circumstantial oblique needs a valency/frame layer;
  ArgumentStatus queued — a fronted temporal/locative obl must not license
  an object candidate).
- EPIPHANIES gains E-WITNESS-SPECIFIC-MEANING-1 [SPEC]: the four-instrument
  probe family (Aesop / Daniel OG-Theodotion / Susanna expression graph /
  Coena), the EvidenceAvailability family (TextAbsent vs ExpressionAbsent
  vs NonProjectable vs Paraphrased), corresponds_to-never-same_as, and the
  ratified execution order: PROIEL grammar PROMOTION (Level 3 — witness-
  derived rule survives witness removal) is the next implementation PR.

Gates: contract 1037 green; clippy -D warnings + fmt clean; all four
examples run green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LFRfkNAyJCkLbtChuSHNay
AdaWorldAPI pushed a commit that referenced this pull request Jul 26, 2026
…diagnosed

Codex 2xP1 + P2 and CodeRabbit 3 findings on #850, all confirmed real. Three
of them are the German form of the error this arc has been chasing in English:
reading a SURFACE signal as structure without checking what GOVERNS it.

P1 #1 — Satzklammer measured sentence-wide instead of clause-local. `fin[0]`
is the leftmost finite verb, not the matrix predicate: in `Wenn es regnet,
bleibe ich zuhause` it selected `regnet` and derived a spurious V3+ for a
clause that is matrix V2. The sentence-wide `nonfin` sweep could also pair a
predicate with a nonfinite verb from a different clause. Now anchored on the
ROOT's verb cluster, with bracket members taken from that cluster only.
Effect: V2 now 40,882 vs V3+ 851 / V1 615 (~96.5% V2 — correct for German
declaratives; the bug inflated V3+ on every subordinate-first sentence).

P1 #2 — verb-finality read from the wrong verb. In periphrastic clauses
(`das ich gesehen habe`) the relativizer attaches to the PARTICIPLE while
finite `habe` holds the right corner, so comparing against the participle
systematically REVERSED the classification. Both the relative-clause and
subordinate-clause blocks now resolve the clause's verb cluster and anchor on
its finite member. Effect: relative clauses 6,419 verb-final vs 2,051 not
(75.8%); subordinate 10,944 vs 2,380 (82.1%) — both now correct German.

CodeRabbit — subordinate detection excluded AUX, so every clause headed by a
German modal (koennen/muessen/sollen/wollen/duerfen/moegen, all UPOS=AUX in
UD) was skipped: `weil er kommen muss` never counted. Now VERB|AUX, and
acl:relcl added to the relation set.

P2 — Wechselpraeposition asserted spatial meaning from case alone. `an dich
denken` is Acc with no direction; every governed and temporal use was emitted
as `directional`. The fix uses the ALTERNATION as the evidence: a
(prep, governor) pair attested with BOTH cases is a live Wechsel contrast and
gets the reading; a pair locked to one case is lexically GOVERNED and gets
reading='-'. Effect: 11,001 of 36,934 tokens (30%) reclassified as governed —
e.g. `sagen an+Dat`, `heissen in+Dat`, `liegen an+Dat` (idiomatic) — while
`kommen/gehen/stehen in` correctly stay alternating. Same discipline as the
English extractor's recipient-only PP fronting.

Docs (CodeRabbit): the i4 boundary now uses one exact predicate throughout
(`-8 <= off <= +7` local, `off < -8 or off > +7` non-local) instead of mixing
+-8 / |off|>8, and the demarcation fence is labelled `text` (MD040).

Two shared helpers added: verb_cluster() (a clause's lexical head + the auxes
UD hangs off it) and finite_of() — German splits the finite and lexical verb
across the Satzklammer, so any bracket question must be asked of the cluster,
never of a single token.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LFRfkNAyJCkLbtChuSHNay
AdaWorldAPI pushed a commit that referenced this pull request Jul 30, 2026
…nized

Review round (codex 2 findings + CodeRabbit 7 comments), all verified against
the code before acting:

1. Gold TYPE-SEPARATED from resolver input (codex #1, CodeRabbit x3): Tok no
   longer carries a gold field; fixtures return (Vec<Tok>, Gold) with the
   referee's pairs in a separate list read only by assert arms. A future
   toks[p].gold shortcut is now a compile error -- closed by the type system,
   strictly stronger than the suggested invariance test.

2. B2 exercises the BINDER with the tempting target (codex #2, CodeRabbit x2):
   binding god@15 into scratch rows asserts Ok(-4) AND stored nibble -4 --
   "storable-but-wrong" proven at the binder, not by re-deriving its range
   predicate in the gate. New test binder_accepts_the_tempting_wrong_target.

3. The relative-span "load-bearing" test was VACUOUS (codex P2, CodeRabbit
   Major) -- confirmed: subject selection scans forward and English is
   head-first, so serpent@2 wins with or without the filter; the claim was
   false for that rule. Replaced with the honest pair:
   clause_segmentation_is_load_bearing (erase the "and" boundary ->
   structural resolution FAILS entirely -- the true 3:1 counterfactual) and
   relative_span_filter_can_fire (synthetic clause whose FIRST candidate is
   in-relative -- the filter demonstrably changes the outcome vs the
   unfiltered pick). Doc comment corrected to say what actually bears load.

4. The pull-test had no DIVERGENT stored chip (codex P1) -- confirmed: 3:1
   escalates (no chip) and 3:7's chips coincide with the heuristic, so stored
   state was entirely heuristic-reconstructible. Added the constructed
   in-range interposition fixture ("the man which the boy saw slept, and he
   smiled" -- labelled built-English, not KJV): recency -> boy (d=-4, wrong),
   binding -> man (d=-7, gold, BINDS). New gate B4 asserts the STORED nibble
   differs from the heuristic reconstruction -- the divergence now lives in
   stored state; composition renumbered B5. New test
   divergent_chip_differs_from_heuristic_reconstruction.

5. EPIPHANIES wording fixed pre-merge (CodeRabbit Minor): the chip stores the
   POINTER the verification selected, never "the verified answer" --
   pointer-not-answer kept consistent throughout.

Declined with reasons (exec-run addendum): workspace-wide fmt/clippy sweep
(repo practice is scoped -p; all-features is the known
TD-LANCE-GRAPH-ALL-FEATURES-DELTA-BREAK surface); methods-on-carrier nitpick
(the carrier litmus targets cognitive state carriers, not probe fixtures).

OPERATOR RULING canonized (EPIPHANIES prepend,
E-64K-THOUGHTS-DONT-DO-QUORUM-PLASTICITY-BREATHES-FROM-TENSION-1): the 64k
parallel thoughts do NOT do quorum -- the i4 mantissa was never sized for
counterfactual agreement; inconsistency is plasticity's work; contradictions
are the substrate's fuel, preserved, never voted away; linguistic tension =
magnitude of expressivity (W7's stored -7 vs recency's -4 is that quantity in
one nibble); NARS breathes from these tensions; and the honesty line runs
between EPISODIC causality (stream order) and EPISTEMIC causality (warrant)
-- recency IS the episodic proxy whose failure the divergence gates measure.
The quorum-binder follow-on from E-A-CHIP-BEARS-LOAD-OR-IT-IS-A-JOKE-1 is
withdrawn in place (pre-merge correction); TD-LENS-QUORUM survives as
scan-cost debt only. Hermeneutik ladder ordering recorded: Gadamer first,
the four stances (Kant/Wittgenstein/Nietzsche/Hegel) next.

Gates: 5/5 green (B1-B5). Tests: 7/7. clippy -D warnings clean (one
map_identity of my own making, fixed). fmt clean, gates re-verified after.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki
AdaWorldAPI pushed a commit that referenced this pull request Jul 31, 2026
…3 sample size

All three confirmed. None was fixed by adjusting a threshold.

P1 #1 — H1 SORTED THE HISTOGRAMS. Comparing sorted multisets discards
which cell maps to which offset, and the UNSORTED histograms genuinely
differ (peak at index 4 vs 2), so the gate passed while hiding that every
cell had moved. An aggregate distribution cannot establish per-cell
invariance. Replaced with the argument that actually holds, in two halves:
(i) type-level, stated not measured — from_hhtl(path, depth) has no
parameter that could carry a carving; (ii) empirical — the entire
difference between the carvings is a CONSTANT rotation of 2 across all 256
cells with variance 0, and a cell-dependent shift is the falsifier.

P1 #2 — H2 DREW A DESIGN CONCLUSION FROM AN UNWIRED PREMISE. I claimed the
shipped constants are "MATCHED to the 4-ary use case". Verified against
the source: ResidueEncoder::encode reads only start_offset (n=1,
residue.rs:157); index/arc appear solely in walk_spectrum and crate tests;
the shipped NiblePath is FAN_OUT=16. Nothing that ships consumes a 4-step
prefix, so the n=4 comparison is a property of a hypothetical consumer.
Claim withdrawn. What survives is narrower and still worth recording: the
pre-registered suspicion is NOT CONFIRMED — a retraction of a concern, not
a vindication of a design.

P2 #3 — H3 PUBLISHED A FALSE SAMPLE SIZE. The counter incremented before
the k > 0 eligibility check, so "4,662 pairs sharing >=1 address level"
was really every thinned pair. Codex's inference was exactly right: since
tiered agreement holds for every eligible pair by construction, 1,152 IS
the eligible population. Corrected figures: flat 51/1,152 = 4.4% (~ the
1/17 = 5.9% chance level, i.e. the flat intake keeps ancestry about as
often as chance would); per-tier 1,152/1,152 = 100% BY CONSTRUCTION, now
asserted as a construction check rather than as evidence. The ~23x ratio
was arithmetic on a mislabelled denominator and is retracted.

Both board records corrected in the same commit with dated inline
markers, per the append-only rule.

Gates 3/3 green; clippy -D warnings clean; fmt applied.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki
AdaWorldAPI pushed a commit that referenced this pull request Aug 4, 2026
…dex P2)

Third anchor iteration, and the third instance of one class.

THE DEFECT. The anchor was chosen by raw |lambda| while the materiality cutoff
below it is correlation-scaled (1e-9 * sqrt(var_i * var_j)). Different units.
An item with an enormous residual variance can therefore hold the largest raw
loading while every covariance in its own row falls BENEATH its own cutoff —
so every sign defaults positive and a material negative edge elsewhere forces
a false rejection.

Reproduced before fixing, on exact one-factor data:

    lambda = [0.9, 1.0, -0.8]   var = [1, 1e20, 1]
    raw-|lambda| picks item 1; its cutoff is 1e-9*sqrt(1e20) = 10
    against covariances of 0.9 and 0.8 -> all signs default +
    the material -0.72 edge between items 0 and 2 then conflicts
    -> omega_total returns None on a valid model

THE FIX. Select by COMMUNALITY, lambda_i^2 / var_i — the share of the item's
own variance the common factor explains. It is dimensionless, so the anchor
criterion and the cutoff finally measure the same thing. On the fixture it
picks item 0 (communality 0.81) over item 1 (1e-20), and item 0's row carries
real sign information.

The public rustdoc is updated in the same commit — it had just been corrected
one round earlier and was stale again, which is the same trap the previous
commit recorded.

THE CLASS, recorded as E-A-CRITERION-MUST-BE-IN-THE-SAME-UNITS-AS-THE-TEST-IT-
FEEDS-1. Three anchors have now rejected valid data: item 0 (arbitrary, breaks
when lambda_0 = 0), raw |lambda| (breaks on unequal residual variances), and
communality (dimensionless, correct). Anchor #2 was not wrong about loadings —
1.0 really is the largest |lambda|. It was wrong because "strongest" was
measured in covariance units while "material" was measured in correlation
units, so the anchor could be strong by one yardstick and invisible to the
other.

And this is the third form of ONE deeper error: the absolute pivot in
R-squared, the four .max(1.0) floors in omega, and now the raw-|lambda| anchor
are all scale-dependence — a number compared against a constant, or against a
quantity in different units. Each was fixed as an instance and the class
resurfaced one layer over. The rule that catches all three at once: every
comparison in a numerical routine has two operands; write down the units of
both, and if they differ the comparison is a bug regardless of what the tests
say.

119 lib + 13 doctests green; stats.rs clippy-clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3RyLEbuNSHxxB3NTTrGki
AdaWorldAPI pushed a commit that referenced this pull request Aug 12, 2026
…h, fixed in all three homes

Codex P2 on #930: "identical R-bar with mu shifted 100.3 deg" fused two
different comparisons. Identical R-bar belongs to steering<->rotated (0.343 =
0.343, mu shifted exactly 90 -- rotation preserves concentration by
construction); the 100.3 deg separation belongs to surface<->rotated, where
R-bar is NOT identical (0.516 vs 0.343). The composite was false in all three
homes: LATEST_STATE, the #929 arc entry, report SS5.13. Stated correctly the
finding is STRONGER -- the control separates from surface in BOTH channels.

Unmerged board entries composed in place (append-only rule's unmerged-PR
allowance); the merged report gets a dated correction note.

Lesson banked: the 13/13 figure verification checked every NUMBER and still
missed this -- a relation between two individually correct numbers can be
false. Verify comparative claims AS claims: every "identical/same/larger"
must name both operands, and the check must evaluate the relation.

Also codex P2 #2: the LATEST_STATE shipped-PR table had stalled at #780.
Added #926-#929 rows plus an explicit gap-note row for #781-#925 (carried by
PR_ARC_INVENTORY) -- honest gap, not silent reconstruction of ~150 rows.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi
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