jubnl
175eb3b11b
fix(server): plan 3c close-out — non-finite ids bound as NULL, trip id parsed once at every places/days/ws gate
...
Platform: NulSafeSqlitePlatform now renders a bound NaN as NULL and
+/-Infinity as 9e999/-9e999, matching better-sqlite3's own legacy binding
(rule 22 extension) — the program-wide fail-safe for any caller that still
passes an unguarded Number(untrusted) into a converted statement.
PlacesService.verifyTripAccess and RealtimeGateway.handleJoin stop doing
that: verifyTripAccess parses once with toRowId and threads the parsed id
through create/import/bulk/rating/export.gpx (deleting the seven
toRowId(tripId) ?? -1 sites), and handleJoin gets a Number.isFinite guard.
DaysService gets the same treatment across list/create/getDay/reorder/
insert/resyncAccommodationDays, closing the gap where a hex-spelled trip id
could renumber a real trip's days while the raw-bind inverted-accommodation
guard silently matched nothing.
DatabaseService.getTripTitle is deleted; PlacesService injects
TripsRepository directly and calls getTitle itself.
Template/cheap-item cleanup: DayAssignmentsRepository.listForTimeSort uses
$castTo instead of an unknown bridge; the duplicated TagRow interface in
Places.repository.ts is now imported from Tags.repository.ts;
AssignmentWithPlaceRow extends the guarded DayAssignmentRow instead of
restating its columns; PlaceShadowPicksRepository.totals drops its
unreachable ??-fallback branch; Places.repository.ts's updatePlace types
the NOT NULL name column as string; trip-members.service.ts's
transferOwnership threads one parsed trip id through all three writes and
corrects two stale "raw-bind seam" docstrings that were actually Number()
seams; a dead canAccessTrip mock is removed from reservations.e2e.test.ts.
Tests: the 23 new no-explicit-any warnings in TRIP-SVC-069 are typed
(lint back to 2416); HTTP and WS regression coverage for the non-finite
and non-canonical id shapes across places/days routes, mutation-proved;
TRIP-JOIN-005 asserts the exact concurrent-join settlement instead of
>= 1; a new tests/unit/db/transaction-yield.test.ts pins rule 24's
measured transaction-yield/dirty-read/nested-BEGIN behaviour.
2026-09-23 12:22:36 +02:00
..
2026-09-22 18:13:28 +02:00
2026-09-22 20:32:35 +02:00
2026-09-07 14:05:33 +02:00
2026-09-23 06:27:21 +02:00
2026-09-22 18:01:45 +02:00
2026-09-22 16:54:45 +02:00
2026-09-22 07:54:09 +02:00
refactor(realtime, systemNotices, addons, airports, audit, categories, permissions, query-helpers, tags, transit, trip-membership): async DB-touching methods; transactions through UnitOfWork
2026-09-21 20:48:03 +02:00
2026-09-22 18:01:45 +02:00
2026-08-22 11:33:55 +02:00
2026-09-23 08:31:36 +02:00
2026-08-07 19:58:12 +02:00
2026-09-22 18:01:45 +02:00
2026-09-21 23:27:01 +02:00
2026-09-23 12:22:36 +02:00
2026-09-22 15:08:49 +02:00
2026-09-01 17:18:10 +02:00
2026-09-22 05:21:48 +02:00
2026-09-22 13:25:17 +02:00
refactor(realtime, systemNotices, addons, airports, audit, categories, permissions, query-helpers, tags, transit, trip-membership): async DB-touching methods; transactions through UnitOfWork
2026-09-21 20:48:03 +02:00
refactor(realtime, systemNotices, addons, airports, audit, categories, permissions, query-helpers, tags, transit, trip-membership): async DB-touching methods; transactions through UnitOfWork
2026-09-21 20:48:03 +02:00
2026-09-23 06:41:03 +02:00
2026-09-22 07:54:09 +02:00
2026-09-21 19:01:38 +02:00
2026-09-22 00:00:53 +02:00
2026-09-22 02:21:06 +02:00
2026-09-22 03:29:33 +02:00
2026-09-23 06:41:03 +02:00
2026-09-23 06:41:03 +02:00
2026-06-16 22:22:45 +02:00
2026-09-22 16:54:45 +02:00
2026-07-25 15:12:38 +02:00
2026-09-22 05:21:48 +02:00
2026-09-23 08:15:05 +02:00
2026-08-17 14:48:23 +02:00
2026-09-15 21:36:34 +02:00
2026-09-21 21:23:10 +02:00
2026-09-21 21:23:10 +02:00
2026-07-27 22:34:41 +02:00
2026-09-22 18:01:45 +02:00
2026-09-22 19:39:01 +02:00
2026-09-22 02:32:59 +02:00
2026-08-07 15:14:14 +02:00
2026-09-23 00:00:32 +02:00
2026-08-22 11:33:55 +02:00
2026-09-22 02:32:59 +02:00
2026-08-22 11:33:55 +02:00
2026-09-21 22:39:11 +02:00
2026-09-23 04:46:18 +02:00
2026-09-23 08:00:39 +02:00
2026-09-23 04:46:18 +02:00
2026-09-22 16:54:45 +02:00
2026-09-22 12:30:20 +02:00
refactor(realtime, systemNotices, addons, airports, audit, categories, permissions, query-helpers, tags, transit, trip-membership): async DB-touching methods; transactions through UnitOfWork
2026-09-21 20:48:03 +02:00
2026-09-23 01:48:27 +02:00
2026-09-22 02:32:59 +02:00
2026-09-22 00:00:53 +02:00
2026-09-23 04:46:18 +02:00
2026-08-12 14:14:37 +02:00
2026-09-22 01:49:18 +02:00
2026-09-22 12:30:20 +02:00
2026-09-19 21:01:45 +02:00
2026-09-22 01:49:18 +02:00
2026-09-23 06:41:03 +02:00
2026-08-25 19:26:38 +02:00
2026-06-16 22:22:45 +02:00
2026-09-01 17:18:10 +02:00
2026-09-22 22:37:49 +02:00
2026-09-23 04:46:18 +02:00
2026-09-23 04:46:18 +02:00
2026-09-23 04:46:18 +02:00
2026-09-22 16:54:45 +02:00
2026-09-22 14:06:57 +02:00
2026-09-23 04:46:18 +02:00
2026-09-14 23:00:57 +02:00
2026-09-22 06:11:41 +02:00
2026-09-14 23:00:57 +02:00
2026-09-22 07:54:09 +02:00
2026-09-22 06:11:41 +02:00
2026-09-23 04:46:18 +02:00
2026-09-23 04:46:18 +02:00
2026-09-21 22:39:11 +02:00
2026-09-23 06:41:03 +02:00
2026-08-07 18:42:53 +02:00
2026-09-22 14:06:57 +02:00
2026-08-22 11:33:55 +02:00
2026-08-11 16:42:49 +02:00
refactor(realtime, systemNotices, addons, airports, audit, categories, permissions, query-helpers, tags, transit, trip-membership): async DB-touching methods; transactions through UnitOfWork
2026-09-21 20:48:03 +02:00
2026-09-22 06:30:13 +02:00
2026-09-22 01:08:22 +02:00
2026-09-23 04:46:18 +02:00
2026-09-16 11:08:07 +02:00
2026-09-23 04:46:18 +02:00
2026-09-22 15:08:49 +02:00
2026-09-01 17:18:10 +02:00
2026-09-21 22:39:11 +02:00
2026-09-22 02:21:06 +02:00
2026-09-22 04:16:07 +02:00
2026-09-23 04:46:18 +02:00
2026-09-22 15:08:49 +02:00
2026-08-20 15:43:27 +02:00
2026-09-22 04:16:07 +02:00
2026-09-03 10:47:08 +02:00
2026-09-22 04:16:07 +02:00
2026-09-03 13:59:39 +02:00
2026-08-15 16:42:27 +02:00
2026-08-15 16:42:27 +02:00
2026-09-12 18:02:57 +02:00
2026-08-15 16:42:27 +02:00
2026-08-15 16:42:27 +02:00
2026-09-07 18:36:54 +02:00
2026-09-22 15:08:49 +02:00
2026-09-22 15:08:49 +02:00
2026-09-22 15:08:49 +02:00
2026-09-22 01:49:18 +02:00
2026-09-22 15:08:49 +02:00
2026-09-22 15:08:49 +02:00
2026-09-22 15:08:49 +02:00
2026-09-07 18:36:54 +02:00
2026-09-22 15:08:49 +02:00
2026-09-07 14:05:33 +02:00
2026-09-22 15:08:49 +02:00
2026-09-22 15:08:49 +02:00
2026-09-22 15:08:49 +02:00
2026-09-21 21:54:19 +02:00
2026-09-07 18:36:54 +02:00
2026-09-22 12:30:20 +02:00
2026-09-21 23:27:01 +02:00
2026-09-23 04:46:18 +02:00
2026-09-22 02:32:59 +02:00
2026-09-20 12:48:44 +02:00
2026-09-22 02:32:59 +02:00
2026-09-22 19:39:01 +02:00
2026-09-22 00:22:11 +02:00
2026-09-06 15:02:58 +02:00
2026-09-22 02:32:59 +02:00
2026-09-22 00:22:11 +02:00
2026-09-22 00:22:11 +02:00
2026-09-04 12:15:53 +02:00
2026-09-04 12:15:53 +02:00
2026-09-21 22:41:35 +02:00
2026-09-22 21:18:08 +02:00
2026-08-15 16:42:27 +02:00
2026-09-20 12:48:44 +02:00
2026-09-23 06:41:03 +02:00
2026-09-22 02:21:06 +02:00
2026-09-23 04:46:18 +02:00
2026-09-23 06:41:03 +02:00
2026-09-22 18:01:45 +02:00
2026-08-23 11:59:12 +02:00
2026-08-10 17:08:54 +02:00
2026-08-22 11:33:55 +02:00
2026-09-23 06:41:03 +02:00
2026-08-10 12:24:15 +02:00
2026-09-23 06:41:03 +02:00
2026-09-23 06:41:03 +02:00
2026-09-21 23:27:01 +02:00
2026-09-21 23:27:01 +02:00
2026-09-23 06:41:03 +02:00
2026-09-22 05:21:48 +02:00
2026-09-23 12:22:36 +02:00
2026-07-30 17:07:12 +02:00
2026-08-12 17:43:22 +02:00
2026-09-23 12:22:36 +02:00
2026-09-22 20:32:35 +02:00
2026-09-22 20:23:11 +02:00
2026-09-22 05:21:48 +02:00
2026-09-22 01:21:29 +02:00
2026-09-21 21:23:10 +02:00
2026-09-23 06:41:03 +02:00
2026-08-23 11:59:12 +02:00
2026-09-22 07:54:09 +02:00
2026-08-10 19:54:46 +02:00
2026-09-22 21:31:46 +02:00
2026-09-22 16:54:45 +02:00
2026-09-22 06:11:41 +02:00
2026-09-23 04:46:18 +02:00
2026-09-12 11:23:09 +02:00
2026-09-20 13:54:31 +02:00
2026-09-23 04:46:18 +02:00
2026-09-23 08:15:05 +02:00
2026-09-23 04:46:18 +02:00
2026-09-22 00:00:53 +02:00
2026-09-12 12:24:33 +02:00
2026-09-22 06:11:41 +02:00
2026-09-22 06:39:38 +02:00
2026-09-21 10:13:40 +02:00
2026-09-21 23:27:01 +02:00
2026-09-22 01:08:22 +02:00
2026-09-21 21:23:10 +02:00
2026-09-22 15:08:49 +02:00
2026-09-21 21:54:19 +02:00
2026-09-23 06:41:03 +02:00
2026-09-02 21:06:42 +02:00
2026-09-09 10:11:36 +02:00
2026-08-25 19:26:38 +02:00
2026-09-20 12:48:44 +02:00
2026-09-22 01:16:50 +02:00
refactor(realtime, systemNotices, addons, airports, audit, categories, permissions, query-helpers, tags, transit, trip-membership): async DB-touching methods; transactions through UnitOfWork
2026-09-21 20:48:03 +02:00
refactor(realtime, systemNotices, addons, airports, audit, categories, permissions, query-helpers, tags, transit, trip-membership): async DB-touching methods; transactions through UnitOfWork
2026-09-21 20:48:03 +02:00
2026-09-23 01:48:27 +02:00
2026-08-22 11:33:55 +02:00
2026-09-23 01:48:27 +02:00
2026-09-21 23:27:01 +02:00
2026-09-23 04:46:18 +02:00
2026-09-22 21:08:06 +02:00
2026-08-01 12:45:35 +02:00
2026-09-22 15:08:49 +02:00
2026-09-21 21:23:10 +02:00
2026-09-22 02:32:59 +02:00
2026-09-22 02:21:06 +02:00
2026-09-20 13:54:31 +02:00
2026-09-23 01:48:27 +02:00
2026-09-23 04:46:18 +02:00
2026-09-23 06:41:03 +02:00
2026-09-23 09:33:48 +02:00
2026-09-23 10:31:54 +02:00
2026-09-23 04:46:18 +02:00
2026-09-23 12:22:36 +02:00
2026-09-23 08:31:36 +02:00
2026-09-23 12:22:36 +02:00
2026-09-23 04:46:18 +02:00
2026-09-23 04:46:18 +02:00
2026-09-22 19:39:01 +02:00
2026-09-22 03:29:33 +02:00
2026-09-22 03:29:33 +02:00
2026-08-23 11:59:12 +02:00
2026-08-15 16:42:27 +02:00
2026-08-18 22:24:29 +02:00
2026-09-22 19:39:01 +02:00
2026-08-23 11:59:12 +02:00
2026-08-10 13:38:26 +02:00
2026-08-11 09:58:37 +02:00
2026-06-16 22:22:45 +02:00