Skip to content

docs: comprehensive README update with getting started guide#62

Open
EffortlessSteven wants to merge 2 commits into
mainfrom
docs/readme-update
Open

docs: comprehensive README update with getting started guide#62
EffortlessSteven wants to merge 2 commits into
mainfrom
docs/readme-update

Conversation

@EffortlessSteven
Copy link
Copy Markdown
Member

Summary

Comprehensive documentation update for OpenFlight.

Changes

  • README.md: Updated with full feature list, hardware/sim support, architecture overview, test pyramid, badges
  • docs/how-to/getting-started.md: Quick start guide (prerequisites, build, run, configure)
  • docs/reference/crate-index.md: Complete crate reference organized by category

…e index

- README.md: updated features, hardware, sims, architecture, testing
- docs/how-to/getting-started.md: build, run, configure quick start
- docs/reference/crate-index.md: full crate reference by category

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 1, 2026 03:09
@gemini-code-assist
Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@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, add credits to your account and enable them for code reviews in your settings.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 1, 2026

Warning

Rate limit exceeded

@EffortlessSteven has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 18 minutes and 38 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between cd2e54d and bbf5693.

📒 Files selected for processing (3)
  • README.md
  • docs/how-to/getting-started.md
  • docs/reference/crate-index.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch docs/readme-update

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.

@qodo-free-for-open-source-projects
Copy link
Copy Markdown

Review Summary by Qodo

Comprehensive documentation update with README, getting started guide, and crate index

📝 Documentation

Grey Divider

Walkthroughs

Description
• Comprehensive README overhaul with features, hardware support, and architecture overview
• New getting-started guide covering prerequisites, build, run, and configuration
• Complete crate index reference organized by functional area
• Added CI/MSRV/license badges and simulator/hardware compatibility tables
Diagram
flowchart LR
  A["README.md<br/>Features & Architecture"] --> B["Documentation<br/>Structure"]
  C["getting-started.md<br/>Build & Run Guide"] --> B
  D["crate-index.md<br/>Crate Reference"] --> B
  B --> E["User Onboarding<br/>& Reference"]
Loading

Grey Divider

File Changes

1. README.md 📝 Documentation +142/-45

Complete README restructure with features and architecture

• Expanded project title to OpenFlight (Flight Hub) with CI, MSRV, and license badges
• Added comprehensive features list covering real-time processing, FFB, profiles, plugins, and
 observability
• Created simulator support table with 12 simulators and their adapter crates
• Added hardware compatibility section referencing 2200+ controllers with tier ratings
• Restructured architecture section with ASCII diagram and ADR reference table
• Reorganized workspace crates into functional groups with crate index reference
• Added multi-layer test pyramid documentation
• Included Diátaxis-based documentation structure overview
• Enhanced build, validation, and contributing sections with specific commands

README.md


2. docs/how-to/getting-started.md 📝 Documentation +206/-0

New getting-started guide with build and configuration steps

• New comprehensive getting-started guide with doc metadata (doc_id, kind, status)
• Prerequisites section covering Rust 1.92.0 toolchain installation and platform dependencies
• Platform-specific setup instructions for Windows, Linux, and macOS
• Optional tools table including cargo-nextest, cargo-fuzz, and Nix dev shell
• Build from source instructions with debug, release, and RT-optimized profiles
• Service daemon (flightd) running instructions with log level configuration
• CLI (flightctl) usage examples for status, device listing, and profile management
• Device configuration section explaining HID enumeration and manifest matching
• Profile creation guide with TOML example and cascade ordering (Global → Simulator → Aircraft →
 Phase-of-Flight)
• Environment variables reference table
• Validation commands and next steps with cross-references

docs/how-to/getting-started.md


3. docs/reference/crate-index.md 📝 Documentation +163/-0

Complete crate index organized by functional area

• New complete crate reference with doc metadata (doc_id, kind, area, status)
• RT Core section documenting 4 crates for 250 Hz processing spine with zero-allocation constraint
• Hardware layer sections covering HID, device discovery, force feedback, and platform-specific
 backends
• HOTAS drivers section with 15 vendor-specific driver crates (Saitek, Thrustmaster, VKB, VirPil,
 etc.)
• Panel drivers section with 6 crates for flight instrument and Stream Deck integration
• Simulator adapters section with 19 crates covering MSFS, X-Plane, DCS, Prepar3D, and niche
 simulators
• Tracking & VR section with 5 crates for head-tracking and OpenXR integration
• Infrastructure section with 18 crates for profiles, rules, IPC, metrics, and plugins
• Applications section documenting daemon, CLI, GUI, and headless binaries
• Internal/testing section for test helpers and integration tests

docs/reference/crate-index.md


Grey Divider

Qodo Logo

@qodo-free-for-open-source-projects
Copy link
Copy Markdown

qodo-free-for-open-source-projects Bot commented Mar 1, 2026

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. FLIGHT_PROFILE_PATH mismatch🐞 Bug ✓ Correctness
Description
The new getting-started guide documents FLIGHT_PROFILE_PATH, but the repo’s env-var invariants
file (explicitly referenced as the complete list elsewhere) does not define it, creating conflicting
setup instructions. Users following the guide will likely set a variable that the project doesn’t
formally support/document centrally.
Code

docs/how-to/getting-started.md[R173-174]

+Place profiles in the configured profile directory (see `FLIGHT_PROFILE_PATH`
+environment variable) and load them with `flightctl profile load`.
Evidence
The getting-started doc introduces FLIGHT_PROFILE_PATH as a configuration knob, but the
repository’s env-var inventory (infra/local/invariants.yaml) does not include it, and other docs
state that inventory is the complete reference.

docs/how-to/getting-started.md[173-182]
docs/how-to/setup-dev-env.md[129-135]
infra/local/invariants.yaml[8-20]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`docs/how-to/getting-started.md` introduces `FLIGHT_PROFILE_PATH`, but the repo’s env-var inventory (`infra/local/invariants.yaml`) does not define it, while other docs claim that inventory is the complete list.
## Issue Context
This PR adds a primary onboarding doc; inconsistent env-var guidance is high-friction for new users.
## Fix Focus Areas
- docs/how-to/getting-started.md[173-182]
- infra/local/invariants.yaml[8-20]
- docs/how-to/setup-dev-env.md[129-135]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Ambiguous crate shorthand 🐞 Bug ✓ Correctness
Description
README’s crate listing uses shorthand entries like -thrustmaster / -ipc which are not
self-describing as crate names and are easy to misread as literal package identifiers. This reduces
copy/paste usability and conflicts with the workspace manifest, which uses full flight-* names.
Code

README.md[R118-122]

+| **HOTAS Drivers** | `flight-hotas-saitek`, `-thrustmaster`, `-vkb`, `-virpil`, `-winwing`, `-honeycomb`, `-brunner`, `-ch`, `-logitech`, `-simucube`, `-vpforce`, `-microsoft`, `-sony`, `-turtlebeach` |
+| **Panel Drivers** | `flight-panels-core`, `-saitek`, `-cougar`, `-goflight` |
+| **Sim Adapters** | `flight-simconnect`, `-xplane`, `-dcs-export`, `-prepar3d`, `-falcon-bms`, `-il2`, `-aerofly`, `-ac7-*`, `-warthunder`, `-ksp`, `-elite`, `-sim-racing` |
+| **Tracking & VR** | `flight-trackir`, `flight-opentrack`, `flight-openxr`, `flight-vr`, `flight-vr-overlay` |
+| **Infrastructure** | `flight-core`, `-ipc`, `-profile`, `-rules`, `-writers`, `-units`, `-tracing`, `-metrics`, `-session`, `-updater`, `-watchdog`, `-security`, `-process-detection`, `-replay`, `-cloud-profiles`, `-plugin` |
Evidence
The README table elides prefixes for many crates; the workspace manifest shows the canonical full
crate names (e.g., flight-hotas-thrustmaster, flight-ipc). Without an explicit legend, readers
can interpret the shorthand as actual crate names.

README.md[114-123]
Cargo.toml[44-86]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
README’s workspace crate table uses prefix-elision shorthand (e.g., `-thrustmaster`, `-ipc`) without an explicit legend, which is easy to misread as literal crate names.
## Issue Context
The README is a primary entry point; this section is likely used as a reference for `cargo` commands.
## Fix Focus Areas
- README.md[114-124]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. flight-ui described as GUI 🐞 Bug ✓ Correctness
Description
README and crate-index describe flight-ui as a GUI/graphical configuration interface, but the
flight-ui crate itself is described as a UI integration/types boundary and contains REST/WebSocket
support rather than an actual GUI application. This mismatch can cause incorrect expectations about
what exists in-repo today.
Code

README.md[R23-25]

+- **Plugin system** — WASM sandboxed, native fast-path, and service-tier plugins
+- **gRPC IPC** — daemon (`flightd`) + CLI (`flightctl`) + GUI (`flight-ui`)
+- **Observability** — structured tracing, Prometheus metrics, black-box flight recorder
Evidence
Docs explicitly label flight-ui as GUI/graphical interface; the crate’s own README/Cargo metadata
and module docs describe it as a library for UI integration/types and web/API plumbing rather than a
standalone GUI app.

README.md[23-25]
docs/reference/crate-index.md[147-154]
crates/flight-ui/Cargo.toml[1-13]
crates/flight-ui/README.md[1-10]
crates/flight-ui/src/lib.rs[4-10]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Docs currently describe `flight-ui` as a GUI / graphical configuration interface, but the `flight-ui` crate metadata describes a UI integration/types boundary and web/API support.
## Issue Context
This is likely to set incorrect expectations for new users and contributors about which components are shipped/available in the repo.
## Fix Focus Areas
- README.md[23-25]
- docs/reference/crate-index.md[147-154]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Comment thread docs/how-to/getting-started.md Outdated
Comment on lines +173 to +174
Place profiles in the configured profile directory (see `FLIGHT_PROFILE_PATH`
environment variable) and load them with `flightctl profile load`.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Action required

1. Flight_profile_path mismatch 🐞 Bug ✓ Correctness

The new getting-started guide documents FLIGHT_PROFILE_PATH, but the repo’s env-var invariants
file (explicitly referenced as the complete list elsewhere) does not define it, creating conflicting
setup instructions. Users following the guide will likely set a variable that the project doesn’t
formally support/document centrally.
Agent Prompt
## Issue description
`docs/how-to/getting-started.md` introduces `FLIGHT_PROFILE_PATH`, but the repo’s env-var inventory (`infra/local/invariants.yaml`) does not define it, while other docs claim that inventory is the complete list.

## Issue Context
This PR adds a primary onboarding doc; inconsistent env-var guidance is high-friction for new users.

## Fix Focus Areas
- docs/how-to/getting-started.md[173-182]
- infra/local/invariants.yaml[8-20]
- docs/how-to/setup-dev-env.md[129-135]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Documentation refresh for OpenFlight, adding a more complete top-level README plus user-facing reference/how-to docs to improve onboarding and navigation across the workspace.

Changes:

  • Expanded README.md with features, supported sims/hardware, architecture overview, testing pyramid, and links into docs/.
  • Added a “Getting Started” how-to guide covering prerequisites, build/run commands, and initial configuration.
  • Added a crate index reference doc grouping workspace crates by functional area.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 10 comments.

File Description
README.md Reworked landing-page docs: badges, feature/support matrices, architecture/testing overview, and doc links.
docs/how-to/getting-started.md New onboarding guide for building/running the daemon and using the CLI.
docs/reference/crate-index.md New categorized index intended to enumerate all workspace crates.

Comment on lines +124 to +129
# Show active profile
cargo run -p flight-cli -- profile show

