TL;DR: Running list of planned features and enhancements, one section per item with priority, status, and date added. Currently three entries: the FTDT N-Tier architecture port (WI-1908, high priority — work packages WP-1 through WP-7 complete, with follow-ups noted), Document Center search (priority TBD, not yet implemented) and the MEC and LEC representatives refactor (AB#2840, PR D, delivered: v2, the council trim, MEC officer sections with their seats, the role line and rep identity). Shipped behavior lives in the Feature Showcase; new items are added above the marker line at the bottom of this page.
Planned features and enhancements for future releases.
| Priority | High |
| Status | Complete — WP-1 through WP-6 landed via PR1648; WP-7 (this entry) done |
| Added | 2026-06-23 |
Extract the FTDT rest-rules calculation engine and data sync service into the ALPAMobile.Application and ALPAMobile.Domain layers so they can be unit-tested in isolation and consumed by both the current MAUI head and the forthcoming Blazor Hybrid UI.
| Package | Scope | Status |
|---|---|---|
| WP-1 | Domain models (FlightSegment, Positioning, RestOpportunity) moved to ALPAMobile.Domain | Complete |
| WP-2 | LiteDB _type discriminator migration for renamed assembly | Complete |
| WP-3 | IFTDTStore abstraction; RestRulesCalculationEngine stub in ALPAMobile.Application | Complete |
| WP-4A | FTDTDutyPeriodMapper — hand-written bidirectional mapper replacing AutoMapper (NU1903) | Complete |
| WP-4B | IFTDTSyncService interface in ALPAMobile.Application | Complete |
| WP-4C | Wire FTDTDataSyncHelper : IFTDTSyncService; remove AutoMapper; DI registration; round-trip tests | Complete |
| WP-5 | RestRulesCalculationEngine — CAN §§700.40–700.43 and USA §117.25 rest rules ported from legacy calculators, gated behind GatedFTDTCalculationEngine | Complete |
| WP-6 | Architecture-test enforcement: Application_Should_Not_Reference_Maui | Complete |
| WP-7 | Docs update | Complete (this entry) |
Since this entry closed, the follow-ups have landed. The Blazor FTDT suite has shipped (ALPAMobile.Presentation/Components/Pages/FTDT/ — dashboard, duty-period list/form/edit, flight segment, rest, note, op-type select, and guide) and calculates exclusively through the gated engine. The ported calculators live in ALPAMobile.Application/Services/FlightTimeDutyTime and are selected per call by GatedFTDTCalculationEngine (feature-flag dispatch with shadow mode: legacy result surfaced, divergences logged); legacy FTDTCalculator_*.cs files remain in ALPAMobile/BusinessLogic as the default path until the flag flips. The native duty-period-ordering fix has been ported (FTDTDutyPeriodListViewModel, AB#2129). Still open: the follow-up check on the LiteDB type-rename migration against the assembly split already done by the Presentation Extraction (AB#2087).
| Priority | TBD |
| Status | Not yet implemented |
| Added | 2026-02-15 |
Add search functionality to the Document Center, allowing pilots to find documents by keyword across all scopes (ALPA International, MEC, LEC, KCM).
Identified during .NET 10 migration feature testing as a gap between features.html and actual implementation.
| Priority | Delivered; follows PR C (one card per pilot) |
| Status | Delivered (PR D, 2026-09-30) — the v2 read, the council trim, MEC officer sections, the "Primary | Secondary" role line, identity by the rep's member id, and an MEC officer's seat from the LEC list, also on the legacy reps page. Shipped behavior is described in the Feature Showcase. The backend serves v2 of both calls in development/QA and production (confirmed 2026-09-29) |
| Added | 2026-09-29 |
Move the representatives the app shows onto v2 of getlecreps (LEC reps) and getmecreps (MEC
officers). The routes stay the same; the app asks for v2 with the query parameter ?api-version=2.0, from one
constant in MecApiClient. Requests without it keep getting v1, so installed builds are unaffected. This
finishes the one-card-per-pilot work for representatives.
Representative, keeping every field today's readers use filled, and keep
the cached shape backward compatible.MecReps contact section lists the MEC officers on a page and
in Search, like LecReps does for LEC reps.memberId (the person's alpa_id; the
per-record aptifyId is not used). A rep joins a committee volunteer by the same id, so they are one card, and
reps with an id get a favorite heart.getmecreps records carry no seat, so an officer's seat comes
from the same person's getlecreps record in the member's own council list, matched by id: always there
in a single-council MEC, often not in others, and then no seat is shown. One rule (RepresentativeSeat)
fills it for the officer's line, Search, Favorites and the legacy reps page's subtitle.Add new roadmap items above this line.