Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions crates/flight-scheduler/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,52 @@
dead_code
)
)]
#![allow(
clippy::missing_errors_doc,
clippy::missing_panics_doc,
clippy::doc_markdown,
clippy::must_use_candidate,
clippy::cast_possible_truncation,
clippy::cast_possible_wrap,
clippy::cast_precision_loss,
clippy::cast_sign_loss,
)]
// Pedantic lint policy for `flight-scheduler`.
//
// This crate is the real-time scheduling spine for OpenFlight. It wraps platform
// facilities such as MMCSS on Windows, rtkit / scheduler primitives on Linux,
// high-resolution timers, affinity masks, and PLL-based timing control. That
// work naturally involves platform terms, explicit numeric conversions, and
// small public helpers whose contracts are clearer in code than in repeated doc
// boilerplate.
//
// Why these allows are crate-wide here:
//
// - `missing_errors_doc` / `missing_panics_doc`
// Many public items are thin wrappers over OS-facing primitives or deterministic
// timing helpers. Their failure mode is already expressed by the return type,
// or a panic would indicate a bug path rather than supported caller behavior.
// Requiring `# Errors` / `# Panics` on every wrapper adds noise and drifts
// quickly as platform-specific implementations evolve.
//
// - `doc_markdown`
// The docs intentionally use domain and platform identifiers such as MMCSS,
// RTKit, QPC, `CLOCK_MONOTONIC`, `SCHED_FIFO`, Hz, kHz, and type / path names.
// Backticking every such identifier reduces readability in a crate whose docs
// are already heavily systems-oriented.
//
// - `must_use_candidate`
// This lint is advisory and tends to produce false positives for builder-like
// helpers, diagnostics snapshots, timer math accessors, and convenience methods
// that callers often invoke for immediate field access or side effects. We only
// want `#[must_use]` where ignoring a return value is genuinely hazardous.
//
// - `cast_*`
// Scheduler code must cross `u64`, `i64`, `usize`, `f32`, and `f64` boundaries
// for timer periods, jitter statistics, PLL correction, histogram bucketing,
// affinity masks, and OS API interop. Those conversions are explicit, localized,
// and part of the design; forbidding them crate-wide would add ceremony without
// improving correctness or hot-path behavior.
// SPDX-License-Identifier: MIT OR Apache-2.0
// SPDX-FileCopyrightText: Copyright (c) 2024 Flight Hub Team

