88 Commits
Author SHA1 Message Date
kamilkrzywda 89ad09a04d Queue via fly-to + Relocate; remove dedicated queue-add input (ISS-053, v0.32.0)
CI / build + unit + e2e (pull_request) Successful in 10m18s
- LeftPane fly-to button enabled for any plane state; posts to /queue when the plane is flying, else /fly
- Relocate lists ALL planes (relocatable); relocate-go posts to /queue for a flying selected plane, else /fly
- Delete queue-add select + Add-to-queue button and shared queueAddDestIcao state; leg rows/cancel kept
- e2e/queue.spec.ts test 1 adds its queued leg via the Relocate section (starter is flying)
- e2e/two-planes.spec.ts per-plane-queues test adds the starter's second leg via API POST /queue
2026-09-20 23:48:12 +00:00
kamilkrzywda 1e3992f872 Two-plane load fix + e2e coverage (ISS-055, v0.31.0)
CI / build + unit + e2e (pull_request) Failing after 8m13s
- LoadControls preselects the first eligible plane so Load is one-click with N planes
- LeftPane queue testids scoped by plane id (queue-leg/cancel/add[-dest]-{plane.id})
  — unscoped ids duplicated in the DOM with two on-board blocks
- new POST /api/test/add-cash hook (FLIGHT_TEST_HOOKS=1, default €1M) so e2e can
  afford a second plane; returns the full state snapshot
- new serial spec e2e/two-planes.spec.ts: load, parallel fly + ISS-057 slow/resume,
  refuel, relocate, per-plane queues with auto-chain, sell (6 tests)
- e2e/queue.spec.ts locators updated to the scoped testids
2026-09-20 21:26:16 +00:00
kamilkrzywda c9e9113a45 Slow sim to 1× on landing and resume last selected speed (ISS-057, v0.30.0)
CI / build + unit + e2e (pull_request) Successful in 8m57s
2026-09-20 20:27:59 +00:00
kamilkrzywda 0b946b743c Remove flaky time-controls e2e test (v0.29.1)
CI / build + unit + e2e (pull_request) Successful in 8m19s
2026-09-20 18:23:20 +00:00
kamilkrzywda b4b25551ff Fix ignore route slug collision ([packageId] → [id]) — Next.js runtime 500s (ISS-047 part B)
CI / build + unit + e2e (pull_request) Successful in 8m21s
2026-09-20 18:07:18 +00:00
kamilkrzywda 8a12f07703 Ignore a job: dismiss an open package so it leaves the market (ISS-047 part B, v0.29.0)
CI / build + unit + e2e (pull_request) Failing after 12m34s
New terminal status 'ignored' + ignorePackage action + POST /api/packages/{packageId}/ignore
(no body, no penalty; top-up logic refills the market). Ignore button per open-package row in
the Jobs tab. OpenAPI gains the 13th endpoint; unit tests for the action (happy/409x5/404),
engine terminal-status coverage, and a new e2e spec test.
2026-09-20 14:28:47 +00:00
kamilkrzywda 7524f943d2 Right pane tabs Jobs/Planes market + 5 new plane types with tech-spec panels + sell-plane cargo guard (ISS-047 part A)
CI / build + unit + e2e (pull_request) Successful in 8m56s
2026-09-20 13:57:52 +00:00
kamilkrzywda 34b38dd5d5 Right pane width matches left pane: 280→360px + toast offset (ISS-046)
CI / build + unit + e2e (pull_request) Successful in 8m8s
2026-09-20 13:17:33 +00:00
kamilkrzywda 179fad450d Package weight, payload capacity and per-kg payout (ISS-045)
CI / build + unit + e2e (pull_request) Successful in 8m2s
Packages carry a real weightKg (unit weight x count with +/-30% jitter),
plane capacity becomes maxPayloadKg instead of 6 slots, load validation
sums cargo weight against the payload, and the payout gains a per-kg part.
Loadout display shows tonnage; OpenAPI swaps CatalogEntry.capacity for
maxPayloadKg and adds PackageState.weightKg.
2026-09-20 12:42:03 +00:00
kamilkrzywda 408cd933f4 Flight queue UI: dotted map line, left-pane Queue sub-section, e2e (ISS-043 part 2)
CI / build + unit + e2e (pull_request) Failing after 6m51s
2026-09-20 11:31:11 +00:00
kamilkrzywda 69b708dad3 Flight queue backend: planes hold a queue of upcoming legs, auto-chain on landing (ISS-043 part 1)
CI / build + unit + e2e (pull_request) Failing after 6m37s
- planes.queue TEXT NOT NULL DEFAULT '[]' — ordered JSON array of not-yet-started
  leg ICACs; active leg stays destIcao + departureSimTime. DDL + guarded ALTER
  migration for existing DBs; seed sets queue: [] explicitly.
