Skip to content

plan: run four of the six FMA v4 probes, and correct what they contradict - #149

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/fma-v4-probes
Sep 7, 2026
Merged

AdaWorldAPI merged 1 commit into
mainfrom
claude/fma-v4-probes

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Summary

Adds §9 to claude-notes/plans/2026-09-06-fma-bake-v4-plan.md with the measured results of four probes, and regrades three §1 findings in place. Docs only — no producer, no bake, no release asset touched.

The probes existed to gate the decisions. Running them is what found that three findings were wrong, including one this plan asserted about its own mechanism.

Bake safety

Every tracked bake artifact (9 files, 140 MB — *.soa, *.soa.gz, *.splat, *.blocks) was copied out of tree before any work and verified byte-identical after: 9/9 OK. No producer was run, nothing was re-baked, and no GitHub release asset was touched. git status on this branch shows exactly one modified file.

What the probes found

probe status result
P-1 depth/DAG PARTIAL (3.0 only) replaces F-6's figures
P-2 divergence DONE confirms F-1
P-3 immutability DONE corrects F-1's mechanism
P-4 laterality PARTIAL (3.0 proxy) reshapes D-3a
P-5 4.0-vs-3.0 BLOCKED geometry not on disk
P-6 history DONE 56 → 2201 commits

F-2 is refuted (§9.3)

Both mint paths assert, in release:

  • NodeGuid::new: assert!(identity <= 0x00FF_FFFF, "identity must fit in 24 bits")
  • mint_for V2/V3: assert!(identity <= 0xFFFF, "v2/v3 identity must fit in 16 bits (no silent truncation)")

A row ≥ 65,536 panics naming its width; it does not wrap. F-2's "silent wrap" and §7's "closed by nothing on its own" are withdrawn. The audit did surface something real indirectly — the V1 guards have should_panic cover, the V2/V3 guards that supersede them had none — fixed upstream in AdaWorldAPI/lance-graph#1211.

F-6's figures are replaced, and its severity is unruled (§9.4)

"Max depth 16" is unverified. Measured on 3.0: 9 by shortest path, 12 by longest. Overflow past the key's 6 levels:

basis over share
min_depth 76 4.99%
max_depth 768 50.43%

A 10× spread decided by a question nobody has answered: does the cascade encode a concept's shortest ancestry or its deepest? With 536 multi-parent nodes those are different addresses for the same concept. D-4 cannot be sized until that is ruled.

F-1 survives, by a different mechanism (§9.2)

P-2: 223/223 shared concepts get different identities; classid/HEEL/HIP/TWIG/F4 identical in all 223 — the producers agree on where and disagree on which.

P-3 refutes the stated cause. Reversing the input changes 0 of 1368, because guid.rs sorts internally — file order never reaches k. The real defect is enumeration-index shift: removing one node changes 863 of 1367 (63%). So identity is a function of set membership, not input order — worse in practice, and unfixable by stabilising order. anchor.rs: 0/203 changed.

D-3a needs reshaping (§9.6)

0 of 579 composites have geometry — they are BP## sentinels and aggregates like "human body". 873 of 1,419 primitives are meshed; 8,611 rows have a meshed primitive and an abstract composite. So the edge cannot join two mesh nodes. But only 2,172 of 12,530 pairs also appear in part_of — 83% orthogonal, which is the strongest evidence yet that the table carries relations part_of does not.

The Tribonacci→Fibonacci vessel lineage did not happen (§9.7)

2201 commits searched. tribonacci appears twice, both GLSL cloud-shader lacunarity in the terrain renderer. The vessel constants were empirical clamps from the first commit that introduced them (CORE 0.55 → 0.62, then CAP/PCTL). No sequence was tried for radii and replaced.

Producer recency is now measurable (C-7 discharged): body.rs 2026-09-06 is youngest, fma/src/bin/{guid,anchor}.rs 2026-06-24 oldest.

Verification

Docs-only; nothing to build. Every number is a command output, produced by read-only analysis or by running the real guid/anchor binaries into /tmp. Caveats are carried in §9 rather than in this description: P-1 and P-4 ran on BodyParts3D 3.0 because the 4.0 sources the bake reads are not on disk, and anchor.rs needed a synthetic geometry directory (its identity path never reads vertex data, and the residue numbers it prints are excluded as meaningless).

🤖 Generated with Claude Code

https://claude.ai/code/session_012wrzeZAdwGYTCKoxamwQht


Generated by Claude Code

The probes were written to gate the decisions, so running them was the only way
to find that three findings were wrong. F-2 is refuted outright — both mint
paths assert with a message naming their width, so the silent truncation it
described cannot happen, though the audit did surface a real gap in that the
V2/V3 guards had no test proving they fire. F-6's max depth of 16 is unverified
and measures 9 or 12 depending on which path is counted, and its overflow is
either 5% or 50% of the graph depending on whether the cascade addresses a
concept's shortest or deepest ancestry, which nobody has ruled. F-1 survives
but not by the mechanism this plan claimed: input order cannot reach the mint
because the producer sorts internally, and the real defect is that identity is
a function of set membership, so one added concept re-mints most of the tree.
The laterality table turns out to carry no meshed composites at all, which
reshapes what consuming it can mean, and the Tribonacci-to-Fibonacci vessel
lineage does not appear anywhere in 2201 commits.

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

coderabbitai Bot commented Sep 7, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 15 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available. Your 68 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Essentials

Run ID: d651245e-addd-455a-9b50-ac77ff13d150

