Skip to content

perturbation-sim: substrate calibration (study as ground truth) + calibrated SoA member spec#511

Merged
AdaWorldAPI merged 5 commits into
mainfrom
claude/perturbation-sim-calibrate-soa
Jun 16, 2026
Merged

perturbation-sim: substrate calibration (study as ground truth) + calibrated SoA member spec#511
AdaWorldAPI merged 5 commits into
mainfrom
claude/perturbation-sim-calibrate-soa

Conversation

@AdaWorldAPI

@AdaWorldAPI AdaWorldAPI commented Jun 16, 2026

Copy link
Copy Markdown
Owner

What

The substrate-calibration loop the operator asked for: use this crate's deterministic study as ground truth, encode its factor matrix through the SoA value tenants, and certify with the certification-officer battery (ICC / Spearman / Cronbach α). Then emit the additive member design the substrate needs. Additive only — examples/calibrate.rs (new) + src/columns.rs (spec only, nothing serializes, does not touch the operator-locked canonical_node).

Are ICC/Cronbach valid to compare the substrate? — yes, with the right reads

  • ICC(2,1) = absolute value agreement source↔encoded · Spearman = rank (search tenants) · Pearson = linear readout · Cronbach α = reproduce the source α (NOT maximize — the study's α is low by design; "improving" it corrupts the construct). Significance at the Jirak n^(p/2−1) rate.

Findings (real ES core, members stored normalized)

  • All 5 contingency factors certify by VALUE at 2-bit linear (ICC ≥ 0.96) — the existing palette/turbovec tenants already suffice per value. The §10 "the statistics survive the encoding" claim is confirmed.
  • α preserved within Δ ≤ 0.02 at ≥4-bit; the discriminant ρ wobbles ±0.15 at N=24 under coarse bins → read the cross-axis orthogonality at ≥6-bit (store budget < read budget).
  • Self-correction (the run falsified two of my own guesses): d_lambda2's initial ICC=0 was not heavy-tail and not near-constant — it was a tiny-magnitude (~1e-7) underflow of ICC's variance guard; storing the member normalized fixes it (1.00 at 2-bit). Both wrong hypotheses are retracted in the example headline.

The additive design (src/columns.rs)

A calibrated SoaMemberSpec set: the 5 factors map to existing tenants (2-bit linear, normalized, read ≥6-bit). The one genuinely additive member is inertia_buffer — the axis the resilience study (PR #509) measured orthogonal to topology (Spearman(λ₂, buffer) ≈ 0), which no existing connectivity column can carry. Spec only; promoting it into lance-graph-contract is a separate gated step.

Scope / honesty

  • Calibration tests the shared value-quantization principle with a generic min-max / rank quantizer mapping the tenants' bit budgets; it does not run helix's exact curve-placement.
  • src/columns.rs is a design spec, not a runtime encoder — no serialization, no spine edits.
  • Branch is one feature off current main; 71 lib tests; clippy -D warnings clean; fmt clean.

https://claude.ai/code/session_01CcpLeEC3XK8Eye53GKBVvi


Generated by Claude Code

Summary by CodeRabbit

  • New Features

    • Added computational examples for power grid calibration and topology analysis.
    • Introduced new library capabilities for grid resilience characterization and spectral basin computation.
  • Documentation

    • Added technical documentation describing the resilience study framework.
  • Chores

    • Resolved CI/CD test pipeline stability issues to prevent intermittent failures.

…er spec

Uses the deterministic study as ground truth to certify the SoA value tenants
with the certification-officer battery (ICC / Spearman / Cronbach alpha), and
emits the additive member design the substrate needs.

examples/calibrate.rs encodes the study 5-factor contingency matrix through a
linear palette member and a data-adaptive (turbovec/CAM-PQ) member across 2/4/6/8
bit, certifies per axis + construct structure (alpha-match, discriminant), prints
the schema oracle.

Findings (real ES core, members stored normalized):
- ALL 5 factors certify by VALUE at 2-bit linear (ICC >= 0.96) - existing
  palette/turbovec tenants already suffice per value.
- alpha preserved within 0.02 at >=4-bit; discriminant wobbles at N=24 under
  coarse bins => read cross-axis orthogonality at >=6-bit.
- Self-correction: d_lambda2 initial ICC=0 was NOT heavy-tail nor near-constant -
  a tiny-magnitude (~1e-7) underflow of the ICC variance guard; storing the member
  normalized fixes it (1.00 at 2-bit). Two earlier guesses falsified and retracted.

src/columns.rs: the calibrated SoaMemberSpec set (operator-authorized additive
design). The 5 factors map to existing tenants (2-bit linear, normalized, read
>=6-bit); the ONE genuinely additive member is inertia_buffer - the axis the
resilience study measured orthogonal to topology, which no existing connectivity
column carries. Spec only; nothing serializes or touches canonical_node. 3 tests.

71 lib tests; clippy -D warnings clean; fmt clean.
@coderabbitai

coderabbitai Bot commented Jun 16, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Two independent changes: the CI rust-test.yml test job gains a job-level RUSTFLAGS: "-C debuginfo=0 -C target-cpu=x86-64-v3" to suppress SIGBUS link failures, documented in TECH_DEBT.md. Separately, perturbation-sim gains a columns module (calibrated SoA member specs), an hhtl module (deterministic three-tier Cheeger-split topology keys and per-basin λ₂), two runnable examples (calibrate, hhtl_grid), and a CLAM/CHAODA framing document.

Changes

CI link-footprint fix

Layer / File(s) Summary
Workflow RUSTFLAGS override and tech debt record
.github/workflows/rust-test.yml, .claude/board/TECH_DEBT.md
The test job overrides RUSTFLAGS to -C debuginfo=0 -C target-cpu=x86-64-v3 with inline comments on cache-key side effects; TECH_DEBT.md appends a 2026-06-16 addendum under TD-CI-COVERAGE-MOLD-1 attributing the new SIGBUS onset to PR #507 and recording the fix.

perturbation-sim: HHTL keys, calibrated columns, and examples

Layer / File(s) Summary
SoA member spec contracts, constants, and crate wiring
crates/perturbation-sim/src/columns.rs, crates/perturbation-sim/src/lib.rs, crates/perturbation-sim/CLAM_CHAODA_FRAMING.md
Introduces Encoding enum, SoaMemberSpec struct, CONTINGENCY_FACTORS/INERTIA constants, study_member_specs(), and unit tests enforcing bit-budget and carrier constraints. lib.rs adds pub mod columns and re-exports. CLAM_CHAODA_FRAMING.md maps the column set to CLAM/CHAODA constructs.
HHTL key generation and basin λ₂ computation
crates/perturbation-sim/src/hhtl.rs
Adds HhtlKey (heel/hip/twig u16), Cheeger-split helpers, hhtl_keys (three-tier recursive partition), and basin_lambda2 (induced subgraph Laplacian λ₂ per key) with determinism and bridge-cut unit tests.
calibrate example: quantization sweep and certification
crates/perturbation-sim/Cargo.toml, crates/perturbation-sim/examples/calibrate.rs
Adds the calibrate example that builds a grid, computes five normalized factor columns, sweeps linear and rank-percentile quantizers across 2/4/6/8-bit budgets (ICC, Spearman, Cronbach's α), runs a per-factor certification oracle, and prints a findings narrative. Registers both new example targets in Cargo.toml.
hhtl_grid example: determinism check and basin table
crates/perturbation-sim/examples/hhtl_grid.rs
Adds the hhtl_grid example that constructs a synthetic or CSV grid, asserts hhtl_keys determinism by double-running, prints a per-key basin-size and λ₂ table, and reports the weakest basin.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

  • AdaWorldAPI/lance-graph#488: Applies the same ld SIGBUS / link-footprint fix pattern to .github/workflows/rust-test.yml for the coverage job; the main PR extends that fix to the plain test job.

Poem

🐇 Hop, hop, the linker crashed with a SIGBUS wail,
So debuginfo dropped to zero without fail.
New HHTL keys split the grid in three,
And calibrated columns live in SoA glee.
λ₂ measures basins, weak bridges beware—
A bunny fixed CI and left docs with flair! 🌿

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the primary changes: substrate calibration for perturbation-sim using a study as ground truth and introduction of calibrated SoA member specifications.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bb76568e91

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

Comment thread crates/perturbation-sim/src/columns.rs Outdated
claude added 2 commits June 16, 2026 16:38
…aming

1. columns.rs correction (operator): orthogonality to topology is STRUCTURAL, not
   earned. In the HHTL-OGAR GUID model topology lives in the KEY (HEEL/HIP/TWIG
   cascade tiers); magnitude axes are helix value members hung off it, so any helix
   value member is orthogonal to topology by the key/value split. The resilience
   study's Spearman(λ₂,buffer)≈0 CONFIRMS what the GUID addressing already enforces;
   it does not establish a new axis. inertia_buffer is reframed as one more
   helix-residue value slot (Encoding::HelixResidue added), not a novel orthogonal
   column. Field/doc semantics of `additive` updated accordingly.

2. CLAM_CHAODA_FRAMING.md: the resilience study framed as CLAM (cluster tree) +
   CHAODA (anomaly ensemble) on the electrical-distance manifold — grounded against
   real ndarray::hpc::clam APIs: Cluster{radius,cardinality,lfd} (clam.rs:106), Lfd
   (clam.rs:81), ClamTree::anomaly_scores (clam.rs:1517). The compartment hierarchy
   = CLAM tree; the fail-first exposure ranking = CHAODA anomaly score; the three
   orthogonal axes = CHAODA's diverse-detector ensemble, and the study's low
   Cronbach α IS CHAODA's non-redundancy design goal. Honest scope: structural
   correspondence onto real APIs [G]; perturbation-sim NOT wired to clam [H]; the
   falsifiable bridge (build ClamTree over the factor rows, correlate anomaly_scores
   vs exposure) named as the [H]→[G] probe.

71 lib tests; clippy -D warnings clean; fmt clean.
…arrier fit

P2 (columns.rs): the calibration's own oracle rejects 2-bit for infight on the
synthetic grid (2-bit ICC 0.93 < 0.95; → 4-bit), even though the ES core gives
0.96. infight is therefore MARGINAL and input-dependent, so the spec now advertises
its ROBUSTLY certified width (4-bit, ICC ≥ 0.99 on both inputs), not the width that
squeaks by on one favorable sample. `spec()` gains a store_bits param; the other
four factors stay 2-bit. Test + calibrate headline updated to the honest verdict.

Carriers (operator): the spec maps onto the two existing substrate tiers — 16 × 8-bit
ResidueEdge slots (structure read, read_bits ≤ 8) and 32 × 4-bit turbovec lanes
(pairwise turboquant; per-value store, store_bits ≤ 4 — infight's 4-bit is exactly
one lane). Six members fit either with headroom; new test fits_substrate_carriers
asserts it. No new layout — only slot assignments.

72 lib tests; clippy -D warnings clean; fmt clean.

Copy link
Copy Markdown
Owner Author

Fixed in 557e8dd8 — and the catch was sharper than a width typo. You ran calibrate without the data args, so it hit the synthetic grid where infight's 2-bit ICC is 0.93 < 0.95; the ES core gives 0.96. So 2-bit for infight is marginal and input-dependent — the spec was advertising a width that certifies on one favorable sample but not robustly.

columns.rs now advertises the robustly certified width: infight → 4-bit (ICC ≥ 0.99 on both synthetic and ES), the other four factors stay 2-bit. spec() gained a store_bits param; value_members_carry_their_robustly_certified_width and the calibrate headline were updated to the honest verdict (4 at 2-bit, infight marginal → 4-bit).

This also lands cleanly on the substrate's real carriers (operator note): the per-value store is a 4-bit turbovec lane (pairwise turboquant) — infight's 4-bit is exactly one lane — and the structure read is an 8-bit ResidueEdge slot. New test fits_substrate_carriers asserts store_bits ≤ 4, read_bits ≤ 8, and that all six members fit (6/16 ResidueEdges, 6/32 turbovec lanes).

72 lib tests, clippy -D warnings clean.


Generated by Claude Code

claude added 2 commits June 16, 2026 16:47
…ple)

Construct the HHTL (HEEL,HIP,TWIG) cascade address of each bus by recursive
binary Cheeger bisection of the Laplacian — a PURE, deterministic function of the
topology spectrum. Makes "topology IS the key" (the HHTL-OGAR correction) concrete:
value members hang off this key, orthogonal to it by the key/value split.

- src/hhtl.rs: hhtl_keys(grid) -> Vec<HhtlKey{heel,hip,twig}>; basin_lambda2 keyed
  by HHTL. 3 tests (determinism; the two weakly-bridged blocks split on HEEL; keys
  partition the nodes).
- examples/hhtl_grid.rs on the real ES core: 8 keyed basins reproducing the
  resilience study's compartments EXACTLY (sizes 29/21/5/45/49/53/27/32); the
  fail-first Spanish-seam basin gets the concrete deterministic address 1.0.1
  (λ₂=1.72e-6) = compartment 5 of PAPER §4.10. Verifies determinism in-run.

Binary-Cheeger tiers here; OGAR widens each tier to a 16-ary/256-centroid tile
(noted, not implemented). Zero-dep; no contract touch.

75 lib tests; clippy -D warnings clean; fmt clean.
…D-CI-COVERAGE-MOLD-1)

The `test` job has begun hitting the same disk/RSS link cliff already
mitigated on `test-with-coverage` (b56bb2c): `ld terminated with signal 7
[Bus error]` + an LLVM crash at the `cargo test --no-run` link step of
test_sql_query / intervene_counterfactual.

Root cause is link-footprint growth, NOT a logic break (a layout break would
fail an assertion, not SIGBUS at link). PR #507 (0c6ef02, +4055 lines across
causal-edge ce64-v2 layout + cognitive-shader-driver MailboxSoaOwner /
SurrealMailboxView) grew the integration-test object set enough to tip the
previously-marginal `test`-job link over the same ceiling. It surfaced on the
first full-workspace CI run after #507 (the intervening PRs are
root-excluded crates, so their CI never linked the post-#507 tree).