# Load a profile
cargo run -p flight-cli -- profile load my-profile.toml
```
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

flightctl does not have a profile load subcommand, and the CLI expects profile apply <path> (from a JSON file) rather than loading a .toml. Please update these example commands to match the actual flightctl profile subcommands (apply/activate/show/etc.) so new users can follow the guide successfully.

Copilot uses AI. Check for mistakes.
Comment on lines +55 to +60
| Tool | Purpose |
|------|---------|
| `cargo-nextest` | Faster parallel test runner |
| `cargo-public-api` | API stability checks (`cargo xtask validate`) |
| `cargo-watch` | Automatic rebuild on save |
| `cargo-fuzz` | Fuzz testing protocol parsers |
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The Markdown tables in this doc start rows with || ..., which renders as an extra empty first column in GitHub Markdown. Use a single leading | for each row (including the header/separator) so the tables render correctly.

Copilot uses AI. Check for mistakes.
Comment on lines +24 to +28
| Crate | Description |
|-------|-------------|
| `flight-axis` | Axis processing engine — curves, deadzones, detents, mixers. Runs at 250 Hz. |
| `flight-scheduler` | Platform RT thread scheduling (MMCSS on Windows, rtkit on Linux). |
| `flight-bus` | Lock-free event bus for inter-component communication. |
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

These tables use || at the start of each row, which renders an unintended empty first column in GitHub Markdown. Switch to a single leading | for the header, separator, and each row so the table formats correctly.

Copilot uses AI. Check for mistakes.
Comment thread README.md
Comment on lines +29 to +33
| Simulator | Crate | Protocol |
|---|---|---|
| **Microsoft Flight Simulator** (MSFS 2020/2024) | `flight-simconnect` | SimConnect SDK |
| **X-Plane** (11/12) | `flight-xplane` | UDP + plugin |
| **DCS World** | `flight-dcs-export` | Export.lua |
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The tables in this README (e.g., Supported Simulators / ADR list / Workspace Crates / Testing) start rows with ||, which renders as an extra empty first column in GitHub Markdown. Use a single leading | for proper table formatting.

Copilot uses AI. Check for mistakes.
Comment thread README.md Outdated

[![CI](https://img.shields.io/github/actions/workflow/status/EffortlessMetrics/OpenFlight/ci.yml?branch=main&label=CI&logo=github&style=flat-square)](https://github.com/EffortlessMetrics/OpenFlight/actions)
[![MSRV](https://img.shields.io/badge/MSRV-1.92.0-blue?style=flat-square&logo=rust)](https://www.rust-lang.org)
[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-blue?style=flat-square)](LICENSE-MIT)
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The license badge text indicates dual licensing (MIT/Apache-2.0) but the badge link points only to LICENSE-MIT. Consider linking the badge to a neutral location (e.g., the License section or a combined licensing doc) or to both license files to avoid implying MIT-only.

Suggested change
[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-blue?style=flat-square)](LICENSE-MIT)
[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-blue?style=flat-square)](#license)

Copilot uses AI. Check for mistakes.
Comment thread docs/how-to/getting-started.md Outdated
Comment on lines +141 to +142
`compat/manifests/devices/` by vendor/product ID. The manifest defines axis
counts, button maps, and FFB capabilities.
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The path compat/manifests/devices/ referenced here doesn’t exist in the repo; device compatibility/manifests appear to live under compat/devices/ (and compat/compatibility.json). Please update this path so readers can actually find the manifests you’re describing.

Suggested change
`compat/manifests/devices/` by vendor/product ID. The manifest defines axis
counts, button maps, and FFB capabilities.
`compat/devices/` (indexed by `compat/compatibility.json`) by vendor/product ID.
The manifest defines axis counts, button maps, and FFB capabilities.

Copilot uses AI. Check for mistakes.
Comment thread docs/how-to/getting-started.md Outdated
Comment on lines +156 to +170
```toml
[metadata]
name = "My First Profile"
simulator = "msfs"

[axes.roll]
curve = "linear"
deadzone = 0.03
sensitivity = 1.0

[axes.pitch]
curve = "scurve"
deadzone = 0.05
sensitivity = 0.8
curvature = 0.3
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

This section says profiles are TOML files and the example is TOML, but existing documentation and the CLI describe profiles as JSON (e.g., flightctl profile apply <file>.json). Please align the file format and example here with the current profile schema/serialization used by the codebase to avoid conflicting guidance.

Suggested change
```toml
[metadata]
name = "My First Profile"
simulator = "msfs"
[axes.roll]
curve = "linear"
deadzone = 0.03
sensitivity = 1.0
[axes.pitch]
curve = "scurve"
deadzone = 0.05
sensitivity = 0.8
curvature = 0.3
```json
{
"metadata": {
"name": "My First Profile",
"simulator": "msfs"
},
"axes": {
"roll": {
"curve": "linear",
"deadzone": 0.03,
"sensitivity": 1.0
},
"pitch": {
"curve": "scurve",
"deadzone": 0.05,
"sensitivity": 0.8,
"curvature": 0.3
}
}
}

Copilot uses AI. Check for mistakes.
Comment thread docs/how-to/getting-started.md Outdated
Comment on lines +173 to +183
Place profiles in the configured profile directory (see `FLIGHT_PROFILE_PATH`
environment variable) and load them with `flightctl profile load`.

## Environment Variables

| Variable | Default | Description |
|----------|---------|-------------|
| `RUST_LOG` | `info` | Logging level (`trace`, `debug`, `info`, `warn`, `error`) |
| `FLIGHT_CONFIG_PATH` | Platform default | Path to configuration directory |
| `FLIGHT_PROFILE_PATH` | Platform default | Path to profile directory |

Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

FLIGHT_PROFILE_PATH is documented here, but it doesn’t appear in the repo’s environment-variable inventory (e.g., infra/local/invariants.yaml) or the local docker-compose env vars. If profiles live under FLIGHT_CONFIG_PATH, consider documenting that instead; otherwise add/define FLIGHT_PROFILE_PATH consistently across tooling and docs.

Suggested change
Place profiles in the configured profile directory (see `FLIGHT_PROFILE_PATH`
environment variable) and load them with `flightctl profile load`.
## Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `RUST_LOG` | `info` | Logging level (`trace`, `debug`, `info`, `warn`, `error`) |
| `FLIGHT_CONFIG_PATH` | Platform default | Path to configuration directory |
| `FLIGHT_PROFILE_PATH` | Platform default | Path to profile directory |
Place profiles under your configuration directory (by default
`$FLIGHT_CONFIG_PATH/profiles`) and load them with `flightctl profile load`.
## Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `RUST_LOG` | `info` | Logging level (`trace`, `debug`, `info`, `warn`, `error`) |
| `FLIGHT_CONFIG_PATH` | Platform default | Path to the configuration directory (profiles, rules, etc.) |

Copilot uses AI. Check for mistakes.
Comment thread docs/reference/crate-index.md Outdated

# Crate Index

Complete reference for every workspace crate in OpenFlight, grouped by
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

The introduction claims this is a complete reference for every workspace crate, but at least flight-psx is a workspace member (Cargo.toml includes crates/flight-psx) and is not listed below. Either add the missing crates (and keep this index in sync) or soften the claim to avoid being misleading.

Suggested change
Complete reference for every workspace crate in OpenFlight, grouped by
Reference index for the documented workspace crates in OpenFlight, grouped by

Copilot uses AI. Check for mistakes.
Comment thread README.md Outdated
- Panel and control hardware: `flight-panels`, `flight-panels-core`, `flight-panels-saitek`, `flight-panels-cougar`, `flight-hotas-saitek`, `flight-hotas-thrustmaster`, `flight-streamdeck`
- Safety, diagnostics, and observability: `flight-ffb`, `flight-watchdog`, `flight-blackbox`, `flight-tracing`, `flight-metrics`, `flight-tactile`
- Persistence and platform integration: `flight-writers`, `flight-updater`, `flight-security`, `flight-process-detection`, `flight-replay`
OpenFlight ships device manifests for **2 200+** controllers, sticks, yokes, pedals, throttles, and panels. See [`COMPATIBILITY.md`](COMPATIBILITY.md) for the full device matrix with tier ratings and test coverage.
Copy link

Copilot AI Mar 1, 2026

Choose a reason for hiding this comment

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

2 200+ is an unusual number format in English and can be misread. Consider using 2,200+ (or 2200+) for clarity.

Suggested change
OpenFlight ships device manifests for **2 200+** controllers, sticks, yokes, pedals, throttles, and panels. See [`COMPATIBILITY.md`](COMPATIBILITY.md) for the full device matrix with tier ratings and test coverage.
OpenFlight ships device manifests for **2,200+** controllers, sticks, yokes, pedals, throttles, and panels. See [`COMPATIBILITY.md`](COMPATIBILITY.md) for the full device matrix with tier ratings and test coverage.

Copilot uses AI. Check for mistakes.
- License badge now links to #license section instead of LICENSE-MIT
- Fix number format: 2 200+ -> 2,200+
- Replace non-existent flightctl profile load with profile apply
- Convert TOML profile example to JSON (matches codebase format)
- Fix device manifest path: compat/manifests/devices/ -> compat/devices/
- Replace non-existent FLIGHT_PROFILE_PATH with FLIGHT_CONFIG_PATH
- Soften crate-index intro from 'complete reference' to 'reference index'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@qodo-free-for-open-source-projects
Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: Test Suite (windows-latest, stable)

Failed stage: Run tests [❌]

Failed test name: snapshot_alpha_yoke_full_right_roll

Failure summary:

The GitHub Action failed during cargo test --all-features --workspace --lib --tests --exclude
flight-hub-examples because a snapshot test in the flight-hotas-honeycomb crate failed.
- Failed
test: snapshot_alpha_yoke_full_right_roll in tests/snapshot_tests.rs:64 (crate
flight-hotas-honeycomb).
- The insta snapshot alpha_yoke_full_right_roll did not match: the expected
roll value was 1.0, but the new result was 0.9995117 (floating-point value changed).
- This
triggered an insta panic (snapshot assertion for 'alpha_yoke_full_right_roll' failed) and the test
binary exited with code 101, causing the workflow step to fail.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