📥 Commits

Reviewing files that changed from the base of the PR and between 26f392a and 365fb92.

📒 Files selected for processing (1)
  • claude-notes/plans/2026-09-06-fma-bake-v4-plan.md

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

@cursor

cursor Bot commented Sep 7, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_b29dcdc4-5bd7-4d3e-a43d-81f5d6b62161)

@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review September 7, 2026 00:49
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

Copy link
Copy Markdown
Owner Author

Run test suite (ubuntu-latest) is red on a main-level blocker, not on this PR. No fix exists to port, so nothing is being pushed here.

Compiling v8 v149.4.0
error: could not find native static library `rusty_v8`, perhaps an -L flag is missing?
error: could not compile `v8` (lib) due to 1 previous error
error: command `cargo test --no-run --message-format json-render-diagnostics --tests --profile ci` exit 101

Why it is not this PR's. The diff is one markdown file — claude-notes/plans/2026-09-06-fma-bake-v4-plan.md. No Rust, no manifest, no CI config, no dependency. v8 is not reachable from anything this branch changes.

Two things this run establishes that are worth recording:

  1. Close the last 31 clippy findings so the newly-ungated -D warnings gate passes #147's fixes hold. The job compiled the entire workspace and got past clippy — bgz17, causal-edge, lance 11, lance-graph-catalog, quarto-lsp, quarto-publish all built. The clippy gate that was red before Close the last 31 clippy findings so the newly-ungated -D warnings gate passes #147 merged is green now.
  2. The failure is a link-time miss for a prebuilt artifact, not a compile error and not a flake. rusty_v8 is the static library the v8 crate expects to have been fetched; the message is "could not find", not a build failure inside it. That points at provisioning — the release-asset download, or an unset RUSTY_V8_ARCHIVE / V8_FROM_SOURCE — rather than at anything in the source tree. Stated as the reading of one log line, not as a diagnosis.

No re-run spent. A missing static library is deterministic; re-running a link step that cannot find a file it was never given is not a flake check, it is a wasted cycle. The failure has now reproduced across several PRs and head commits, which is the same evidence a re-run would produce.

What would actually resolve it is a CI change (the test-suite.yml provisioning question), which is outside this PR's scope and is the operator's call. Widening a docs-only PR to carry it would be the wrong shape.

This PR is otherwise clean: no merge conflict, and its content is a plan document recording measured probe results.


Generated by Claude Code

Copy link
Copy Markdown
Owner Author

The macOS job failed for a different reason than ubuntu — and that one is a real defect, now fixed in #150.

macOS did not hit the rusty_v8 wall. It linked, ran tests, and failed two of them (exit 100, not 101):

FAIL dto_bridge::tests::default_round_trip         assertion failed: j_bus.contains("\"gate\":2")
FAIL dto_bridge::tests::gate_decision_string_stable  left: 2  right: 1

Stale test expectations, not this PR's diff and not infrastructure. GateDecision's ordinals were swapped upstream on 2026-08-26 to make severity monotone in the byte (0=Flow, 1=Hold, 2=Block, matching ndarray's QualiaGateLevel; ISS-GATEDECISION-ORDINAL-COLLISION). These two assertions still carry the old 1=Block, 2=Hold. The conversion under test just forwards the contract's field, so the code is correct and the tests are twelve days behind.

Why nobody saw it: neither platform had ever reached the test step. ubuntu still dies linking rusty_v8; macOS died compiling posix_fadvise until #147 fixed that at 00:24Z tonight. macOS running these tests for the first time is what surfaced them — the same shape as this workspace's recent finding that un-gating a suite reveals what could never have run.

Fixed separately in #150 rather than here, so this PR stays docs-only.

Status of this PR is unchanged: still red on ubuntu for the rusty_v8 blocker described above, which #150 does not touch and which remains a CI-provisioning question.


Generated by Claude Code

Copy link
Copy Markdown
Owner Author

Status: this PR's red CI is not this PR's defect, and the fix is pushed elsewhere.

The failing check is Run test suite on both runners. Read from the logs rather than inferred:

  • ubuntu — error: could not find native static library rusty_v8 while compiling v8 v149.4.0, aborting cargo test --no-run with exit 101. It got there after passing rustfmt, custom lints and clippy, so the whole tree compiles up to that point.
  • macOS — links rusty_v8 fine, then fails quarto-system-runtime tests::test_no_v8_in_workspace_lockfile.

Same single cause from two directions: crates/cockpit-server/Cargo.toml carries deno_core and serde_v8, which the workspace's own guard test bans from the lockfile. They were re-added by a chore(resync) and are entirely unused. This PR changes one markdown file (+193/-2) and cannot have caused it; the condition is present on main.

I have not ported the fix into this branch, deliberately. It exists as f03d4565 on #150, which is the PR that owns it and is running CI now. Porting a Cargo.toml + Cargo.lock change into a docs-only branch would contradict this PR's own docs-only guarantee, and would collide with #150 on Cargo.lock for no gain — once #150 lands, this branch goes green with no change of its own. If #150 stalls rather than merges, I will port it here instead.

Bake safety re-verified at this checkpoint: the 9 tracked bake artifacts (140 MB) still match their pre-work checksums 9/9, and git status reports zero changes to any *.soa / *.soa.gz / *.splat / *.blocks file. No producer run, no release asset touched.


Generated by Claude Code

@AdaWorldAPI
AdaWorldAPI merged commit 3917d95 into main Sep 7, 2026
4 of 6 checks passed
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.

1 participant