← Component Specifications

My Pilot Group → MEC Composition Coverage

Epic AB#1821 Related AB#2404 · AB#2405 Companion to the coverage map

Why this exists

MyPilotGroupPage is being retired in favour of the MEC composition. Before it goes, every destination it links to needs checking against what the Blazor side actually provides — some are covered by components, some still need a page, and some are not pages at all.

The headline: comparing page names says this area is nearly covered. It is not. The native pages are scope-parameterised — one page serves both MEC and LEC via a query string. PilotGroupEventsPage?Scope=MEC and PilotGroupEventsPage?Scope=LEC are the same file. Blazor's routes (/mec/events, /mec/reps) take no scope, so they cover the MEC half only. All four LEC entries have no Blazor destination at all, and that is invisible to a name comparison because the native page looks matched.

Where the entries come from

The list is assembled from three sources, not one. That matters for coverage, because only the first is a fixed set.

SourceCount observedMechanism
Menu feed11 (7 MEC + 4 LEC) Root MenuItem by SpecialCode = MyPilotGroup, children split by Path.Contains("Scope=MEC") / "Scope=LEC", filtered on Visible.
Member preferences0–3 Appended only when the member service returns the flag: Is_MEC_Contact_List_User(), Is_MEC_Hotel_List_User(), Is_Hotel_Form_Active().
member.mecLinksunbounded Arbitrary WebLink records (Title, URL, Image, DisplayMode) appended to the MEC group. Each MEC can publish its own; there is no fixed list to build against.

Destination-by-destination

EntryNative destinationSourceBlazor todayVerdict
MEC Communications / NewsDocumentsListPage?Scope=MEC&Category=MEC Updatefeed /documents — no scope, no category preset Page needed Scope + category must be routable, or the entry cannot land anywhere specific.
MEC DocumentsDocumentCenterPage?Scope=MECfeed /documents renders a category list when no category is given Page needed Behaviour exists; the scope does not.
MEC CommitteesPilotGroupCommitteePagefeed /mec/committees Partial List covered; the committee detail level has no page, expander or modal.
MEC EventsPilotGroupEventsPage?Scope=MECfeed /mec/events Covered (MEC) Scope not parameterised.
MEC RepsPilotGroupRepresentativesPage?Scope=MECfeed /mec/reps Covered (MEC) Scope not parameterised.
Pay CodesFeed-supplied path (not in app code)feednone Gap Destination is defined by the feed; confirm what it points at before scoping.
Pilot DashboardFeed-supplied path (not in app code)feednone Gap Same — feed-defined.
LEC Update / NewsDocumentsListPage?Scope=LEC&Category=LEC Updatefeednone Gap LEC scope unsupported.
LEC DocumentsDocumentCenterPage?Scope=LECfeednone Gap LEC scope unsupported.
LEC EventsPilotGroupEventsPage?Scope=LECfeednone Gap Same page as MEC Events natively; Blazor route is MEC-only.
LEC RepsPilotGroupRepresentativesPage?Scope=LECfeednone Gap Same page as MEC Reps natively; Blazor route is MEC-only.
MEC Contact InfoContactsCategoryPagepreferencenone Gap Three Contacts screens, none built. Gate must be honoured.
MEC HotelsPilotGroupHotelsPagepreference/mec/hotels Covered Page exists. Its preference gate is missing — behaviour, tracked in AB#2405.
MEC Hotel FeedbackNo pagemailto: with email validation and an analytics eventpreferencenone Not a screen Implementation detail — scoped into AB#2405.
member.mecLinksWebLink.Navigate() — URL opened per DisplayModemember APInone Not a screen One generic handler, not per-link pages — scoped into AB#2405.

The Blazor MEC surface is itself a scaffold

MecOverviewPage renders two lists. The first four are real routes; the second four are hardcoded strings that all link back to /mec:

RowLinkStatus
Committees · Representatives · Events · Hotelsreal routesNavigates
UAL Contract (CBA) · Letter of Agreement Index · Grievance Tracker · MEC Bulletins/mecDead rows — same pattern as the Member Resources scaffold.

Neither list comes from the menu feed, so the MEC composition currently cannot show a feed-published entry — the same finding as AB#2404, in a second place.

What this means for the retirement

  1. LEC is the real hole. Four entries, no destinations. Decide whether the MEC composition covers LEC through a scope parameter, through parallel routes, or whether LEC is explicitly out of scope for the refresh. This is the single biggest coverage question and it is not visible from a page-name comparison.
  2. Scope has to be routable. Native gets MEC/LEC parity free because one page reads ?Scope=. Blazor hardcodes MEC into the route. Either the routes take a scope, or every MEC page needs an LEC twin.
  3. Some of this is behaviour, not screens — the Hotel Feedback mailto, the mecLinks handler, and the three preference gates. They are implementation detail rather than coverage, and are scoped into AB#2405 so they are not lost in the swap. One of them is a live defect: /mec/hotels ships without its gate, so it is visible to members the native app hides it from.
  4. Committee detail is missing entirely — the list is covered, the level below it is not.

Method note

Entries were read from a live signed-in session and cross-checked against MyPilotGroupPageViewModel and MenuService. The observed list was: MEC Communications, MEC Documents, MEC Committees, MEC Events, MEC Reps, Pay Codes, Pilot Dashboard, then LEC Documents, LEC Update, LEC Events, LEC Reps. No preference-gated entries appeared for that account, and no mecLinksso the live list understates the surface. A different member or MEC will show more. Do not treat any single account's list as the full set.