github liketrek/TREK v4.3.1

5 hours ago

4.3.1

Full diff since 4.3.0

Changed

  • The places filter in the planner's right sidebar (All, Unplanned, Planned, Tracks) is the app's own select instead of four pills. With the tracks tab the row had grown past what the rail holds without clipping a word; the count rides on the trigger the way it rode on the active pill, and every option carries its own in the menu. (#2436)
  • Shared links in the Collab tab are chips now, two to a row across the panel: favicon, title and host, a pinned chip in the accent tint, the whole chip being the link. Edit, pin and delete sit faint in its tail and come forward on hover; on touch they are always shown. (#2413)

Fixed

  • The release notice keeps its promise box whole when the window is too short for the note. The right column scrolls in that case, and on a 1080p screen at 100% it does, but the box was pressed down to its label while the paragraphs around it kept their height. Everything inside the two scrolling columns now keeps its size. Below 1080px the two halves stack again as they should; the release half had been squeezed to nothing there, and the support buttons now stay at the bottom edge once the note is in view. (#2408)

  • A night booked under Days now leads its day in road trip mode and keeps its check-in. The check-in used to be a floor the drive could pass, so a hotel booked for ten in the morning was reached at a quarter past twelve behind two stops that had no hour of their own; it holds the stop the way a pinned time does now, in the plain schedule and in the daily window, and the day lines up behind it. The hotel is seated first on its day, after any stop whose own clock is at or before the check-in, and a new check-in seats it afresh. A day that is nothing but its booked night stands among the days with the hotel and its check-in, instead of at the foot of the rail under "only X so far". Trips planned before this get the same order on upgrade, drawn roads included, and two nights booked on one day settle by their check-ins. (#2410, #2411)

  • The last day in the planner's sidebar can be scrolled into view again. With the road trip addon on, the Days / Road trip switch sits above the day list, and the list kept the full panel height underneath it, so its foot ran past the panel's edge. (#2413)

  • A shared link in the Collab tab can be edited in place, title and address alike, instead of being deleted and added again; the external-link glyph, which did nothing, opens the address. (#2413, Closes #2414)

  • Google opening hours that stay in one half of the day convert whole under the 24-hour setting. Google writes "1:00 – 3:00 PM" for one to three in the afternoon, with the meridiem on the closing time only, and the opener used to stay "1:00" beside a converted "15:00"; the closing meridiem is handed back to the opener before converting. A range spelled on both sides, the 12h display and OpenStreetMap lines are untouched. (#2415, Closes #2412)

  • A successful SSO login writes the user.login audit row every other login method writes, with method: oidc in the details the way a passkey login names its method. The callback used to update last_login and login_count and nothing else, so an instance moving its users to SSO watched its audit log go quiet while looking complete. (#2418, Closes #2417)

  • A trip title that is one long word no longer stretches the dashboard hero: the tools row and the boarding pass grew to the width of the word, and edit, clone, archive and delete sat off the card. The title breaks inside the card and stops at two lines. (#2419)

  • The Docker image runs better-sqlite3 13. The 12.x it shipped was compiled from source whenever its prebuilt download did not come through, against the headers of whatever Node 24 the base image carried that day, and since Node 24.19 such a build takes the server down with Assertion failed: (env) != nullptr the first time a statement is collected. 13.x is built on N-API and ships its binaries inside the package, so nothing is compiled in the image any more and the compiler toolchain is gone from the runtime stage. (#2424, Closes #2421)

  • A video picked for a journey entry previews in the editor again and comes up with its poster frame, so its thumbnail no longer answers 404. The policy never named media-src, so the browser refused the object URL the preview and the poster grab run through; the entry route from 4.3.0 was there, but every clip landed without a poster. A clip the browser cannot decode gets the play badge on a black tile instead of a broken image. (#2424, Closes #2341)

  • The video player has its icons back. Plyr fetched its sprite from cdn.plyr.io, which the policy refuses, so the clip played with blank buttons, and on closing the lightbox it pointed the element at a clip on that CDN. The sprite ships with the app now and the teardown asks nothing of the CDN. (#2424)

  • Saving an entry on the journey page no longer throws the page to the error boundary. The map pans to the active entry on a timer that could beat the frame giving the map its first view; Leaflet took that pan as the first view with no zoom, the entry markers never made it onto the map, and the next rebuild crashed while removing them. The pan waits for the first view now. (#2424)

  • The road trip no longer drives across a flight. A flight, train, ferry, cruise or bus booked on a day with located terminals ends the road at the terminal it leaves from and starts it again at the one it lands at; the ride between them runs on the timetable, is never sent to the router and counts for no distance, and the map draws it as the booking's own arc. On the rail and in the phone chain a ride that leaves and lands on the same day is one block: the booking and its minutes over the two terminals, with the timetable under each name and the time the drive has you there on the right, an hour before a flight, half an hour before a ferry, ten minutes before a train or a bus. A hire car's pick-up and return desks stand on the road as their own rows, the pick-up opening its day and the return closing it, and the range budget starts full at the pick-up. A table, tickets or a tour booked on the day hang under their stop as chips that open the booking; one that belongs to no stop is listed under the day. A hop of a few hundred metres, the hire desk beside the terminal, keeps its line and drops the "0 km in 0 min" pill. The server's calculate_roadtrip seats the same stops. (#2429, Closes #2428)

  • The map and the phone's travel connectors no longer drive from the hotel to the airport on a day that starts with a flight. Booking a night writes the hotel onto its check-in day as a stop for the road trip's driving chain; the day plan hides that stop and draws the hotel as the day's bookends, but the route builder still read it from the store, and with no time of its own it led the day ahead of the timed booking. The builder now works from the same stops the list shows, so the day reads flight, then the road from the arrival airport to the hotel. A hotel you placed as a stop yourself stays a waypoint. (#2432, Closes #2430)

  • A marker on a collection's map shows the place on every click. The click used to toggle the selection, so the second click on the marker of the place that was open closed it again, which read as the details refusing to open. The map background and the close control clear the selection; a list row still toggles. (#2433, Closes #2431)

  • The PDF export lists a day the way the day plan lists it. Booking a night writes the hotel onto its check-in day as a stop for the road trip's driving chain, and the plan hides that stop because the day already carries the booking as its accommodation block; the desktop export received the stop anyway and printed the hotel place above a flight that left in the morning. The export now drops it before merging the day, so the day reads flight first with the night in its accommodation block. The phone's export already had the filtered set. (#2435, Closes #2434)

  • A search the TREK index answered with the wrong place can be sent to Google after all. Since 4.3.0 the index and OpenStreetMap answer every search first and Google is only asked when they find nothing, so a list with the wrong place on it never reached Google, whatever key the instance had, and the provider choice only decided who fills the empty case. Under a result list that did not come from Google a quiet line now reads "Not the right place? Search Google instead" and sends the same query to Google Places alone, on the desktop form and the phone's search sheet; the MCP search tool takes the same provider parameter. Beside the Google Maps key, under "What the key may be used for", a new switch "Search with Google only" hands every search and every suggestion to Google and asks nothing of the index or OpenStreetMap. Both only do anything where a Google key holds the slot, and the switch's row says so without one. (#2436)

  • Plugin widgets for the reservation-detail slot show on the phone. A plugin declaring that slot, Flight Tracker for one, mounted under every booking card on the desktop and nowhere in the phone's transport and booking tabs, so on an iPhone in portrait the booking was there and the widget was not until the phone was turned sideways, which crosses the desktop breakpoint. The phone cards carry every reservation-detail widget under the card now, scoped to that booking and with the same context the desktop hands over plus the phone form factor; it goes with the card body in compact view. (#2445, Closes #2440)

  • A trip created through MCP or by a plugin lands in your display currency instead of EUR. The server wrote EUR whenever the caller named no currency, and only the trip dialog ever names one, so every trip an assistant created was a EUR trip whatever you read your amounts in. A trip created without a currency now takes the display currency from Settings, the admin's User Defaults preset included, and EUR only when that is left on Trip currency, the same value the dialog pre-fills. (#2444)

  • An MCP tool refuses an argument it does not declare instead of dropping it. A misspelt field such as stopType for stop_type used to be stripped before the tool ran, so the assistant reported the road trip stop as updated while nothing had changed. Such a call now answers Unrecognized key and the assistant corrects itself, the published tool schemas carry additionalProperties false so a client that reads them never sends the key, and the nested objects a tool takes, legs, imported stops, collection links and transit places among them, are held to the same rule. A script of your own that sends fields a tool does not declare sees that error now and has to drop them. (#2444)

  • Edit and Delete on a place are shown only to members who may edit places. With Places set to "Trip owner" under Admin, a member who may still edit days saw Edit and Delete in the day plan's right-click menu, the same two in the place details panel, the rename on its title and the pencil on a place row in the phone's edit mode, and every one of them ended in the server's refusal. Taking a place off a day stays a day right, and rating a place is unchanged. (#2447, Closes #2446)

  • An MCP client finds the OAuth discovery documents wherever it looks for them. A client handed https://your-trek/mcp as the server address looks for them below that path rather than asking the origin, and TREK answered those probes with the web app: a 200 with an HTML body, which the client reads as "this server does not implement OAuth". The three documents answer under the server address now as well, anything else there is a plain 404 the way it already was at the origin, and the path-inserted form of the authorization-server document is served instead of refused. (#2448)

  • Registering an OAuth client by hand says what was wrong with it. The form answered every refusal with "Failed to register OAuth client" and swallowed the reason the server gave, so a missing scope, the ten-client limit or a redirect URI TREK does not accept all looked the same. (#2448)

  • The button that turns GPS on follows the phone instead of the moment the map opened. Both maps decided it from the window width once while rendering, so turning the phone sideways crossed the breakpoint and the button stayed as it was, and turning back did not bring it home either; which map you were on only decided when the question was asked again. (#2449)

  • A booked night settles where it belongs and stays there. Two nights on one day never agreed on an order, so a quiet edit on either swapped them and took the road drawn between them with it, and the upgrade that seats existing nights reported moves it then undid on the next run. One rule seats them now, by check-in and then by the booking made first, and the same rule runs when a trip's dates move, which used to push the night back to the end of its day. (#2450)

  • The ride block keeps up with its booking. Changing a flight's departure left the old minutes and the old late mark on the rail until the page was reloaded, because they were computed by the routing the change did not re-run. (#2450)

  • A day that lands from a ride reads as the ride it was, not as a car that drove no distance for nine hours, and the refuel offer is there on the road out of an arrival terminal or a hire desk, where the range starts over. Searching along the drive from an assistant no longer looks under the flight path, the way the planner already did not. (#2450)

  • A shared trip's map numbers the day's stops the way the planner does, now that a booked night leads its day, and the PDF prints a day the way the day plan shows it from either device. A clip without a poster draws its play badge everywhere it appears, not only in the entry editor. (#2450)

  • The dashboard hero has room for the letters that hang below the line, the trip cards in list view keep their status badge clear of a two-line title, the release notice keeps its close control in reach when it stacks on a narrow screen, and a shared link's actions are big enough for a thumb, with the delete asking first. (#2450)

  • The line that sends a search to Google and the admin switch that sends every search there are offered only where Google actually answers, instead of wherever a key happens to be stored. (#2450)

Internal

  • The version marker the app keeps in local storage is taken as the match of one anchored pattern instead of a strip-and-compare, the shape SonarCloud's taint engine reads as sanitised; same characters, same length, same behaviour. This was the one open finding that kept the dev branch gate red since the 4.3.0 cycle. (#2445)

Don't miss a new TREK release

NewReleases is sending notifications on new releases.