Commit Graph

139 Commits

Author SHA1 Message Date
gnezim 9cbc28074b Add Module Federation build artifacts to .gitignore
Ignore @mf-types.zip, @mf-types/ directory, and .mf/ cache directory
that are generated during MF builds.
2026-04-15 10:56:55 +03:00
gnezim 8a5279745c Wire root route redirect to /{lang}/onlineboard
Replace the 1A-2 placeholder with a loader redirect matching Angular's
default routing: bare `/` sends users to `/ru/onlineboard`.
2026-04-15 10:56:40 +03:00
gnezim 98c6eca90e Add Phase 6 cutover runbook and operational checklist
Comprehensive operational procedure for the Angular-to-React traffic
cutover: pre-cutover gates, proxy config templates (nginx/HAProxy),
72-hour traffic ramp schedule, monitoring checklist, rollback procedure,
1-week soak criteria, and Angular decommission steps. Also adds Phase 6
cross-reference sections to the Phase 1 runbook.
2026-04-15 10:56:34 +03:00
gnezim 031ad7c15d Fix lint warnings and test environment for Phase 5 tests
Remove unused type alias, unused variable, add jsdom environment
directive, and use container.textContent for cross-element text
assertions.
2026-04-15 10:09:56 +03:00
gnezim 78205c378e Add Phase 5C integration tests for PopularRequestsPanel
Covers all 5 request modes, loading/error states, keyboard
accessibility, and the 4-item display limit.
2026-04-15 10:02:09 +03:00
gnezim 99af1fe00d Add Phase 5D useSearchHistory hook with per-language namespacing
Persists search history to localStorage via @/shared/storage with
language-scoped keys (afl_history_{lang}). Supports dedup by URL,
max 10 items, and clear functionality.
2026-04-15 10:01:31 +03:00
gnezim e172df8cf9 Add Phase 5B components, route page, and update MF expose
PopularRequestsPanel renders up to 4 popular request items in a
grid. MF expose upgraded from stub to real component. Route page
at /{lang}/popular provides standalone access.
2026-04-15 10:01:22 +03:00
gnezim 0a8ccfe36e Add Phase 5A types, API function, and usePopularRequests hook
Ports Angular PopularRequestsApiService and IPopularRequest types
to React with pure API function + React hook pattern matching
existing features (online-board, schedule).
2026-04-15 10:01:11 +03:00
gnezim 7d202b9436 Add Phase 5 Popular Requests master plan
Documents the Angular feature analysis and sub-plan breakdown for
porting popular-requests to React with useSearchHistory hook.
2026-04-15 09:58:14 +03:00
gnezim 5839692e52 Fix lint and typecheck issues in flights-map feature
Add explicit undefined to optional properties for exactOptionalPropertyTypes
compatibility. Remove unused import. Fix non-null assertions with proper
null guards. Remove invalid eslint-disable comment.
2026-04-15 09:51:23 +03:00
gnezim 8dde2db9d2 Add Phase 4 master plan and install leaflet dependency
Write the flights-map master plan covering sub-plans 4A-4D.
Add leaflet + @types/leaflet to support the map canvas component.
2026-04-15 09:44:01 +03:00
gnezim a60494366f Update flights-map barrel and MF expose from stub to real
Populate the feature barrel with all 4A-4D exports. Replace the
FlightsMap MF expose stub with lazy-loaded FlightsMapStartPage,
gated by the flightsMap feature flag.
2026-04-15 09:43:54 +03:00
gnezim 0f5d7915be Add flights-map SEO builder and JSON-LD WebPage schema
Phase 4D: buildFlightsMapSeo generates meta tags, canonical, hreflang, OG
and Twitter Card props. buildFlightsMapJsonLd produces a schema.org WebPage
object for structured data. 10 tests cover both builders.
2026-04-15 09:43:24 +03:00
gnezim a2cf781b02 Add flights-map route page, start page container, and filter
Phase 4C: FlightsMapStartPage manages filter state and drives search/calendar
hooks. FlightsMapFilter provides departure/arrival/connections/domestic/
international controls. Route page gates on flightsMap feature flag, rendering
404 when disabled.
2026-04-15 09:42:31 +03:00
gnezim dc030aceea Add Leaflet map wrapper and ClientOnly SSR-safe component
Phase 4B: MapCanvas.tsx is the sole Leaflet consumer in the codebase.
Renders markers (blue/orange), polylines (solid/dashed) with great-circle
arcs, popups and tooltips. Accepts all data as props (stateless).
ClientOnly.tsx provides SSR safety by deferring render until mount.
2026-04-15 09:41:11 +03:00
gnezim aa61049229 Add flights-map types, API functions, hooks, and feature flag
Phase 4A: Define IFlightRoute, IMapMarker, IMapPolyline types; implement
searchDestinations and getFlightsMapCalendar API functions with 11 tests;
add useFlightsMapSearch, useFlightsMapCalendar hooks; add FEATURE_FLIGHTS_MAP
env var for feature flag gating.
2026-04-15 09:40:19 +03:00
gnezim 6703c5a2f2 Fix lint issues in schedule feature code 2026-04-15 09:33:26 +03:00
gnezim c67686463a Add schedule parity harness, integration tests, barrel, and MF expose (Phase 3E)
Registers schedule URL serializer in parity harness with 18-entry fixture
corpus and fast-check fuzz. 10 URL round-trip integration tests, 6 SEO/
JSON-LD integration tests. Updates barrel and MF expose from stub to real.
2026-04-15 09:31:19 +03:00
gnezim 93f49cddae Add schedule SEO and JSON-LD tests (Phase 3D)
Tests cover start page, search, and details SEO builders plus
Flight/ItemList JSON-LD schema generation for schedule pages.
2026-04-15 09:28:04 +03:00
gnezim a072cd3bd2 Add schedule route pages and feature components (Phase 3C)
Four Modern.js routes: start page, one-way search, round-trip search,
and catch-all multi-flight details. Components wire hooks for data
fetching and render flight results with calendar navigation.
2026-04-15 09:26:42 +03:00
gnezim 7ad61554cb Add schedule API functions and React hooks (Phase 3B)
POST schedule/1 for search, GET schedule/details with indexed query
params, GET days/.../schedule/v1 for calendar. Three hooks wrap the
API functions with loading/error state management.
2026-04-15 09:22:50 +03:00
gnezim 1c5e85ea8e Implement schedule URL serializer/parser with TDD (Phase 3A)
Covers one-way search, round-trip search, multi-flight details (catch-all),
and airport-code-interleaved details format. Reuses online-board's flight
param parser for individual flight segments.
2026-04-15 09:20:56 +03:00
gnezim f7813b04b1 Add Phase 3 (Schedule) master plan and 3A sub-plan 2026-04-15 09:18:16 +03:00
gnezim 969281c71a Fix type error in flight-details integration test
Use ISimpleFlight union type for setupWithFlight parameter to accept
both IDirectFlight and IMultiLegFlight fixtures.
2026-04-15 08:56:42 +03:00
gnezim 008bc3339c Add 60 integration tests for Online Board feature
6 test files covering start page, flight search, flight details,
URL round-tripping, error handling, and SEO output verification.
All tests use mocked API and SignalR layers with jsdom environment.
2026-04-15 08:55:24 +03:00
gnezim 5bcf23ee4e Configure vitest and TypeScript for integration test files
Install @testing-library/jest-dom, add tests/**/*.test.tsx to vitest
include and tsconfig include patterns.
2026-04-15 08:55:15 +03:00
gnezim 728193e8b0 Add Phase 2H integration test plan
Defines scope, test inventory, mocking strategy, and exit criteria
for component-level integration tests of the Online Board feature.
2026-04-15 08:55:02 +03:00
gnezim 9bd3697a17 Add URL and SEO parity harnesses with fast-check fuzz testing
Generic URL parity harness (table-driven + property-based roundtrip)
and SEO parity harness (shape/completeness validation) registered for
Online Board. 170 tests covering all 6 route types with 200-iteration
fast-check fuzz runs ensuring no serialization asymmetry.
2026-04-15 08:45:09 +03:00
gnezim 1e9523088b Add Phase 2G parity harness implementation plan
Defines tasks for URL parity harness (table-driven + fast-check fuzz),
SEO parity harness, and Online Board registration against both.
2026-04-15 08:40:59 +03:00
gnezim e20686b11f Wire SEO and JSON-LD into all 6 Online Board route pages
Each route page now renders <SeoHead> with title, description,
canonical, hreflang, OG, and Twitter card from the SEO builders.
Search pages render <JsonLdRenderer> with ItemList of Flight
schemas. Details page renders Flight JSON-LD. Barrel exports
updated with 2F SEO and JSON-LD functions.
2026-04-15 08:37:47 +03:00
gnezim 44ae7f1642 Add Phase 2F JSON-LD builders for Flight and ItemList schemas
TDD-driven schema.org JSON-LD builders using schema-dts types.
buildFlightJsonLd maps ISimpleFlight to Flight schema with
airports, times, and provider. buildFlightListJsonLd wraps
search results as an ItemList of ListItems.
2026-04-15 08:32:31 +03:00
gnezim c68d53dfa6 Add Phase 2F SEO builders with EN locale translations
SEO builder pure functions for all 6 Online Board route types,
each returning SeoHeadProps with title, description, canonical,
hreflang, OG, and Twitter card. Populated empty EN locale SEO
keys with English translations matching the Russian pattern.
2026-04-15 08:32:24 +03:00
gnezim 6788f609e6 Update barrel exports and MF expose for 2E route pages
- Feature barrel now exports OnlineBoardStartPage, OnlineBoardSearchPage,
  OnlineBoardDetailsPage
- MF expose renders start page via React.lazy + Suspense
- Fix exactOptionalPropertyTypes issues with suffix param
- Remove unused import
2026-04-15 08:24:41 +03:00
gnezim cd07542dc5 Add 6 online board route pages
Start page, flight/departure/arrival/route search pages,
and flight details page. Each route is thin: parses URL
params, lazy-loads the feature component with Suspense.
2026-04-15 08:22:26 +03:00
gnezim 80b9090ef9 Add feature components for online board pages
OnlineBoardSearchPage (shared by all 4 search routes),
OnlineBoardStartPage (search form landing), and
OnlineBoardDetailsPage (flight detail view with legs).
All wired to existing hooks from 2C/2D. 21 tests passing.
2026-04-15 08:21:32 +03:00
gnezim 98971cab26 Add Phase 2E routes implementation plan
Covers 6 route pages, 3 feature components, barrel updates, and MF expose.
2026-04-15 08:18:12 +03:00
gnezim c6c0ce2bfc Wire useLiveFlights to TrackerHub channels for Online Board (Phase 2D)
Two thin composition hooks that connect the generic SignalR hook (1E)
to board-specific channels: useLiveBoardSearch for search pages
(SubscribeDate channel) and useLiveFlightDetails for the details page
(Subscribe channel). Both are SSR-safe and client-only.
2026-04-15 08:15:09 +03:00
gnezim 3bed4f9173 Add Phase 2D SignalR wiring implementation plan 2026-04-15 08:12:08 +03:00
gnezim 8218dffcd9 Add Phase 2C: Online Board API functions and React hooks
Pure API functions (searchFlights, getFlightDetails, getCalendarDays)
with dependency-injected ApiClient, plus three thin React hooks
(useOnlineBoard, useFlightDetails, useCalendarDays) for search,
details, and calendar pages. 17 TDD tests for API layer covering
URL construction, response mapping, and error handling.
2026-04-15 08:09:53 +03:00
gnezim 9e08057704 Implement Phase 2B URL serializer with TDD (73 tests)
Pure TypeScript port of Angular OnlineBoardUrlBuilder/Parser covering
all 6 URL types (start, flight, departure, arrival, route, details).
Includes roundtrip parity tests and edge cases for suffixed flights,
variable-length flight numbers, time ranges, and 3-char carriers.
2026-04-15 08:05:40 +03:00
gnezim 73d724f76a Add Phase 2B URL serializer implementation plan
TDD plan for porting Angular OnlineBoardUrlBuilder/Parser to pure
TypeScript functions covering all 6 URL types (start, flight, departure,
arrival, route, details) with roundtrip and edge case tests.
2026-04-15 08:00:12 +03:00
gnezim 7d8cb63600 Add flight display components and barrel exports
StationDisplay, TimeGroup, FlightStatus, DurationDisplay compose into
FlightCard; FlightList renders a list of cards with skeleton loading.
All components are props-driven with no data fetching.
2026-04-15 07:57:02 +03:00
gnezim b3ab73253d Add data model types, datetime utils, and dictionary hook
Port Angular flight types (ISimpleFlight, IFlightLeg, ITimesSet, etc.)
to minimal React-friendly interfaces. Add formatDuration/formatTime/
formatDate/isDayChange as pure functions. Stub useCityName hook as
passthrough pending customer dictionary API endpoint.
2026-04-15 07:55:00 +03:00
gnezim fc03c08278 Add Phase 2A UI adapter implementation plan
Covers data model types, datetime utilities, dictionary hook,
and flight display components for the online board feature.
2026-04-15 07:52:23 +03:00
gnezim bd9cc92766 Add Phase 2 Online Board master plan with 8 sub-plans 2026-04-15 07:46:33 +03:00
gnezim 7db39cbeec Fix type errors and lint warnings in health and shutdown modules
Use proper type-safe interfaces instead of Node.js http types for the
health handler, and avoid vi.spyOn type issues in shutdown tests by
directly intercepting process.on.
2026-04-15 00:59:59 +03:00
gnezim 56cc9e1af2 Add operational runbook covering incident response and failure playbooks
Covers incident decision tree, canary rollout, rollback procedures,
health-check interpretation, log query cookbook, and 6 known-failure
playbooks per master plan requirements.
2026-04-15 00:56:24 +03:00
gnezim ca6ae0eea2 Add graceful shutdown handler with TDD
registerGracefulShutdown drains in-flight requests for 30s on SIGTERM,
flushes logs, then exits cleanly. Force-exits with code 1 on timeout.
2026-04-15 00:55:09 +03:00
gnezim f0e540aa3f Add health endpoint factory with TDD
healthMiddleware returns 200 if upstream was reachable within 60s, 503 otherwise.
Exports a factory function — registration in modern.config.ts is a future step.
2026-04-15 00:55:08 +03:00
gnezim 8c8b8b985e Add deploy workflow template for CI/CD pipeline
Stub workflow triggered on push to main: build, test, Docker image build.
Registry URLs and deployment targets are placeholders pending customer config.
2026-04-15 00:53:42 +03:00