Mark P1 (URLs/breadcrumbs/names/nav) rules Done in TZ audit spec
This commit is contained in:
@@ -129,15 +129,18 @@ _Updated after each plan merges. Plan task: after every merge, append a row to t
|
||||
| Metric | Count |
|
||||
|---|---|
|
||||
| Total rules extracted | 243 (4.1.1: 27, 4.1.2: 42, 4.1.3: 22, 4.1.4: 26, 4.1.5: 7, 4.1.6: 6, 4.1.7: 7, 4.1.8: 19, 4.1.9: 8 skeleton, 4.1.10: 5, 4.1.11: 6, 4.1.12: 3, 4.1.13: 5 skeleton, 4.1.14: 5 skeleton, 4.1.15: 11 skeleton, 4.1.16: 8 skeleton, 4.1.17: 4, 4.1.18: 3, 4.1.19: 6, 4.1.20: 4, 4.1.21: 5, 4.1.22: 4, 4.1.23: 3, 4.1.24: 7 skeleton) |
|
||||
| Implemented | — |
|
||||
| Partial | — |
|
||||
| Missing | — |
|
||||
| Conflict | — |
|
||||
| TBD | — |
|
||||
| Done | — |
|
||||
| Implemented | 9 (4.1.2-R3 prior; 4.1.4-R2 prior `826a583`; 4.1.5-R1/R2/R3; 4.1.6-R1/R3; 4.1.7-R1/R3; 4.1.14-R5; 4.1.17-R1/R2; 4.1.21-R1/R2 — 12 if counting all pre-P1 `Implemented` rows across non-P1 sections) |
|
||||
| Partial | 2 (4.1.2-R4 flight-number padding not unit-tested; 4.1.4-R12 / R13 departure/arrival leaf city-pair deferred — see C3) |
|
||||
| Missing | 0 |
|
||||
| Conflict | 5 (C1–C5 in Conflicts register above; C1 resolved `bcaf3ab`, C2 resolved `2fe5364`, C3 deferred, C4 resolved `1821f7f`, C5 pending P6) |
|
||||
| TBD | ~117 (all non-P1 sections: 4.1.1 most rows, 4.1.3-R22 deferred to P4, 4.1.8-R4/R5 deferred to P3, 4.1.5–4.1.7 partial, 4.1.9–4.1.12 skeleton, 4.1.13–4.1.16 skeleton, 4.1.17-R3/R4, 4.1.18–4.1.24 skeleton, NFR rows) |
|
||||
| Done | 104 (§4.1.2: 41 Done + 1 Partial = 42 rows; §4.1.3: 21 Done + 1 TBD(P4) = 22 rows; §4.1.4: 24 Done + 2 Partial = 26 rows; §4.1.8: 17 Done + 2 TBD(P3) = 19 rows — 103 P1 rule rows done, plus 1 pre-P1 `Implemented` row re-verified = **104** Done status cells in spec) |
|
||||
|
||||
### Merge log
|
||||
_Empty until P1 ships._
|
||||
|
||||
| Date | Plan | Scope | Commit range | Notes |
|
||||
|---|---|---|---|---|
|
||||
| 2026-04-21 | P1 | URLs / breadcrumbs / page names / cross-section nav | `8160286..e935596` | ~103 rules marked Done across §4.1.2/3/4/8; 5 conflicts registered (C1/C2/C4 resolved, C3 deferred, C5 pending P6); 2 rules Partial (R4 padding, R12/13 city-pair) |
|
||||
|
||||
---
|
||||
|
||||
@@ -147,7 +150,11 @@ Arbitrated case-by-case (Q2 = C). Each conflict blocks its owning plan's kickoff
|
||||
|
||||
| # | Rule IDs | TZ says | Angular reference says | Current React says | Diagnostic | Resolution |
|
||||
|---|---|---|---|---|---|---|
|
||||
| _(empty — populated during plan kickoffs)_ | | | | | | |
|
||||
| C1 | 4.1.3-R21 | Flight Map title = `"Карта полетов"` (short form) | Angular reference: `"Карта полетов авиакомпании Аэрофлот"` (long form with carrier) | React impl had no explicit title | P1 verification (`bcaf3ab`) discovered Angular uses long form not in TZ | **Adopt TZ short form** `"Карта полетов"`. Commit: `bcaf3ab`. |
|
||||
| C2 | 4.1.4-R23 / R24 / R25 | TZ Table 7 says Flight Map breadcrumb = `[Главная]` only on all map states | Prior React impl had `[Главная / Карта полетов]` (self-referential second crumb) | Prior React had two crumbs | TZ explicitly shows single crumb for all map pages | **Adopt TZ**: drop self-referential second crumb. Commit: `2fe5364`. |
|
||||
| C3 | 4.1.4-R12 / R13 | TZ Table 7 row 6 says departure/arrival leaf shows `{город вылета}-{город прилета}` (both cities) | Angular shows paired cities | `?request=` param encodes only one station (the searched one) | Showing paired cities at render time requires an extra API lookup for the other endpoint; not done in P1 | **Deferred arbitration**: leaf shows single searched station for now. Full city-pair deferred to P2 when flight-result data is in scope. Commit: `1821f7f`. Linked: 4.1.4-R12 / R13 marked Partial. |
|
||||
| C4 | 4.1.4-R14 | TZ Table 7 row 6 (transitions col) requires last breadcrumb crumb on details page to be clickable (navigates back to search with filter restored) | Angular: last crumb is a link | Previous React `Breadcrumbs` component rendered last crumb as non-link (`!isLast` guard) regardless of whether `url` was provided | TZ and Angular both require clickable leaf | **Adopt TZ**: removed `!isLast` guard — last crumb with `url` now rendered as `<a>` and clickable. Commit: `1821f7f`. Note: `aria-current="page"` is still set on the last crumb as required by R2. |
|
||||
| C5 | 4.1.1-R22 | TZ writes `"ДД.ММ.ГГГ"` (3 Г) for Flight Map date placeholder without geo consent | All other placeholders in TZ use `"ДД.ММ.ГГГГ"` (4 Г) | Not yet implemented (P6 scope) | Clear TZ typo — 3 Г is inconsistent with every other date placeholder in the document | **Treat as typo**: implement as `"ДД.ММ.ГГГГ"` (4 Г). Commit: pending (P6 start-page scope). Conflict to be closed when P6 implements Flight Map start-page. |
|
||||
|
||||
---
|
||||
|
||||
@@ -197,48 +204,48 @@ URLs encode language, area (onlineboard/schedule/flights-map), mode (route / fli
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.2-R1 | URL pattern (Web and Mobile identical): `https://flights.aeroflot.ru/{lang}/{area}[/{mode}/{params}]` | 4.1.2 Table 5 | all | `src/routes/[lang]/*` | TBD | Verify routes file-layout matches Table 5. | P1 |
|
||||
| 4.1.2-R2 | `{lang}` = locale+language pair (`ru-ru`, `en-us`, …). All site languages must be supported | 4.1.2 ¶1 | all | `src/i18n/` | TBD | Verify all 9 languages exposed as route params. | P1 |
|
||||
| 4.1.2-R3 | Online-Board title page: `/{lang}/onlineboard` | 4.1.2 Table 5 row 1 | all | `src/routes/[lang]/onlineboard/page.tsx` | Implemented | — | P1 |
|
||||
| 4.1.2-R4 | Online-Board flight-number search: `/{lang}/onlineboard/flight/{SUNNNN}-{YYYYMMDD}`; if user entered `38` → pad to `SU0038`, `383` → `SU0383` (4-digit number, 3-char carrier code) | 4.1.2 Table 5 row 2 | all | `src/routes/[lang]/onlineboard/flight/[params]/*` | TBD | Verify 4-digit padding; add unit test for padder. | P1 |
|
||||
| 4.1.2-R5 | Online-Board route search: `/{lang}/onlineboard/route/{fromCity}-{toCity}-{YYYYMMDD}` | 4.1.2 Table 5 row 3 | all | `src/routes/[lang]/onlineboard/route/[params]/*` | TBD | Verify URL builder emits exactly `/{lang}/onlineboard/route/{dep}-{arr}-{date}` for no-time searches. Time-range variant → R13. | P1 |
|
||||
| 4.1.2-R6 | Online-Board departure-only search: `/{lang}/onlineboard/departure/{fromCity}-{YYYYMMDD}` | 4.1.2 Table 5 | all | `src/routes/[lang]/onlineboard/departure/[params]/*` | TBD | Verify URL builder emits exactly `/{lang}/onlineboard/departure/{dep}-{date}` for no-time searches. Time-range variant → R14. | P1 |
|
||||
| 4.1.2-R7 | Online-Board arrival-only search: `/{lang}/onlineboard/arrival/{toCity}-{YYYYMMDD}` | 4.1.2 Table 5 | all | `src/routes/[lang]/onlineboard/arrival/[params]/*` | TBD | Verify URL builder emits exactly `/{lang}/onlineboard/arrival/{arr}-{date}` for no-time searches. Time-range variant → R15. | P1 |
|
||||
| 4.1.2-R8 | Schedule URL patterns mirror Online-Board with `/schedule/` prefix; add range date for schedule | 4.1.2 Table 5 | all | `src/routes/[lang]/schedule/*` | TBD | Enumerate + verify each. | P1 |
|
||||
| 4.1.2-R9 | Flight-Map URL pattern (route, validation) | 4.1.2 Table 5 (§4.1.24 refers) | all | `src/routes/[lang]/flights-map/*` | TBD | Populate routing from 4.1.24 text; owned by P1 because URL rules cluster there. | P1 |
|
||||
| 4.1.2-R10 | Unknown directory → 404 page (§4.1.21) | 4.1.2 ¶2 | all | `src/routes/error/[code]/*` | TBD | Verify 404 on bogus URLs. | P1 |
|
||||
| 4.1.2-R11 | Out-of-range date → redirect to the respective **start page** (not 404) | 4.1.2 ¶3–4 | all | — | TBD | Add date-window guard + redirect. | P1 |
|
||||
| 4.1.2-R12 | Date window constants: Online-Board `[-1, +14]`, Schedule `[-1, +330]`, Flight Map `[-1, +6 months]` | 4.1.2 ¶3–4 | all | — | TBD | Centralize as constants; reference from URL guards and filter validators. | P1 |
|
||||
| 4.1.2-R13 | Online-Board route search with time filter: `/{lang}/onlineboard/route/{fromCity}-{toCity}-{YYYYMMDD}-{HHMMHHmm}` — time period `{timeFrom}{timeTo}` appended to date, e.g. `06002200` | 4.1.2 Table 5 row 3 | all | — | TBD | Implement time-period segment in route URL builder; verify round-trip parse. | P1 |
|
||||
| 4.1.2-R14 | Online-Board departure-only search with time filter: `/{lang}/onlineboard/departure/{fromCity}-{YYYYMMDD}-{HHMMHHmm}` (optional time suffix) | 4.1.2 Table 5 row 4 | all | — | TBD | Verify optional time suffix handled; add parser test. | P1 |
|
||||
| 4.1.2-R15 | Online-Board arrival-only search with time filter: `/{lang}/onlineboard/arrival/{toCity}-{YYYYMMDD}-{HHMMHHmm}` (optional time suffix) | 4.1.2 Table 5 row 5 | all | — | TBD | Verify optional time suffix handled. | P1 |
|
||||
| 4.1.2-R16 | Online-Board details card — arrival-mode `?request=` param: `?request=onlineboard-arrival-{city}-{flightNumber}-{YYYYMMDD}[-{HHMMHHmm}]` | 4.1.2 Table 5 row 6 | all | — | TBD | Verify `?request=` builder for arrival mode; add test. | P1 |
|
||||
| 4.1.2-R17 | Online-Board details card — departure-mode `?request=` param: `?request=onlineboard-departure-{city}-{flightNumber}-{YYYYMMDD}[-{HHMMHHmm}]` | 4.1.2 Table 5 row 6 | all | — | TBD | Verify `?request=` builder for departure mode. | P1 |
|
||||
| 4.1.2-R18 | Online-Board details card — route-mode `?request=` param: `?request=onlineboard-route-{dep}-{arr}-{flightNumber}-{YYYYMMDD}[-{HHMMHHmm}]` | 4.1.2 Table 5 row 6 | all | — | TBD | Verify `?request=` builder for route mode. | P1 |
|
||||
| 4.1.2-R19 | Online-Board details card — flight-number-mode `?request=` param: `?request=onlineboard-flight-{flightNumber}-{YYYYMMDD}` (no time suffix for flight-number mode) | 4.1.2 Table 5 row 6 | all | — | TBD | Verify flight-number mode `?request=` omits time suffix. | P1 |
|
||||
| 4.1.2-R20 | Online-Board details base URL (same for all four `?request=` forms): `/{lang}/onlineboard/{flightNumber}-{YYYYMMDD}` | 4.1.2 Table 5 row 6 | all | — | TBD | Verify base-path uses padded 4-digit flight number (per R4 padding rule). | P1 |
|
||||
| 4.1.2-R21 | Online-Board "Refresh direct link" URL is identical in shape to the details card URL (row 6); no difference in path or query | 4.1.2 Table 5 row 7 | all | — | TBD | Verify refresh loads same URL as card navigation; no mutation. | P1 |
|
||||
| 4.1.2-R22 | Online-Board "Share / copy link" URL: `/{lang}/onlineboard/flight/{flightNumber}-{YYYYMMDD}` — no `?request=` param; always `flight` mode regardless of original search mode | 4.1.2 Table 5 row 8 | all | — | TBD | Verify share URL strips `?request=` and uses `/flight/` mode path. | P1 |
|
||||
| 4.1.2-R23 | Schedule title page URL: `/{lang}/schedule` | 4.1.2 Table 5 row 9 | all | `src/routes/[lang]/schedule/page.tsx` | TBD | Verify route exists. | P1 |
|
||||
| 4.1.2-R24 | Schedule route search — one-way, all connections, no time: `/{lang}/schedule/route/{dep}-{arr}-{dateFrom}-{dateTo}` (date range, both dates `YYYYMMDD`) | 4.1.2 Table 5 row 10 | all | — | TBD | Verify date-range URL format and parsing. | P1 |
|
||||
| 4.1.2-R25 | Schedule route search — one-way, all connections, with time: `/{lang}/schedule/route/{dep}-{arr}-{dateFrom}-{dateTo}-{HHMMHHmm}` | 4.1.2 Table 5 row 10 | all | — | TBD | Verify time-period suffix appended after dateTo. | P1 |
|
||||
| 4.1.2-R26 | Schedule route search — round-trip, no time: `/{lang}/schedule/route/{dep}-{arr}-{dateFrom}-{dateTo}/{arr}-{dep}-{returnDateFrom}-{returnDateTo}` (two slash-separated segments) | 4.1.2 Table 5 row 10 | all | — | TBD | Verify slash-delimited second segment for return leg. | P1 |
|
||||
| 4.1.2-R27 | Schedule route search — round-trip, with time: both segments each append `-{HHMMHHmm}` after their dateTo | 4.1.2 Table 5 row 10 | all | — | TBD | Verify both segments carry independent time filters. | P1 |
|
||||
| 4.1.2-R28 | Schedule route search — one-way, direct-only (`С0`): append `-С0` suffix after the date or time token, e.g. `…-{dateTo}-С0` or `…-{HHMMHHmm}-С0` | 4.1.2 Table 5 row 10 | all | — | TBD | Verify `-С0` suffix position in URL builder. | P1 |
|
||||
| 4.1.2-R29 | Schedule route search — round-trip, direct-only: each slash segment ends with `-С0` | 4.1.2 Table 5 row 10 | all | — | TBD | Verify each return segment also has `-С0`. | P1 |
|
||||
| 4.1.2-R30 | Schedule details card URL — direct/multi-segment, one-way, no time: `/{lang}/schedule/{flightNumber}-{YYYYMMDD}?request=schedule-route-{dep}-{arr}-{dateFrom}-{dateTo}` | 4.1.2 Table 5 row 11 | all | — | TBD | Verify `?request=` for schedule direct one-way. | P1 |
|
||||
| 4.1.2-R31 | Schedule details card URL — direct/multi-segment, one-way, with time: `?request=schedule-route-{dep}-{arr}-{dateFrom}-{dateTo}-{HHMMHHmm}` | 4.1.2 Table 5 row 11 | all | — | TBD | Verify time suffix in schedule `?request=`. | P1 |
|
||||
| 4.1.2-R32 | Schedule details card URL — connecting flight, one-way: path uses slash-delimited flight numbers `/{fn0}-{date}/{fn1}-{date}[/{fn2}-{date}]` (max 2 connections = up to 3 segments); `?request=` same as direct | 4.1.2 Table 5 row 11 | all | — | TBD | Verify multi-segment path with up to 3 flight-number-date pairs. | P1 |
|
||||
| 4.1.2-R33 | Schedule details card URL — round-trip, no time: `?request=` encodes both outbound and return legs: `?request=schedule-route-{dep}-{arr}-{df}-{dt}-{arr}-{dep}-{rdf}-{rdt}` | 4.1.2 Table 5 row 11 | all | — | TBD | Verify concatenated return-leg parameters in `?request=`. | P1 |
|
||||
| 4.1.2-R34 | Schedule details card URL — round-trip with connections filter (`С0`): `?request=` embeds `-С0` after each date-range block | 4.1.2 Table 5 row 11 | all | — | TBD | Verify `-С0` positions inside `?request=` for round-trip + direct filter. | P1 |
|
||||
| 4.1.2-R35 | Schedule "Refresh direct link" URL identical to details card URL (row 11 in Table 5; same as Online-Board analogy row 7) | 4.1.2 Table 5 row 12 | all | — | TBD | Verify refresh reloads same URL without mutation. | P1 |
|
||||
| 4.1.2-R36 | Schedule "Share / copy link" URL — direct/multi-segment: `/{lang}/schedule/{flightNumber}-{YYYYMMDD}` (no `?request=`) | 4.1.2 Table 5 row 13 | all | — | TBD | Verify share URL is clean path without `?request=`. | P1 |
|
||||
| 4.1.2-R37 | Schedule "Share / copy link" URL — connecting: `/{lang}/schedule/{fn0}-{date}/{fn1}-{date}[/{fn2}-{date}]` slash-joined (no `?request=`) | 4.1.2 Table 5 row 13 | all | — | TBD | Verify connecting share URL uses slash-joined path. | P1 |
|
||||
| 4.1.2-R38 | Flight Map title page URL: `/{lang}/flights-map` | 4.1.2 Table 5 (Map row 1) | all | `src/routes/[lang]/flights-map/page.tsx` | TBD | Verify route exists. | P1 |
|
||||
| 4.1.2-R39 | Flight Map departure search URL: `/{lang}/flights-map` — same URL regardless of departure-city filter value (search state NOT encoded in URL) | 4.1.2 Table 5 (Map row 2) | all | — | TBD | Verify URL stays constant under filter changes. | P1 |
|
||||
| 4.1.2-R40 | Flight Map route search URL: `/{lang}/flights-map` — same URL for all search states | 4.1.2 Table 5 (Map row 3) | all | — | TBD | Verify URL stays constant when both cities filled. | P1 |
|
||||
| 4.1.2-R41 | Flight Map arrival-only search is **not implemented** ("Не выполняется") — no arrival-mode URL for flights-map | 4.1.2 Table 5 (Map row 4) | all | — | TBD | Assert no arrival-mode route exists; verify UI hides arrival mode on Map tab. | P1 |
|
||||
| 4.1.2-R42 | Mobile URL rules are identical to web URL rules (no mobile-specific URL variants) | 4.1.2 ¶1 | mobile | — | TBD | Verify no mobile-specific routing divergence. | P1 |
|
||||
| 4.1.2-R1 | URL pattern (Web and Mobile identical): `https://flights.aeroflot.ru/{lang}/{area}[/{mode}/{params}]` | 4.1.2 Table 5 | all | `src/routes/[lang]/*` | Done 8160286 | Route file-layout matches Table 5; verified by e2e `e935596`. | P1 |
|
||||
| 4.1.2-R2 | `{lang}` = locale+language pair (`ru-ru`, `en-us`, …). All site languages must be supported | 4.1.2 ¶1 | all | `src/i18n/` | Done 8160286 | All 9 languages exposed as route params; i18n keys verified. | P1 |
|
||||
| 4.1.2-R3 | Online-Board title page: `/{lang}/onlineboard` | 4.1.2 Table 5 row 1 | all | `src/routes/[lang]/onlineboard/page.tsx` | Done 8160286 | Route exists; confirmed by e2e. | P1 |
|
||||
| 4.1.2-R4 | Online-Board flight-number search: `/{lang}/onlineboard/flight/{SUNNNN}-{YYYYMMDD}`; if user entered `38` → pad to `SU0038`, `383` → `SU0383` (4-digit number, 3-char carrier code) | 4.1.2 Table 5 row 2 | all | `src/routes/[lang]/onlineboard/flight/[params]/*` | Partial f5304e2 | Guard enforced; 4-digit padding in `buildFlightUrlParams` not yet unit-tested — add test at P3 kickoff. | P1 |
|
||||
| 4.1.2-R5 | Online-Board route search: `/{lang}/onlineboard/route/{fromCity}-{toCity}-{YYYYMMDD}` | 4.1.2 Table 5 row 3 | all | `src/routes/[lang]/onlineboard/route/[params]/*` | Done f2c52ca | Route guard enforced; URL builder verified by e2e `e935596`. | P1 |
|
||||
| 4.1.2-R6 | Online-Board departure-only search: `/{lang}/onlineboard/departure/{fromCity}-{YYYYMMDD}` | 4.1.2 Table 5 | all | `src/routes/[lang]/onlineboard/departure/[params]/*` | Done 7d6b23b | Route guard enforced; URL builder verified. | P1 |
|
||||
| 4.1.2-R7 | Online-Board arrival-only search: `/{lang}/onlineboard/arrival/{toCity}-{YYYYMMDD}` | 4.1.2 Table 5 | all | `src/routes/[lang]/onlineboard/arrival/[params]/*` | Done d633b2d | Route guard enforced; URL builder verified. | P1 |
|
||||
| 4.1.2-R8 | Schedule URL patterns mirror Online-Board with `/schedule/` prefix; add range date for schedule | 4.1.2 Table 5 | all | `src/routes/[lang]/schedule/*` | Done 12807cf | Schedule codec extended for all URL patterns; guard `ead18fc` enforces window. | P1 |
|
||||
| 4.1.2-R9 | Flight-Map URL pattern (route, validation) | 4.1.2 Table 5 (§4.1.24 refers) | all | `src/routes/[lang]/flights-map/*` | Done bcaf3ab | Map route verified; URL stays constant per R39–R40. | P1 |
|
||||
| 4.1.2-R10 | Unknown directory → 404 page (§4.1.21) | 4.1.2 ¶2 | all | `src/routes/error/[code]/*` | Done e935596 | Verified by Playwright e2e guard tests. | P1 |
|
||||
| 4.1.2-R11 | Out-of-range date → redirect to the respective **start page** (not 404) | 4.1.2 ¶3–4 | all | `fbd4438` + mode guards | Done fbd4438 | Board guards `f5304e2..57d21f6`, Schedule guard `ead18fc`; all redirect to start page. | P1 |
|
||||
| 4.1.2-R12 | Date window constants: Online-Board `[-1, +14]`, Schedule `[-1, +330]`, Flight Map `[-1, +6 months]` | 4.1.2 ¶3–4 | all | `src/shared/dateWindow.ts` | Done 750a328 | Centralized in `dateWindow` module; `4f84048` removes scattered literals. | P1 |
|
||||
| 4.1.2-R13 | Online-Board route search with time filter: `/{lang}/onlineboard/route/{fromCity}-{toCity}-{YYYYMMDD}-{HHMMHHmm}` — time period `{timeFrom}{timeTo}` appended to date, e.g. `06002200` | 4.1.2 Table 5 row 3 | all | `src/routes/[lang]/onlineboard/route/[params]/*` | Done f2c52ca | Optional time suffix parsed and preserved in codec; e2e verified. | P1 |
|
||||
| 4.1.2-R14 | Online-Board departure-only search with time filter: `/{lang}/onlineboard/departure/{fromCity}-{YYYYMMDD}-{HHMMHHmm}` (optional time suffix) | 4.1.2 Table 5 row 4 | all | departure guard | Done 7d6b23b | Optional time suffix handled. | P1 |
|
||||
| 4.1.2-R15 | Online-Board arrival-only search with time filter: `/{lang}/onlineboard/arrival/{toCity}-{YYYYMMDD}-{HHMMHHmm}` (optional time suffix) | 4.1.2 Table 5 row 5 | all | arrival guard | Done d633b2d | Optional time suffix handled. | P1 |
|
||||
| 4.1.2-R16 | Online-Board details card — arrival-mode `?request=` param: `?request=onlineboard-arrival-{city}-{flightNumber}-{YYYYMMDD}[-{HHMMHHmm}]` | 4.1.2 Table 5 row 6 | all | `src/shared/detailsRequestParam.ts` | Done 531ace6 | Codec builds and parses all four `?request=` modes including arrival. | P1 |
|
||||
| 4.1.2-R17 | Online-Board details card — departure-mode `?request=` param: `?request=onlineboard-departure-{city}-{flightNumber}-{YYYYMMDD}[-{HHMMHHmm}]` | 4.1.2 Table 5 row 6 | all | `src/shared/detailsRequestParam.ts` | Done 531ace6 | Departure mode covered by codec. | P1 |
|
||||
| 4.1.2-R18 | Online-Board details card — route-mode `?request=` param: `?request=onlineboard-route-{dep}-{arr}-{flightNumber}-{YYYYMMDD}[-{HHMMHHmm}]` | 4.1.2 Table 5 row 6 | all | `src/shared/detailsRequestParam.ts` | Done 531ace6 | Route mode covered by codec. | P1 |
|
||||
| 4.1.2-R19 | Online-Board details card — flight-number-mode `?request=` param: `?request=onlineboard-flight-{flightNumber}-{YYYYMMDD}` (no time suffix for flight-number mode) | 4.1.2 Table 5 row 6 | all | `src/shared/detailsRequestParam.ts` | Done 531ace6 | Flight-number mode omits time suffix; verified in codec unit tests. | P1 |
|
||||
| 4.1.2-R20 | Online-Board details base URL (same for all four `?request=` forms): `/{lang}/onlineboard/{flightNumber}-{YYYYMMDD}` | 4.1.2 Table 5 row 6 | all | `8b22f06` (wired into page) | Done 8b22f06 | Base path uses padded flight number; codec wired into `OnlineBoardDetailsPage`. | P1 |
|
||||
| 4.1.2-R21 | Online-Board "Refresh direct link" URL is identical in shape to the details card URL (row 6); no difference in path or query | 4.1.2 Table 5 row 7 | all | details page routing | Done 8b22f06 | Refresh reloads same URL — codec decodes on mount; no mutation. | P1 |
|
||||
| 4.1.2-R22 | Online-Board "Share / copy link" URL: `/{lang}/onlineboard/flight/{flightNumber}-{YYYYMMDD}` — no `?request=` param; always `flight` mode regardless of original search mode | 4.1.2 Table 5 row 8 | all | — | Done 531ace6 | Share URL uses clean `/flight/` path with no `?request=`; codec does not add it for share links. | P1 |
|
||||
| 4.1.2-R23 | Schedule title page URL: `/{lang}/schedule` | 4.1.2 Table 5 row 9 | all | `src/routes/[lang]/schedule/page.tsx` | Done ead18fc | Route exists; guard verified by e2e. | P1 |
|
||||
| 4.1.2-R24 | Schedule route search — one-way, all connections, no time: `/{lang}/schedule/route/{dep}-{arr}-{dateFrom}-{dateTo}` (date range, both dates `YYYYMMDD`) | 4.1.2 Table 5 row 10 | all | `src/shared/detailsRequestParam.ts` | Done 12807cf | Date-range URL format implemented and parsed by schedule codec extension. | P1 |
|
||||
| 4.1.2-R25 | Schedule route search — one-way, all connections, with time: `/{lang}/schedule/route/{dep}-{arr}-{dateFrom}-{dateTo}-{HHMMHHmm}` | 4.1.2 Table 5 row 10 | all | schedule codec | Done 12807cf | Time suffix appended after dateTo; verified by codec unit tests. | P1 |
|
||||
| 4.1.2-R26 | Schedule route search — round-trip, no time: `/{lang}/schedule/route/{dep}-{arr}-{dateFrom}-{dateTo}/{arr}-{dep}-{returnDateFrom}-{returnDateTo}` (two slash-separated segments) | 4.1.2 Table 5 row 10 | all | schedule codec | Done 12807cf | Slash-delimited second segment for return leg implemented. | P1 |
|
||||
| 4.1.2-R27 | Schedule route search — round-trip, with time: both segments each append `-{HHMMHHmm}` after their dateTo | 4.1.2 Table 5 row 10 | all | schedule codec | Done 12807cf | Both segments carry independent time filters; verified in codec tests. | P1 |
|
||||
| 4.1.2-R28 | Schedule route search — one-way, direct-only (`С0`): append `-С0` suffix after the date or time token, e.g. `…-{dateTo}-С0` or `…-{HHMMHHmm}-С0` | 4.1.2 Table 5 row 10 | all | schedule codec | Done 12807cf | `-С0` suffix position verified in codec. | P1 |
|
||||
| 4.1.2-R29 | Schedule route search — round-trip, direct-only: each slash segment ends with `-С0` | 4.1.2 Table 5 row 10 | all | schedule codec | Done 12807cf | Each segment carries `-С0`; round-trip case verified. | P1 |
|
||||
| 4.1.2-R30 | Schedule details card URL — direct/multi-segment, one-way, no time: `/{lang}/schedule/{flightNumber}-{YYYYMMDD}?request=schedule-route-{dep}-{arr}-{dateFrom}-{dateTo}` | 4.1.2 Table 5 row 11 | all | `5728861` | Done 5728861 | Schedule search → details links emit `?request=`; verified by breadcrumb tests. | P1 |
|
||||
| 4.1.2-R31 | Schedule details card URL — direct/multi-segment, one-way, with time: `?request=schedule-route-{dep}-{arr}-{dateFrom}-{dateTo}-{HHMMHHmm}` | 4.1.2 Table 5 row 11 | all | schedule codec | Done 12807cf | Time suffix included in `?request=` when filter has time range. | P1 |
|
||||
| 4.1.2-R32 | Schedule details card URL — connecting flight, one-way: path uses slash-delimited flight numbers `/{fn0}-{date}/{fn1}-{date}[/{fn2}-{date}]` (max 2 connections = up to 3 segments); `?request=` same as direct | 4.1.2 Table 5 row 11 | all | schedule codec | Done 12807cf | Multi-segment path with up to 3 flight-number-date pairs implemented. | P1 |
|
||||
| 4.1.2-R33 | Schedule details card URL — round-trip, no time: `?request=` encodes both outbound and return legs: `?request=schedule-route-{dep}-{arr}-{df}-{dt}-{arr}-{dep}-{rdf}-{rdt}` | 4.1.2 Table 5 row 11 | all | schedule codec | Done 12807cf | Concatenated return-leg parameters in `?request=` implemented. | P1 |
|
||||
| 4.1.2-R34 | Schedule details card URL — round-trip with connections filter (`С0`): `?request=` embeds `-С0` after each date-range block | 4.1.2 Table 5 row 11 | all | schedule codec | Done 12807cf | `-С0` positions inside `?request=` for round-trip + direct filter verified. | P1 |
|
||||
| 4.1.2-R35 | Schedule "Refresh direct link" URL identical to details card URL (row 11 in Table 5; same as Online-Board analogy row 7) | 4.1.2 Table 5 row 12 | all | schedule details page | Done 266a6f9 | Refresh reloads same URL; breadcrumb tests confirm no mutation. | P1 |
|
||||
| 4.1.2-R36 | Schedule "Share / copy link" URL — direct/multi-segment: `/{lang}/schedule/{flightNumber}-{YYYYMMDD}` (no `?request=`) | 4.1.2 Table 5 row 13 | all | schedule codec | Done 12807cf | Share URL is clean path without `?request=`. | P1 |
|
||||
| 4.1.2-R37 | Schedule "Share / copy link" URL — connecting: `/{lang}/schedule/{fn0}-{date}/{fn1}-{date}[/{fn2}-{date}]` slash-joined (no `?request=`) | 4.1.2 Table 5 row 13 | all | schedule codec | Done 12807cf | Connecting share URL uses slash-joined path without `?request=`. | P1 |
|
||||
| 4.1.2-R38 | Flight Map title page URL: `/{lang}/flights-map` | 4.1.2 Table 5 (Map row 1) | all | `src/routes/[lang]/flights-map/page.tsx` | Done bcaf3ab | Route exists; title verified. | P1 |
|
||||
| 4.1.2-R39 | Flight Map departure search URL: `/{lang}/flights-map` — same URL regardless of departure-city filter value (search state NOT encoded in URL) | 4.1.2 Table 5 (Map row 2) | all | `flights-map/*` | Done bcaf3ab | URL stays constant under filter changes; map state is client-side only. | P1 |
|
||||
| 4.1.2-R40 | Flight Map route search URL: `/{lang}/flights-map` — same URL for all search states | 4.1.2 Table 5 (Map row 3) | all | `flights-map/*` | Done bcaf3ab | URL stays constant when both cities filled. | P1 |
|
||||
| 4.1.2-R41 | Flight Map arrival-only search is **not implemented** ("Не выполняется") — no arrival-mode URL for flights-map | 4.1.2 Table 5 (Map row 4) | all | — | Done 2fe5364 | No arrival-mode route exists; map breadcrumb stays `[Главная]` only. | P1 |
|
||||
| 4.1.2-R42 | Mobile URL rules are identical to web URL rules (no mobile-specific URL variants) | 4.1.2 ¶1 | mobile | — | Done 8160286 | No mobile-specific routing divergence; verified by e2e `e935596`. | P1 |
|
||||
|
||||
---
|
||||
|
||||
@@ -249,28 +256,28 @@ Each page in the section gets a TZ-prescribed title format driven by context (ar
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.3-R1 | Online-Board start page title per TZ Table (populate at P1 kickoff) | 4.1.3 | all | `src/ui/seo/*` | TBD | Populate. | P1 |
|
||||
| 4.1.3-R2 | Schedule start page title per TZ | 4.1.3 | all | — | TBD | Populate. | P1 |
|
||||
| 4.1.3-R3 | Flight-Map start page title per TZ | 4.1.3 | all | — | TBD | Populate. | P1 |
|
||||
| 4.1.3-R4 | Search-result page titles per mode (route / flight-number / departure / arrival) | 4.1.3 | all | — | TBD | Populate. | P1 |
|
||||
| 4.1.3-R5 | Flight-details page title per TZ (direct / multi-segment / connecting) | 4.1.3 | all | — | TBD | Populate. | P1 |
|
||||
| 4.1.3-R6 | All titles translated for each of 9 languages | 4.1.3 | all | `src/i18n/*` | TBD | Add keys + verify per locale. | P1 |
|
||||
| 4.1.3-R7 | Online-Board start page title: `Онлайн-Табло` (no dynamic parts) | 4.1.3 Table 6 row 1 | all | — | TBD | Verify rendered H1/title matches exactly. | P1 |
|
||||
| 4.1.3-R8 | Online-Board flight-number search title: `Рейс: {номер рейса}, {дата}` — date shown as `сегодня` / `завтра` / `ДД.ММ.ГГГГ` depending on flight date relative to today | 4.1.3 Table 6 row 2 | all | — | TBD | Verify date-relative label logic (today/tomorrow/formatted). | P1 |
|
||||
| 4.1.3-R9 | Online-Board route search title: `Маршрут: {город вылета}-{города прилета}, {дата}` — city names in full display form; date formatted same as R8 | 4.1.3 Table 6 row 3 | all | — | TBD | Verify city names (not IATA codes) used; comma-separated date. | P1 |
|
||||
| 4.1.3-R10 | Online-Board departure-only search title: `Вылет: {город вылета}, {дата}` | 4.1.3 Table 6 row 4 | all | — | TBD | Verify title shows only departure city. | P1 |
|
||||
| 4.1.3-R11 | Online-Board arrival-only search title: `Прилет: {город прилета}, {дата}` | 4.1.3 Table 6 row 5 | all | — | TBD | Verify title shows only arrival city. | P1 |
|
||||
| 4.1.3-R12 | Online-Board flight details card title: `Информация о рейсе: {номер рейса}, {город вылета}-{город прилета}` | 4.1.3 Table 6 row 6 | all | — | TBD | Verify format including comma after flight number. | P1 |
|
||||
| 4.1.3-R13 | Online-Board details via "Refresh direct link" title: same as details card — `Информация о рейсе: {номер рейса}, {город вылета}-{город прилета}` | 4.1.3 Table 6 row 7 | all | — | TBD | Verify title preserved on page refresh (SSR must hydrate city names). | P1 |
|
||||
| 4.1.3-R14 | Online-Board share link title: same as details card — `Информация о рейсе: {номер рейса}, {город вылета}-{город прилета}` | 4.1.3 Table 6 row 8 | all | — | TBD | Verify share URL renders same title. | P1 |
|
||||
| 4.1.3-R15 | Schedule start page title: `Расписание` (no dynamic parts) | 4.1.3 Table 6 row 9 | all | — | TBD | Verify H1/title. | P1 |
|
||||
| 4.1.3-R16 | Schedule route search title: `Расписание по маршруту: {город вылета}-{города прилета}` — full city names, no date shown in title | 4.1.3 Table 6 row 10 | all | — | TBD | Verify no date in schedule search title (differs from Online-Board). | P1 |
|
||||
| 4.1.3-R17 | Schedule details card title — direct/multi-segment flight: `Расписание рейса: {номер рейса}, {город вылета}-{город прилета}` | 4.1.3 Table 6 row 11 | all | — | TBD | Verify singular "рейса" for direct/multi-segment. | P1 |
|
||||
| 4.1.3-R18 | Schedule details card title — connecting flight (multiple flight numbers): `Расписание рейсов: {номер рейса1}, {номер рейса2}` (plural "рейсов"; no city names in connecting title) | 4.1.3 Table 6 row 11 | all | — | TBD | Verify plural form and absence of city names for connecting. | P1 |
|
||||
| 4.1.3-R19 | Schedule "Refresh direct link" title: identical rules to details card (R17 / R18 depending on flight type) | 4.1.3 Table 6 row 12 | all | — | TBD | Verify SSR hydrates flight type to pick correct title form. | P1 |
|
||||
| 4.1.3-R20 | Schedule "Share / copy link" title: identical rules to details card (R17 / R18) | 4.1.3 Table 6 row 13 | all | — | TBD | Verify share page renders correct title form. | P1 |
|
||||
| 4.1.3-R21 | Flight Map title (all states): `Карта полетов` — same regardless of whether departure, route, or default state | 4.1.3 Table 6 (Map rows 1-3) | all | — | TBD | Verify title never changes on Flight Map. | P1 |
|
||||
| 4.1.3-R22 | Long city names must wrap to next line (not truncate) in title display | 4.1.3 ¶1 | all | — | TBD | Verify CSS allows wrap; no `text-overflow: ellipsis` on title. | P1 |
|
||||
| 4.1.3-R1 | Online-Board start page title per TZ Table (populate at P1 kickoff) | 4.1.3 | all | `src/ui/seo/*` | Done f03562e | Populated; all Online-Board title rows covered by `f03562e`. | P1 |
|
||||
| 4.1.3-R2 | Schedule start page title per TZ | 4.1.3 | all | `src/features/schedule/*` | Done df4ac19 | Schedule titles implemented. | P1 |
|
||||
| 4.1.3-R3 | Flight-Map start page title per TZ | 4.1.3 | all | `src/features/flights-map/*` | Done bcaf3ab | Flight Map title verified. | P1 |
|
||||
| 4.1.3-R4 | Search-result page titles per mode (route / flight-number / departure / arrival) | 4.1.3 | all | `src/ui/seo/*` | Done f03562e | All four Online-Board search-result title formats implemented. | P1 |
|
||||
| 4.1.3-R5 | Flight-details page title per TZ (direct / multi-segment / connecting) | 4.1.3 | all | `df4ac19`, `f03562e` | Done df4ac19 | Direct vs connecting branching implemented for both Board and Schedule. | P1 |
|
||||
| 4.1.3-R6 | All titles translated for each of 9 languages | 4.1.3 | all | `src/i18n/*` | Done f03562e | i18n keys added for all new title formats; 9-language coverage included. | P1 |
|
||||
| 4.1.3-R7 | Online-Board start page title: `Онлайн-Табло` (no dynamic parts) | 4.1.3 Table 6 row 1 | all | `src/ui/seo/*` | Done f03562e | Verified rendered title matches exactly. | P1 |
|
||||
| 4.1.3-R8 | Online-Board flight-number search title: `Рейс: {номер рейса}, {дата}` — date shown as `сегодня` / `завтра` / `ДД.ММ.ГГГГ` depending on flight date relative to today | 4.1.3 Table 6 row 2 | all | `src/ui/seo/*` | Done f03562e | Date-relative label logic (today/tomorrow/formatted) implemented. | P1 |
|
||||
| 4.1.3-R9 | Online-Board route search title: `Маршрут: {город вылета}-{города прилета}, {дата}` — city names in full display form; date formatted same as R8 | 4.1.3 Table 6 row 3 | all | `src/ui/seo/*` | Done f03562e | City names (not IATA codes) used; comma-separated date. | P1 |
|
||||
| 4.1.3-R10 | Online-Board departure-only search title: `Вылет: {город вылета}, {дата}` | 4.1.3 Table 6 row 4 | all | `src/ui/seo/*` | Done f03562e | Departure-only title shows only departure city + date. | P1 |
|
||||
| 4.1.3-R11 | Online-Board arrival-only search title: `Прилет: {город прилета}, {дата}` | 4.1.3 Table 6 row 5 | all | `src/ui/seo/*` | Done f03562e | Arrival-only title shows only arrival city + date. | P1 |
|
||||
| 4.1.3-R12 | Online-Board flight details card title: `Информация о рейсе: {номер рейса}, {город вылета}-{город прилета}` | 4.1.3 Table 6 row 6 | all | `src/ui/seo/*` | Done f03562e | Format with comma after flight number implemented. | P1 |
|
||||
| 4.1.3-R13 | Online-Board details via "Refresh direct link" title: same as details card — `Информация о рейсе: {номер рейса}, {город вылета}-{город прилета}` | 4.1.3 Table 6 row 7 | all | SSR via details page | Done f03562e | SSR hydrates city names; title preserved on refresh. | P1 |
|
||||
| 4.1.3-R14 | Online-Board share link title: same as details card — `Информация о рейсе: {номер рейса}, {город вылета}-{город прилета}` | 4.1.3 Table 6 row 8 | all | share URL rendering | Done f03562e | Share URL renders same title as details card. | P1 |
|
||||
| 4.1.3-R15 | Schedule start page title: `Расписание` (no dynamic parts) | 4.1.3 Table 6 row 9 | all | `src/features/schedule/*` | Done df4ac19 | H1/title verified as static `Расписание`. | P1 |
|
||||
| 4.1.3-R16 | Schedule route search title: `Расписание по маршруту: {город вылета}-{города прилета}` — full city names, no date shown in title | 4.1.3 Table 6 row 10 | all | `src/features/schedule/*` | Done df4ac19 | No date in schedule search title; full city names confirmed. | P1 |
|
||||
| 4.1.3-R17 | Schedule details card title — direct/multi-segment flight: `Расписание рейса: {номер рейса}, {город вылета}-{город прилета}` | 4.1.3 Table 6 row 11 | all | `src/features/schedule/*` | Done df4ac19 | Singular "рейса" for direct/multi-segment; city pair included. | P1 |
|
||||
| 4.1.3-R18 | Schedule details card title — connecting flight (multiple flight numbers): `Расписание рейсов: {номер рейса1}, {номер рейса2}` (plural "рейсов"; no city names in connecting title) | 4.1.3 Table 6 row 11 | all | `src/features/schedule/*` | Done df4ac19 | Plural form; city names absent for connecting title. | P1 |
|
||||
| 4.1.3-R19 | Schedule "Refresh direct link" title: identical rules to details card (R17 / R18 depending on flight type) | 4.1.3 Table 6 row 12 | all | SSR via schedule details page | Done df4ac19 | SSR hydrates flight type to pick direct vs connecting title form. | P1 |
|
||||
| 4.1.3-R20 | Schedule "Share / copy link" title: identical rules to details card (R17 / R18) | 4.1.3 Table 6 row 13 | all | schedule details page | Done df4ac19 | Share page renders correct title form (branched by flight type). | P1 |
|
||||
| 4.1.3-R21 | Flight Map title (all states): `Карта полетов` — same regardless of whether departure, route, or default state | 4.1.3 Table 6 (Map rows 1-3) | all | `src/features/flights-map/*` | Done bcaf3ab | Title verified as constant `Карта полетов` across all map states. See Conflict C1 for TZ-vs-Angular drift. | P1 |
|
||||
| 4.1.3-R22 | Long city names must wrap to next line (not truncate) in title display | 4.1.3 ¶1 | all | — | TBD | Visual/CSS concern; out-of-scope for P1. Verify at P4 visual test pass. | P4 |
|
||||
|
||||
---
|
||||
|
||||
@@ -281,32 +288,32 @@ All pages in the section must have breadcrumbs; each crumb is a link except the
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.4-R1 | Every page has breadcrumbs (root → area → mode → result) | 4.1.4 | all | `src/ui/layout/Breadcrumbs*` | TBD | Verify presence on every page. | P1 |
|
||||
| 4.1.4-R2 | Last crumb = non-link with `aria-current="page"` | 4.1.4 + CLAUDE.md a11y | all | (see commit `826a583`) | Implemented | — | P1 |
|
||||
| 4.1.4-R3 | Crumb labels translatable | 4.1.4 | all | `src/i18n/*` | TBD | Verify all locales. | P1 |
|
||||
| 4.1.4-R4 | Per-page crumb list per TZ Table (populate at P1 kickoff) | 4.1.4 | all | — | TBD | Populate. | P1 |
|
||||
| 4.1.4-R5 | Online-Board start page breadcrumbs: `[Главная]` only (one crumb, links to `www.aeroflot.ru`) | 4.1.4 Table 7 row 1 | all | — | TBD | Verify single crumb on start page. | P1 |
|
||||
| 4.1.4-R6 | Online-Board flight-number search breadcrumbs: `[Главная / Онлайн-Табло]` — "Главная" links to `www.aeroflot.ru`; "Онлайн-Табло" links to `/{lang}/onlineboard` | 4.1.4 Table 7 row 2 | all | — | TBD | Verify two-crumb trail for flight-number results page. | P1 |
|
||||
| 4.1.4-R7 | Online-Board route search breadcrumbs: `[Главная / Онлайн-Табло]` (same two-crumb as R6) | 4.1.4 Table 7 row 3 | all | — | TBD | Verify. | P1 |
|
||||
| 4.1.4-R8 | Online-Board departure-only search breadcrumbs: `[Главная / Онлайн-Табло]` | 4.1.4 Table 7 row 4 | all | — | TBD | Verify. | P1 |
|
||||
| 4.1.4-R9 | Online-Board arrival-only search breadcrumbs: `[Главная / Онлайн-Табло]` | 4.1.4 Table 7 row 5 | all | — | TBD | Verify. | P1 |
|
||||
| 4.1.4-R10 | Online-Board details card breadcrumbs — flight-number mode: `[Главная / Онлайн-Табло / Номер рейса: {SU-1234}]` — note hyphen between carrier and number (e.g. `SU-1234`) | 4.1.4 Table 7 row 6 | all | — | TBD | Verify leaf crumb uses hyphenated format `SU-NNNN` not `SUNNNN`. | P1 |
|
||||
| 4.1.4-R11 | Online-Board details card breadcrumbs — route mode: `[Главная / Онлайн-Табло / Маршрут: {город вылета}-{город прилета}]` | 4.1.4 Table 7 row 6 | all | — | TBD | Verify route-mode leaf crumb uses city names. | P1 |
|
||||
| 4.1.4-R12 | Online-Board details card breadcrumbs — departure mode: `[Главная / Онлайн-Табло / Вылет: {город вылета}-{город прилета}]` (TZ includes both cities even in departure-only mode) | 4.1.4 Table 7 row 6 | all | — | TBD | Verify both cities shown even when original search was departure-only. | P1 |
|
||||
| 4.1.4-R13 | Online-Board details card breadcrumbs — arrival mode: `[Главная / Онлайн-Табло / Прилет: {город вылета}-{город прилета}]` (TZ includes both cities even in arrival-only mode) | 4.1.4 Table 7 row 6 | all | — | TBD | Verify both cities shown even when original search was arrival-only. | P1 |
|
||||
| 4.1.4-R14 | Clicking the last breadcrumb crumb on Online-Board details restores the previous search page with filter pre-filled AND results showing; time interval preserved in restored URL (with time → `-HHMMHHmm` present; without time → absent) | 4.1.4 Table 7 row 6 (transitions) | all | — | TBD | Verify breadcrumb click navigates to restored search URL with time-interval. | P1 |
|
||||
| 4.1.4-R15 | Online-Board "Refresh direct link" breadcrumbs: same three-crumb trail as details card (R10–R13 depending on mode) | 4.1.4 Table 7 row 7 | all | — | TBD | Verify breadcrumbs on refresh deep-link match card breadcrumbs. | P1 |
|
||||
| 4.1.4-R16 | Online-Board "Share / copy link" breadcrumbs: `[Главная / Онлайн-Табло]` — no leaf crumb (same as search results, two crumbs only) | 4.1.4 Table 7 row 8 | all | — | TBD | Verify share URL renders only two crumbs, no leaf. | P1 |
|
||||
| 4.1.4-R17 | Schedule start page breadcrumbs: `[Главная]` only | 4.1.4 Table 7 row 9 | all | — | TBD | Verify single crumb on schedule start page. | P1 |
|
||||
| 4.1.4-R18 | Schedule route search breadcrumbs: `[Главная / Расписание]` — "Расписание" links to `/{lang}/schedule` | 4.1.4 Table 7 row 10 | all | — | TBD | Verify two-crumb trail for schedule results page. | P1 |
|
||||
| 4.1.4-R19 | Schedule details card breadcrumbs: `[Главная / Расписание / {город вылета}-{город прилета}]` — city-pair as the leaf crumb | 4.1.4 Table 7 row 11 | all | — | TBD | Verify leaf crumb is city-pair (not flight number). | P1 |
|
||||
| 4.1.4-R20 | Clicking schedule leaf crumb restores previous schedule search page with filter + results; dates, trip-type (one-way/round-trip), time interval all preserved | 4.1.4 Table 7 row 11 (transitions) | all | — | TBD | Verify restored schedule search URL encodes all previous filter state. | P1 |
|
||||
| 4.1.4-R21 | Schedule "Refresh direct link" breadcrumbs: `[Главная / Расписание / {город вылета}-{город прилета}]` (same as details card, R19) | 4.1.4 Table 7 row 12 | all | — | TBD | Verify breadcrumbs on refresh deep-link. | P1 |
|
||||
| 4.1.4-R22 | Schedule "Share / copy link" breadcrumbs: `[Главная / Расписание]` — two crumbs, no leaf | 4.1.4 Table 7 row 13 | all | — | TBD | Verify share page shows only two crumbs. | P1 |
|
||||
| 4.1.4-R23 | Flight Map title page breadcrumbs: `[Главная]` only | 4.1.4 Table 7 (Map row 1) | all | — | TBD | Verify single crumb on map start page. | P1 |
|
||||
| 4.1.4-R24 | Flight Map departure search breadcrumbs: `[Главная]` only (no second crumb even when filter filled) | 4.1.4 Table 7 (Map row 2) | all | — | TBD | Verify breadcrumbs never expand beyond `[Главная]` on Flight Map. | P1 |
|
||||
| 4.1.4-R25 | Flight Map route search breadcrumbs: `[Главная]` only | 4.1.4 Table 7 (Map row 3) | all | — | TBD | Verify same single-crumb trail. | P1 |
|
||||
| 4.1.4-R26 | "Главная" crumb always links to `www.aeroflot.ru` (external) on all pages | 4.1.4 Table 7 (all rows, transitions col) | all | — | TBD | Verify href targets external `www.aeroflot.ru`. | P1 |
|
||||
| 4.1.4-R1 | Every page has breadcrumbs (root → area → mode → result) | 4.1.4 | all | `src/ui/layout/Breadcrumbs*` | Done 1821f7f | Presence verified on all Board/Schedule/Map pages by Playwright e2e `e935596`. | P1 |
|
||||
| 4.1.4-R2 | Last crumb = non-link with `aria-current="page"` | 4.1.4 + CLAUDE.md a11y | all | (see commit `826a583`) | Done 826a583 | Already Implemented; `aria-current="page"` on last crumb confirmed. See Conflict C4 for clickability nuance. | P1 |
|
||||
| 4.1.4-R3 | Crumb labels translatable | 4.1.4 | all | `src/i18n/*` | Done 1821f7f | All crumb label keys added and verified across 9 locales. | P1 |
|
||||
| 4.1.4-R4 | Per-page crumb list per TZ Table (populate at P1 kickoff) | 4.1.4 | all | `1821f7f`, `266a6f9`, `2fe5364` | Done 1821f7f | Fully populated across Online-Board, Schedule, and Flight Map pages. | P1 |
|
||||
| 4.1.4-R5 | Online-Board start page breadcrumbs: `[Главная]` only (one crumb, links to `www.aeroflot.ru`) | 4.1.4 Table 7 row 1 | all | `src/features/online-board/components/OnlineBoardStartPage.tsx` | Done 1821f7f | Single crumb on start page verified by e2e. | P1 |
|
||||
| 4.1.4-R6 | Online-Board flight-number search breadcrumbs: `[Главная / Онлайн-Табло]` — "Главная" links to `www.aeroflot.ru`; "Онлайн-Табло" links to `/{lang}/onlineboard` | 4.1.4 Table 7 row 2 | all | `src/features/online-board/*` | Done 1821f7f | Two-crumb trail for flight-number results page verified. | P1 |
|
||||
| 4.1.4-R7 | Online-Board route search breadcrumbs: `[Главная / Онлайн-Табло]` (same two-crumb as R6) | 4.1.4 Table 7 row 3 | all | `src/features/online-board/*` | Done 1821f7f | Verified. | P1 |
|
||||
| 4.1.4-R8 | Online-Board departure-only search breadcrumbs: `[Главная / Онлайн-Табло]` | 4.1.4 Table 7 row 4 | all | `src/features/online-board/*` | Done 1821f7f | Verified. | P1 |
|
||||
| 4.1.4-R9 | Online-Board arrival-only search breadcrumbs: `[Главная / Онлайн-Табло]` | 4.1.4 Table 7 row 5 | all | `src/features/online-board/*` | Done 1821f7f | Verified. | P1 |
|
||||
| 4.1.4-R10 | Online-Board details card breadcrumbs — flight-number mode: `[Главная / Онлайн-Табло / Номер рейса: {SU-1234}]` — note hyphen between carrier and number (e.g. `SU-1234`) | 4.1.4 Table 7 row 6 | all | `src/features/online-board/*` | Done 1821f7f | Leaf crumb uses hyphenated `SU-NNNN` format; verified. | P1 |
|
||||
| 4.1.4-R11 | Online-Board details card breadcrumbs — route mode: `[Главная / Онлайн-Табло / Маршрут: {город вылета}-{город прилета}]` | 4.1.4 Table 7 row 6 | all | `src/features/online-board/*` | Done 1821f7f | Route-mode leaf crumb uses city names; verified. | P1 |
|
||||
| 4.1.4-R12 | Online-Board details card breadcrumbs — departure mode: `[Главная / Онлайн-Табло / Вылет: {город вылета}-{город прилета}]` (TZ includes both cities even in departure-only mode) | 4.1.4 Table 7 row 6 | all | `src/features/online-board/*` | Partial 1821f7f | Leaf shows the single searched station; paired-city lookup requires API call at render time. See Conflict C3. | P1 |
|
||||
| 4.1.4-R13 | Online-Board details card breadcrumbs — arrival mode: `[Главная / Онлайн-Табло / Прилет: {город вылета}-{город прилета}]` (TZ includes both cities even in arrival-only mode) | 4.1.4 Table 7 row 6 | all | `src/features/online-board/*` | Partial 1821f7f | Same as R12 — single station shown; deferred per Conflict C3. | P1 |
|
||||
| 4.1.4-R14 | Clicking the last breadcrumb crumb on Online-Board details restores the previous search page with filter pre-filled AND results showing; time interval preserved in restored URL (with time → `-HHMMHHmm` present; without time → absent) | 4.1.4 Table 7 row 6 (transitions) | all | `src/features/online-board/*` | Done 1821f7f | Last crumb with `url` is now rendered as `<a>` and clickable; time-interval preserved via `?request=` codec. See Conflict C4. | P1 |
|
||||
| 4.1.4-R15 | Online-Board "Refresh direct link" breadcrumbs: same three-crumb trail as details card (R10–R13 depending on mode) | 4.1.4 Table 7 row 7 | all | `src/features/online-board/*` | Done 1821f7f | Breadcrumbs on refresh deep-link match card breadcrumbs (SSR decodes `?request=`). | P1 |
|
||||
| 4.1.4-R16 | Online-Board "Share / copy link" breadcrumbs: `[Главная / Онлайн-Табло]` — no leaf crumb (same as search results, two crumbs only) | 4.1.4 Table 7 row 8 | all | `src/features/online-board/*` | Done 1821f7f | Share URL (no `?request=`) renders only two crumbs, no leaf. | P1 |
|
||||
| 4.1.4-R17 | Schedule start page breadcrumbs: `[Главная]` only | 4.1.4 Table 7 row 9 | all | `src/features/schedule/*` | Done 266a6f9 | Single crumb on schedule start page verified. | P1 |
|
||||
| 4.1.4-R18 | Schedule route search breadcrumbs: `[Главная / Расписание]` — "Расписание" links to `/{lang}/schedule` | 4.1.4 Table 7 row 10 | all | `src/features/schedule/*` | Done 266a6f9 | Two-crumb trail for schedule results page verified. | P1 |
|
||||
| 4.1.4-R19 | Schedule details card breadcrumbs: `[Главная / Расписание / {город вылета}-{город прилета}]` — city-pair as the leaf crumb | 4.1.4 Table 7 row 11 | all | `src/features/schedule/*` | Done 5728861 | Leaf crumb is city-pair (not flight number); verified by breadcrumb tests. | P1 |
|
||||
| 4.1.4-R20 | Clicking schedule leaf crumb restores previous schedule search page with filter + results; dates, trip-type (one-way/round-trip), time interval all preserved | 4.1.4 Table 7 row 11 (transitions) | all | `src/features/schedule/*` | Done 5728861 | Restored schedule search URL encodes full filter state via `?request=` codec. | P1 |
|
||||
| 4.1.4-R21 | Schedule "Refresh direct link" breadcrumbs: `[Главная / Расписание / {город вылета}-{город прилета}]` (same as details card, R19) | 4.1.4 Table 7 row 12 | all | `src/features/schedule/*` | Done 266a6f9 | Breadcrumbs on refresh deep-link match details card. | P1 |
|
||||
| 4.1.4-R22 | Schedule "Share / copy link" breadcrumbs: `[Главная / Расписание]` — two crumbs, no leaf | 4.1.4 Table 7 row 13 | all | `src/features/schedule/*` | Done 266a6f9 | Share page shows only two crumbs (no `?request=`). | P1 |
|
||||
| 4.1.4-R23 | Flight Map title page breadcrumbs: `[Главная]` only | 4.1.4 Table 7 (Map row 1) | all | `src/features/flights-map/*` | Done 2fe5364 | Single crumb on map page verified. See Conflict C2 for prior `[Главная, Карта полетов]` drift. | P1 |
|
||||
| 4.1.4-R24 | Flight Map departure search breadcrumbs: `[Главная]` only (no second crumb even when filter filled) | 4.1.4 Table 7 (Map row 2) | all | `src/features/flights-map/*` | Done 2fe5364 | Breadcrumbs never expand beyond `[Главная]` on Flight Map. | P1 |
|
||||
| 4.1.4-R25 | Flight Map route search breadcrumbs: `[Главная]` only | 4.1.4 Table 7 (Map row 3) | all | `src/features/flights-map/*` | Done 2fe5364 | Same single-crumb trail verified. | P1 |
|
||||
| 4.1.4-R26 | "Главная" crumb always links to `www.aeroflot.ru` (external) on all pages | 4.1.4 Table 7 (all rows, transitions col) | all | `src/ui/layout/Breadcrumbs*` | Done 826a583 | External href to `www.aeroflot.ru` present on all `Главная` crumbs. | P1 |
|
||||
|
||||
---
|
||||
|
||||
@@ -369,25 +376,25 @@ Switching tabs between Online-Board / Schedule / Flight Map preserves user input
|
||||
|
||||
| # | Rule | TZ cite | Viewport | Current impl | Status | Action | Plan |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 4.1.8-R1 | Tab switch preserves `Город вылета` across Online-Board ↔ Schedule | 4.1.8 | all | `src/shared/state/*` | TBD | Verify. | P1 |
|
||||
| 4.1.8-R2 | Tab switch preserves `Дата рейса` where the new section's date-window allows it; otherwise clamp to the new window's bounds | 4.1.8 | all | — | TBD | Verify clamp behavior. | P1 |
|
||||
| 4.1.8-R3 | Tab switch to Flight Map does **not** inherit Board/Schedule filter (§4.1.1-R26 — independence) | 4.1.8 / 4.1.1 ¶12 | all | — | TBD | Verify. | P1 |
|
||||
| 4.1.8-R4 | Closing popovers on focus-change (4.1 ¶ intro: "all popups close when user focuses elsewhere") applies on tab switch too | 4.1 ¶ intro | desktop, tablet | — | TBD | Verify. | P1 |
|
||||
| 4.1.8-R5 | Search-history ("Вы искали") is shared across Online-Board and Schedule within session, but NOT with Flight Map | 4.1.8 / 4.1.9.5 | all | — | TBD | Verify scoping rules. | P1 |
|
||||
| 4.1.8-R6 | (Geo-consent = YES, Table 10 row 1) Online-Board default state (no search yet, city auto-detected) → switch to Schedule: Schedule filter gets `Город вылета` = user's city, `Город прилета` = placeholder ("Укажите город"), `Показать расписание на` = current week, `Время вылета` = 00:00–24:00, toggles off; search NOT auto-executed | 4.1.8 Table 10 row 1 | all | — | TBD | Verify Schedule filter state after switching from Board default. | P1 |
|
||||
| 4.1.8-R7 | (Geo-consent = YES, Table 10 row 1) Returning from Schedule back to Online-Board default state: Board filter unchanged — still shows user's city, today's date, placeholder arrival, no search | 4.1.8 Table 10 row 1 (return col) | all | — | TBD | Verify Board state not mutated by Schedule visit. | P1 |
|
||||
| 4.1.8-R8 | (Geo-consent = YES, Table 10 row 2) Online-Board with search executed → switch to Schedule: Schedule gets `Город вылета` = user's geo city (from Board context, NOT the searched route departure) | 4.1.8 Table 10 row 2 | all | — | TBD | Verify Schedule auto-fills departure city with user's geo city, not the Board searched route city. Negative assertion (no carry-over of date/arrival) → R19. | P1 |
|
||||
| 4.1.8-R9 | (Geo-consent = YES, Table 10 row 2) Returning from Schedule (after Board-searched → Schedule default) to Online-Board: Board restores its own searched filter (the step-2 Board search state); search NOT auto-re-executed | 4.1.8 Table 10 row 2 (return col) | all | — | TBD | Verify Board restores its own step-2 filter on return. | P1 |
|
||||
| 4.1.8-R10 | (Geo-consent = YES, Table 10 row 3) Online-Board default → Schedule with search executed → return to Online-Board: Board still shows default state (unaffected by Schedule search); "Переход в Расписание" col shows Schedule filter with its own search state | 4.1.8 Table 10 row 3 | all | — | TBD | Verify Board remains at default; Schedule stores its own state. | P1 |
|
||||
| 4.1.8-R11 | (Geo-consent = YES, Table 10 row 3) Returning to Schedule after going back to Board: Schedule restores its own searched filter from step 3 (not reset) | 4.1.8 Table 10 row 3 (return-Schedule col) | all | — | TBD | Verify Schedule own state survives Board round-trip. | P1 |
|
||||
| 4.1.8-R12 | (Geo-consent = YES, Table 10 row 4) Both Board and Schedule have each had searches executed → switching between them: each section independently restores its own search filter state; neither overwrites the other | 4.1.8 Table 10 row 4 | all | — | TBD | Verify each section's search state is stored independently. | P1 |
|
||||
| 4.1.8-R13 | (Geo-consent = NO, Table 10 row 5) Online-Board default state (no geo, placeholders) → switch to Schedule: Schedule filter shows all placeholders (`Укажите город` for cities, `ДД.ММ.ГГГГ-ДД.ММ.ГГГГ` for date range), toggles off; no search | 4.1.8 Table 10 row 5 | all | — | TBD | Verify no city auto-fill when geo-consent denied. | P1 |
|
||||
| 4.1.8-R14 | (Geo-consent = NO, Table 10 row 5) Returning from Schedule to Online-Board: Board filter still shows placeholders (city = "Укажите город", date = "ДД.ММ.ГГГГ"), no mutation | 4.1.8 Table 10 row 5 (return col) | all | — | TBD | Verify Board placeholder state preserved. | P1 |
|
||||
| 4.1.8-R15 | (Geo-consent = NO, Table 10 row 6) Online-Board with search executed → switch to Schedule: Schedule shows all placeholders (no carry-over of searched cities; placeholders only) | 4.1.8 Table 10 row 6 | all | — | TBD | Verify Schedule does NOT inherit Board search filter when geo-consent denied. | P1 |
|
||||
| 4.1.8-R16 | (Geo-consent = NO, Table 10 row 6) Returning from Schedule default to Online-Board: Board restores its own searched filter from step 6 | 4.1.8 Table 10 row 6 (return col) | all | — | TBD | Verify Board step-6 search state persists. | P1 |
|
||||
| 4.1.8-R17 | (Geo-consent = NO, Table 10 row 7) Online-Board default placeholders → Schedule with search executed → return to Online-Board: Board still shows placeholders (its default); Schedule retains its searched filter state | 4.1.8 Table 10 row 7 | all | — | TBD | Verify Board unaffected by Schedule search when geo-consent denied. | P1 |
|
||||
| 4.1.8-R18 | Returning to Flight Map (from Board or Schedule) within same session always restores Flight Map's own last filter + results — completely independent from Board/Schedule state | 4.1.8 ¶ post-table note | all | — | TBD | Verify map state restoration is isolated from Board/Schedule filter carry-over. | P1 |
|
||||
| 4.1.8-R19 | (Geo-consent = YES, Table 10 row 2 — negative assertion for R8) When switching from Online-Board with search executed to Schedule: Schedule does NOT copy Board's search date or arrival city; `Показать расписание на` = current week, `Город прилета` = placeholder | 4.1.8 Table 10 row 2 | all | — | TBD | Verify Schedule date-range resets to current week and arrival city shows placeholder (not Board's searched arrival). Positive assertion (geo city fill) → R8. | P1 |
|
||||
| 4.1.8-R1 | Tab switch preserves `Город вылета` across Online-Board ↔ Schedule | 4.1.8 | all | `src/shared/crossSectionStore.ts` | Done 9863132 | Cross-section store carries `Город вылета` on tab switch; verified by e2e `e935596`. | P1 |
|
||||
| 4.1.8-R2 | Tab switch preserves `Дата рейса` where the new section's date-window allows it; otherwise clamp to the new window's bounds | 4.1.8 | all | `src/shared/crossSectionStore.ts` | Done ef0e1e3 | Clamp assertion verified by unit test `ef0e1e3`; Board←Schedule projection uses `dateWindow` constants. | P1 |
|
||||
| 4.1.8-R3 | Tab switch to Flight Map does **not** inherit Board/Schedule filter (§4.1.1-R26 — independence) | 4.1.8 / 4.1.1 ¶12 | all | `src/shared/crossSectionStore.ts` | Done 9863132 | Store isolates Flight Map state; no carry-over from Board/Schedule verified. | P1 |
|
||||
| 4.1.8-R4 | Closing popovers on focus-change (4.1 ¶ intro: "all popups close when user focuses elsewhere") applies on tab switch too | 4.1 ¶ intro | desktop, tablet | — | TBD | Popover close on tab-switch is a P3 filter concern; verify at P3 kickoff. | P3 |
|
||||
| 4.1.8-R5 | Search-history ("Вы искали") is shared across Online-Board and Schedule within session, but NOT with Flight Map | 4.1.8 / 4.1.9.5 | all | — | TBD | Search-history scoping is P3 scope. Verify at P3 kickoff. | P3 |
|
||||
| 4.1.8-R6 | (Geo-consent = YES, Table 10 row 1) Online-Board default state (no search yet, city auto-detected) → switch to Schedule: Schedule filter gets `Город вылета` = user's city, `Город прилета` = placeholder ("Укажите город"), `Показать расписание на` = current week, `Время вылета` = 00:00–24:00, toggles off; search NOT auto-executed | 4.1.8 Table 10 row 1 | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Schedule filter hydration wired; store projection covers this scenario. | P1 |
|
||||
| 4.1.8-R7 | (Geo-consent = YES, Table 10 row 1) Returning from Schedule back to Online-Board default state: Board filter unchanged — still shows user's city, today's date, placeholder arrival, no search | 4.1.8 Table 10 row 1 (return col) | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Board state not mutated by Schedule visit; each section stores independently. | P1 |
|
||||
| 4.1.8-R8 | (Geo-consent = YES, Table 10 row 2) Online-Board with search executed → switch to Schedule: Schedule gets `Город вылета` = user's geo city (from Board context, NOT the searched route departure) | 4.1.8 Table 10 row 2 | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Projection uses geo-city from Board context; verified by cross-section store unit tests. | P1 |
|
||||
| 4.1.8-R9 | (Geo-consent = YES, Table 10 row 2) Returning from Schedule (after Board-searched → Schedule default) to Online-Board: Board restores its own searched filter (the step-2 Board search state); search NOT auto-re-executed | 4.1.8 Table 10 row 2 (return col) | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Board restores its own step-2 filter on return. | P1 |
|
||||
| 4.1.8-R10 | (Geo-consent = YES, Table 10 row 3) Online-Board default → Schedule with search executed → return to Online-Board: Board still shows default state (unaffected by Schedule search); "Переход в Расписание" col shows Schedule filter with its own search state | 4.1.8 Table 10 row 3 | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Board remains at default; Schedule stores its own state independently. | P1 |
|
||||
| 4.1.8-R11 | (Geo-consent = YES, Table 10 row 3) Returning to Schedule after going back to Board: Schedule restores its own searched filter from step 3 (not reset) | 4.1.8 Table 10 row 3 (return-Schedule col) | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Schedule own state survives Board round-trip. | P1 |
|
||||
| 4.1.8-R12 | (Geo-consent = YES, Table 10 row 4) Both Board and Schedule have each had searches executed → switching between them: each section independently restores its own search filter state; neither overwrites the other | 4.1.8 Table 10 row 4 | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Each section's search state stored independently; mutual non-overwrite verified. | P1 |
|
||||
| 4.1.8-R13 | (Geo-consent = NO, Table 10 row 5) Online-Board default state (no geo, placeholders) → switch to Schedule: Schedule filter shows all placeholders (`Укажите город` for cities, `ДД.ММ.ГГГГ-ДД.ММ.ГГГГ` for date range), toggles off; no search | 4.1.8 Table 10 row 5 | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | No city auto-fill when geo-consent denied; placeholder pass-through verified. | P1 |
|
||||
| 4.1.8-R14 | (Geo-consent = NO, Table 10 row 5) Returning from Schedule to Online-Board: Board filter still shows placeholders (city = "Укажите город", date = "ДД.ММ.ГГГГ"), no mutation | 4.1.8 Table 10 row 5 (return col) | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Board placeholder state preserved. | P1 |
|
||||
| 4.1.8-R15 | (Geo-consent = NO, Table 10 row 6) Online-Board with search executed → switch to Schedule: Schedule shows all placeholders (no carry-over of searched cities; placeholders only) | 4.1.8 Table 10 row 6 | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Schedule does NOT inherit Board search filter when geo-consent denied. | P1 |
|
||||
| 4.1.8-R16 | (Geo-consent = NO, Table 10 row 6) Returning from Schedule default to Online-Board: Board restores its own searched filter from step 6 | 4.1.8 Table 10 row 6 (return col) | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Board step-6 search state persists. | P1 |
|
||||
| 4.1.8-R17 | (Geo-consent = NO, Table 10 row 7) Online-Board default placeholders → Schedule with search executed → return to Online-Board: Board still shows placeholders (its default); Schedule retains its searched filter state | 4.1.8 Table 10 row 7 | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Board unaffected by Schedule search when geo-consent denied. | P1 |
|
||||
| 4.1.8-R18 | Returning to Flight Map (from Board or Schedule) within same session always restores Flight Map's own last filter + results — completely independent from Board/Schedule state | 4.1.8 ¶ post-table note | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Map state restoration isolated from Board/Schedule filter carry-over; Flight Map section is fully independent in store. | P1 |
|
||||
| 4.1.8-R19 | (Geo-consent = YES, Table 10 row 2 — negative assertion for R8) When switching from Online-Board with search executed to Schedule: Schedule does NOT copy Board's search date or arrival city; `Показать расписание на` = current week, `Город прилета` = placeholder | 4.1.8 Table 10 row 2 | all | `src/shared/crossSectionStore.ts` | Done 47fee9d | Schedule date-range resets to current week; arrival city shows placeholder (not Board's searched arrival). | P1 |
|
||||
|
||||
**Rules enumerated from Table 10 (all 7 rows) and post-table narrative. Total: 19 (R18 original = split into R8 positive + R19 negative).**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user