feat(falcon): v1.122 — RPM-tracked harmonic notches + pre-arm check table (NOTCH-P01 + PREARM-P03) - #282
Merged
Merged
Conversation
…able (NOTCH-P01 + PREARM-P03) NOTCH-P01 — new relay-notch engine (PX4 IMU_GYRO_DNF / ArduPilot INS_HNTCH / Betaflight RPM-filter parity): per-motor biquad notches at the rotation fundamental + 2nd harmonic, centers tracking ACHIEVED eRPM via the same read_motor_rpm seam the FDI consumes (jess DD-024: bidir-DShot primary). Absent RPM => bit-exact unity bypass (no filtering is safer than a mistracked notch); per-notch Nyquist clamp. Measured (not asserted): >= 20 dB at the tracked fundamental across the hover-to-full band, sweep within 3 dB, < 10 deg added phase at the rate-loop crossover with the FULL 4-motor bank engaged. Kani NOTCH-K01..K03 drove two real fixes: operand sanitization (no intermediate can even COMPUTE a NaN from a poisoned state — CBMC's side-conditions now prove it) and the trig-free band_ok split (libm's rem_pio2_large unwinds >1500 iterations on symbolic args). falcon-core wires the bank into the CONTROL-path gyro ahead of the LPF (estimator stays raw); SimBackend gained rotor-LINE vibration + an rpm_telemetry switch; the closed-loop oracle shows the tracking notch cutting hover motor thrash to < 60% of the bypass baseline under injected rotor vibration (#270's regression-metric shape). PREARM-P03 — the pre-arm breadth as a TABLE (data, not conditionals): 19 rows spanning estimator/nav integrity, configuration consistency, hardware consistency, and safety state, each with a DISTINCT operator-readable STATUSTEXT reason. The legacy six checks are rows 0..=5 (always required); breadth rows gate once DECLARED (a bench without RC is not blocked by a link check it cannot satisfy; a declared row that fails ALWAYS blocks). Kani PREFLIGHT-K03/K04: the gate is exact and MONOTONE (failing any row of an Allowed table can never remain Allowed). Per-row pair tests are table-driven — coverage equals the table length by construction. FlightSupervisor populates every self-feedable row per step (ESC telemetry declare-on-first- sight), integrations feed the rest via set_check; command(Arm) now gates on the table. Cold-boot criterion rides the REAL PARAM-P03 two-slot NVM seam: defaults-fallback cannot arm (distinct reason); after save + genuine reload it can. Gate hygiene: relay-notch enrolled in kani.yml + CI clippy at birth. SWREQ-FALCON-NOTCH-P01 + SWREQ-FALCON-PREARM-P03 -> implemented (the verify PR follows per the two-commit rule). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
avrabe
added a commit
that referenced
this pull request
Jul 16, 2026
Code-free promotion per the two-commit rule. Evidence on merged main (fe29d37, impl PR #282 merged on a fully green rollup) plus a clean-room pass: 8 falsifiable claims verified cold, 8/8 CONFIRMED (suites, both Kani sets, gate wiring, the control-path filter placement, and the cold-boot NVM criterion's LoadOutcome assertions all independently re-checked). New FV-FALCON-NOTCH-001 + FV-FALCON-PREARM-003 (ids grepped free). SWREQ-FALCON-NOTCH-P01 + SWREQ-FALCON-PREARM-P03: implemented → verified. This closes the v1.117–v1.122 infrastructure ladder. Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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: (has-tag "v1.122")
Implements NOTCH-P01 + PREARM-P03 (→
implemented; verify PR follows per the two-commit rule) — the final rung of the v1.117–v1.122 infra ladder.NOTCH-P01 —
relay-notchThe PX4
IMU_GYRO_DNF/ ArduPilotINS_HNTCH/ Betaflight RPM-filter role: per-motor biquad notches (fundamental + 2nd harmonic) tracking achieved eRPM through the sameread_motor_rpmseam the rotor-out FDI consumes (jess DD-024: bidir-DShot primary, DroneCAN alternate).rem_pio2_large(>1500-iteration unwinding) — solved with the trig-freeband_oksplit, unit-pinned toset's engagement.rpm_telemetryswitch; the tracking notch cuts hover motor thrash to < 60% of the bypass baseline (gz plant hovers with an attitude limit-cycle (~1 rad/s roll/pitch, motor thrash 0.1↔1.0) #270's regression-metric shape; the full limit-cycle root-cause stays open in gz plant hovers with an attitude limit-cycle (~1 rad/s roll/pitch, motor thrash 0.1↔1.0) #270).PREARM-P03 — the check table
"Most crashes are prevented on the ground", as data: 19 rows (estimator/nav integrity incl. the GNSS-P02 divergence flag, config consistency incl. params-from-NVM and geofence sanity, hardware consistency incl. ESC-telemetry-alive and battery takeoff margin, safety state), each with a distinct operator STATUSTEXT reason.
Gates
cargo test: relay-notch 8 + relay-preflight 6 + falcon-core 56, 0 fail ·cargo kani: notch 3/3, preflight 4/4 (incl. the two new) · clippy-D warningsclean ·rivet validatePASS · relay-notch enrolled in kani.yml + CI clippy at birth.🤖 Generated with Claude Code
https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG