plan/react-rewrite #1

Merged
gnezim merged 138 commits from plan/react-rewrite into main 2026-04-15 12:21:16 +03:00

138 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
gnezim 9b1fb7388f Add Dockerfile.react and Dockerfile.remote for React build targets
Standalone SSR image (Node 24 slim) and remote MF static image (nginx alpine),
coexisting with legacy ASP.NET Dockerfile.
2026-04-15 00:53:36 +03:00
gnezim 0f4180de14 Add Phase 1I (Deploy pipeline + runbook) implementation plan 2026-04-15 00:53:10 +03:00
gnezim 59d5a7314e Fix lint: exempt storage test from no-restricted-globals, remove non-null assertion 2026-04-15 00:50:46 +03:00
gnezim 5d041cc4c6 Implement security headers middleware for HSTS, COOP, CORP, and more 2026-04-15 00:49:07 +03:00
gnezim 4f93d0a9bf Implement SSR stream nonce injection as workaround for React #24883 2026-04-15 00:48:54 +03:00
gnezim 10b97339bf Implement CSP middleware with per-request nonce and React context 2026-04-15 00:48:02 +03:00
gnezim 2742568a85 Implement safe storage abstraction with Zod validation and namespace prefix 2026-04-15 00:47:22 +03:00
gnezim 726db20f89 Add Phase 1H security hardening implementation plan 2026-04-15 00:46:29 +03:00
gnezim ebe6c38713 Fix lint warnings in SignalR wrapper and hook tests
Remove unused imports, eliminate non-null assertions,
drop invalid eslint-disable comment for missing rule.
2026-04-15 00:44:31 +03:00
gnezim 4c52bb4032 Add useLiveFlights SSR-safe hook with tests
Generic hook wrapping SignalR subscription with SSR guard
(typeof window check). Includes tests for subscribe, data
updates, cleanup, and SSR path.
2026-04-15 00:42:51 +03:00
gnezim 7052052742 Add SignalRConnection ref-counted wrapper with tests
Reference-counted connection management with grace period,
dynamic import to keep @microsoft/signalr out of SSR bundle,
and singleton sharing via getSharedConnection.
2026-04-15 00:41:28 +03:00
gnezim b6a007d3b6 Add @microsoft/signalr dependency for live flight data 2026-04-15 00:39:31 +03:00
gnezim b431010241 Add Phase 1E SignalR wrapper implementation plan 2026-04-15 00:39:14 +03:00
gnezim b6da51fce5 Add smoke route exercising logger, i18n, and locale display 2026-04-15 00:36:54 +03:00
gnezim 6d3e3ae986 Add error pages for 404, 500, 503 codes 2026-04-15 00:35:05 +03:00
gnezim 858b8e1d1f Wire root layout provider stack and locale-scoped layout with i18n
Root layout wraps children with LoggerProvider, ApiClientProvider, and
ErrorBoundary. Locale layout validates lang param against 9 supported
languages and provides a request-scoped I18nProvider.
2026-04-15 00:34:16 +03:00
gnezim fc57556010 Add errorToResponse mapper with TDD tests covering all mapping rules 2026-04-15 00:31:37 +03:00
gnezim 2eb118cb8b Add ErrorBoundary class component with retry support 2026-04-15 00:30:34 +03:00
gnezim 1409df458b Add 1F-layout implementation plan for root layout, error routes, smoke route 2026-04-15 00:29:46 +03:00
gnezim bb50e63866 Add SeoHead component with canonical, hreflang, OG, Twitter, and JSON-LD 2026-04-15 00:20:40 +03:00
gnezim 599f35f14a Add JsonLdRenderer and serializeJsonLd with schema-dts typing 2026-04-15 00:20:07 +03:00
gnezim 8abe8acf70 Add buildHreflangSet for 9 languages + x-default 2026-04-15 00:18:35 +03:00
gnezim ad9b35f725 Add schema-dts dependency for typed JSON-LD generation 2026-04-15 00:17:29 +03:00
gnezim 6a4be07911 Add useAnalytics hook with server-safe NoopAnalytics fallback 2026-04-15 00:15:43 +03:00
gnezim 8878dcb6c8 Add AnalyticsLoader component with idle-callback initialization 2026-04-15 00:15:43 +03:00
gnezim 515151ed81 Add analytics facade with adapter fan-out and consent gating 2026-04-15 00:15:11 +03:00
gnezim fe31bbfb65 Add four stub analytics adapters (metrica, ctm, variocube, dynatrace) 2026-04-15 00:13:49 +03:00
gnezim e95781a069 Add test-observable analytics event sink 2026-04-15 00:13:13 +03:00
gnezim 0b25a1a9e7 Add 8 custom metric instruments using OTel proxy meter 2026-04-15 00:10:49 +03:00
gnezim 2dc1a1f194 Add OTel server/browser initializers with getMeter/getTracer accessors 2026-04-15 00:10:21 +03:00
gnezim ddedddd15d Add OpenTelemetry and web-vitals dependencies for metrics pipeline 2026-04-15 00:07:38 +03:00
gnezim 8e7adef5e3 Add implementation plans for 1G-metrics, 1G-analytics, and 1F-seo 2026-04-15 00:05:48 +03:00
gnezim dfa9e0283d Add LoggerProvider React context with useLogger hook 2026-04-14 23:57:56 +03:00
gnezim 498d049acd Add createRootLogger factory with transport selection by env 2026-04-14 23:57:30 +03:00
gnezim 9a1b4bace1 Add JsonLinesHttpTransport with batching, backpressure, and redaction 2026-04-14 23:55:12 +03:00
gnezim 98414ee4af Add dev-mode ConsoleTransport for logger 2026-04-14 23:54:01 +03:00
gnezim 1a40686490 Add LoggerImpl with transport dispatch and child context propagation 2026-04-14 23:53:13 +03:00
gnezim c095fad7ad Add Phase 1G-logger runtime implementation plan
6 tasks: TDD LoggerImpl, ConsoleTransport, JsonLinesHttpTransport
with batching/backpressure/redaction, createRootLogger factory with
env-based transport selection, LoggerProvider React context.
2026-04-14 23:51:04 +03:00
gnezim 7992d2705a Add ApiClient React context provider with useApiClient hook 2026-04-14 23:46:20 +03:00
gnezim 04c5432aef Add CachedApiClient decorator layered above ApiClient 2026-04-14 23:45:56 +03:00
gnezim 65c8c8b55f Add ApiClient with retry, timeout, and error mapping 2026-04-14 23:42:22 +03:00
gnezim cb5e5b0106 Add three cache types (request-scoped, client TTL, server byte-capped LRU) 2026-04-14 23:39:35 +03:00
gnezim fd62d6f123 Add circuit breaker with closed/open/half-open state machine 2026-04-14 23:30:53 +03:00
gnezim 6ef9ce4ed7 Add typed API error classes (ApiHttpError, ApiTimeoutError, ApiNetworkError) 2026-04-14 23:30:00 +03:00
gnezim 454fb0bdb9 Add Phase 1D API client implementation plan
7 tasks: TDD error classes, circuit breaker, three cache types
(request-scoped, client TTL, server byte-capped LRU via lru-cache),
ApiClient with retry+timeout, CachedApiClient decorator, provider.
2026-04-14 23:27:50 +03:00
gnezim 7103b9ffb1 Add I18nProvider with useTranslation re-export for feature code 2026-04-14 23:21:25 +03:00
gnezim a8c648c818 Add SSR↔client i18n hydration serializer 2026-04-14 23:21:01 +03:00
gnezim 1fd2788c35 Add createI18nInstance factory with ICU and resource backend 2026-04-14 23:18:22 +03:00
gnezim bf3087d45e Add locale resolver with Language type and URL prefix parsing 2026-04-14 23:17:08 +03:00
gnezim 33d4c94298 Install i18n deps and port 9 locale JSON files from Angular 2026-04-14 23:15:00 +03:00
gnezim 3067f8f111 Add Phase 1C i18n runtime implementation plan
6 tasks: port 9 locale JSONs, TDD resolver with Language type, TDD
createI18nInstance factory with ICU, TDD SSR↔client hydration
serializer, I18nProvider with useTranslation re-export.
2026-04-14 23:13:35 +03:00
gnezim 050f311a60 Add fabricated violation tests for restricted import rules 2026-04-14 23:07:18 +03:00
gnezim 8459e1661b Add fabricated violation tests for boundary rules
Fix eslint.config.js: add import/resolver settings so boundaries plugin
can resolve .ts/.tsx imports, and merge no-restricted-imports blocks to
prevent ESLint 9 flat config from overriding earlier rule definitions.
2026-04-14 23:06:57 +03:00
gnezim e9640b17fd Add no-restricted-imports for OTel SDK, react-i18next, SignalR SSR, localStorage 2026-04-14 22:47:53 +03:00
gnezim f1acf7827d Add eslint-plugin-boundaries with layered dependency rules 2026-04-14 22:47:26 +03:00
gnezim 7bbda35041 Add Phase 1A-3 ESLint boundaries implementation plan
5 tasks: install eslint-plugin-boundaries, configure layered dependency
rules matching design spec §1.2, add no-restricted-imports for OTel
SDK, react-i18next, SignalR SSR, localStorage. Each rule has a
fabricated-violation test asserting it fires.
2026-04-14 22:46:12 +03:00
gnezim 826758f03d Add typed loadRemoteModule wrapper around MF runtime 2026-04-14 22:40:49 +03:00
gnezim 604ed75498 Wire build:standalone/build:remote/dev to Modern.js CLI 2026-04-14 22:37:56 +03:00
gnezim 4fd7ae3f94 Add modern.config.ts with standalone/remote BUILD_TARGET branching 2026-04-14 22:37:12 +03:00
gnezim 5881f9ed72 Declare MF 2.0 config with 4 feature exposes and React singleton 2026-04-14 22:37:07 +03:00
gnezim 2bdfde43f6 Seed MF expose stubs and host-entry for 4 features 2026-04-14 22:35:19 +03:00
gnezim c41089e5c8 Add stub root route for standalone build (replaced by 1F-layout) 2026-04-14 22:34:41 +03:00
gnezim 4eede82961 Install Modern.js, MF 2.0 plugin, and React 18 at pinned versions 2026-04-14 22:34:14 +03:00
gnezim 2eda0a675e Land Modern.js + MF 2.0 spike report with pinned versions 2026-04-14 22:31:07 +03:00
gnezim e200256fdc Add Phase 1A-2 MF 2.0 + dual build targets implementation plan
10 tasks led by a timeboxed Modern.js + MF 2.0 spike that pins
versions and validates the dual-build approach before committing to
it. Covers module-federation.config.ts with 4 feature exposes, React
18 singleton, BUILD_TARGET branching in modern.config.ts, and a
typed loadRemoteModule wrapper around @module-federation/enhanced
runtime for consuming other customer remotes in Phase 2+.
2026-04-14 22:18:17 +03:00
gnezim 5b67aa25fa Correct 1A-1 plan for 4 bugs found during execution
- Task 3: dotfile placeholder (src/.typecheck-placeholder.ts) is ignored
  by TypeScript's glob; use non-dotfile name.
