106 Commits

Author SHA1 Message Date
gnezim 3669e09d35 fix: move pi crew resources into discovered layout 2026-04-29 23:17:02 +03:00
gnezim 8c0ee461d2 chore: track blocked user answer time 2026-04-29 22:55:05 +03:00
gnezim c3397cd47c chore: add memory review queue 2026-04-29 21:55:50 +03:00
gnezim 4fa9561a8d chore: add active prompt time controls 2026-04-29 21:43:52 +03:00
gnezim 4c79695dd5 chore: automate agent memory capture 2026-04-29 21:35:35 +03:00
gnezim 54f1ccc80d chore: add agent memory evolution loop 2026-04-29 21:15:38 +03:00
gnezim 5847e5273a chore: add pi crew agent setup 2026-04-29 20:52:45 +03:00
gnezim d884456884 Triage spec for SSR hydration mismatch (React #423)
ci-deploy / build-deploy-test (push) Successful in 1m26s
Prerequisite for re-enabling e2e in ci-deploy. Identifies the new Date()
class as the highest-impact fix and proposes hoisting today/now to the
route loader so SSR and CSR see identical values via _ROUTER_DATA.
2026-04-27 19:20:54 +03:00
gnezim 03eeddfbf8 CI/CD pipeline: ssh -L tunnel for TIM API + manual Jenkins trigger
Two design pivots discovered during Phase B prerequisites:

Routing: Replace static-route + NAT plan with persistent ssh -L tunnel
from pve-201 to webzavod (deployment/systemd/flights-tim-tunnel.service).
nginx proxies /api/ and /map/api/ to https://127.0.0.1:8443 with SNI/Host
overrides so cert validation still targets the real hostname. No webzavod
kernel changes (no ip_forward/MASQUERADE), no /etc/hosts pin needed.

Workflow B: Drop Jenkins trigger/poll automation (operator lacks Jenkins
job-configure access and user API token access). release.yml now stops
after MR merge with a Telegram message containing the Jenkins job URL.
release-verify.yml (new, workflow_dispatch only) runs the customer-URL
e2e suite once the operator has triggered Jenkins manually and it has
completed.

Other:
- SSR loopback port 8081 -> 3002 (8081 was taken by openwebui on pve-201)
- notify-telegram.sh skips cleanly when TG secrets unset (was: hard-fail)
- README + spec addendum cover the new prereqs and removed steps
2026-04-27 11:58:39 +03:00
gnezim 19f980ba61 plan: implementation plan for CI/CD pipeline (25 tasks) 2026-04-25 01:47:51 +03:00
gnezim 1fec2bb9b1 spec: design Gitea Actions CI/CD pipeline to pve-201, GitLab MR, Jenkins
Captures the agreed two-workflow shape (push-deploy + manual release)
so the implementation plan has an unambiguous source of truth before
touching scripts, Dockerfile build-args, or nginx config.
2026-04-25 01:34:43 +03:00
gnezim 2f386cbaf0 Mark P6 rules Done + project-complete summary in TZ audit spec
CI / ci (push) Failing after 35s
Deploy / build-and-deploy (push) Failing after 5s
2026-04-22 02:21:57 +03:00
gnezim 4904ba31c9 Audit caching behavior per TZ 4.1.18 (all 3 rules backend-responsibility)
Client makes no stale-serving assumptions: every Online-Board and Schedule
search triggers a fresh upstream fetch; dictionaries are loaded once per
session. Cache-Control TTLs (≤1 min board, ≤10 min schedule) and ETag/304
for dictionary endpoints are set by the backend HTTP layer. CachedApiClient
/ ServerLruCache infrastructure exists in src/shared/api/ for future SSR
caching if needed. All three 4.1.18 rules marked Out-of-scope (backend) in
the spec; coverage counters updated (13 → 16 out-of-scope, TBD −3).
2026-04-22 01:40:42 +03:00
gnezim 187977a39f Close C5 TZ 4.1.1-R22 typo conflict (Flight-Map placeholder uses ДД.ММ.ГГГГ) 2026-04-22 01:37:16 +03:00
gnezim fcf48348d5 Populate rule rows for P6 subsections 4.1.18/19/20/21/24 in TZ audit spec 2026-04-22 01:35:53 +03:00
gnezim f961a1d394 Add P6 implementation plan: SEO + errors + cache + flight map 2026-04-22 01:28:38 +03:00
gnezim 21f7bcc57c Mark P5 (flight cards + timeline + icons + Уточняется) rules Done in TZ audit spec
- §4.1.15.1–.11: ~28 Done + ~70 Implemented across structure, mini-list,
  day-tabs, direct flight, multi-segment, intermediate landing, timeline
  time/status, previous-flight, meals, services
- §4.1.16.1–.8: ~16 Done + ~37 Implemented; 4 TBD(backlog): three-date-group
  mini-list UI (R10/R11/R14/R15) and full §4.1.16.3.1 nav algorithm (R28–R31)
- §4.1.17-R4 Implemented (per-type badge independence fixed 63fc606)
- §4.1.22-R1–R10 Done (operatorIcon.ts + 35-carrier table + 7-range fallback)
- §4.1.23-R1–R6 Done (tbd.ts helper + orange .tbd-text + 9 locales)
- Conflicts C9/C10/C11 registered and resolved
- Coverage: 381 Done + ~308 Implemented + 7 Partial + ~143 TBD ≈ 853 total
- Merge log row added for P5 (27fd4ac..67504aa)
2026-04-22 01:22:59 +03:00
gnezim 63fc6060f2 Verify day-change algorithm per TZ 4.1.17 (per-time-type badges, query-date baseline)
R4 gap fixed: TimeGroup now accepts scheduledDayChange + actualDayChange props
separately so each time type renders its own independent badge. FlightCard
updated to pass them independently (scheduled vs actual/estimated); expanded
row time block also now shows per-type badges.

R5 tooltip fixed: dayChangeBadgeTooltip() uses string-based date extraction
(no TZ reprojection via new Date()) — avoids viewer-TZ shift for SSR and
cross-TZ correctness. Returns "День" for ±1, DD.MM.YYYY for ±2+.

New shared helper dayChange.ts exports computeDayChange(), dayChangeBadgeTooltip(),
formatDayChangeBadge(). 27 unit tests cover +0/+1/+2/-1/-2, null, malformed
input, month/year boundaries, and per-time-type independence (R4).

R1–R3, R6 confirmed correct (API supplies dayChange per ITimesSet; badge
adjacent to time; hidden when 0). R8 (mobile tooltip suppression) deferred.
2026-04-22 00:01:30 +03:00
gnezim df83a587c2 Populate rule rows for P5 subsections 4.1.15/16/17/22/23 in TZ audit spec 2026-04-21 23:45:57 +03:00
gnezim 27fd4ac601 Add P5 implementation plan: flight cards + timeline + aircraft icons + Уточняется 2026-04-21 23:36:46 +03:00
gnezim 8c8022780f Mark P4 (results lists) rules Done in TZ audit spec
32 rules Done + ~142 Implemented across §4.1.13/14. 4 Partial (multi-seg
status-switching, check-in counter, airport-as-link on segment dep/arr).
7 TBD(P5) deferred (airport-as-link OB+Schedule collapsed/expanded,
online check-in button). C8 registered and resolved (week-tabs active
range +210→+330 days). Coverage: 317 Done, ~191 Implemented, 6 Partial,
~138 TBD.
2026-04-21 23:35:11 +03:00
gnezim 4fd1b054a4 Populate rule rows for P4 subsections 4.1.13/14 in TZ audit spec 2026-04-21 22:34:32 +03:00
gnezim 890d575e88 Add P4 implementation plan: results lists (Online-Board + Schedule) 2026-04-21 22:25:06 +03:00
gnezim 793637ffc3 Mark P3 (filter + validation + history + search execution) rules Done in TZ audit spec 2026-04-21 22:21:09 +03:00
gnezim ae061bcaab Populate rule rows for P3 subsections 4.1.9/10/11/12 in TZ audit spec
159 net-new concrete rules extracted from TZ Tables 11-17, §4.1.9.3-4,
§4.1.10/10.1/11/11.1/12, replacing 27 skeleton placeholder rows.
Coverage total: 283 → 494 rules. All new rows Status=TBD, Plan=P3.
2026-04-21 19:48:13 +03:00
gnezim 3b32233b88 Add P3 implementation plan: filter + validation + search history + search execution 2026-04-21 19:40:04 +03:00
gnezim 5362d8d6c4 Mark P2 (start pages + first-entry + popular) rules Done in TZ audit spec 2026-04-21 19:32:14 +03:00
gnezim 2aa831e198 Populate rule rows for P2 subsections 4.1.5/6/7 in TZ audit spec 2026-04-21 18:54:13 +03:00
gnezim a6d8f43e94 Add P2 implementation plan: start pages + first-entry geo + popular sections 2026-04-21 18:50:01 +03:00
gnezim 8f573c15b8 Mark P1 (URLs/breadcrumbs/names/nav) rules Done in TZ audit spec 2026-04-21 18:21:51 +03:00
gnezim 13170eb689 Fix review issues in P1 spec rule rows (bracket notation, cross-refs, typo, R8 split) 2026-04-21 16:26:52 +03:00
gnezim 816028603b Populate full rule enumeration for P1 subsections 4.1.2/3/4/8 in TZ audit spec 2026-04-21 16:18:05 +03:00
gnezim a6f7d3df8c Add P1 implementation plan: URLs, breadcrumbs, page names, cross-section nav 2026-04-21 15:59:04 +03:00
gnezim 8e84c41243 Add TZ РИ-07-2538С compliance-audit spec for 4.1 (Online-Board / Schedule / Flight Map) 2026-04-21 15:45:11 +03:00
gnezim 8005356db5 docs: parity report markdown + auto-memory plan
Companion markdown to the comparison-report/visual/report.html with
the same coverage matrix and per-page findings. Useful for git-based
review without serving the HTML.

Also adds AGENTS.md (subagent role definitions for future sessions)
and the modernjs-v3-upgrade plan stub from the earlier scoping.
2026-04-19 22:06:05 +03:00
gnezim 84e6d265fc Align board search + details with Angular visual parity
Both pages were rendering content directly on the dark-blue page
background, which made the flight list and details card effectively
invisible. Angular wraps the same content in a white card (section.frame)
with drop shadow.

Changes:
- Wrap FlightList in <section class='frame'> on the search page and wrap
  the details body the same way.
- Replace the inline numbered .calendar-day strip on the search page
  with the existing <DayTabs> component — the same one the details page
  already uses (weekday + day + month labels, ‹/› paging).
- Pass onFlightClick through FlightList into FlightCard so whole rows
  are keyboard-accessible buttons, matching Angular's row-level click.
  The off-screen data-testid='flight-link-*' buttons stay for e2e.
- Fix 'Leg NaN' header + the React key warning in FlightLegs when
  the API returns a Direct leg without an index field.
- Update the existing flight-search integration test to target the
  DayTabs testid instead of the old ad-hoc calendar-strip one.

A docs/parity-report-2026-04-17.md file captures the diffs I applied
and a punch list of the remaining parity gaps (operator logo on rows,
delay/day-change glyphs, Share button visibility on board details, the
aircraft panel as a table). Those need per-component work against the
Angular templates and will follow in a separate pass.
2026-04-17 23:14:59 +03:00
gnezim aa7433b50b Add CityAutocomplete + regional picker implementation plan
Seven TDD tasks: buildCountryCityRows helper, CityPickerPopup with
regional tabs + grid, CityAutocomplete composite with popup trigger,
OnlineBoardFilter Route tab integration, FlightsMapFilter integration
with geolocate, time-selector compact view, final verification.
2026-04-17 14:58:05 +03:00
gnezim 0534b373f0 Add design spec for CityAutocomplete + regional picker parity
Cross-feature Angular-parity component: composite CityAutocomplete
(typeahead + clear + regional-picker trigger button) + CityPickerPopup
(regional tabs + country/city grid + optional GPS) + pure
buildCountryCityRows helper. Consumers: OnlineBoardFilter Route tab
and FlightsMapFilter. Time-selector switches to compact view in both.
2026-04-17 14:25:52 +03:00
gnezim 5a18e86bec Add Flights Map C.5 implementation plan
Six TDD tasks: calendarRange pure helpers, useGeolocationDefault hook,
FlightsMapFilter Calendar wiring (minDate/maxDate/disabledDates + snap
effect), Calendar prop capture tests, FlightsMapStartPage geolocation
hook call, final verification.
2026-04-17 12:13:50 +03:00
gnezim 9ee9c6b089 Add design spec for Flights Map C.5 (Calendar + Geolocation)
Final C-gap sub-feature: calendarRange pure helpers
(getMinDate/getMaxDate/buildDisabledDates/findNextEnabledDate), snap-to-
nearest-enabled effect in FlightsMapFilter, and useGeolocationDefault
hook that pre-fills departure from browser position on mount when no
dep/arr is already set.
2026-04-17 12:07:48 +03:00
gnezim 5225df0dd1 Add Flights Map C.4 implementation plan
Six TDD tasks covering filterRoutes, buildBuyTicketUrl + escapeHtml,
routesToPolylines airport-code normalization, FlightsMapStartPage wiring
(effectiveConnections + auto-fallback effects, filteredRoutes + popups
memos), integration tests, and final verification.
2026-04-17 10:48:02 +03:00
gnezim 299b0285b0 Add design spec for Flights Map C.4 (Popups + Filtering + Fallback)
Covers the final four Angular-parity gaps: filterRoutes pure helper,
buildBuyTicketUrl + escapeHtml, routesToPolylines/intermediateCityIds
airport→city normalization, and FlightsMapStartPage wiring for the
auto-fallback effect plus departure/arrival buy-ticket popups.
2026-04-17 10:43:24 +03:00
gnezim 514bae6051 Add Flights Map C.3 implementation plan
Six TDD tasks covering the routes-to-polylines pure helper, IMapPolyline
reshape to cityIds, MapCanvas polyline sync with visibility filtering,
intermediate-tooltip force-open pass, page wiring, and integration tests.
Tasks 1-3 share a commit due to coupling between type and consumer.
2026-04-17 10:00:48 +03:00
gnezim a23513045b Add design spec for Flights Map C.3 (Route + Spider Drawing)
Covers the polyline layer: routesToPolylines pure function, city-code-
based IMapPolyline shape, MapCanvas polyline sync via markerIndexRef
with visibility filtering, intermediate-city tooltip force-open pass.
2026-04-17 09:53:21 +03:00
gnezim 855a7c31e6 Fix POPULATION_1KK size in C.2 spec: Angular source has 30 entries, not 29 2026-04-17 08:36:08 +03:00
gnezim 43f251e177 Add Flights Map C.2 implementation plan
Six TDD tasks: cityCategory port, IMapMarker extension, MapCanvas
10-layer rendering + highlight + tooltip rules (with a fresh Leaflet
mock), FlightsMapStartPage marker wiring, integration tests, final
verification.
2026-04-17 08:32:32 +03:00
gnezim 13bb96fdec Add design spec for Flights Map C.2 (Markers + Zoom Tiers)
Captures the markers-from-dictionaries + zoom-visibility scope:
cityCategory.ts port, IMapMarker extension, MapCanvas 10-LayerGroup
bookkeeping, highlighted-layer, domestic/international toggles, and
the Angular-parity tooltip visibility rules.
2026-04-17 08:27:38 +03:00
gnezim 9f8a3a45f0 Add Flights Map C.1 implementation plan and updated spec
Spec: narrows useCityName handling (leave untouched due to active
consumers). Plan: 10 TDD tasks covering types, api, transform rules,
helpers, hook, barrel, page wiring, and regression tests.
2026-04-17 03:07:30 +03:00
gnezim 397dc2a575 Add design spec for Flights Map C.1 (Dictionaries)
Captures the data-layer scope for the flights-map rebuild: useDictionaries
hook, parallel fetch of world_regions/countries/cities/airports, transform
rules matching Angular DictionariesService, and the testing contract.
2026-04-17 02:51:22 +03:00
gnezim ced66acc7b Add transfer bar + multi-leg timeline (B.5) implementation plan 2026-04-17 02:23:52 +03:00