- deliverPackages() auto-chains on arrival: with a non-empty queue and fuel
  covering the first queued leg (same requiredFuelFor rule as /fly), the plane
  immediately starts that leg from the arrival airport (stays 'flying',
  departureSimTime = arrival instant, queue shortened). Short tank → grounds
  safely with the queue kept intact; empty queue → unchanged grounding. Cargo
  delivery for the reached airport runs first and is unaffected. Ordering kept:
  delivery still runs before tickOnce's pause check, so a chained plane counts
  as still flying — no premature last-plane pause (ISS-041 preserved).
- New endpoints via performAction(): POST /api/planes/{planeId}/queue {destIcao}
  (append; works grounded or flying; 400 bad body/unknown ICAO, 404 unknown
  plane) and POST /api/planes/{planeId}/queue/cancel {index} (remove queued leg
  by index; active in-flight leg never affected; 400 non-integer/out-of-range,
  404 unknown plane). Both return the full state snapshot.
- PlaneState.queue: string[] in /api/state (null/malformed-safe parse helper
  shared with the engine); OpenAPI updated (PlaneState.queue, QueueLegRequest,
  CancelQueuedLegRequest, both paths) and openapi.test.ts expectations extended.
- Tests: auto-chain block in engine.test.ts (chain / short-fuel ground / empty
  queue) + chained-plane-no-pause regression guard; queueLeg/cancelQueuedLeg
  blocks in actions.test.ts; type-compat queue: [] fixtures in deriveEvents,
  right-pane, mapData and seed tests.

v0.25.0 — part 1 (backend) of ISS-043; UI/map rendering lands in a follow-up.
2026-09-20 10:39:00 +00:00
kamilkrzywda cbe0cda15d Pause on landing + auto-unpause on dispatch (ISS-041)
CI / build + unit + e2e (pull_request) Successful in 7m43s
Replace the ISS-011 auto-slow with pause-on-landing: when the last plane
in flight lands, tickOnce sets sim_state.paused=true WITHOUT touching
timeScale (speed preserved). flyPlane() now clears paused before
persisting so starting a flight resumes a paused sim — inside runAction(),
tick + unpause + dispatch are atomic under the sim lock.

Tests: engine.test.ts auto-slow block rewritten for pause semantics; new
flyPlane test asserts dispatch clears paused with speed untouched. E2E:
auto-slow.spec.ts renamed to pause-on-landing.spec.ts asserting the new
behavior (paused=true AND timeScale still 1000 after landing; /fly clears
paused). Cross-cutting fix: every per-spec setScale helper now POSTs
{timeScale, paused:false} — a scale-only fast-forward after a landing would
otherwise leave the clock frozen. Deliberate mid-test pauses untouched.
2026-09-20 09:48:56 +00:00
kamilkrzywda 3024606ac8 On-board package hover traces from the carrier's current position (ISS-040)
CI / build + unit + e2e (pull_request) Successful in 7m11s
2026-09-20 09:16:06 +00:00
kamilkrzywda 58d05f5287 Align toast stack to map right edge, clear of right pane (#39)
CI / build + unit + e2e (pull_request) Successful in 7m1s
2026-09-20 08:42:58 +00:00
kamilkrzywda a7150a1062 Move Refuel-to-full from market into left pane next to Relocate (#35)
CI / build + unit + e2e (pull_request) Successful in 6m52s
2026-09-20 08:25:57 +00:00
kamilkrzywda 1ba70ebbf3 docs: commit ORCHESTRATOR.md manual (token via gitignored .env)
CI / build + unit + e2e (pull_request) Successful in 6m32s
2026-09-20 07:34:04 +00:00
kamilkrzywda 50a9147665 chore: gitignore local-only ORCHESTRATOR.md manual
CI / build + unit + e2e (pull_request) Successful in 6m30s
2026-09-20 06:58:42 +00:00
kamilkrzywda ab79d9b17f fix(e2e): renderedFeatures — evaluate maplibre geometry getter in-page before Playwright serialization drops it
CI / build + unit + e2e (pull_request) Successful in 7m28s
2026-09-20 01:50:23 +00:00
kamilkrzywda 505a58b4fe fix(e2e): expectHoverRoute — ignore queryRenderedFeatures artifacts without LineString geometry (CI run #70)
CI / build + unit + e2e (pull_request) Failing after 7m49s
2026-09-20 01:22:23 +00:00
kamilkrzywda 2655ef81c8 fix: hover-route line not drawn in e2e — MapLibre clips queried lines across tiles and quantizes their coordinates (strict single-feature equality never matched)
CI / build + unit + e2e (pull_request) Failing after 6m44s
2026-09-19 22:52:12 +00:00
kamilkrzywda ac4e3fa316 feat: v0.22.0 — ISS-022 target airport distinct-color ring on job-list / relocation hover
CI / build + unit + e2e (pull_request) Failing after 8m51s
2026-09-19 22:01:02 +00:00
kamilkrzywda f2dbad5e03 feat: v0.22.0 — ISS-022/025/027 hover route trace on job list, on-board rows and relocation panel 2026-09-19 21:47:00 +00:00
kamilkrzywda 71ee63b38a feat: v0.21.0 — ISS-023 Relocate panel moves to left pane
CI / build + unit + e2e (pull_request) Successful in 5m54s
2026-09-19 21:02:55 +00:00
kamilkrzywda 570ad52d47 feat: v0.20.0 part 2 — ISS-028 on-board rows two-line layout + airport name ellipsis
CI / build + unit + e2e (pull_request) Successful in 7m1s
2026-09-19 20:41:33 +00:00
kamilkrzywda 59974d1b79 feat: v0.20.0 — ISS-021 move On board to left pane, widen left 360/280 2026-09-19 20:41:33 +00:00
kamilkrzywda f5468bb640 docs: v0.19.2 — AGENTS.md e2e section reflects CI-only runs; connected issues may be done together
CI / build + unit + e2e (pull_request) Successful in 7m5s
2026-09-19 20:06:40 +00:00
kamilkrzywda 0970ee4710 docs: v0.19.1 — AGENTS.md documents enforced CI gate + auto-merge
CI / build + unit + e2e (pull_request) Successful in 7m32s
CI / build + unit + e2e (push) Successful in 6m43s
2026-09-19 18:49:52 +00:00
kamilkrzywda 86379fc9c6 feat: v0.19.0 — ISS-011 auto-slow to 1x when all planes have landed
CI / build + unit + e2e (pull_request) Successful in 6m14s
2026-09-19 18:07:42 +00:00
kamilkrzywda 337eda2743 test: target the plane option specifically in relocation popup e2e
CI / build + unit + e2e (pull_request) Successful in 7m32s
2026-09-19 16:35:19 +00:00
kamilkrzywda 8852ae11f2 test: fix POPUP_AIRPORT scoping in relocation popup e2e
CI / build + unit + e2e (pull_request) Failing after 6m49s
2026-09-19 16:23:03 +00:00
kamilkrzywda 008a77e456 feat: v0.18.0 part 3 — market row to relocate a grounded plane
CI / build + unit + e2e (pull_request) Failing after 6m17s
2026-09-19 16:03:03 +00:00
kamilkrzywda 51d4f21d6b fix: v0.17.0 — sim-control POST retries + permission-aware notifications e2e
CI / build + unit + e2e (pull_request) Successful in 6m52s
2026-09-19 15:23:20 +00:00
kamilkrzywda d8dc785757 feat: v0.17.0 — ISS-008 toasts for errors/events + browser notifications
CI / build + unit + e2e (pull_request) Failing after 6m59s
2026-09-19 14:52:36 +00:00
kamilkrzywda 7d2f8f07c8 feat: v0.16.1 — ISS-007 smooth client-side sim clock with per-snapshot re-sync
CI / build + unit + e2e (pull_request) Failing after 6m42s
2026-09-19 14:00:47 +00:00
kamilkrzywda ae1cb93a4f test: harden full-core-loop against Load/Fly precondition races
CI / build + unit + e2e (pull_request) Successful in 6m32s
2026-09-19 13:36:27 +00:00
kamilkrzywda 687e4f2169 fix: forFlight refuel leaves an exactly-feasible tank (round up) — e2e 409
CI / build + unit + e2e (pull_request) Failing after 5m26s
2026-09-19 13:00:06 +00:00
kamilkrzywda a801311fc5 feat: v0.16.0 — ISS-005 weight-proportional fuel burn + refuel just enough for the loaded package
CI / build + unit + e2e (pull_request) Failing after 5m28s
Part A: r(F) = k(We + rho*F) L/km, k calibrated so a full tank burns exactly
the old constant; closed forms in lib/sim/movement.ts (fuelAtWeighted,
requiredFuelFor, burnRateConstant, FUEL_DENSITY_KG_PER_L). Catalog gains
emptyWeightKg (ATR72 OEW 9300 kg), exposed in the snapshot. All three burn
call sites (engine landing, state live fuel, fly validation) moved to the
weighted model; old constant-rate fuelAt removed.

Part B: POST /api/planes/{planeId}/refuel takes an optional body
{mode:'full'|'forFlight', packageId} — no body keeps today's fill-to-full
behavior exactly (fuel lands bit-exact on maxFuel); forFlight adds just
enough for the loaded package's destination leg (409 not-loaded/expired/
doesn't-fit, 400 bad body). UI: per-cargo-row 'Refuel' button
(refuel-for-{pkg.id}), market button renamed 'Refuel to full'.

OpenAPI: RefuelRequest schema + optional requestBody + 400 on refuel, fly's
409 description updated, CatalogEntry.emptyWeightKg. Tests: new weighted-burn
suite, forFlight action/route cases (incl. ~7670 km UNNT<->LPPD doesn't-fit),
openapi guards; landing-fuel assertions in engine.test.ts + e2e/actions.spec.ts
use the closed form; the e2e 'return leg unfuelable' scenario reworked — a full
tank now covers the EDDF<->LEZL round trip, so the 409 moves to the second
outbound. New e2e: row Refuel deducts exactly L*price / raises fuel by exactly
L via the endpoint's own response snapshot.
2026-09-19 12:24:34 +00:00
kamilkrzywda b6bfcedaf6 test: click the rendered marker position while paused — closes render-lag race (CI run #37)
CI / build + unit + e2e (pull_request) Successful in 5m0s
2026-09-19 11:32:19 +00:00
kamilkrzywda 4c99dbe550 fix: v0.15.1 — ISS-004 right pane widened to 360px, on-board wrap fixes
CI / build + unit + e2e (pull_request) Failing after 6m15s
2026-09-19 11:05:02 +00:00
kamilkrzywda 08094a00e2 test: hover spec — fleet row testid is plane-${p.id} (double prefix), derive from state
CI / build + unit + e2e (pull_request) Successful in 5m42s
2026-09-19 10:51:18 +00:00
kamilkrzywda eff934a1cc test: decisive hover diagnostics — browser snapshot vs node state + fleet HTML; CI fresh DB per run
CI / build + unit + e2e (pull_request) Failing after 6m3s
2026-09-19 10:35:36 +00:00
kamilkrzywda 3209dea425 test: hover spec — robust fleet-row wait + fit map to both endpoints before asserting
CI / build + unit + e2e (pull_request) Failing after 6m15s
2026-09-19 10:06:48 +00:00
kamilkrzywda 3b6506832f feat: v0.15.0 — ISS-002 hovering a plane or package in the side panels highlights it on the map
CI / build + unit + e2e (pull_request) Failing after 6m8s
2026-09-19 09:37:42 +00:00
kamilkrzywda d65d4e45b9 test: pause sim around plane-popup marker click at 1000× (rendered marker lags fresh state by one poll)
CI / build + unit + e2e (pull_request) Successful in 4m43s
2026-09-19 09:11:10 +00:00
kamilkrzywda bd00b2b4c4 feat: v0.14.0 — ISS-006 time-scale slider values up to 1000x; tests use fastest time
CI / build + unit + e2e (pull_request) Failing after 4m52s
2026-09-19 08:49:30 +00:00
kamilkrzywda 0c9279818a ci: e2e list reporter — per-test progress in job log
CI / build + unit + e2e (pull_request) Successful in 19m58s
CI / build + unit + e2e (push) Successful in 18m20s
2026-09-19 08:09:32 +00:00
kamilkrzywda 97f82dd464 ci: self-hosted map assets for e2e — download + cache pack, mount ./public
CI / build + unit + e2e (pull_request) Successful in 18m27s
2026-09-19 07:55:29 +00:00
kamilkrzywda aa5eabeb78 ci: bounded retries around playwright browser install — flaky CDN, progress accumulates 2026-09-19 07:53:22 +00:00
kamilkrzywda 35493f92f0 ci: cache playwright browsers across runs; drop no-op save step 2026-09-19 07:53:22 +00:00
kamilkrzywda e694011302 ci: e2e — static in-network IP for the app (bypass DNS) + post-deploy chromium diagnostics 2026-09-19 07:53:22 +00:00