Fix: give the `test` job a job-level RUSTFLAGS with `-C debuginfo=0` (parity
with the coverage job). debuginfo carries no value in CI (no debugger is
attached); dropping it cut the coverage job's per-binary link ~930 MB -> ~252 MB
(-73%, measured in b56bb2c) and relieves both the mold/GNU-ld RSS and the disk
ceiling. mold is already installed on this job. Side effect: the job gets its
own Swatinem cache key (first run repopulates).

This is a fence (buys headroom), not a root reduction of #507's legitimate
codegen — documented as such in the TD-CI-COVERAGE-MOLD-1 ledger addendum,
including the secular-growth caveat and the separate (warns-not-fails)
intervene_counterfactual.rs deprecated-API debt.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

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

Inline comments:
In @.claude/board/TECH_DEBT.md:
- Line 179: The line at the start of the entry begins with "`#507`" which is being
interpreted as a Markdown ATX heading token and causing an MD018 lint error. Fix
this by either prefixing the line with descriptive text like "PR `#507`" instead
of starting directly with "`#507`", or by escaping the hash character. Either
approach will prevent the malformed heading parsing and eliminate the lint error
while maintaining readability.
- Around line 150-180: The 2026-06-16 addendum text has been inserted into the
middle of an existing tech debt entry, violating the append-only governance
policy for `.claude/board/*.md` files. Remove this inserted narrative from the
historical entry body, then create a new dated entry and prepend it to the top
of the TECH_DEBT.md file with the 2026-06-16 addendum content. Only edit
Status/Confidence fields of historical entries; all new information must go in
new prepended entries to preserve immutability of past narratives.

