Fix review issues in P1 spec rule rows (bracket notation, cross-refs, typo, R8 split)

This commit is contained in:
2026-04-21 16:26:52 +03:00
parent 816028603b
commit 13170eb689
@@ -128,7 +128,7 @@ _Updated after each plan merges. Plan task: after every merge, append a row to t
| Metric | Count |
|---|---|
| Total rules extracted | 242 (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: 18, 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) |
| 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 | — |
@@ -201,9 +201,9 @@ URLs encode language, area (onlineboard/schedule/flights-map), mode (route / fli
| 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. | 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. | 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. | 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 |
@@ -212,7 +212,7 @@ URLs encode language, area (onlineboard/schedule/flights-map), mode (route / fli
| 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}` (without time) and `?request=onlineboard-arrival-{city}-{flightNumber}-{YYYYMMDD}-{HHMMHHmm}` (with time) | 4.1.2 Table 5 row 6 | all | — | TBD | Verify `?request=` builder for arrival mode; add test. | 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 |
@@ -294,7 +294,7 @@ All pages in the section must have breadcrumbs; each crumb is a link except the
| 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-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 (R10R13 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 |
@@ -376,7 +376,7 @@ Switching tabs between Online-Board / Schedule / Flight Map preserves user input
| 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:0024: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 city (from Board context, NOT the searched route), `Показать расписание на` = current week; Schedule does NOT copy Board's search date or arrival city | 4.1.8 Table 10 row 2 | all | — | TBD | Verify Schedule auto-fills departure city only (current week, not Board date). | 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 |
@@ -386,9 +386,10 @@ Switching tabs between Online-Board / Schedule / Flight Map preserves user input
| 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 (line 523) | all | — | TBD | Verify map state restoration is isolated from Board/Schedule filter carry-over. | 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 |
**Rules enumerated from Table 10 (all 7 rows) and post-table narrative.**
**Rules enumerated from Table 10 (all 7 rows) and post-table narrative. Total: 19 (R18 original = split into R8 positive + R19 negative).**
---