174:  RUST_BACKTRACE: 1
175:  targets: 
176:  components: rustfmt, clippy
177:  ##[endgroup]
178:  ##[group]Run : set $CARGO_HOME
179:  �[36;1m: set $CARGO_HOME�[0m
180:  �[36;1mecho CARGO_HOME=${CARGO_HOME:-"$USERPROFILE\.cargo"} >> $GITHUB_ENV�[0m
181:  shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
182:  env:
183:  CARGO_TERM_COLOR: always
184:  RUST_BACKTRACE: 1
185:  ##[endgroup]
186:  ##[group]Run : install rustup if needed on windows
187:  �[36;1m: install rustup if needed on windows�[0m
188:  �[36;1mif ! command -v rustup &>/dev/null; then�[0m
189:  �[36;1m  curl --proto '=https' --tlsv1.2 --retry 10 --retry-connrefused --location --silent --show-error --fail https://win.rustup.rs/x86_64 --output 'D:\a\_temp\rustup-init.exe'�[0m
190:  �[36;1m  'D:\a\_temp\rustup-init.exe' --default-toolchain none --no-modify-path -y�[0m
...

262:  �[36;1m  if rustc +stable --version --verbose | grep -q '^release: 1\.6[89]\.'; then�[0m
263:  �[36;1m    touch "D:\a\_temp"/.implicit_cargo_registries_crates_io_protocol || true�[0m
264:  �[36;1m    echo CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse >> $GITHUB_ENV�[0m
265:  �[36;1m  elif rustc +stable --version --verbose | grep -q '^release: 1\.6[67]\.'; then�[0m
266:  �[36;1m    touch "D:\a\_temp"/.implicit_cargo_registries_crates_io_protocol || true�[0m
267:  �[36;1m    echo CARGO_REGISTRIES_CRATES_IO_PROTOCOL=git >> $GITHUB_ENV�[0m
268:  �[36;1m  fi�[0m
269:  �[36;1mfi�[0m
270:  shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
271:  env:
272:  CARGO_TERM_COLOR: always
273:  RUST_BACKTRACE: 1
274:  CARGO_HOME: C:\Users\runneradmin\.cargo
275:  CARGO_INCREMENTAL: 0
276:  ##[endgroup]
277:  ##[group]Run : work around spurious network errors in curl 8.0
278:  �[36;1m: work around spurious network errors in curl 8.0�[0m
279:  �[36;1m# https://rust-lang.zulipchat.com/#narrow/stream/246057-t-cargo/topic/timeout.20investigation�[0m
...

447:  - D:\a\OpenFlight\OpenFlight\examples\Cargo.toml
448:  - D:\a\OpenFlight\OpenFlight\installer\Cargo.toml
449:  - D:\a\OpenFlight\OpenFlight\specs\Cargo.toml
450:  - D:\a\OpenFlight\OpenFlight\xtask\Cargo.toml
451:  ##[endgroup]
452:  ... Restoring cache ...
453:  No cache found.
454:  ##[group]Run cargo fmt --all -- --check
455:  �[36;1mcargo fmt --all -- --check�[0m
456:  shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
457:  env:
458:  CARGO_TERM_COLOR: always
459:  RUST_BACKTRACE: 1
460:  CARGO_HOME: C:\Users\runneradmin\.cargo
461:  CARGO_INCREMENTAL: 0
462:  CACHE_ON_FAILURE: false
463:  ##[endgroup]
464:  ##[group]Run cargo clippy --workspace --all-features --lib --tests --exclude flight-hub-examples
465:  �[36;1mcargo clippy --workspace --all-features --lib --tests --exclude flight-hub-examples�[0m
466:  shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
467:  env:
468:  CARGO_TERM_COLOR: always
469:  RUST_BACKTRACE: 1
470:  CARGO_HOME: C:\Users\runneradmin\.cargo
471:  CARGO_INCREMENTAL: 0
472:  CACHE_ON_FAILURE: false
473:  ##[endgroup]
...

585:  �[1m�[92m  Downloaded�[0m tonic-prost v0.14.5
586:  �[1m�[92m  Downloaded�[0m tonic-build v0.14.5
587:  �[1m�[92m  Downloaded�[0m typetag-impl v0.2.21
588:  �[1m�[92m  Downloaded�[0m toml v0.9.12+spec-1.1.0
589:  �[1m�[92m  Downloaded�[0m toml v0.8.23
590:  �[1m�[92m  Downloaded�[0m tokio-util v0.7.18
591:  �[1m�[92m  Downloaded�[0m serde_json v1.0.149
592:  �[1m�[92m  Downloaded�[0m windows-core v0.62.2
593:  �[1m�[92m  Downloaded�[0m untrusted v0.9.0
594:  �[1m�[92m  Downloaded�[0m toml_edit v0.22.27
595:  �[1m�[92m  Downloaded�[0m tinyvec_macros v0.1.1
596:  �[1m�[92m  Downloaded�[0m tinystr v0.8.2
597:  �[1m�[92m  Downloaded�[0m time-macros v0.2.27
598:  �[1m�[92m  Downloaded�[0m protoc-bin-vendored-linux-x86_32 v3.2.0
599:  �[1m�[92m  Downloaded�[0m thread_local v1.1.9
600:  �[1m�[92m  Downloaded�[0m thiserror-impl v2.0.18
601:  �[1m�[92m  Downloaded�[0m thiserror v2.0.18
602:  �[1m�[92m  Downloaded�[0m textwrap v0.16.2
...

647:  �[1m�[92m  Downloaded�[0m toml_datetime v0.6.11
648:  �[1m�[92m  Downloaded�[0m tokio-tungstenite v0.28.0
649:  �[1m�[92m  Downloaded�[0m tokio-rustls v0.26.4
650:  �[1m�[92m  Downloaded�[0m tokio-macros v2.6.0
651:  �[1m�[92m  Downloaded�[0m simd-adler32 v0.3.8
652:  �[1m�[92m  Downloaded�[0m signature v2.2.0
653:  �[1m�[92m  Downloaded�[0m shlex v1.3.0
654:  �[1m�[92m  Downloaded�[0m sha1 v0.10.6
655:  �[1m�[92m  Downloaded�[0m serde_urlencoded v0.7.1
656:  �[1m�[92m  Downloaded�[0m serde_spanned v1.0.4
657:  �[1m�[92m  Downloaded�[0m scopeguard v1.2.0
658:  �[1m�[92m  Downloaded�[0m rayon-core v1.13.0
659:  �[1m�[92m  Downloaded�[0m rayon v1.11.0
660:  �[1m�[92m  Downloaded�[0m quote v1.0.44
661:  �[1m�[92m  Downloaded�[0m quinn-udp v0.5.14
662:  �[1m�[92m  Downloaded�[0m quick-error v1.2.3
663:  �[1m�[92m  Downloaded�[0m pulldown-cmark-to-cmark v22.0.0
...

665:  �[1m�[92m  Downloaded�[0m num-bigint v0.4.6
666:  �[1m�[92m  Downloaded�[0m mio v1.1.1
667:  �[1m�[92m  Downloaded�[0m itertools v0.13.0
668:  �[1m�[92m  Downloaded�[0m iri-string v0.7.10
669:  �[1m�[92m  Downloaded�[0m icu_collections v2.1.1
670:  �[1m�[92m  Downloaded�[0m h2 v0.4.13
671:  �[1m�[92m  Downloaded�[0m fancy-regex v0.17.0
672:  �[1m�[92m  Downloaded�[0m derive_more-impl v2.1.1
673:  �[1m�[92m  Downloaded�[0m crossbeam-channel v0.5.15
674:  �[1m�[92m  Downloaded�[0m windows-sys v0.61.2
675:  �[1m�[92m  Downloaded�[0m cc v1.2.56
676:  �[1m�[92m  Downloaded�[0m base64 v0.22.1
677:  �[1m�[92m  Downloaded�[0m toml_parser v1.0.9+spec-1.1.0
678:  �[1m�[92m  Downloaded�[0m sharded-slab v0.1.7
679:  �[1m�[92m  Downloaded�[0m serde_yaml_ng v0.10.0
680:  �[1m�[92m  Downloaded�[0m serde_path_to_error v0.1.20
681:  �[1m�[92m  Downloaded�[0m serde_derive v1.0.228
...

885:  �[1m�[92m  Downloaded�[0m crossbeam v0.8.4
886:  �[1m�[92m  Downloaded�[0m ciborium-ll v0.2.2
887:  �[1m�[92m  Downloaded�[0m autocfg v1.5.0
888:  �[1m�[92m  Downloaded�[0m anstyle-query v1.1.5
889:  �[1m�[92m  Downloaded�[0m anstream v0.6.21
890:  �[1m�[92m  Downloaded�[0m alloca v0.4.0
891:  �[1m�[92m  Downloaded�[0m adler2 v2.0.1
892:  �[1m�[92m  Downloaded�[0m windows v0.62.2
893:  �[1m�[92m Downloading�[0m crates ...
894:  �[1m�[92m  Downloaded�[0m nix v0.31.2
895:  �[1m�[92m   Compiling�[0m proc-macro2 v1.0.106
896:  �[1m�[92m   Compiling�[0m quote v1.0.44
897:  �[1m�[92m   Compiling�[0m unicode-ident v1.0.24
898:  �[1m�[92m   Compiling�[0m serde_core v1.0.228
899:  �[1m�[92m   Compiling�[0m serde v1.0.228
900:  �[1m�[92m   Compiling�[0m thiserror v2.0.18
901:  �[1m�[92m   Compiling�[0m getrandom v0.3.4
...

915:  �[1m�[92m    Checking�[0m pin-project-lite v0.2.17
916:  �[1m�[92m   Compiling�[0m version_check v0.9.5
917:  �[1m�[92m    Checking�[0m log v0.4.29
918:  �[1m�[92m    Checking�[0m tracing-core v0.1.36
919:  �[1m�[92m   Compiling�[0m typenum v1.19.0
920:  �[1m�[92m   Compiling�[0m generic-array v0.14.7
921:  �[1m�[92m    Checking�[0m fnv v1.0.7
922:  �[1m�[92m    Checking�[0m regex-syntax v0.8.10
923:  �[1m�[92m    Checking�[0m rand_core v0.9.5
924:  �[1m�[92m    Checking�[0m fastrand v2.3.0
925:  �[1m�[92m    Checking�[0m bitflags v2.11.0
926:  �[1m�[92m    Checking�[0m bit-vec v0.8.0
927:  �[1m�[92m    Checking�[0m memchr v2.8.0
928:  �[1m�[92m    Checking�[0m bit-set v0.8.0
929:  �[1m�[92m    Checking�[0m wait-timeout v0.2.1
930:  �[1m�[92m    Checking�[0m quick-error v1.2.3
931:  �[1m�[92m    Checking�[0m rand_xorshift v0.4.0
932:  �[1m�[92m    Checking�[0m unarray v0.1.4
933:  �[1m�[92m    Checking�[0m itoa v1.0.17
934:  �[1m�[92m   Compiling�[0m crossbeam-utils v0.8.21
935:  �[1m�[92m   Compiling�[0m anyhow v1.0.102
936:  �[1m�[92m    Checking�[0m windows-targets v0.53.5
937:  �[1m�[92m    Checking�[0m windows-sys v0.60.2
938:  �[1m�[92m   Compiling�[0m semver v1.0.27
939:  �[1m�[92m   Compiling�[0m rustc_version v0.4.1
940:  �[1m�[92m    Checking�[0m bytes v1.11.1
941:  �[1m�[92m    Checking�[0m socket2 v0.6.2
942:  �[1m�[92m   Compiling�[0m heapless v0.7.17
943:  �[1m�[92m    Checking�[0m foldhash v0.2.0
944:  �[1m�[92m    Checking�[0m allocator-api2 v0.2.21
945:  �[1m�[92m   Compiling�[0m serde_derive v1.0.228
946:  �[1m�[92m   Compiling�[0m thiserror-impl v2.0.18
947:  �[1m�[92m   Compiling�[0m tracing-attributes v0.1.31
...

1178:  �[1m�[92m   Compiling�[0m protoc-bin-vendored-linux-s390_64 v3.2.0
1179:  �[1m�[92m   Compiling�[0m protoc-bin-vendored-linux-x86_64 v3.2.0
1180:  �[1m�[92m   Compiling�[0m protoc-bin-vendored-linux-x86_32 v3.2.0
1181:  �[1m�[92m   Compiling�[0m protoc-bin-vendored-macos-aarch_64 v3.2.0
1182:  �[1m�[92m   Compiling�[0m protoc-bin-vendored-linux-aarch_64 v3.2.0
1183:  �[1m�[92m   Compiling�[0m protoc-bin-vendored-macos-x86_64 v3.2.0
1184:  �[1m�[92m   Compiling�[0m protoc-bin-vendored-linux-ppcle_64 v3.2.0
1185:  �[1m�[92m   Compiling�[0m protoc-bin-vendored-win32 v3.2.0
1186:  �[1m�[92m   Compiling�[0m protoc-bin-vendored v3.2.0
1187:  �[1m�[92m    Checking�[0m tracing-subscriber v0.3.22
1188:  �[1m�[92m   Compiling�[0m tonic-prost-build v0.14.5
1189:  �[1m�[92m    Checking�[0m tokio-tungstenite v0.28.0
1190:  �[1m�[92m    Checking�[0m axum-core v0.5.6
1191:  �[1m�[92m    Checking�[0m serde_urlencoded v0.7.1
1192:  �[1m�[92m    Checking�[0m futures-executor v0.3.32
1193:  �[1m�[92m    Checking�[0m serde_path_to_error v0.1.20
1194:  �[1m�[92m    Checking�[0m matchit v0.8.4
...

1386:  �[1m�[96m--> �[0mcrates\flight-watchdog\src\lib.rs:1134:9
1387:  �[1m�[96m|�[0m
1388:  �[1m�[96m1134�[0m �[1m�[96m|�[0m         config.enable_nan_guards = true;
1389:  �[1m�[96m|�[0m         �[1m�[93m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^�[0m
1390:  �[1m�[96m|�[0m
1391:  �[1m�[92mnote�[0m: consider initializing the variable with `WatchdogConfig { enable_nan_guards: true, ..Default::default() }` and removing relevant reassignments
1392:  �[1m�[96m--> �[0mcrates\flight-watchdog\src\lib.rs:1133:9
1393:  �[1m�[96m|�[0m
1394:  �[1m�[96m1133�[0m �[1m�[96m|�[0m         let mut config = WatchdogConfig::default();
1395:  �[1m�[96m|�[0m         �[1m�[92m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^�[0m
1396:  �[1m�[96m= �[0m�[1m�[97mhelp�[0m: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.93.0/index.html#field_reassign_with_default
1397:  �[1m�[96m= �[0m�[1m�[97mnote�[0m: `#[warn(clippy::field_reassign_with_default)]` on by default
1398:  �[1m�[93mwarning�[0m�[1m�[97m: field assignment outside of initializer for an instance created with Default::default()�[0m
1399:  �[1m�[96m--> �[0mcrates\flight-watchdog\src\lib.rs:1158:9
1400:  �[1m�[96m|�[0m
1401:  �[1m�[96m1158�[0m �[1m�[96m|�[0m         config.max_consecutive_failures = 2; // Lower threshold for testing
1402:  �[1m�[96m|�[0m         �[1m�[93m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^�[0m
1403:  �[1m�[96m|�[0m
1404:  �[1m�[92mnote�[0m: consider initializing the variable with `WatchdogConfig { max_consecutive_failures: 2, ..Default::default() }` and removing relevant reassignments
1405:  �[1m�[96m--> �[0mcrates\flight-watchdog\src\lib.rs:1157:9
...

1603:  �[1m�[93mwarning�[0m: `flight-axis` (test "detent_integration") generated 9 warnings
1604:  �[1m�[93mwarning[E0133]�[0m�[1m�[97m: call to unsafe function `flight_axis::Node::step_soa` is unsafe and requires unsafe block�[0m
1605:  �[1m�[96m--> �[0mcrates\flight-axis\tests\detent_tests.rs:25:5
1606:  �[1m�[96m|�[0m
1607:  �[1m�[96m25�[0m �[1m�[96m|�[0m     node.step_soa(frame, state_ptr);
1608:  �[1m�[96m|�[0m     �[1m�[93m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^�[0m �[1m�[93mcall to unsafe function�[0m
1609:  �[1m�[96m|�[0m
1610:  �[1m�[96m= �[0m�[1m�[97mnote�[0m: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
1611:  �[1m�[96m= �[0m�[1m�[97mnote�[0m: consult the function's documentation for information on how to avoid undefined behavior
1612:  �[1m�[92mnote�[0m: an unsafe function restricts its caller, but its body is safe by default
1613:  �[1m�[96m--> �[0mcrates\flight-axis\tests\detent_tests.rs:23:1
1614:  �[1m�[96m|�[0m
1615:  �[1m�[96m23�[0m �[1m�[96m|�[0m unsafe fn process_frame_soa(node: &DetentNode, frame: &mut AxisFrame, state: &mut DetentState) {
1616:  �[1m�[96m|�[0m �[1m�[92m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^�[0m
1617:  �[1m�[96m= �[0m�[1m�[97mnote�[0m: `#[warn(unsafe_op_in_unsafe_fn)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
1618:  �[1m�[97mFor more information about this error, try `rustc --explain E0133`.�[0m
1619:  �[1m�[93mwarning�[0m: `flight-axis` (test "detent_tests") generated 1 warning (run `cargo clippy --fix --test "detent_tests" -p flight-axis` to apply 1 suggestion)
...

1788:  �[1m�[96m--> �[0mcrates\flight-core\src\lib.rs:131:30
1789:  �[1m�[96m|�[0m
1790:  �[1m�[96m131�[0m �[1m�[96m|�[0m         let r: Result<u32> = Ok(42);
1791:  �[1m�[96m|�[0m                              �[1m�[96m^^^^^^�[0m
1792:  �[1m�[96m= �[0m�[1m�[97mhelp�[0m: for further information visit https://rust-lang.github.io/rust-clippy/rust-1.93.0/index.html#unnecessary_literal_unwrap
1793:  �[1m�[96m= �[0m�[1m�[97mnote�[0m: `#[warn(clippy::unnecessary_literal_unwrap)]` on by default
1794:  �[1m�[93mwarning�[0m�[1m�[97m: used `unwrap_err()` on `Err` value�[0m
1795:  �[1m�[96m--> �[0mcrates\flight-core\src\lib.rs:136:17
1796:  �[1m�[96m|�[0m
1797:  �[1m�[96m136�[0m �[1m�[96m|�[0m         assert!(e.unwrap_err().to_string().contains("Rules validation"));
1798:  �[1m�[96m|�[0m                 �[1m�[93m^^^^^^^^^^^^^^�[0m
1799:  �[1m�[96m|�[0m
1800:  �[1m�[96mhelp�[0m: remove the `Err` and `unwrap_err()`
1801:  �[1m�[96m--> �[0mcrates\flight-core\src\lib.rs:134:30
1802:  �[1m�[96m|�[0m
1803:  �[1m�[96m134�[0m �[1m�[96m|�[0m         let e: Result<u32> = Err(FlightError::RulesValidation("bad rule".to_string()));
1804:  �[1m�[96m|�[0m                              �[1m�[96m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^�[0m
...

2183:  �[36;1m# Apply strict warnings to core crates that must maintain high quality�[0m
2184:  �[36;1mcargo clippy -p flight-core --lib -- $STRICT_FLAGS�[0m
2185:  �[36;1mcargo clippy -p flight-axis --lib -- $STRICT_FLAGS�[0m
2186:  �[36;1mcargo clippy -p flight-bus --lib -- $STRICT_FLAGS�[0m
2187:  �[36;1mcargo clippy -p flight-hid --lib -- $STRICT_FLAGS�[0m
2188:  �[36;1mcargo clippy -p flight-ipc --lib -- $STRICT_FLAGS�[0m
2189:  �[36;1mcargo clippy -p flight-service --lib -- $STRICT_FLAGS�[0m
2190:  �[36;1mcargo clippy -p flight-simconnect --lib -- $STRICT_FLAGS�[0m
2191:  �[36;1mcargo clippy -p flight-panels --lib -- $STRICT_FLAGS�[0m
2192:  shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
2193:  env:
2194:  CARGO_TERM_COLOR: always
2195:  RUST_BACKTRACE: 1
2196:  CARGO_HOME: C:\Users\runneradmin\.cargo
2197:  CARGO_INCREMENTAL: 0
2198:  CACHE_ON_FAILURE: false
2199:  ##[endgroup]
...

2207:  �[1m�[92m   Compiling�[0m num-traits v0.2.19
2208:  �[1m�[92m    Checking�[0m crossbeam-epoch v0.9.18
2209:  �[1m�[92m    Checking�[0m aho-corasick v1.1.4
2210:  �[1m�[92m    Checking�[0m mio v1.1.1
2211:  �[1m�[92m    Checking�[0m hashbrown v0.16.1
2212:  �[1m�[92m    Checking�[0m regex-automata v0.4.14
2213:  �[1m�[92m    Checking�[0m indexmap v2.13.0
2214:  �[1m�[92m    Checking�[0m crossbeam-deque v0.8.6
2215:  �[1m�[92m    Checking�[0m crossbeam-channel v0.5.15
2216:  �[1m�[92m    Checking�[0m crossbeam-queue v0.3.12
2217:  �[1m�[92m    Checking�[0m tempfile v3.26.0
2218:  �[1m�[92m    Checking�[0m crossbeam v0.8.4
2219:  �[1m�[92m    Checking�[0m flight-metrics v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-metrics)
2220:  �[1m�[92m    Checking�[0m regex v1.12.3
2221:  �[1m�[92m   Compiling�[0m serde_derive v1.0.228
2222:  �[1m�[92m   Compiling�[0m thiserror-impl v2.0.18
2223:  �[1m�[92m   Compiling�[0m windows-implement v0.60.2
2224:  �[1m�[92m   Compiling�[0m windows-interface v0.59.3
2225:  �[1m�[92m   Compiling�[0m tracing-attributes v0.1.31
2226:  �[1m�[92m    Checking�[0m windows-core v0.62.2
2227:  �[1m�[92m   Compiling�[0m tokio-macros v2.6.0
2228:  �[1m�[92m    Checking�[0m thiserror v2.0.18
2229:  �[1m�[92m    Checking�[0m windows-collections v0.3.2
...

2449:  �[1m�[92m    Checking�[0m flight-panels-saitek v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-panels-saitek)
2450:  �[1m�[92m    Checking�[0m flight-panels v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-panels)
2451:  �[1m�[92m    Finished�[0m `dev` profile [unoptimized + debuginfo] target(s) in 1.19s
2452:  ##[group]Run echo "🔍 Running file descriptor safety tests for public API crates..."
2453:  �[36;1mecho "🔍 Running file descriptor safety tests for public API crates..."�[0m
2454:  �[36;1m# Test that public API crates use typed file descriptors instead of RawFd�[0m
2455:  �[36;1mcargo test -p flight-hid fd_safety_tests�[0m
2456:  �[36;1mcargo test -p flight-ipc fd_safety_tests�[0m
2457:  �[36;1mcargo test -p flight-service fd_safety_tests�[0m
2458:  shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
2459:  env:
2460:  CARGO_TERM_COLOR: always
2461:  RUST_BACKTRACE: 1
2462:  CARGO_HOME: C:\Users\runneradmin\.cargo
2463:  CARGO_INCREMENTAL: 0
2464:  CACHE_ON_FAILURE: false
2465:  ##[endgroup]
2466:  🔍 Running file descriptor safety tests for public API crates...
2467:  �[1m�[92m   Compiling�[0m windows-link v0.2.1
2468:  �[1m�[92m   Compiling�[0m serde_core v1.0.228
2469:  �[1m�[92m   Compiling�[0m cfg-if v1.0.4
2470:  �[1m�[92m   Compiling�[0m once_cell v1.21.3
2471:  �[1m�[92m   Compiling�[0m windows-sys v0.61.2
2472:  �[1m�[92m   Compiling�[0m thiserror v2.0.18
2473:  �[1m�[92m   Compiling�[0m typenum v1.19.0
...

2541:  �[1m�[92m   Compiling�[0m flight-security v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-security)
2542:  �[1m�[92m   Compiling�[0m flight-blackbox v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-blackbox)
2543:  �[1m�[92m   Compiling�[0m flight-session v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-session)
2544:  �[1m�[92m   Compiling�[0m toml v0.8.23
2545:  �[1m�[92m   Compiling�[0m windows-sys v0.59.0
2546:  �[1m�[92m   Compiling�[0m flight-writers v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-writers)
2547:  �[1m�[92m   Compiling�[0m flight-watchdog v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-watchdog)
2548:  �[1m�[92m   Compiling�[0m flight-units v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-units)
2549:  �[1m�[92m   Compiling�[0m flight-rules v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-rules)
2550:  �[1m�[92m   Compiling�[0m flight-hid-types v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hid-types)
2551:  �[1m�[92m   Compiling�[0m encode_unicode v1.0.0
2552:  �[1m�[92m   Compiling�[0m flight-metrics v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-metrics)
2553:  �[1m�[92m   Compiling�[0m bit-vec v0.8.0
2554:  �[1m�[92m   Compiling�[0m fnv v1.0.7
2555:  �[1m�[92m   Compiling�[0m wait-timeout v0.2.1
2556:  �[1m�[92m   Compiling�[0m quick-error v1.2.3
2557:  �[1m�[92m   Compiling�[0m rusty-fork v0.3.1
...

2562:  �[1m�[92m   Compiling�[0m hidapi v2.6.5
2563:  �[1m�[92m   Compiling�[0m rand_chacha v0.9.0
2564:  �[1m�[92m   Compiling�[0m rand v0.9.2
2565:  �[1m�[92m   Compiling�[0m rand_xorshift v0.4.0
2566:  �[1m�[92m   Compiling�[0m bitflags v2.11.0
2567:  �[1m�[92m   Compiling�[0m unarray v0.1.4
2568:  �[1m�[92m   Compiling�[0m similar v2.7.0
2569:  �[1m�[92m   Compiling�[0m flight-hid v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hid)
2570:  �[1m�[92m   Compiling�[0m proptest v1.10.0
2571:  �[1m�[92m   Compiling�[0m insta v1.46.3
2572:  �[1m�[92m    Finished�[0m `test` profile [unoptimized + debuginfo] target(s) in 44.68s
2573:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_hid-792612c870e3f2a7.exe)
2574:  running 2 tests
2575:  test fd_safety_tests::clippy_config::test_fd_usage_examples ... ok
2576:  test fd_safety_tests::windows_tests::test_typed_handle_usage ... ok
2577:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 200 filtered out; finished in 0.00s
2578:  �[1m�[92m     Running�[0m tests\integration.rs (target\debug\deps\integration-ceeb865f425a7849.exe)
2579:  running 0 tests
2580:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 14 filtered out; finished in 0.00s
2581:  �[1m�[92m     Running�[0m tests\proptest_axis_calibration.rs (target\debug\deps\proptest_axis_calibration-d622df6fe5b9260f.exe)
2582:  running 0 tests
2583:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 13 filtered out; finished in 0.00s
2584:  �[1m�[92m     Running�[0m tests\snapshots.rs (target\debug\deps\snapshots-0e50c6c6cba33881.exe)
2585:  running 0 tests
2586:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 5 filtered out; finished in 0.00s
2587:  �[1m�[92m   Compiling�[0m windows-sys v0.61.2
...

2706:  �[1m�[92m   Compiling�[0m plotters v0.3.7
2707:  �[1m�[92m   Compiling�[0m matchers v0.2.0
2708:  �[1m�[92m   Compiling�[0m tinytemplate v1.2.1
2709:  �[1m�[92m   Compiling�[0m thread_local v1.1.9
2710:  �[1m�[92m   Compiling�[0m oorandom v11.1.5
2711:  �[1m�[92m   Compiling�[0m anes v0.1.6
2712:  �[1m�[92m   Compiling�[0m proptest v1.10.0
2713:  �[1m�[92m   Compiling�[0m tracing-subscriber v0.3.22
2714:  �[1m�[92m   Compiling�[0m criterion v0.8.2
2715:  �[1m�[92m   Compiling�[0m tokio-test v0.4.5
2716:  �[1m�[92m    Finished�[0m `test` profile [unoptimized + debuginfo] target(s) in 1m 17s
2717:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_ipc-74ce1c29e103cca3.exe)
2718:  running 2 tests
2719:  test fd_safety_tests::fd_usage_examples::test_ipc_fd_usage_examples ... ok
2720:  test fd_safety_tests::windows_tests::test_typed_handle_usage_ipc ... ok
2721:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 171 filtered out; finished in 0.00s
2722:  �[1m�[92m     Running�[0m tests\grpc_tests.rs (target\debug\deps\grpc_tests-266f830c155c7b5c.exe)
2723:  running 0 tests
2724:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 21 filtered out; finished in 0.00s
2725:  �[1m�[92m     Running�[0m tests\ipc_fuzz_tests.rs (target\debug\deps\ipc_fuzz_tests-ecd20f41a7f303f9.exe)
2726:  running 0 tests
2727:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 5 filtered out; finished in 0.00s
2728:  �[1m�[92m     Running�[0m tests\proto_tests.rs (target\debug\deps\proto_tests-63614f4c2286312e.exe)
2729:  running 0 tests
2730:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 25 filtered out; finished in 0.00s
2731:  �[1m�[92m   Compiling�[0m windows-link v0.2.1
...

2734:  �[1m�[92m   Compiling�[0m serde v1.0.228
2735:  �[1m�[92m   Compiling�[0m windows-sys v0.61.2
2736:  �[1m�[92m   Compiling�[0m cc v1.2.56
2737:  �[1m�[92m   Compiling�[0m pin-project-lite v0.2.17
2738:  �[1m�[92m   Compiling�[0m serde_core v1.0.228
2739:  �[1m�[92m   Compiling�[0m num-traits v0.2.19
2740:  �[1m�[92m   Compiling�[0m once_cell v1.21.3
2741:  �[1m�[92m   Compiling�[0m bytes v1.11.1
2742:  �[1m�[92m   Compiling�[0m memchr v2.8.0
2743:  �[1m�[92m   Compiling�[0m itoa v1.0.17
2744:  �[1m�[92m   Compiling�[0m tracing v0.1.44
2745:  �[1m�[92m   Compiling�[0m windows_x86_64_msvc v0.53.1
2746:  �[1m�[92m   Compiling�[0m windows-targets v0.53.5
2747:  �[1m�[92m   Compiling�[0m tracing-core v0.1.36
2748:  �[1m�[92m   Compiling�[0m windows-sys v0.60.2
2749:  �[1m�[92m   Compiling�[0m thiserror v2.0.18
2750:  �[1m�[92m   Compiling�[0m stable_deref_trait v1.2.1
...

2866:  �[1m�[92m   Compiling�[0m icu_properties_data v2.1.2
2867:  �[1m�[92m   Compiling�[0m icu_normalizer_data v2.1.1
2868:  �[1m�[92m   Compiling�[0m flight-simconnect-sys v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-simconnect-sys)
2869:  �[1m�[92m   Compiling�[0m untrusted v0.9.0
2870:  �[1m�[92m   Compiling�[0m ryu v1.0.23
2871:  �[1m�[92m   Compiling�[0m icu_normalizer v2.1.1
2872:  �[1m�[92m   Compiling�[0m icu_properties v2.1.2
2873:  �[1m�[92m   Compiling�[0m tonic-prost-build v0.14.5
2874:  �[1m�[92m   Compiling�[0m http-body-util v0.1.3
2875:  �[1m�[92m   Compiling�[0m subtle v2.6.1
2876:  �[1m�[92m   Compiling�[0m idna_adapter v1.2.1
2877:  �[1m�[92m   Compiling�[0m flight-ipc v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-ipc)
2878:  �[1m�[92m   Compiling�[0m serde_urlencoded v0.7.1
2879:  �[1m�[92m   Compiling�[0m axum-core v0.5.6
2880:  �[1m�[92m   Compiling�[0m num-integer v0.1.46
2881:  �[1m�[92m   Compiling�[0m serde_path_to_error v0.1.20
2882:  �[1m�[92m   Compiling�[0m utf8_iter v1.0.4
...

2958:  �[1m�[92m   Compiling�[0m flight-hotas-vkb v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hotas-vkb)
2959:  �[1m�[92m   Compiling�[0m matchers v0.2.0
2960:  �[1m�[92m   Compiling�[0m thread_local v1.1.9
2961:  �[1m�[92m   Compiling�[0m reserve-port v2.3.0
2962:  �[1m�[92m   Compiling�[0m bytesize v2.3.1
2963:  �[1m�[92m   Compiling�[0m unsafe-libyaml v0.2.11
2964:  �[1m�[92m   Compiling�[0m axum-test v18.7.0
2965:  �[1m�[92m   Compiling�[0m serde_yaml_ng v0.10.0
2966:  �[1m�[92m   Compiling�[0m tokio-test v0.4.5
2967:  �[1m�[92m   Compiling�[0m flight-service v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-service)
2968:  �[1m�[92m    Finished�[0m `test` profile [unoptimized + debuginfo] target(s) in 3m 36s
2969:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_service-4ab2f4b8e4e41e8c.exe)
2970:  running 2 tests
2971:  test fd_safety_tests::fd_usage_examples::test_service_fd_usage_examples ... ok
2972:  test fd_safety_tests::windows_tests::test_service_system_handle_safety ... ok
2973:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 408 filtered out; finished in 0.00s
2974:  �[1m�[92m     Running�[0m unittests src\main.rs (target\debug\deps\flightd-f11122a588484984.exe)
2975:  running 0 tests
2976:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
2977:  �[1m�[92m     Running�[0m tests\service_integration.rs (target\debug\deps\service_integration-3c0df996be52184c.exe)
2978:  running 0 tests
2979:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 9 filtered out; finished in 0.00s
2980:  �[1m�[92m     Running�[0m tests\service_integration_tests.rs (target\debug\deps\service_integration_tests-c9478996da6b3000.exe)
2981:  running 0 tests
2982:  test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 11 filtered out; finished in 0.00s
2983:  ##[group]Run echo "🔍 Verifying critical patterns are fixed..."
...

3002:  �[36;1mfi�[0m
3003:  �[36;1m�[0m
3004:  �[36;1m# Check for criterion::black_box usage�[0m
3005:  �[36;1mif git grep -n "criterion::black_box" -- 'crates/' 'benches/'; then�[0m
3006:  �[36;1m  echo "❌ Found criterion::black_box - should be std::hint::black_box"�[0m
3007:  �[36;1m  exit 1�[0m
3008:  �[36;1mfi�[0m
3009:  �[36;1m�[0m
3010:  �[36;1mecho "✅ All critical patterns verified"�[0m
3011:  shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
3012:  env:
3013:  CARGO_TERM_COLOR: always
3014:  RUST_BACKTRACE: 1
3015:  CARGO_HOME: C:\Users\runneradmin\.cargo
3016:  CARGO_INCREMENTAL: 0
3017:  CACHE_ON_FAILURE: false
3018:  ##[endgroup]
3019:  🔍 Verifying critical patterns are fixed...
3020:  ✅ All critical patterns verified
3021:  ##[group]Run cargo test --all-features --workspace --lib --tests --exclude flight-hub-examples
3022:  �[36;1mcargo test --all-features --workspace --lib --tests --exclude flight-hub-examples�[0m
3023:  shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
3024:  env:
3025:  CARGO_TERM_COLOR: always
3026:  RUST_BACKTRACE: 1
3027:  CARGO_HOME: C:\Users\runneradmin\.cargo
3028:  CARGO_INCREMENTAL: 0
3029:  CACHE_ON_FAILURE: false
3030:  ##[endgroup]
...

3162:  �[1m�[92m   Compiling�[0m flight-hotas-logitech v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hotas-logitech)
3163:  �[1m�[92m   Compiling�[0m flight-hotas-virpil v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hotas-virpil)
3164:  �[1m�[92m   Compiling�[0m flight-hotas-ch v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hotas-ch)
3165:  �[1m�[92m   Compiling�[0m flight-hotas-honeycomb v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hotas-honeycomb)
3166:  �[1m�[92m   Compiling�[0m flight-hotas-vpforce v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hotas-vpforce)
3167:  �[1m�[92m   Compiling�[0m flight-hotas-saitek v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hotas-saitek)
3168:  �[1m�[92m   Compiling�[0m flight-hotas-brunner v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-hotas-brunner)
3169:  �[1m�[92m   Compiling�[0m crossbeam-utils v0.8.21
3170:  �[1m�[92m   Compiling�[0m flight-integration-tests v0.1.0 (D:\a\OpenFlight\OpenFlight\crates\flight-integration-tests)
3171:  �[1m�[92m   Compiling�[0m num-integer v0.1.46
3172:  �[1m�[92m   Compiling�[0m crossbeam-epoch v0.9.18
3173:  �[1m�[92m   Compiling�[0m crossbeam-deque v0.8.6
3174:  �[1m�[92m   Compiling�[0m num-bigint v0.4.6
3175:  �[1m�[92m   Compiling�[0m crossbeam-queue v0.3.12
3176:  �[1m�[92m   Compiling�[0m crossbeam-channel v0.5.15
3177:  �[1m�[92m   Compiling�[0m quick-error v1.2.3
3178:  �[1m�[92m   Compiling�[0m wait-timeout v0.2.1
...

3393:  �[1m�[93mwarning[E0133]�[0m�[1m�[97m: call to unsafe function `flight_axis::Node::step_soa` is unsafe and requires unsafe block�[0m
3394:  �[1m�[96m--> �[0mcrates\flight-axis\tests\detent_tests.rs:25:5
3395:  �[1m�[96m|�[0m
3396:  �[1m�[96m25�[0m �[1m�[96m|�[0m     node.step_soa(frame, state_ptr);
3397:  �[1m�[96m|�[0m     �[1m�[93m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^�[0m �[1m�[93mcall to unsafe function�[0m
3398:  �[1m�[96m|�[0m
3399:  �[1m�[96m= �[0m�[1m�[97mnote�[0m: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
3400:  �[1m�[96m= �[0m�[1m�[97mnote�[0m: consult the function's documentation for information on how to avoid undefined behavior
3401:  �[1m�[92mnote�[0m: an unsafe function restricts its caller, but its body is safe by default
3402:  �[1m�[96m--> �[0mcrates\flight-axis\tests\detent_tests.rs:23:1
3403:  �[1m�[96m|�[0m
3404:  �[1m�[96m23�[0m �[1m�[96m|�[0m unsafe fn process_frame_soa(node: &DetentNode, frame: &mut AxisFrame, state: &mut DetentState) {
3405:  �[1m�[96m|�[0m �[1m�[92m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^�[0m
3406:  �[1m�[96m= �[0m�[1m�[97mnote�[0m: `#[warn(unsafe_op_in_unsafe_fn)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
3407:  �[1m�[93mwarning�[0m: `flight-axis` (test "detent_integration") generated 9 warnings
3408:  �[1m�[97mFor more information about this error, try `rustc --explain E0133`.�[0m
3409:  �[1m�[93mwarning�[0m: `flight-axis` (test "detent_tests") generated 1 warning (run `cargo fix --test "detent_tests" -p flight-axis` to apply 1 suggestion)
...

3448:  test tests::managed_block_is_idempotent ... ok
3449:  test tests::applies_profile_replaces_existing_managed_block ... ok
3450:  test tests::install_creates_dir_and_file ... ok
3451:  test tests::installs_with_backup ... ok
3452:  test tests::rc_mode_index_values ... ok
3453:  test tests::renders_all_rc_modes ... ok
3454:  test tests::renders_managed_block ... ok
3455:  test tests::steam_input_hint_is_nonempty ... ok
3456:  test tests::validates_empty_profile_name ... ok
3457:  test tests::validates_out_of_range_deadzone ... ok
3458:  test tests::validates_out_of_range_exponent ... ok
3459:  test tests::validates_out_of_range_scale ... ok
3460:  test tests::property_valid_deadzone_range_accepted ... ok
3461:  test tests::property_valid_exponent_range_accepted ... ok
3462:  test tests::property_valid_scale_range_accepted ... ok
3463:  test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
3464:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_ac7_protocol-b6e863ecbbb0259d.exe)
3465:  running 13 tests
3466:  test tests::aircraft_label_trims_whitespace ... ok
3467:  test tests::parses_valid_packet ... ok
3468:  test tests::defaults_schema_and_label ... ok
3469:  test tests::json_round_trip ... ok
3470:  test tests::property_bounded_altitude_valid ... ok
3471:  test tests::property_pitch_control_is_bounded ... ok
3472:  test tests::property_out_of_bounds_throttle_rejected ... ok
3473:  test tests::rejects_invalid_json ... ok
3474:  test tests::rejects_negative_speed ... ok
3475:  test tests::rejects_out_of_range_altitude ... ok
3476:  test tests::property_all_bounded_controls_valid ... ok
3477:  test tests::rejects_out_of_range_control_value ... ok
3478:  test tests::rejects_wrong_schema ... ok
3479:  test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
3480:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_ac7_telemetry-15e129c5b63bef41.exe)
3481:  running 10 tests
3482:  test tests::metrics_registry_tracks_config ... ok
3483:  test tests::adapter_initial_state_is_disconnected ... ok
3484:  test tests::snapshot_control_inputs_mapped ... ok
3485:  test tests::snapshot_has_correct_sim_id ... ok
3486:  test tests::converts_packet_to_snapshot ... ok
3487:  test tests::snapshot_validity_partial_packet ... ok
3488:  test tests::snapshot_validity_flags_set_from_full_packet ... ok
3489:  test tests::start_stop_cycle ... ok
3490:  test tests::udp_poll_receives_packet ... ok
3491:  test tests::poll_updates_source_addr ... ok
3492:  test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
3493:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_adapter_common-7bfc7ec097d45099.exe)
3494:  running 19 tests
3495:  test metrics::tests::test_record_update_tracks_samples ... ok
3496:  test reconnect_backoff::tests::test_exponential_growth ... ok
3497:  test metrics::tests::test_record_aircraft_change ... ok
3498:  test reconnect_backoff::tests::test_first_delay_equals_initial ... ok
3499:  test reconnect_backoff::tests::test_jitter_stays_within_bounds ... ok
3500:  test reconnect_backoff::tests::test_jitter_zero_means_no_jitter ... ok
3501:  test reconnect_backoff::tests::test_max_delay_cap ... ok
3502:  test reconnect_backoff::tests::test_reset_restarts_sequence ... ok
3503:  test reconnection::tests::test_backoff_progression ... ok
3504:  test reconnection::tests::test_should_retry ... ok
3505:  test tests::adapter_error_display_variants ... ok
3506:  test tests::adapter_metrics_summary_format ... ok
3507:  test tests::adapter_metrics_total_updates_increment ... ok
3508:  test tests::adapter_state_all_variants_debug ... ok
3509:  test tests::adapter_state_equality ... ok
3510:  test tests::reconnection_strategy_initial_backoff_on_first_attempt ... ok
3511:  test tests::reconnection_strategy_max_backoff_caps ... ok
3512:  test reconnect_backoff::tests::test_invalid_jitter_panics - should panic ... ok
3513:  test reconnect_backoff::tests::test_invalid_multiplier_panics - should panic ... ok
3514:  test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
3515:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_aerofly-e63951766d3fdf31.exe)
3516:  running 36 tests
3517:  test tests::adapter_custom_port ... ok
3518:  test tests::adapter_default_port ... ok
3519:  test tests::adapter_no_telemetry_initially ... ok
3520:  test tests::adapter_process_datagram_updates_last ... ok
3521:  test tests::adapter_process_invalid_datagram_returns_error ... ok
3522:  test tests::adapter_process_json_updates_last ... ok
3523:  test tests::adapter_process_text_updates_last ... ok
3524:  test tests::aircraft_type_case_insensitive ... ok
3525:  test tests::aircraft_type_from_name ... ok
3526:  test tests::airspeed_conversion_knots_to_ms ... ok
3527:  test tests::altitude_conversion_ft_to_m ... ok
3528:  test tests::attitude_conversion_deg_to_rad ... ok
3529:  test tests::bad_magic_returns_error ... ok
3530:  test tests::empty_frame_returns_error ... ok
3531:  test tests::flaps_ratio_clamped_below_zero ... ok
3532:  test tests::frame_too_short_returns_error ... ok
3533:  test tests::gear_down_byte_nonzero ... ok
3534:  test tests::gear_up_byte_zero ... ok
3535:  test tests::json_vspeed_defaults_to_zero_when_absent ... ok
3536:  test tests::invalid_json_returns_error ... ok
3537:  test tests::parse_text_empty_returns_error ... ok
3538:  test tests::parse_text_all_fields ... ok
3539:  test tests::parse_text_invalid_numbers_default_to_zero ... ok
3540:  test tests::parse_text_gear_state_boundary ... ok
3541:  test tests::parse_text_negative_altitude ... ok
3542:  test tests::parse_text_partial_uses_defaults ... ok
3543:  test tests::parse_text_throttle_clamped ... ok
3544:  test tests::parse_text_unknown_keys_ignored ... ok
3545:  test tests::parse_text_whitespace_tolerance ... ok
3546:  test tests::parse_valid_binary_frame ... ok
3547:  test tests::parse_valid_json ... ok
3548:  test tests::telemetry_default_values ... ok
3549:  test tests::telemetry_serde_round_trip ... ok
3550:  test tests::throttle_clamped_above_one ... ok
3551:  test tests::vspeed_conversion_fpm_to_ms ... ok
3552:  test tests::zero_altitude_conversion ... ok
3553:  test result: ok. 36 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
3554:  �[1m�[92m     Running�[0m tests\integration_tests.rs (target\debug\deps\integration_tests-aaf1054325880608.exe)
3555:  running 10 tests
3556:  test attitude_roll_pitch_heading_in_correct_units ... ok
3557:  test airspeed_and_vertical_state_fields_present ... ok
3558:  test adapter_processes_binary_and_json_paths ... ok
3559:  test coordinates_altitude_and_heading_decoded_correctly ... ok
3560:  test adapter_json_round_trip_preserves_all_fields ... ok
3561:  test text_format_parsed_and_all_three_paths_work ... ok
3562:  test missing_fields_in_json_returns_error_gracefully ... ok
3563:  test malformed_json_returns_error_not_panic ... ok
3564:  test unit_conversion_helpers_are_consistent ... ok
3565:  test valid_json_telemetry_packet_parsed ... ok
3566:  test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
3567:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_axis-64a16df3df3ffffa.exe)
...

3574:  test accumulator::tests::test_reset_to_zero ... ok
3575:  test accumulator::tests::test_scale_factor ... ok
3576:  test accumulator::tests::test_wrap_negative ... ok
3577:  test accumulator::tests::test_wrap_positive ... ok
3578:  test blackbox::tests::test_annotator_creation ... ok
3579:  test blackbox::tests::test_disabled_annotation ... ok
3580:  test blackbox::tests::test_conflict_annotation ... ok
3581:  test blackbox::tests::test_buffer_flush ... ok
3582:  test blackbox::tests::test_conflict_data_conversion ... ok
3583:  test blackbox::tests::test_disabled_annotator ... ok
3584:  test blackbox::tests::test_resolution_annotation ... ok
3585:  test buttons::tests::test_axis_offset_action ... ok
3586:  test buttons::tests::test_axis_set_action ... ok
3587:  test buttons::tests::test_chord_partial_press_no_fire ... ok
3588:  test buttons::tests::test_chord_requires_all_buttons ... ok
3589:  test buttons::tests::test_chord_too_many_buttons_error ... ok
3590:  test buttons::tests::test_clear_removes_all_macros ... ok
3591:  test buttons::tests::test_duplicate_button_error ... ok
3592:  test buttons::tests::test_empty_chord_error ... ok
3593:  test buttons::tests::test_hold_fires_after_threshold ... ok
...

3616:  test calibration::tests::test_calbank_insert_and_get ... ok
3617:  test calibration::tests::test_calbank_unknown_axis_uses_default ... ok
3618:  test calibration::tests::test_normalize_8bit ... ok
3619:  test calibration::tests::test_normalize_above_deadband ... ok
3620:  test calibration::tests::test_normalize_center_is_zero ... ok
3621:  test calibration::tests::test_normalize_clamped_above_max ... ok
3622:  test calibration::tests::test_normalize_clamped_below_min ... ok
3623:  test calibration::tests::test_normalize_deadband_near_center ... ok
3624:  test calibration::tests::test_normalize_max_is_one ... ok
3625:  test calibration::tests::test_normalize_midpoint_above_center ... ok
3626:  test calibration::tests::test_normalize_midpoint_below_center ... ok
3627:  test calibration::tests::test_normalize_min_equals_max ... ok
3628:  test calibration::tests::test_normalize_min_is_neg_one ... ok
3629:  test buttons::tests::proptest_output_count_never_exceeds_8 ... ok
3630:  test calibration::tests::test_normalize_virpil_14bit ... ok
3631:  test calibration_wizard::tests::center_detection_noisy_fails ... ok
3632:  test calibration_wizard::tests::center_detection_stable_succeeds ... ok
3633:  test calibration_wizard::tests::complete_produces_result ... ok
3634:  test calibration_wizard::tests::deadzone_recommends_value ... ok
3635:  test calibration_wizard::tests::initial_state_is_not_started ... ok
3636:  test calibration_wizard::tests::progress_increases_through_steps ... ok
3637:  test calibration_wizard::tests::reset_returns_to_not_started ... ok
3638:  test calibration_wizard::tests::samples_ignored_in_terminal_states ... ok
3639:  test calibration_wizard::tests::start_transitions_to_center_detection ... ok
3640:  test calibration_wizard::tests::sweep_detects_full_range ... ok
3641:  test calibration_wizard::tests::sweep_insufficient_range_fails ... ok
3642:  test calibration_wizard::tests::timeout_fails_center_detection ... ok
3643:  test buttons::tests::proptest_process_never_panics ... ok
3644:  test calibration_wizard::tests::verification_fails_non_monotonic ... ok
3645:  test calibration_wizard::tests::verification_passes_linear ... ok
...

3733:  test curve::tests::test_expo_negative_increases_center_sensitivity ... ok
3734:  test curve::tests::test_expo_one_input_maps_to_one ... ok
3735:  test curve::tests::test_expo_positive_reduces_center_sensitivity ... ok
3736:  test curve::tests::test_expo_zero_input_maps_to_zero ... ok
3737:  test curve::tests::test_expo_zero_is_linear ... ok
3738:  test curve::tests::test_is_monotone_identity ... ok
3739:  test curve::tests::test_linear_identity_constructor ... ok
3740:  test curve::tests::test_linear_identity_evaluates_x ... ok
3741:  test curve::tests::test_linear_identity_one ... ok
3742:  test curve::tests::test_linear_identity_zero ... ok
3743:  test curve::tests::test_linear_interpolation_midpoint ... ok
3744:  test curve::tests::test_monotone_cubic_identity ... ok
3745:  test curve::tests::prop_output_always_in_range ... ok
3746:  test curve::tests::test_standard_deadzone_expo_curve ... ok
3747:  test curve::tests::test_monotone_cubic_preserves_monotone ... ok
3748:  test curve::tests::test_too_few_points_error ... ok
3749:  test curve::tests::test_unsorted_points_error ... ok
3750:  test deadzone::tests::prop_output_in_range ... ok
...

3756:  test deadzone::tests::test_asymmetric_negative_deadzone ... ok
3757:  test deadzone::tests::test_asymmetric_positive_deadzone ... ok
3758:  test deadzone::tests::test_asymmetric_symmetric_matches_center_only ... ok
3759:  test deadzone::tests::test_asymmetric_zero_positive_passes_positive ... ok
3760:  test deadzone::tests::test_bank_apply ... ok
3761:  test deadzone::tests::test_bank_set_config ... ok
3762:  test deadzone::tests::test_center_deadzone_full_deflection ... ok
3763:  test deadzone::tests::test_center_deadzone_negative ... ok
3764:  test deadzone::tests::test_center_deadzone_outside_zone ... ok
3765:  test deadzone::tests::test_center_deadzone_within_zone ... ok
3766:  test deadzone::tests::test_clamp_above_one ... ok
3767:  test deadzone::tests::test_clamp_below_neg_one ... ok
3768:  test deadzone::tests::test_combined_center_and_edge ... ok
3769:  test deadzone::tests::test_edge_deadzone_below ... ok
3770:  test deadzone::tests::test_edge_deadzone_saturation ... ok
3771:  test deadzone::tests::test_invalid_center_error ... ok
3772:  test deadzone::tests::test_overlap_error ... ok
3773:  test deadzone::tests::test_zero_deadzone_passthrough ... ok
...

3895:  test invert::tests::test_invert_disabled_passthrough ... ok
3896:  test invert::tests::test_invert_enabled_negates ... ok
3897:  test invert::tests::test_invert_negative_one ... ok
3898:  test invert::tests::test_invert_positive_one ... ok
3899:  test invert::tests::test_invert_toggle ... ok
3900:  test invert::tests::test_invert_zero_unchanged ... ok
3901:  test lag_compensator::tests::first_sample_passes_through ... ok
3902:  test lag_compensator::tests::max_prediction_clamped ... ok
3903:  test lag_compensator::tests::moving_axis_is_predicted_ahead ... ok
3904:  test lag_compensator::tests::nan_passes_through_unchanged ... ok
3905:  test lag_compensator::tests::negative_movement_predicts_backward ... ok
3906:  test lag_compensator::tests::output_is_clamped_to_valid_range ... ok
3907:  test lag_compensator::tests::reset_clears_initialized ... ok
3908:  test lag_compensator::tests::static_axis_unchanged ... ok
3909:  test lag_compensator::tests::zero_dt_uses_last_dt ... ok
3910:  test mixer::tests::add_input_beyond_max_fails ... ok
3911:  test mixer::tests::add_input_increments_count ... ok
...

3987:  test pid::tests::test_pid_bank_reset_not_needed ... ok
3988:  test pid::tests::test_pid_bank_update_known_axis ... ok
3989:  test pid::tests::test_pid_bank_update_unknown_axis ... ok
3990:  test pid::tests::test_pid_converges_step_response ... ok
3991:  test pid::tests::test_pid_derivative_on_step ... ok
3992:  test pid::tests::test_pid_derivative_zero_first_tick ... ok
3993:  test pid::tests::test_pid_integral_accumulates ... ok
3994:  test pid::tests::test_pid_integral_windup_limited ... ok
3995:  test pid::tests::test_pid_output_clamped_to_1 ... ok
3996:  test pid::tests::test_pid_output_clamped_to_neg1 ... ok
3997:  test pid::tests::test_pid_proportional_only ... ok
3998:  test pid::tests::test_pid_reset_clears_state ... ok
3999:  test pid::tests::test_pid_set_integral_clamped ... ok
4000:  test pid::tests::test_pid_setpoint_above_pv ... ok
4001:  test pid::tests::test_pid_setpoint_below_pv ... ok
4002:  test pid::tests::test_pid_zero_error ... ok
4003:  test pipeline::tests::test_alignment ... ok
...

4015:  test pipeline::tests::test_diagnostics_respects_bypass ... ok
4016:  test pipeline::tests::test_empty_pipeline_passthrough ... ok
4017:  test pipeline::tests::test_enable_stage_after_bypass ... ok
4018:  test pipeline::tests::test_insert_stage_at_beginning ... ok
4019:  test pipeline::tests::test_insert_stage_at_end ... ok
4020:  test pipeline::tests::test_pipeline_multi_stage ... ok
4021:  test pipeline::tests::test_pipeline_state_creation ... ok
4022:  test pipeline::tests::test_remove_stage_out_of_bounds ... ok
4023:  test pipeline::tests::test_remove_stage_returns_stage ... ok
4024:  test pipeline::tests::test_sensitivity_stage ... ok
4025:  test pipeline::tests::test_smoothing_stage ... ok
4026:  test pipeline::tests::test_stage_count ... ok
4027:  test pipeline::tests::test_stage_names ... ok
4028:  test pipeline::tests::test_stages_accessor ... ok
4029:  test pipeline_bypass::tests::bypass_all_then_clear ... ok
4030:  test pid::tests::proptest_zero_error_zero_output ... ok
4031:  test pipeline_bypass::tests::clear_single_stage ... ok
...

4103:  test recording::tests::test_playback_advance_returns_samples_in_window ... ok
4104:  test recording::tests::test_playback_is_finished_at_end ... ok
4105:  test recording::tests::test_playback_looping_wraps_around ... ok
4106:  test recording::tests::test_playback_rewind ... ok
4107:  test recording::tests::test_record_multiple_samples ... ok
4108:  test recording::tests::test_record_single_sample ... ok
4109:  test recording::tests::test_recording_duration ... ok
4110:  test recording::tests::test_recording_empty_by_default ... ok
4111:  test recording::tests::test_samples_in_range ... ok
4112:  test scale::tests::test_bank_apply ... ok
4113:  test scale::tests::test_bank_set_scale ... ok
4114:  test scale::tests::test_scale_clamp_max ... ok
4115:  test scale::tests::test_scale_clamp_min ... ok
4116:  test scale::tests::test_scale_default_passthrough ... ok
4117:  test scale::tests::test_scale_factor_half ... ok
4118:  test scale::tests::test_scale_invalid_range_error ... ok
4119:  test scale::tests::test_scale_nan_factor_error ... ok
4120:  test scale::tests::test_scale_negative_factor ... ok
...

4239:  test stages::tests::very_large_values_handled ... ok
4240:  test throttle_zone::tests::prop_event_count_never_exceeds_4 ... ok
4241:  test throttle_zone::tests::test_afterburner_zone_event ... ok
4242:  test throttle_zone::tests::test_builder_pattern ... ok
4243:  test throttle_zone::tests::test_combined_cut_and_milpower ... ok
4244:  test throttle_zone::tests::prop_output_always_in_range ... ok
4245:  test throttle_zone::tests::test_cut_zone_above_threshold ... ok
4246:  test throttle_zone::tests::test_cut_zone_at_threshold ... ok
4247:  test throttle_zone::tests::test_cut_zone_below_threshold ... ok
4248:  test throttle_zone::tests::test_max_zone_below_threshold ... ok
4249:  test throttle_zone::tests::test_max_zone_saturation ... ok
4250:  test throttle_zone::tests::test_milpower_zone_event_on_entry ... ok
4251:  test throttle_zone::tests::test_milpower_zone_event_on_exit ... ok
4252:  test throttle_zone::tests::test_no_zones_passthrough ... ok
4253:  test throttle_zone::tests::test_process_clamped_input_above_one ... ok
4254:  test throttle_zone::tests::test_validate_cut_above_max_error ... ok
4255:  test throttle_zone::tests::test_validate_invalid_cut_threshold ... ok
...

4280:  test trim::tests::test_trimbank_apply_unknown_axis ... ok
4281:  test trim::tests::test_trimbank_get_or_insert ... ok
4282:  test trim::tests::test_trimbank_reset_all ... ok
4283:  test trim::tests::proptest_apply_output_bounded ... ok
4284:  test velocity::tests::test_velocity_invalid_alpha_panics - should panic ... ok
4285:  test trim::tests::proptest_decrement_bounded ... ok
4286:  test velocity::tests::test_velocity_negative_movement ... ok
4287:  test velocity::tests::test_velocity_no_smoothing ... ok
4288:  test velocity::tests::test_velocity_positive_movement ... ok
4289:  test velocity::tests::test_velocity_reset ... ok
4290:  test velocity::tests::test_velocity_smoothing ... ok
4291:  test velocity::tests::test_velocity_units ... ok
4292:  test velocity::tests::test_velocity_invalid_period_panics - should panic ... ok
4293:  test velocity::tests::test_velocity_zero_at_rest ... ok
4294:  test trim::tests::proptest_increment_bounded ... ok
4295:  test result: ok. 726 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.54s
4296:  �[1m�[92m     Running�[0m tests\detent_integration.rs (target\debug\deps\detent_integration-ed36fb410ff34c8f.exe)
4297:  running 8 tests
4298:  test test_detent_builder_api ... ok
4299:  test test_detent_hysteresis_with_slew ... ok
4300:  test test_detent_in_complete_pipeline ... ok
4301:  test test_detent_events_in_pipeline ... ok
4302:  test test_detent_output_snapping ... ok
4303:  test test_detent_with_curve_interaction ... ok
4304:  test test_multiple_detent_transitions ... ok
4305:  test test_detent_performance_in_pipeline ... ok
4306:  test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.65s
4307:  �[1m�[92m     Running�[0m tests\detent_tests.rs (target\debug\deps\detent_tests-097e8f83c9ceb2ac.exe)
4308:  running 13 tests
4309:  test test_detent_role_names ... ok
4310:  test test_detent_zone_clamping ... ok
4311:  test test_detent_zone_creation ... ok
4312:  test test_detent_zone_containment ... ok
4313:  test test_multiple_detents_no_overlap ... ok
4314:  test test_hysteresis_prevents_flapping ... ok
4315:  test test_no_snap_detent ... ok
4316:  test test_node_trait_implementation ... ok
4317:  test test_single_detent_entry_exit ... ok
4318:  test test_sweep_single_transitions ... ok
4319:  test test_zone_sorting ... ok
4320:  test test_hysteresis_stability ... ok
4321:  test test_deterministic_detent_behavior ... ok
4322:  test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
4323:  �[1m�[92m     Running�[0m tests\filter_tests.rs (target\debug\deps\filter_tests-29d4f6e98fca602b.exe)
4324:  running 10 tests
4325:  test test_filter_alpha_one_is_identity ... ok
4326:  test test_b104_spike_rejection_ignores_single_transient ... ok
4327:  test test_filter_alpha_zero_holds_initial_value ... ok
4328:  test test_filter_converges_toward_constant_input ... ok
4329:  test test_filter_ema_smoothing_on_step_input ... ok
4330:  test test_filter_first_sample_passthrough ... ok
4331:  test test_filter_inf_does_not_panic ... ok
4332:  test test_filter_nan_does_not_panic ... ok
4333:  test test_filter_output_bounded_for_valid_inputs ... ok
4334:  test filter_output_in_range ... ok
4335:  test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
4336:  �[1m�[92m     Running�[0m tests\integration_tests.rs (target\debug\deps\integration_tests-318cfa7058261877.exe)
4337:  running 26 tests
4338:  test test_allocation_guard ... ok
4339:  test test_axis_engine_creation ... ok
4340:  test test_axis_engine_process_without_pipeline ... ok
4341:  test test_atomic_pipeline_swap_with_ack ... ok
4342:  test test_axis_engine_with_config ... ok
4343:  test test_axis_frame_creation ... ok
4344:  test test_axis_frame_derivative_calculation ... ok
4345:  test test_compile_failure_safety ... ok
4346:  test test_curve_node_exponential ... ok
...

4349:  test test_deadzone_node_symmetric ... ok
4350:  test test_deterministic_processing ... ok
4351:  test test_node_state_sizes ... ok
4352:  test test_end_to_end_pipeline_processing ... ok
4353:  test test_node_type_identification ... ok
4354:  test test_performance_snapshot ... ok
4355:  test test_pipeline_builder ... ok
4356:  test test_pipeline_state_validation ... ok
4357:  test test_runtime_counters ... ok
4358:  test test_runtime_counters_averaging ... ok
4359:  test test_slew_node_rate_limiting ... ok
4360:  test test_zero_allocation_constraint_validation ... ok
4361:  test test_zero_allocation_guarantee ... ok
4362:  test test_processing_performance ... ok
4363:  test test_performance_under_load ... ok
4364:  test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.81s
4365:  �[1m�[92m     Running�[0m tests\mixer_tests.rs (target\debug\deps\mixer_tests-bb55e39fdf9e6753.exe)
...

4382:  test test_mixer_input_creation ... ok
4383:  test test_mixer_input_with_scale ... ok
4384:  test test_mixer_mathematical_properties ... ok
4385:  test test_mixer_node_creation ... ok
4386:  test test_mixer_node_creation_with_invalid_config ... ok
4387:  test test_mixer_node_trait_implementation ... ok
4388:  test test_mixer_process_inputs_basic ... ok
4389:  test test_mixer_process_inputs_no_clamp ... ok
4390:  test test_mixer_process_inputs_with_gain ... ok
4391:  test test_mixer_soa_step_processing ... ok
4392:  test test_mixer_state_initialization ... ok
4393:  test test_mixer_unit_handling_validation ... ok
4394:  test test_mixer_zero_allocation_constraint ... ok
4395:  test test_mixer_zero_allocation_integration ... ok
4396:  test test_mixer_performance_characteristics ... ok
4397:  test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
4398:  �[1m�[92m     Running�[0m tests\performance_validation.rs (target\debug\deps\performance_validation-cc0db11fb58b6cbc.exe)
4399:  running 4 tests
4400:  test test_atomic_swap_performance ... ok
4401:  test test_jitter_requirements ... ok
4402:  test test_rt_performance_requirements ... ok
4403:  test test_zero_allocation_validation ... ok
4404:  test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.59s
4405:  �[1m�[92m     Running�[0m tests\pipeline_composition_tests.rs (target\debug\deps\pipeline_composition_tests-a5ec6674c1d4cb4e.exe)
4406:  running 11 tests
4407:  test test_deadzone_curve_output_is_monotone_for_positive_inputs ... ok
4408:  test test_filter_smooths_step_after_deadzone ... ok
4409:  test test_max_positive_input_stays_bounded_through_deadzone_curve_slew ... ok
4410:  test test_nan_input_does_not_panic_in_full_pipeline ... ok
4411:  test test_neg_inf_does_not_panic_in_deadzone_pipeline ... ok
4412:  test test_positive_inf_does_not_panic_in_full_pipeline ... ok
4413:  test test_slew_limits_sudden_large_jump ... ok
4414:  test test_zero_input_stays_zero_through_deadzone_curve_slew ... ok
4415:  test deadzone_curve_is_monotone_for_positive_inputs ... ok
4416:  test deadzone_curve_output_in_range ... ok
4417:  test full_pipeline_output_in_range ... ok
4418:  test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
4419:  �[1m�[92m     Running�[0m tests\pipeline_integration.rs (target\debug\deps\pipeline_integration-1a833898a6f481b3.exe)
4420:  running 7 tests
4421:  test test_pipeline_center_no_processing ... ok
4422:  test test_pipeline_max_input_no_trim ... ok
4423:  test test_pipeline_max_input_max_trim_clamps ... ok
4424:  test test_pipeline_min_input_no_trim ... ok
4425:  test test_pipeline_output_always_bounded ... ok
4426:  test test_pipeline_rate_limit_slows_changes ... ok
4427:  test test_pipeline_smoothing_reduces_step_response ... ok
4428:  test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
4429:  �[1m�[92m     Running�[0m tests\proptest_invariants.rs (target\debug\deps\proptest_invariants-67cfe137d99bcb9f.exe)
4430:  running 14 tests
4431:  test clamp_never_exceeds_bounds ... ok
4432:  test deadzone_output_zero_within_zone ... ok
4433:  test expo_preserves_sign ... ok
4434:  test expo_output_bounded ... ok
4435:  test rt_deadzone_output_bounded ... ok
4436:  test rt_curve_expo_monotone ... ok
4437:  test rt_pipeline_output_finite ... ok
4438:  test pipeline_output_finite ... ok
4439:  test saturation_bipolar_bounds ... ok
4440:  test saturation_output_within_bounds ... ok
4441:  test slew_rate_unlimited_passthrough ... ok
4442:  test slew_rate_delta_bounded ... ok
4443:  test smoothing_ema_converges_to_constant ... ok
4444:  test smoothing_output_always_finite ... ok
4445:  test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
4446:  �[1m�[92m     Running�[0m tests\rt_coverage.rs (target\debug\deps\rt_coverage-b0bf42546861503a.exe)
...

4457:  test test_combined_deadzone_expo_zeroes_inside_zone ... ok
4458:  test test_curve_expo_one_max_curvature ... ok
4459:  test test_curve_expo_zero_is_linear ... ok
4460:  test test_curve_scurve_reduces_centre_gain ... ok
4461:  test test_deadzone_negative_boundary ... ok
4462:  test test_deadzone_value_at_exact_threshold ... ok
4463:  test test_deadzone_value_inside_is_zero ... ok
4464:  test test_deadzone_value_just_outside_is_nonzero ... ok
4465:  test test_range_clamp_at_limits ... ok
4466:  test test_split_bipolar_half_positive ... ok
4467:  test test_split_bipolar_negative_one ... ok
4468:  test test_split_bipolar_positive_one ... ok
4469:  test test_split_bipolar_zero ... ok
4470:  test prop_split_bipolar_sum_equals_abs ... ok
4471:  test prop_combine_differential_bounded ... ok
4472:  test result: ok. 24 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
4473:  �[1m�[92m     Running�[0m tests\rt_timing_test.rs (target\debug\deps\rt_timing_test-3d8c4cf99cfac491.exe)
4474:  running 2 tests
4475:  test axis_pipeline_p99_within_4ms_budget ... ok
4476:  test axis_pipeline_fits_in_rt_budget ... ok
4477:  test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
4478:  �[1m�[92m     Running�[0m tests\snapshot_tests.rs (target\debug\deps\snapshot_tests-8a7bcb41bf8d3985.exe)
4479:  running 3 tests
4480:  test snapshot_curve_node_expo_0_4_outputs ... ok
4481:  test snapshot_deadzone_expo_pipeline_output_values ... ok
4482:  test snapshot_deadzone_expo_pipeline_metadata ... ok
4483:  test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s
4484:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_bdd_metrics-2f4bbbb43d341ee8.exe)
4485:  running 14 tests
4486:  test tests::bdd_traceability_row_coverage_methods ... ok
4487:  test tests::coverage_percent_full_coverage ... ok
4488:  test tests::coverage_percent_zero_denominator_returns_zero ... ok
4489:  test tests::bdd_scenario_ac_tags_filters_non_ac_tags ... ok
4490:  test tests::coverage_status_compute_all_branches ... ok
4491:  test tests::extract_crates_from_command_parses_p_flag ... ok
4492:  test tests::extract_crates_from_reference_cmd_prefix ... ok
4493:  test tests::extract_crates_from_reference_double_colon_notation ... ok
4494:  test tests::is_crate_name_candidate_valid_and_invalid ... ok
4495:  test tests::is_scenario_header_recognises_scenario_types ... ok
4496:  test tests::normalize_crate_name_strips_quotes_and_underscores ... ok
4497:  test tests::parse_tags_from_line_extracts_tags ... ok
4498:  test tests::with_workspace_crates_preserves_unmapped_row ... ok
4499:  test tests::with_workspace_crates_filters_non_workspace_rows ... ok
4500:  test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
4501:  �[1m�[92m     Running�[0m unittests src\lib.rs (target\debug\deps\flight_blackbox-98b7135a86926b25.exe)
...

4526:  test recorder::tests::iterator_exact_size ... ok
4527:  test export::tests::json_csv_agree_on_axis_count ... ok
4528:  test recorder::tests::mixed_record_types_in_buffer ... ok
4529:  test recorder::tests::new_recorder_is_empty ... ok
4530:  test recorder::tests::record_and_retrieve_axis ... ok
4531:  test recorder::tests::record_event_stores_correctly ... ok
4532:  test recorder::tests::large_overflow_preserves_newest ... ok
4533:  test recorder::tests::record_ffb_stores_correctly ... ok
4534:  test recorder::tests::record_telemetry_stores_correctly ... ok
4535:  test recorder::tests::ring_buffer_exact_capacity_fill ... ok
4536:  test recorder::tests::ring_buffer_overflow_drops_oldest ... ok
4537:  test recorder::tests::zero_alloc_on_hot_path ... ok
4538:  test recorder::tests::zero_capacity_clamped_to_one ... ok
4539:  test tests::blackbox_config_defaults ... ok
4540:  test tests::blackbox_writer_starts_not_running ... ok
4541:  test tests::double_start_returns_error ... ok
4542:  test tests::blackbox_write_read_roundtrip ... ok
...

4544:  test tests::prop_index_entry_roundtrip ... ok
4545:  test tests::record_...

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