In `@crates/perturbation-sim/examples/calibrate.rs`:
- Around line 124-140: The code panics when the grid is degenerate (specifically
when m, the number of edges, equals 0) because k becomes 0, causing division by
zero in the expression m / k. Additionally, downstream operations like
eigenvector(1) and m - 1 will fail on empty or minimal grids. Add an upfront
validation guard before the symmetric_eigen call that checks the grid has a
minimum required shape (e.g., m > 0 and n > 1), and handle the degenerate case
appropriately by returning early or raising an error. This prevents panics from
occurring in the candidate selection logic and protects all subsequent
assumptions about grid structure.

In `@crates/perturbation-sim/src/hhtl.rs`:
- Around line 108-112: The basin_lambda2 function silently produces incorrect
results when the keys slice length does not match grid.n, corrupting basin
groupings. Add a precondition check at the start of basin_lambda2 (immediately
after the function signature) to validate that keys.len() equals grid.n, either
returning an error or panicking with a clear message if the lengths mismatch.
This prevents silent data corruption by failing fast at the API boundary.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 82104a56-5783-48c5-8367-bd71997b3ec0

📥 Commits

Reviewing files that changed from the base of the PR and between f7734ff and 35041fd.

📒 Files selected for processing (9)
  • .claude/board/TECH_DEBT.md
  • .github/workflows/rust-test.yml
  • crates/perturbation-sim/CLAM_CHAODA_FRAMING.md
  • crates/perturbation-sim/Cargo.toml
  • crates/perturbation-sim/examples/calibrate.rs
  • crates/perturbation-sim/examples/hhtl_grid.rs
  • crates/perturbation-sim/src/columns.rs
  • crates/perturbation-sim/src/hhtl.rs
  • crates/perturbation-sim/src/lib.rs

Comment on lines +150 to +180
**2026-06-16 addendum — the `test` job now hits the SAME cliff; fix extended to
it (branch `claude/ci-test-job-debuginfo0`).** The cliff this entry called out as
*"a 2/50 intermittent"* on the coverage job has now surfaced on the **plain
`test`** job: `ld terminated with signal 7 [Bus error]` + an LLVM crash dump at
the `cargo test --no-run` link step of `test_sql_query` / `intervene_counterfactual`.
Root-caused to a **link-footprint growth, not a logic break** (a layout break would
fail an assertion, not SIGBUS at link): **PR #507** (`0c6ef02c`, +4055/−1048 across
`causal-edge` edge.rs/layout.rs — the ce64-v2 layout — and `cognitive-shader-driver`
mailbox_soa.rs/driver.rs/planner_bridge.rs — MailboxSoaOwner + SurrealMailboxView,
D-PG-6) grew the object-file set linked by the lance-graph integration tests enough
to tip the previously-marginal `test`-job link over the same disk/RSS ceiling. It
surfaced on the first full-workspace CI run *after* #507 (the two PRs between, #509
and the perturbation-sim #511, are root-`exclude`d so their CI never linked the
post-#507 tree — which is why this is "the first failing PR" yet not its fault).
**This is a FENCE, not a root reduction:** it does not shrink #507's legitimate
codegen; it removes the dead `debuginfo=1` weight (CI never opens a debugger) to
buy headroom — exactly the b56bb2cd lever, now applied to the `test` job. **Fix:**
job-level `RUSTFLAGS: "-C debuginfo=0 -C target-cpu=x86-64-v3"` on `test` (parity
with `test-with-coverage`; mold already installed). Side effect: the `test` job
gets its own Swatinem cache key (first run repopulates). **Confirm** on the next
green `test` run. **Residual debt if it recurs after this:** the footprint is on a
secular upward trend (every cognitive-layer PR adds codegen) — the durable fix is a
bigger runner or splitting the integration-test link set, not repeatedly shaving
flags. Separately, #507 left `intervene_counterfactual.rs:133/165` calling the
**deprecated** `CausalEdge64::inference_type()` (the consumer-migration commit
`8131c480` lives on the unmerged `claude/continue-ndarray-x0Oaw`) — that WARNS, does
not fail (v1 default routes through the canonical mapping per I-LEGACY-API-FEATURE-
GATED); tracked here as a separate latent item, not fixed on this CI branch.
Cross-ref: `.github/workflows/rust-test.yml` (now both jobs at `debuginfo=0`); PR
#507 (`0c6ef02c`); `claude/continue-ndarray-x0Oaw` (the pending ce64-v2 consumer
migration).

@coderabbitai coderabbitai Bot Jun 16, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Keep board entries append-only by prepending a new row instead of editing historical body text.

Line 150-Line 180 inserts a new narrative addendum inside an existing debt item body. This breaks the board governance contract; please move this to a new prepended dated entry and leave historical prose immutable (except Status/Confidence fields).

As per coding guidelines, ".claude/board/*.md: Append-only governance files (.claude/board/): prepend new entries ... never edit past entries except Status/Confidence lines."

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 179-179: No space after hash on atx style heading

(MD018, no-missing-space-atx)

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

In @.claude/board/TECH_DEBT.md around lines 150 - 180, The 2026-06-16 addendum
text has been inserted into the middle of an existing tech debt entry, violating
the append-only governance policy for `.claude/board/*.md` files. Remove this
inserted narrative from the historical entry body, then create a new dated entry
and prepend it to the top of the TECH_DEBT.md file with the 2026-06-16 addendum
content. Only edit Status/Confidence fields of historical entries; all new
information must go in new prepended entries to preserve immutability of past
narratives.

Source: Coding guidelines

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Valid governance observation. Deferring the restructure (not bundling it into the #512 code-fix PR): moving the 31-line 2026-06-16 addendum out to a prepended dated entry is a board-hygiene reorganization, and it would separate the addendum from the CI-debuginfo entry it directly extends. Better done deliberately as its own board pass than churned alongside the perturbation-sim guards. Leaving this thread open as the tracked item.


Generated by Claude Code

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@AdaWorldAPI — understood, the deferral rationale is sound. Restructuring the entry as a standalone board-hygiene pass keeps it deliberately scoped and avoids churning the governance file alongside CI fixes.

Would you like me to open a GitHub issue to formally track the board-hygiene reorganization (moving the 2026-06-16 addendum from inside TD-CI-COVERAGE-MOLD-1's body to a new prepended dated entry)? That way it won't be lost in this PR thread once #511 merges.

Comment thread .claude/board/TECH_DEBT.md
Comment thread crates/perturbation-sim/examples/calibrate.rs
Comment thread crates/perturbation-sim/src/hhtl.rs
@AdaWorldAPI AdaWorldAPI merged commit c3dddfc into main Jun 16, 2026
6 checks passed
AdaWorldAPI pushed a commit that referenced this pull request Jun 16, 2026
PR #511 merged 2026-06-16 19:01 UTC (merge commit c3dddfc) on main —
+886/-0 additive substrate calibration in perturbation-sim:
examples/calibrate.rs (ICC/Spearman/Pearson/Cronbach α battery against
perturbation-sim as ground truth), src/columns.rs (calibrated SoaMemberSpec,
spec only), src/hhtl.rs, examples/hhtl_grid.rs, CLAM_CHAODA_FRAMING.md.

Headline locks:
  - 5 contingency factors certify by VALUE at 2-bit linear (ICC ≥ 0.96) —
    existing palette/turbovec tenants suffice; §10 "statistics survive the
    encoding" CONFIRMED.
  - α preserved within Δ ≤ 0.02 at ≥4-bit; read ≥6-bit for orthogonality.
  - inertia_buffer is the one genuinely additive member — orthogonal to
    topology per #509 (Spearman(λ₂, buffer) ≈ 0). Spec only; promotion
    gated by §0 anti-invention guardrail.
  - d_lambda2's ICC=0 was a variance-guard underflow at ~1e-7 magnitude;
    two prior guesses (heavy-tail / near-constant) retracted on the run.
  - Significance per Jirak n^(p/2−1) (I-NOISE-FLOOR-JIRAK).
  - Does NOT touch the operator-locked canonical_node.

Files updated this commit:
  - PR_ARC_INVENTORY.md  PREPEND #511 entry
  - LATEST_STATE.md      dated bullet + Recently-Shipped row
  - AGENT_LOG.md         PREPEND session entry covering both
                         odoo-rs SEED (cross-repo, commit ebfb2c3 on
                         AdaWorldAPI/odoo-rs main) AND this #511
                         board hygiene.

Retroactive cleanup (merge landed before the same-commit hygiene rule
could fire — the AGENT_LOG entry records this).

https://claude.ai/code/session_01Xzyc27Nx3f8WC5KzwfWfjx
AdaWorldAPI pushed a commit that referenced this pull request Jun 16, 2026
#511)

Addresses the open review findings on the merged #511:

- examples/calibrate.rs: guard degenerate grids up front. `k = 24.min(m)` is 0
  when m==0, so `m / k` panics (divide by zero); `eigenvector(1)` / `m - 1` also
  break on n<2. Exit cleanly with a message instead. (CodeRabbit Major)
- src/hhtl.rs: basin_lambda2 asserts keys.len() == grid.n. A mismatched slice
  silently produced wrong basin groupings + lambda2; fail fast at the API
  boundary. (CodeRabbit Major)
- .claude/board/TECH_DEBT.md: reflow the wrapped `#507` so it is not parsed as
  an ATX heading (markdownlint MD018). (CodeRabbit Minor)

Already-fixed before merge (no change needed): Codex P2 — `infight` is 4-bit
(columns.rs `spec("infight", 4, ...)`, the certified width per the §10 note).
Deferred: the TECH_DEBT.md append-only addendum-placement nit (CodeRabbit Major)
is a board-hygiene reorganization, left to a focused governance pass rather than
churned inside a code-fix PR.

Gates: fmt + clippy -D warnings + test green (75 lib tests) on the standalone
perturbation-sim crate.

https://claude.ai/code/session_016b33swuXE23hKtqxsHu9p1
AdaWorldAPI added a commit that referenced this pull request Jun 16, 2026
fix(perturbation-sim): degenerate-grid + key-cardinality guards (review #511)
AdaWorldAPI pushed a commit that referenced this pull request Jun 16, 2026
Two lance-graph PRs merged this evening, both touching the standalone
perturbation-sim crate:

#513 (merged 20:27:59 UTC, 8a3e335) — +1009/-2:
  - §0 promotion gate: GuardrailVerdict::RatifiedReuse for
    inertia_buffer (takes ResidueEdge INERTIA_SLOT=5, reuses existing
    tenant, no new axis → passes by reuse not waiver)
  - Probe 1: CAKES + CHAODA-lite over HHTL basins
  - Probe 2: witness arc as standing wave via Parseval
    (particle == wave to 0.00e0; O(N)-per-arc read-many amortization)
  - Probe 3: per-bus inertia (H) ingest path

#512 (merged 20:33:00 UTC, 1e23c41) — +591/-5:
  CODE FIXES (review of #511):
  - calibrate.rs: divide-by-zero guard on degenerate grid (CodeRabbit Major)
  - basin_lambda2: assert_eq!(keys.len(), grid.n, …) precondition,
    promoting silent corruption to loud panic (CodeRabbit Major)
  - TECH_DEBT.md MD018 reflow (CodeRabbit Minor)

  DOCTRINE (the structural delivery, NEW to this session):
  - .claude/knowledge/core-first-transcode-doctrine.md (218 LOC,
    mandatory-read)
  - 3 specialist agent cards: core-first-architect, core-gap-auditor,
    adapter-shaper
  - BOOT.md + README.md wires
  - EPIPHANIES entry (24 LOC)
  - CLAUDE.md doctrine wire-up (+21 LOC, content unread by this thread)

The core-first doctrine is likely directly aligned with the
ontology-first stance the operator locked in on odoo-rs this session
(Odoo's ontology runs natively in SurrealDB, codegen is the deferred
"cut tail"). Cross-doctrine reconciliation between
core-first-transcode-doctrine.md and the existing lab-vs-canonical
spine not yet inspected here — flagged in PR_ARC entry confidence line.

Retroactive batch hygiene — both merges landed before the same-commit
rule could fire. PR_ARC prepend (newest #512 above #513 above #511)
+ LATEST_STATE dated bullets + recent-shipped rows.

https://claude.ai/code/session_01Xzyc27Nx3f8WC5KzwfWfjx
AdaWorldAPI pushed a commit that referenced this pull request Jun 16, 2026
PR #511 merged 2026-06-16 19:01 UTC (merge commit c3dddfc) on main —
+886/-0 additive substrate calibration in perturbation-sim:
examples/calibrate.rs (ICC/Spearman/Pearson/Cronbach α battery against
perturbation-sim as ground truth), src/columns.rs (calibrated SoaMemberSpec,
spec only), src/hhtl.rs, examples/hhtl_grid.rs, CLAM_CHAODA_FRAMING.md.

Headline locks:
  - 5 contingency factors certify by VALUE at 2-bit linear (ICC ≥ 0.96) —
    existing palette/turbovec tenants suffice; §10 "statistics survive the
    encoding" CONFIRMED.
  - α preserved within Δ ≤ 0.02 at ≥4-bit; read ≥6-bit for orthogonality.
  - inertia_buffer is the one genuinely additive member — orthogonal to
    topology per #509 (Spearman(λ₂, buffer) ≈ 0). Spec only; promotion
    gated by §0 anti-invention guardrail.
  - d_lambda2's ICC=0 was a variance-guard underflow at ~1e-7 magnitude;
    two prior guesses (heavy-tail / near-constant) retracted on the run.
  - Significance per Jirak n^(p/2−1) (I-NOISE-FLOOR-JIRAK).
  - Does NOT touch the operator-locked canonical_node.

Files updated this commit:
  - PR_ARC_INVENTORY.md  PREPEND #511 entry
  - LATEST_STATE.md      dated bullet + Recently-Shipped row
  - AGENT_LOG.md         PREPEND session entry covering both
                         odoo-rs SEED (cross-repo, commit ebfb2c3 on
                         AdaWorldAPI/odoo-rs main) AND this #511
                         board hygiene.

Retroactive cleanup (merge landed before the same-commit hygiene rule
could fire — the AGENT_LOG entry records this).

https://claude.ai/code/session_01Xzyc27Nx3f8WC5KzwfWfjx
AdaWorldAPI pushed a commit that referenced this pull request Jun 16, 2026
Two lance-graph PRs merged this evening, both touching the standalone
perturbation-sim crate:

#513 (merged 20:27:59 UTC, 8a3e335) — +1009/-2:
  - §0 promotion gate: GuardrailVerdict::RatifiedReuse for
    inertia_buffer (takes ResidueEdge INERTIA_SLOT=5, reuses existing
    tenant, no new axis → passes by reuse not waiver)
  - Probe 1: CAKES + CHAODA-lite over HHTL basins
  - Probe 2: witness arc as standing wave via Parseval
    (particle == wave to 0.00e0; O(N)-per-arc read-many amortization)
  - Probe 3: per-bus inertia (H) ingest path

#512 (merged 20:33:00 UTC, 1e23c41) — +591/-5:
  CODE FIXES (review of #511):
  - calibrate.rs: divide-by-zero guard on degenerate grid (CodeRabbit Major)
  - basin_lambda2: assert_eq!(keys.len(), grid.n, …) precondition,
    promoting silent corruption to loud panic (CodeRabbit Major)
  - TECH_DEBT.md MD018 reflow (CodeRabbit Minor)

  DOCTRINE (the structural delivery, NEW to this session):
  - .claude/knowledge/core-first-transcode-doctrine.md (218 LOC,
    mandatory-read)
  - 3 specialist agent cards: core-first-architect, core-gap-auditor,
    adapter-shaper
  - BOOT.md + README.md wires
  - EPIPHANIES entry (24 LOC)
  - CLAUDE.md doctrine wire-up (+21 LOC, content unread by this thread)

The core-first doctrine is likely directly aligned with the
ontology-first stance the operator locked in on odoo-rs this session
(Odoo's ontology runs natively in SurrealDB, codegen is the deferred
"cut tail"). Cross-doctrine reconciliation between
core-first-transcode-doctrine.md and the existing lab-vs-canonical
spine not yet inspected here — flagged in PR_ARC entry confidence line.

Retroactive batch hygiene — both merges landed before the same-commit
rule could fire. PR_ARC prepend (newest #512 above #513 above #511)
+ LATEST_STATE dated bullets + recent-shipped rows.

https://claude.ai/code/session_01Xzyc27Nx3f8WC5KzwfWfjx
AdaWorldAPI pushed a commit that referenced this pull request Jun 17, 2026
PR #511 merged 2026-06-16 19:01 UTC (merge commit c3dddfc) on main —
+886/-0 additive substrate calibration in perturbation-sim:
examples/calibrate.rs (ICC/Spearman/Pearson/Cronbach α battery against
perturbation-sim as ground truth), src/columns.rs (calibrated SoaMemberSpec,
spec only), src/hhtl.rs, examples/hhtl_grid.rs, CLAM_CHAODA_FRAMING.md.

Headline locks:
  - 5 contingency factors certify by VALUE at 2-bit linear (ICC ≥ 0.96) —
    existing palette/turbovec tenants suffice; §10 "statistics survive the
    encoding" CONFIRMED.
  - α preserved within Δ ≤ 0.02 at ≥4-bit; read ≥6-bit for orthogonality.
  - inertia_buffer is the one genuinely additive member — orthogonal to
    topology per #509 (Spearman(λ₂, buffer) ≈ 0). Spec only; promotion
    gated by §0 anti-invention guardrail.
  - d_lambda2's ICC=0 was a variance-guard underflow at ~1e-7 magnitude;
    two prior guesses (heavy-tail / near-constant) retracted on the run.
  - Significance per Jirak n^(p/2−1) (I-NOISE-FLOOR-JIRAK).
  - Does NOT touch the operator-locked canonical_node.

Files updated this commit:
  - PR_ARC_INVENTORY.md  PREPEND #511 entry
  - LATEST_STATE.md      dated bullet + Recently-Shipped row
  - AGENT_LOG.md         PREPEND session entry covering both
                         odoo-rs SEED (cross-repo, commit ebfb2c3 on
                         AdaWorldAPI/odoo-rs main) AND this #511
                         board hygiene.

Retroactive cleanup (merge landed before the same-commit hygiene rule
could fire — the AGENT_LOG entry records this).

https://claude.ai/code/session_01Xzyc27Nx3f8WC5KzwfWfjx
AdaWorldAPI pushed a commit that referenced this pull request Jun 17, 2026
Two lance-graph PRs merged this evening, both touching the standalone
perturbation-sim crate:

#513 (merged 20:27:59 UTC, 8a3e335) — +1009/-2:
  - §0 promotion gate: GuardrailVerdict::RatifiedReuse for
    inertia_buffer (takes ResidueEdge INERTIA_SLOT=5, reuses existing
    tenant, no new axis → passes by reuse not waiver)
  - Probe 1: CAKES + CHAODA-lite over HHTL basins
  - Probe 2: witness arc as standing wave via Parseval
    (particle == wave to 0.00e0; O(N)-per-arc read-many amortization)
  - Probe 3: per-bus inertia (H) ingest path

#512 (merged 20:33:00 UTC, 1e23c41) — +591/-5:
  CODE FIXES (review of #511):
  - calibrate.rs: divide-by-zero guard on degenerate grid (CodeRabbit Major)
  - basin_lambda2: assert_eq!(keys.len(), grid.n, …) precondition,
    promoting silent corruption to loud panic (CodeRabbit Major)
  - TECH_DEBT.md MD018 reflow (CodeRabbit Minor)

  DOCTRINE (the structural delivery, NEW to this session):
  - .claude/knowledge/core-first-transcode-doctrine.md (218 LOC,
    mandatory-read)
  - 3 specialist agent cards: core-first-architect, core-gap-auditor,
    adapter-shaper
  - BOOT.md + README.md wires
  - EPIPHANIES entry (24 LOC)
  - CLAUDE.md doctrine wire-up (+21 LOC, content unread by this thread)

The core-first doctrine is likely directly aligned with the
ontology-first stance the operator locked in on odoo-rs this session
(Odoo's ontology runs natively in SurrealDB, codegen is the deferred
"cut tail"). Cross-doctrine reconciliation between
core-first-transcode-doctrine.md and the existing lab-vs-canonical
spine not yet inspected here — flagged in PR_ARC entry confidence line.

Retroactive batch hygiene — both merges landed before the same-commit
rule could fire. PR_ARC prepend (newest #512 above #513 above #511)
+ LATEST_STATE dated bullets + recent-shipped rows.

https://claude.ai/code/session_01Xzyc27Nx3f8WC5KzwfWfjx
AdaWorldAPI added a commit that referenced this pull request Jun 17, 2026
docs(board): retroactive batch hygiene for #510 / #511 / #512 / #513
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