- Task 4: replace legacy .eslintrc.cjs with ESLint 9 flat config.
  ESLint 9 requires flat config natively; the legacy format triggers
  deprecation warnings and needs a FlatCompat shim.
- Task 9: env impl cannot unconditionally assign undefined to optional
  fields under exactOptionalPropertyTypes; build base object then
  conditionally assign the three optional URL/header fields.
- Task 12 Step 5: defer coverage check to 1B, which owns the
  @vitest/coverage-v8 dep per the master plan shared-files table.
2026-04-14 22:12:26 +03:00
gnezim 9d5898e8d5 Document frozen-barrel rule and A1 rename-pass rework plan 2026-04-14 22:07:58 +03:00
gnezim 0b9ea74617 Seed frozen public barrels for 4 features + UI adapter 2026-04-14 22:07:26 +03:00
gnezim 9c29091b58 Add Zod-validated getEnv() reader with module-level cache 2026-04-14 22:05:36 +03:00
gnezim 23db51997b Add HostContract interface per design spec §2.4 2026-04-14 22:03:14 +03:00
gnezim 8a8075972d Seed type-only AnalyticsProviders for Env dependency 2026-04-14 22:02:56 +03:00
gnezim 9acccffe8c Seed type-only Logger surface for HostContract dependency 2026-04-14 22:02:41 +03:00
gnezim 9c5f834334 Migrate ESLint to flat config for v9 compatibility
Replaces the FlatCompat shim (which loaded .eslintrc.cjs via @eslint/eslintrc
and emitted deprecation warnings) with a native ESLint 9 flat config. Adds
typescript-eslint meta-package as the flat-config entrypoint and pins
@eslint/js to v9 to satisfy the eslint@9 peer range. Rule set is preserved
verbatim from the Phase 1A-1 plan (Task 4).
2026-04-14 22:01:10 +03:00
gnezim f7d367a315 Configure Vitest with @/ alias and v8 coverage 2026-04-14 21:57:35 +03:00
gnezim 4d41b46975 Add baseline ESLint config (no boundary rules yet) 2026-04-14 21:56:47 +03:00
gnezim 765174b674 Add strict TypeScript config with @/ and @phase0/ aliases 2026-04-14 21:55:18 +03:00
gnezim 7c99ab069d Tighten Node engine pin, bump pnpm, add pnpm hygiene to gitignore
Align engines.node with the .nvmrc 24.2.0 pin so npm/pnpm warn on
mismatched local toolchains, move packageManager to the current
pnpm 9.15.3 patch, and ignore pnpm's local store and debug log so
stray artefacts never get committed.
2026-04-14 21:52:29 +03:00
gnezim 5cce054f36 Upgrade vitest to v3 to patch transitive esbuild CVE
Vitest 2 pulled Vite 5 + esbuild 0.21 (GHSA-67mh-4wv8-2f99). Bumping
vitest/@vitest/ui to v3 and adding vite ^6 as a direct dev dep forces
peer resolution onto Vite 6 + esbuild 0.25, which also clears the Vite
path-traversal advisory (GHSA-4w7w-66w2-5vf9). pnpm audit is now clean.
2026-04-14 21:52:04 +03:00
gnezim 064436527a Install TypeScript, Vitest, ESLint, Zod base toolchain 2026-04-14 21:45:47 +03:00
gnezim 00d1c9827c Pin Node 24 and seed root package.json for Phase 1A-1 2026-04-14 21:45:15 +03:00
gnezim 59a94b50b9 Add Phase 1A-1 project skeleton implementation plan
TDD-granular plan with 12 tasks covering Node 24 pinning, TypeScript
strict config, baseline ESLint, Vitest setup, type-only seeds for
HostContract plan-cycle resolution, Zod-validated env reader, frozen
feature/UI barrels, and the A1 rename-pass rework stub.
2026-04-14 21:42:49 +03:00
gnezim f309f62553 Swap server LRU cache to lru-cache v10 for byte-based cap
@isaacs/ttlcache has no byte cap (only count). A 100MB hard limit needs
lru-cache v10's maxSize + sizeCalculation. Aligns design spec with
Phase 1 master plan contract revision.
2026-04-14 21:37:43 +03:00
gnezim 03bab8d7f8 Revise Phase 1 master plan with 25 review decisions
Scope: defer 1J parity harnesses to Phase 2 (design against real
feature); split 1A, 1F, 1G into smaller sub-plans; split Phase 0 gate
into hard blockers vs stub-allowed; add A9 for Node 24 availability.

Contracts: fix three-cache model (lru-cache v10 for byte-capped server
LRU), add undici RetryAgent retry config, generic useLiveFlights, CSP
nonce stream transform workaround for React #24883, type-only Logger
extraction to break HostContract plan cycle, error-to-HTTP mapper,
RemoteLoader for consuming other customer remotes, JsonLdRenderer.

Requirements: add runbook, responsive baseline assertions, A4-trigger
log format swap task, rename-pass rework rule, analytics stub sink.
2026-04-14 21:37:35 +03:00
gnezim f41656ce5f Allow autonomous commits in Claude Code workflow
Review and planning iterations commit frequently; asking for permission
on each commit added friction without safety benefit. Destructive git
operations still require explicit approval.
2026-04-14 21:37:02 +03:00
gnezim 4ba4159723 Add Phase 1 Foundation MASTER plan
Index of 10 sub-plans (1A-1J) with dependency graph, exported contracts
between sub-plans, shared-file ownership table, spec-coverage matrix,
and global exit gate. Each sub-plan gets its own TDD-granular plan
document written on demand via the writing-plans skill.
2026-04-14 20:03:44 +03:00
gnezim 013fad6236 Add Phase 0 (Preflight) implementation plan
16 tasks covering URL corpus extraction, SEO + hreflang + VRT baseline
capture from Angular prod, PrimeNG/SCSS/i18n inventories, and the
customer confirmation checklist. Phase 0 is discovery-only; no
production change. Output is the fixture + inventory set Phase 1
sub-plans consume.
2026-04-14 19:47:54 +03:00
gnezim 75dbec0737 Add design spec for Angular-to-React MF remote rewrite
Captures the dual-mode Modern.js architecture, strangler-fig phasing,
parity contracts, and customer-requirement mapping so implementation
plans can be derived per phase without re-litigating architectural
decisions.
2026-04-14 19:35:31 +03:00
gnezim b4a41cc801 Add .nvmrc file and update package.json with main, keywords, license, and description fields 2026-04-14 18:21:35 +03:00