Expand Down
62 changes: 61 additions & 1 deletion docs/bdd_metrics.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"needs_tests": 0,
"draft": 4455,
"incomplete": 0,
"microcrate_total": 87,
"microcrate_total": 92,
"microcrate_with_tests": 65,
"microcrate_with_gherkin": 65,
"microcrate_with_tests_and_gherkin": 65,
Expand Down Expand Up @@ -157,6 +157,18 @@
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-dcs-bios",
"total_ac": 0,
"ac_with_tests": 0,
"ac_with_gherkin": 0,
"ac_with_tests_and_gherkin": 0,
"complete": 0,
"needs_gherkin": 0,
"needs_tests": 0,
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-dcs-export",
"total_ac": 8,
Expand Down Expand Up @@ -229,6 +241,18 @@
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-ffb-brunner",
"total_ac": 0,
"ac_with_tests": 0,
"ac_with_gherkin": 0,
"ac_with_tests_and_gherkin": 0,
"complete": 0,
"needs_gherkin": 0,
"needs_tests": 0,
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-ffb-moza",
"total_ac": 6,
Expand Down Expand Up @@ -493,6 +517,18 @@
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-installer-tests",
"total_ac": 0,
"ac_with_tests": 0,
"ac_with_gherkin": 0,
"ac_with_tests_and_gherkin": 0,
"complete": 0,
"needs_gherkin": 0,
"needs_tests": 0,
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-integration-tests",
"total_ac": 0,
Expand Down Expand Up @@ -673,6 +709,18 @@
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-pedals",
"total_ac": 0,
"ac_with_tests": 0,
"ac_with_gherkin": 0,
"ac_with_tests_and_gherkin": 0,
"complete": 0,
"needs_gherkin": 0,
"needs_tests": 0,
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-plugin",
"total_ac": 0,
Expand Down Expand Up @@ -877,6 +925,18 @@
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-testkit",
"total_ac": 0,
"ac_with_tests": 0,
"ac_with_gherkin": 0,
"ac_with_tests_and_gherkin": 0,
"complete": 0,
"needs_gherkin": 0,
"needs_tests": 0,
"draft": 0,
"incomplete": 0
},
{
"crate_name": "flight-tracing",
"total_ac": 2,
Expand Down
19 changes: 12 additions & 7 deletions docs/feature_status.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
| Needs Tests | 0 |
| Draft | 4455 |
| Incomplete | 0 |
| Microcrates | 87 |
| Microcrates with tests | 65 (74.7%) |
| Microcrates with Gherkin | 65 (74.7%) |
| Microcrates fully covered | 65 (74.7%) |
| Microcrates | 92 |
| Microcrates with tests | 65 (70.7%) |
| Microcrates with Gherkin | 65 (70.7%) |
| Microcrates fully covered | 65 (70.7%) |
| Test coverage | 100.0% |
| Gherkin coverage | 36.4% |
| Test + Gherkin coverage | 36.4% |
Expand All @@ -49,12 +49,14 @@
| flight-cli | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-cloud-profiles | 17 | 17 | 17 | 17 | 17 | 100.0% | 100.0% | 100.0% |
| flight-core | 13 | 13 | 13 | 13 | 13 | 100.0% | 100.0% | 100.0% |
| flight-dcs-bios | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-dcs-export | 8 | 8 | 8 | 8 | 8 | 100.0% | 100.0% | 100.0% |
| flight-dcs-modules | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-device-common | 8 | 8 | 8 | 8 | 8 | 100.0% | 100.0% | 100.0% |
| flight-elite | 8 | 8 | 8 | 8 | 8 | 100.0% | 100.0% | 100.0% |
| flight-falcon-bms | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-ffb | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-ffb-brunner | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-ffb-moza | 6 | 6 | 6 | 6 | 6 | 100.0% | 100.0% | 100.0% |
| flight-ffb-vpforce | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-headless | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
Expand All @@ -77,6 +79,7 @@
| flight-hotas-vpforce | 5 | 5 | 5 | 5 | 5 | 100.0% | 100.0% | 100.0% |
| flight-hotas-winwing | 16 | 16 | 16 | 16 | 16 | 100.0% | 100.0% | 100.0% |
| flight-il2 | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-installer-tests | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-integration-tests | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-ipc | 15 | 15 | 15 | 15 | 15 | 100.0% | 100.0% | 100.0% |
| flight-ksp | 4 | 4 | 4 | 4 | 4 | 100.0% | 100.0% | 100.0% |
Expand All @@ -92,6 +95,7 @@
| flight-panels-cougar | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-panels-goflight | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-panels-saitek | 17 | 17 | 17 | 17 | 17 | 100.0% | 100.0% | 100.0% |
| flight-pedals | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-plugin | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-prepar3d | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-process-detection | 6 | 6 | 6 | 6 | 6 | 100.0% | 100.0% | 100.0% |
Expand All @@ -109,6 +113,7 @@
| flight-streamdeck | 1 | 1 | 1 | 1 | 1 | 100.0% | 100.0% | 100.0% |
| flight-tactile | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-test-helpers | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-testkit | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-tracing | 2 | 2 | 2 | 2 | 2 | 100.0% | 100.0% | 100.0% |
| flight-trackir | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-ui | 4 | 4 | 4 | 4 | 4 | 100.0% | 100.0% | 100.0% |
Expand Down Expand Up @@ -214,8 +219,8 @@
| REQ-39 | AC-39.8 | WHEN journal events are applied THEN adapter state (current_system, docked_station, current_ship) SHALL reflect the events | specs/features/req_39_elite.feature:93<br>specs/features/req_39_elite.feature:100<br>specs/features/req_39_elite.feature:107 | 5 | ✅ Complete |
| REQ-40 | AC-40.1 | WHEN connected event carries dwApplicationVersionMajor < 13 THEN sim_id SHALL be Msfs | specs/features/req_40_msfs2024.feature:5<br>specs/features/req_40_msfs2024.feature:11 | 1 | ✅ Complete |
| REQ-40 | AC-40.2 | WHEN connected event carries dwApplicationVersionMajor >= 13 THEN sim_id SHALL be Msfs2024 | specs/features/req_40_msfs2024.feature:17<br>specs/features/req_40_msfs2024.feature:23 | 1 | ✅ Complete |
| REQ-40 | AC-40.3 | Kinematics definition SHALL use PLANE PITCH/BANK DEGREES and PLANE HEADING DEGREES MAGNETIC (not ATTITUDE *) | specs/features/req_40_msfs2024.feature:31 | 3 | ✅ Complete |
| REQ-40 | AC-40.4 | ACCELERATION BODY X/Z SHALL be requested in ft/s² and divided by 32.174 to yield G units | specs/features/req_40_msfs2024.feature:39<br>specs/features/req_40_msfs2024.feature:46 | 2 | ✅ Complete |
| REQ-40 | AC-40.3 | Kinematics definition SHALL use PLANE PITCH/BANK DEGREES and PLANE HEADING DEGREES MAGNETIC (not ATTITUDE *) | specs/features/req_40_msfs2024.feature:31 | 1 | ✅ Complete |
| REQ-40 | AC-40.4 | ACCELERATION BODY X/Z SHALL be requested in ft/s² and divided by 32.174 to yield G units | specs/features/req_40_msfs2024.feature:39<br>specs/features/req_40_msfs2024.feature:46 | 1 | ✅ Complete |
| REQ-40 | AC-40.5 | ProcessDetectionConfig SHALL contain a Msfs2024 definition with process FlightSimulator2024.exe | specs/features/req_40_msfs2024.feature:53<br>specs/features/req_40_msfs2024.feature:60 | 1 | ✅ Complete |
| REQ-41 | AC-41.1 | KspAdapter::sim_id() SHALL return SimId::Ksp and initial state SHALL be Disconnected | specs/features/req_41_ksp.feature:5<br>specs/features/req_41_ksp.feature:11 | 2 | ✅ Complete |
| REQ-41 | AC-41.2 | WHEN heading_deg > 180 THEN normalized heading SHALL be heading_deg - 360; otherwise heading SHALL be unchanged | specs/features/req_41_ksp.feature:17<br>specs/features/req_41_ksp.feature:23 | 2 | ✅ Complete |
Expand Down Expand Up @@ -568,7 +573,7 @@
| INF-REQ-16 | AC-16.2 | WHEN Gherkin scenario headers and AC tags are parsed THEN Scenario/Background/Outline headers SHALL be recognized and non-AC tags SHALL be filtered | specs/features/req_inf16_bdd_metrics.feature:17<br>specs/features/req_inf16_bdd_metrics.feature:23 | 3 | ✅ Complete |
| INF-REQ-16 | AC-16.3 | WHEN test references are parsed THEN double-colon notation and -p flag notation SHALL both be extracted; valid and invalid crate name candidates SHALL be distinguished | specs/features/req_inf16_bdd_metrics.feature:29<br>specs/features/req_inf16_bdd_metrics.feature:35 | 5 | ✅ Complete |
| INF-REQ-16 | AC-16.4 | WHEN coverage status is computed for all AC state combinations THEN every branch SHALL produce the correct AcStatus value; workspace crate filtering SHALL preserve unmapped rows | specs/features/req_inf16_bdd_metrics.feature:41<br>specs/features/req_inf16_bdd_metrics.feature:47 | 3 | ✅ Complete |
| INF-REQ-17 | AC-17.1 | WHEN MetadataValidationReport is created THEN it SHALL start in success state; adding issues SHALL mark it as failed | specs/features/req_inf16_bdd_metrics.feature:56<br>specs/features/req_inf17_workspace_meta.feature:11 | 2 | ✅ Complete |
| INF-REQ-17 | AC-17.1 | WHEN MetadataValidationReport is created THEN it SHALL start in success state; adding issues SHALL mark it as failed | specs/features/req_inf17_workspace_meta.feature:5<br>specs/features/req_inf17_workspace_meta.feature:11 | 2 | ✅ Complete |
| INF-REQ-17 | AC-17.2 | WHEN CrateMetadataIssue summary is formatted THEN missing fields SHALL be listed as 'missing' and invalid fields as 'invalid' | specs/features/req_inf17_workspace_meta.feature:17 | 2 | ✅ Complete |
| INF-REQ-17 | AC-17.3 | WHEN readme path is resolved THEN absolute paths SHALL be returned unchanged and relative paths SHALL be joined to the manifest directory; None readme SHALL yield None path | specs/features/req_inf17_workspace_meta.feature:23<br>specs/features/req_inf17_workspace_meta.feature:29 | 3 | ✅ Complete |
| INF-REQ-17 | AC-17.4 | WHEN workspace microcrate names are loaded from the repo root THEN core flight crates SHALL be present in the result | specs/features/req_inf17_workspace_meta.feature:35 | 2 | ✅ Complete |
Expand Down
19 changes: 12 additions & 7 deletions docs/reference/feature-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
| Needs Tests | 0 |
| Draft | 4455 |
| Incomplete | 0 |
| Microcrates | 87 |
| Microcrates with tests | 65 (74.7%) |
| Microcrates with Gherkin | 65 (74.7%) |
| Microcrates fully covered | 65 (74.7%) |
| Microcrates | 92 |
| Microcrates with tests | 65 (70.7%) |
| Microcrates with Gherkin | 65 (70.7%) |
| Microcrates fully covered | 65 (70.7%) |
| Test coverage | 100.0% |
| Gherkin coverage | 36.4% |
| Test + Gherkin coverage | 36.4% |
Expand All @@ -49,12 +49,14 @@
| flight-cli | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-cloud-profiles | 17 | 17 | 17 | 17 | 17 | 100.0% | 100.0% | 100.0% |
| flight-core | 13 | 13 | 13 | 13 | 13 | 100.0% | 100.0% | 100.0% |
| flight-dcs-bios | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-dcs-export | 8 | 8 | 8 | 8 | 8 | 100.0% | 100.0% | 100.0% |
| flight-dcs-modules | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-device-common | 8 | 8 | 8 | 8 | 8 | 100.0% | 100.0% | 100.0% |
| flight-elite | 8 | 8 | 8 | 8 | 8 | 100.0% | 100.0% | 100.0% |
| flight-falcon-bms | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-ffb | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-ffb-brunner | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-ffb-moza | 6 | 6 | 6 | 6 | 6 | 100.0% | 100.0% | 100.0% |
| flight-ffb-vpforce | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-headless | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
Expand All @@ -77,6 +79,7 @@
| flight-hotas-vpforce | 5 | 5 | 5 | 5 | 5 | 100.0% | 100.0% | 100.0% |
| flight-hotas-winwing | 16 | 16 | 16 | 16 | 16 | 100.0% | 100.0% | 100.0% |
| flight-il2 | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-installer-tests | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-integration-tests | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-ipc | 15 | 15 | 15 | 15 | 15 | 100.0% | 100.0% | 100.0% |
| flight-ksp | 4 | 4 | 4 | 4 | 4 | 100.0% | 100.0% | 100.0% |
Expand All @@ -92,6 +95,7 @@
| flight-panels-cougar | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-panels-goflight | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-panels-saitek | 17 | 17 | 17 | 17 | 17 | 100.0% | 100.0% | 100.0% |
| flight-pedals | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-plugin | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-prepar3d | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-process-detection | 6 | 6 | 6 | 6 | 6 | 100.0% | 100.0% | 100.0% |
Expand All @@ -109,6 +113,7 @@
| flight-streamdeck | 1 | 1 | 1 | 1 | 1 | 100.0% | 100.0% | 100.0% |
| flight-tactile | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-test-helpers | 3 | 3 | 3 | 3 | 3 | 100.0% | 100.0% | 100.0% |
| flight-testkit | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-tracing | 2 | 2 | 2 | 2 | 2 | 100.0% | 100.0% | 100.0% |
| flight-trackir | 0 | 0 | 0 | 0 | 0 | 0.0% | 0.0% | 0.0% |
| flight-ui | 4 | 4 | 4 | 4 | 4 | 100.0% | 100.0% | 100.0% |
Expand Down Expand Up @@ -214,8 +219,8 @@
| REQ-39 | AC-39.8 | WHEN journal events are applied THEN adapter state (current_system, docked_station, current_ship) SHALL reflect the events | specs/features/req_39_elite.feature:93<br>specs/features/req_39_elite.feature:100<br>specs/features/req_39_elite.feature:107 | 5 | ✅ Complete |
| REQ-40 | AC-40.1 | WHEN connected event carries dwApplicationVersionMajor < 13 THEN sim_id SHALL be Msfs | specs/features/req_40_msfs2024.feature:5<br>specs/features/req_40_msfs2024.feature:11 | 1 | ✅ Complete |
| REQ-40 | AC-40.2 | WHEN connected event carries dwApplicationVersionMajor >= 13 THEN sim_id SHALL be Msfs2024 | specs/features/req_40_msfs2024.feature:17<br>specs/features/req_40_msfs2024.feature:23 | 1 | ✅ Complete |
| REQ-40 | AC-40.3 | Kinematics definition SHALL use PLANE PITCH/BANK DEGREES and PLANE HEADING DEGREES MAGNETIC (not ATTITUDE *) | specs/features/req_40_msfs2024.feature:31 | 3 | ✅ Complete |
| REQ-40 | AC-40.4 | ACCELERATION BODY X/Z SHALL be requested in ft/s² and divided by 32.174 to yield G units | specs/features/req_40_msfs2024.feature:39<br>specs/features/req_40_msfs2024.feature:46 | 2 | ✅ Complete |
| REQ-40 | AC-40.3 | Kinematics definition SHALL use PLANE PITCH/BANK DEGREES and PLANE HEADING DEGREES MAGNETIC (not ATTITUDE *) | specs/features/req_40_msfs2024.feature:31 | 1 | ✅ Complete |
| REQ-40 | AC-40.4 | ACCELERATION BODY X/Z SHALL be requested in ft/s² and divided by 32.174 to yield G units | specs/features/req_40_msfs2024.feature:39<br>specs/features/req_40_msfs2024.feature:46 | 1 | ✅ Complete |
| REQ-40 | AC-40.5 | ProcessDetectionConfig SHALL contain a Msfs2024 definition with process FlightSimulator2024.exe | specs/features/req_40_msfs2024.feature:53<br>specs/features/req_40_msfs2024.feature:60 | 1 | ✅ Complete |
| REQ-41 | AC-41.1 | KspAdapter::sim_id() SHALL return SimId::Ksp and initial state SHALL be Disconnected | specs/features/req_41_ksp.feature:5<br>specs/features/req_41_ksp.feature:11 | 2 | ✅ Complete |
| REQ-41 | AC-41.2 | WHEN heading_deg > 180 THEN normalized heading SHALL be heading_deg - 360; otherwise heading SHALL be unchanged | specs/features/req_41_ksp.feature:17<br>specs/features/req_41_ksp.feature:23 | 2 | ✅ Complete |
Expand Down Expand Up @@ -568,7 +573,7 @@
| INF-REQ-16 | AC-16.2 | WHEN Gherkin scenario headers and AC tags are parsed THEN Scenario/Background/Outline headers SHALL be recognized and non-AC tags SHALL be filtered | specs/features/req_inf16_bdd_metrics.feature:17<br>specs/features/req_inf16_bdd_metrics.feature:23 | 3 | ✅ Complete |
| INF-REQ-16 | AC-16.3 | WHEN test references are parsed THEN double-colon notation and -p flag notation SHALL both be extracted; valid and invalid crate name candidates SHALL be distinguished | specs/features/req_inf16_bdd_metrics.feature:29<br>specs/features/req_inf16_bdd_metrics.feature:35 | 5 | ✅ Complete |
| INF-REQ-16 | AC-16.4 | WHEN coverage status is computed for all AC state combinations THEN every branch SHALL produce the correct AcStatus value; workspace crate filtering SHALL preserve unmapped rows | specs/features/req_inf16_bdd_metrics.feature:41<br>specs/features/req_inf16_bdd_metrics.feature:47 | 3 | ✅ Complete |
| INF-REQ-17 | AC-17.1 | WHEN MetadataValidationReport is created THEN it SHALL start in success state; adding issues SHALL mark it as failed | specs/features/req_inf16_bdd_metrics.feature:56<br>specs/features/req_inf17_workspace_meta.feature:11 | 2 | ✅ Complete |
| INF-REQ-17 | AC-17.1 | WHEN MetadataValidationReport is created THEN it SHALL start in success state; adding issues SHALL mark it as failed | specs/features/req_inf17_workspace_meta.feature:5<br>specs/features/req_inf17_workspace_meta.feature:11 | 2 | ✅ Complete |
| INF-REQ-17 | AC-17.2 | WHEN CrateMetadataIssue summary is formatted THEN missing fields SHALL be listed as 'missing' and invalid fields as 'invalid' | specs/features/req_inf17_workspace_meta.feature:17 | 2 | ✅ Complete |
| INF-REQ-17 | AC-17.3 | WHEN readme path is resolved THEN absolute paths SHALL be returned unchanged and relative paths SHALL be joined to the manifest directory; None readme SHALL yield None path | specs/features/req_inf17_workspace_meta.feature:23<br>specs/features/req_inf17_workspace_meta.feature:29 | 3 | ✅ Complete |
| INF-REQ-17 | AC-17.4 | WHEN workspace microcrate names are loaded from the repo root THEN core flight crates SHALL be present in the result | specs/features/req_inf17_workspace_meta.feature:35 | 2 | ✅ Complete |
Expand Down
Loading
Loading