fix(bazel): //:falcon-cascade has not built since #393 — wire falcon-core - #408
Merged
Merged
Conversation
…core (#397) #393 rewrote the cascade component to wrap `falcon_core::FlightCore` instead of composing five stage interfaces. The CARGO build was updated. The BAZEL target was not, and still carried the comment from when it was true: # No control-crate dep: the cascade is pure orchestration. rust_wasm_component_bindgen(name = "falcon-cascade", ...) # no deps at all So it has failed with `unresolved import falcon_core` on every main commit since 2026-09-11, red and blocking nothing (Bazel is not a required context). THE CLOSURE. falcon-core's transitive closure is 15 crates; relay-math, relay-iekf and relay-mix-quad already had targets, so 12 were added. Their deps are GENERATED from each crate's Cargo.toml rather than hand-listed — a bazel dep set that drifts from the cargo one is the same defect class this target is being repaired for, and hand-maintaining twelve of them is how it would happen again. THE ONE OUT-OF-REPO DEPENDENCY. falcon-gnss-ubx needs embedded-io + embedded-io-async, which were not in the bazel crate universe — the only `@crates//` label used anywhere in BUILD.bazel is wit-bindgen. Both are pure no_std with no build script (embedded-io has no deps; embedded-io-async depends only on embedded-io), so they get the same http_archive treatment as libm, with the Cargo.lock checksums as sha256. Both needed `compile_data = ["README.md"]`: their lib.rs does `#![doc = include_str!("../README.md")]`, so without the README in the sandbox the crate does not compile at all. VERIFIED: all 19 targets bazel.yml builds now succeed, and //:falcon-cascade-fused fuses. A CORRECTION TO #397, WHICH I OVERCLAIMED. The issue said this also stopped the cascade's witness MC/DC coverage from being produced. It did not: //:falcon-cascade-coverage is `tags = ["manual"]` and is referenced by NO workflow, so CI has never built it — before #393 or after. The real regression is narrower: a red build gate and a fused image that stopped building. The coverage target not being in CI is a separate, older gap. It does now get further and fail differently — `duplicate export name cabi_realloc$2 already defined` out of the fuse — which is filed separately rather than folded in here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
…407) The artifact's first draft said the Bazel breakage stopped the cascade's witness MC/DC coverage being produced. It did not: //:falcon-cascade-coverage is tags=["manual"] and is in no workflow, so CI has never produced it — before #393 or after. The breakage was narrower; the coverage gap is older and separate, now #407. Kept as a correction inside the artifact rather than a silent edit, because attributing a long-standing absence to the most recent change is precisely the failure this requirement exists to prevent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
A comment describing a CURRENT breakage becomes false the moment it is fixed — the same defect class the comment is recording. Caught by the documentation audit, in this very diff, before it landed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
avrabe
enabled auto-merge (squash)
September 16, 2026 04:14
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Verify-Filter: (or (has-tag "verification-gate") (has-tag "wasm"))
Closes #397. Refs #407.
What was broken
#393 rewrote the cascade component to wrap
falcon_core::FlightCoreinstead ofcomposing five stage interfaces. The cargo build was updated. The bazel
target was not, and still carried the comment from when it was true:
unresolved import falcon_coreon every main commit since 2026-09-11 — red, andblocking nothing, because Bazel is not a required context.
The repair
12 new
rust_librarytargets (falcon-core's closure is 15 crates;relay-math, relay-iekf and relay-mix-quad already had one). Their deps are
generated from each crate's
Cargo.tomlrather than hand-listed — a bazeldep set that drifts from the cargo one is precisely the defect class this target
is being repaired for, and hand-maintaining twelve of them is how it happens
again.
embedded-io+embedded-io-asyncwere the only out-of-repo dependency inthe closure and were not in the bazel crate universe (the only
@crates//labelanywhere in BUILD.bazel is wit-bindgen). Both are pure no_std with no build
script, so they get the same
http_archivetreatment aslibm, with theCargo.lock checksums as sha256.
Both also needed
compile_data = ["README.md"]— theirlib.rsdoes#![doc = include_str!("../README.md")], so without the README in the sandboxthey do not compile at all.
Verified
bazel build //:falcon-cascade— succeedsbazel build //:falcon-cascade-fused— fusesbazel.ymlbuilds — succeedA correction to #397, which I overclaimed
The issue said this breakage also stopped the cascade's witness MC/DC
coverage being produced, and called that the real loss. That was wrong:
//:falcon-cascade-coverageistags = ["manual"]and is in no workflow,so CI has never built it — before #393 or after. The regression was narrower
than claimed; the coverage gap is older and separate, now #407.
The same correction is applied inside
SWREQ-RELAY-VGATE-P04, as a correctionrather than a silent edit — attributing a long-standing absence to the most
recent change is exactly the failure that requirement exists to prevent.
Uncovered one layer down
With the build fixed, the coverage target now reaches the fuse and fails
differently —
duplicate export name cabi_realloc$2— filed as #407 rather thanfolded in here.
🤖 Generated with Claude Code
https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG