Skip to content

Releases: stef-k/Wayfarer

v1.4.1

21 May 14:55
f258fa1

Choose a tag to compare

Changed

  • Moved the shared footer version next to the copyright year and made the year use UTC so deployed pages show the current year without duplicating Wayfarer at the end of the footer (#330)

v1.4.0

21 May 11:12
d8564f3

Choose a tag to compare

Added

  • Added a single compiled Wayfarer runtime version source backed by Version.props, exposed through the app CLI, /api/version, X-Wayfarer-Version, and the shared footer display (#322, #325)
  • Added repo-local release helper automation for deterministic version bump preparation, changelog skeleton insertion, offline release checks, explicit local tag checks, and explicit GitHub release validation (#324, #326)
  • Added app CLI help output for help, version --help, and reset-password usage without starting the web host or database-backed command path (#327, #328)

Changed

  • PDF trip export cover snapshots now use the shared image proxy/cache pipeline instead of direct raw cover-image downloads, preserving proxy validation, cache reuse, and origin-work coordination (#319, #323)

v1.3.2

20 May 17:38
b026462

Choose a tag to compare

Changed

  • Map tiles from the local cache now render immediately when stale while bounded background refresh revalidates them with the provider, preserving OSM-safe conditional requests and avoiding request-path waits on cached map views (#316, #318).
  • Proxied trip and region images now serve stale optimized local cache files immediately while refresh and cache-miss work is coalesced per image and protected by a process-wide origin/ImageSharp budget (#317, #320).
  • Local proxied-image cache hits now bypass anonymous image-proxy rate limiting, while origin downloads and optimization work remain protected for both anonymous and authenticated users (#317, #320).

Fixed

  • Fixed repeated slow tile reloads for cached map areas by moving expired tile revalidation off the response path, adding bounded retry/backoff, atomic tile replacement, and Trip Editor retry/concurrency parity (#316, #318).
  • Fixed slow repeated proxied image loads for cached trip images by keeping expired local files usable, refreshing them in bounded background work, and preserving old bytes/metadata on refresh failures (#317, #320).
  • Fixed raw cover fallback render paths for public trip thumbnails, quick views, and legacy trip/region cover views so they use the local image proxy instead of direct external image URLs (#317, #320).

Deferred

  • Trip export snapshot cover downloads still use the raw cover URL and are tracked separately for a later release (#319).

v1.3.1

20 May 09:13
1f1447b

Choose a tag to compare

Changed

  • Improved the Trip Editor visit progress/history modal with region progress bars, clearer filter controls, status icons, visit-count pills, and compact first/last/history rows (#309, #311).
  • Added a phone-only Trip Editor map-first bottom drawer with Trip, Regions, and Segments tabs, deterministic drawer states, mobile search placement, dirty-editor guards, and protected desktop/tablet breakpoints (#312, #313, #314).
  • The reset-password admin CLI now runs as a scoped command host and exits after completion instead of continuing into normal web app startup (#306, #307).

Fixed

  • Fixed Trip Editor public/progress URLs so editor-generated links use the canonical public trip route instead of /Public/TripViewer/View/{id} (#308, #310).
  • Fixed the reset-password CLI service setup to avoid the ASP0000 BuildServiceProvider warning while preserving normal Identity password reset behavior (#306, #307).
  • Fixed Trip Editor mobile drawer polish issues found during published-bundle validation, including transparent sticky edit headers/footers, non-draggable handle affordance, inconsistent drawer controls/heights, and desktop-to-phone Trip edit/view resize behavior (#314, #313).

v1.3.0

19 May 05:05
b4bd53a

Choose a tag to compare

Added

  • Replaced the legacy Trip Edit experience with the Vue/Vite Trip Editor on the canonical /User/Trip/Edit/{id} route (#236, #238, #240, #242, #244, #246, #252, #258, #259, #263, #264, #265, #268, #271, #278, #280, #281, #282, #283)
  • Added Trip Editor support for metadata, regions, places, areas, segments, tags, share-progress settings, visit progress/history, rich notes, geosearch add-place, coordinate picking, map navigation, map utilities, and shared docked/expanded editor surfaces (#238, #240, #242, #246, #252, #258, #259, #263, #264, #265, #268, #271, #278, #280)
  • Added searchable icon and marker-color selectors, selected-place map/sidebar/status synchronization, popup/marker parity, and responsive light/dark Trip Editor polish (#288, #289, #290, #291, #292, #294)
  • Added real endpoint Trip Editor contract coverage for CRUD persistence, search-add persistence, rich-notes persistence, stale/error/dirty/delete feedback, and Development/published asset smoke checks (#297, #298, #299, #300, #301, #302, #303, #304)

Changed

  • GET /User/Trip/Edit/{id} now serves the Vue Trip Editor directly; the old /User/Trip/Workspace/{id} route and legacy editor fallback were removed during cutover cleanup (#282, #283)
  • Trip Editor rich notes are normalized at the Trip Editor request boundary before persistence, including canonical image URL handling, allowed Quill formatting/alignment, unsafe attribute stripping, and trailing helper paragraph cleanup (#302)
  • Deployment now requires the Trip Editor Vite assets to be built before dotnet publish; server-build deployments need Node.js/npm build tooling and must generate wwwroot/vite/trip-editor/manifest.json (#287, #303)
  • Development mode uses the Vite dev server assets only, while published/non-Development mode loads manifest-based Trip Editor bundle assets (#303)
  • Trip Editor Playwright coverage now distinguishes real endpoint contract proof from mocked UI/request-shape/visual tests (#297, #298)

Fixed

  • Fixed published-output Trip Editor asset loading by moving the Vite manifest to the publish-safe wwwroot/vite/trip-editor/manifest.json path (#287)
  • Fixed ASP.NET static asset serving/compression interactions for generated /dist and /vite/trip-editor bundle outputs (#285)
  • Fixed source-tree Production-run documentation by documenting published-output acceptance as the supported production-like local test path (#286)
  • Fixed Trip Editor release-candidate parity regressions found during manual validation, including Unassigned Places behavior, geosearch add-place defaults and persistence, marker/icon rendering, map search result containment, coordinate pick behavior, copy-link feedback, and selected editor/sidebar state coherence (#288, #289, #290, #291, #292, #294, #296)
  • Fixed final Trip Editor E2E nondeterminism around copy-link feedback timing, inline segment editor layout overlap, sidebar search fixtures, visual-polish expand targeting, real CRUD cleanup, and rich-notes image assertions (#304)

v1.2.28

13 Apr 20:11
0189ffe

Choose a tag to compare

Added

  • TileMetadataHotCacheSizeMB application setting with Admin Settings UI support and client-side derived entry-count hint for the zoom >= 9 tile metadata hot cache (#217)

Changed

  • Warm zoom >= 9 tile hits now use an in-process metadata hot cache to avoid the per-hit Postgres metadata read on the common fresh-cache path (#217)
  • Hot metadata cache invalidation now participates in purge, eviction, and tile-delete paths while preserving DB/file durability ordering and existing revalidation behavior (#217)

Fixed

  • Fresh hot-hit LastAccessed throttling is now atomic per tile and retries immediately after failed DB persists instead of suppressing writes for the full cooldown window (#217)

v1.2.27

27 Mar 17:34
dcded4e

Choose a tag to compare

Fixed

  • HIGH: LRU/full cache purge timed out on large caches (~500MB), showing error page despite successful deletion. Purge now runs in background with immediate HTTP 202 response (#207)
  • Cache lock contention during purge blocked concurrent tile writes. Reduced file-delete chunk size from 100 to 10 with Task.Yield() between chunks to prevent writer starvation (#207)

Added

  • SSE-based real-time progress reporting for cache purge operations — admin UI shows animated progress bar with file count and percentage (#207)
  • Atomic purge-in-progress guard (Interlocked.CompareExchange) prevents concurrent purge operations; second request returns 409 Conflict (#207)
  • TileCachePurgeSse endpoint for SSE subscription and TileCachePurgeStatus endpoint for on-load reconnect (#207)
  • On page load, admin settings UI checks purge status and reconnects SSE if a purge is mid-flight (#207)
  • Tile-provider-change purge now respects the concurrency guard — skips gracefully if manual purge is running (#207)

Changed

  • DeleteAllMapTileCache and DeleteLruCache endpoints return HTTP 202 Accepted (was 200 with awaited result) (#207)
  • PurgeAllCacheAsync and PurgeLRUCacheAsync accept optional SseService/channel params for progress broadcasting (#207)

v1.2.26

27 Mar 17:34
dcded4e

Choose a tag to compare

Changed

  • Outbound budget burst capacity raised from 10 to 12 — allows 2 more tiles through on initial burst before settling into sustained 2/sec rate, reducing 503s on cold-cache loads (#214)
  • Outbound budget acquire timeout raised from 3.0s to 3.5s — extra 0.5s yields 1 more token from replenishment per wave, reducing false timeouts (#214)
  • Client concurrency pool multiplier raised from 60% to 75% of burst capacity (pool size 6 → 9) — more tiles queue server-side instead of waiting client-side (#214)
  • Budget retry-after interval updated from 5s to 6s to align with new burst refill time (12 tokens / 2 per sec = 6s) (#214)
  • Client slow-retry interval auto-derives to 18s (was 15s) from updated retry-after × 3 (#214)

v1.2.25

26 Mar 21:49
789679a

Choose a tag to compare

Fixed

  • HIGH: Slow retry phase replayed full 5-attempt fast-retry cycle on each poll (~34s lag, 6 per-IP budget hits per cycle). Now uses single-shot _slowRetryOnce — one fetch per ~15s poll, one budget hit each (#206)

Added

  • _slowRetryOnce method — lightweight single-fetch slow-phase handler (#206)

Full Changelog: v1.2.24...v1.2.25

v1.2.24

26 Mar 21:27
4e9a57e

Choose a tag to compare

Changed

  • Default per-IP outbound budget increased from 30 → 80 cache misses/min — 30 was too low for cold-cache zoom-17 loads (~35 tiles) (#206)
  • Slow retry interval reduced from 30s → 15s (derived from retryAfterSeconds * 3) (#206)
  • Client-side pool size and slow retry delay now derived from server config (burstCapacity, retryAfterSeconds) injected via wayfarerTileConfig — no more hardcoded magic numbers (#206)
  • _Layout.cshtml now injects burstCapacity and retryAfterSeconds into wayfarerTileConfig
  • TileCacheService.OutboundBurstCapacity exposed for config injection
  • TilesController.BudgetRetryAfterSeconds changed from private string to internal int

Full Changelog: v1.2.23...v1.2.24