trails/docs
Ullrich Schäfer 78b8b8f55f
Atomic GPX save: validate + persist row + geometry in one transaction
Eliminates the silent-failure pattern where a route/activity row could
be committed with gpx IS NOT NULL but geom IS NULL if the PostGIS write
failed after the row insert.

- New gpx-save.server.ts owns all GPX validation (GpxValidationError,
  validateGpx) and PostGIS geometry writes (writeGeom, tx-aware)
- createRoute, updateRoute, createActivity, createRouteFromActivity all
  wrapped in db.transaction() covering row + geom + version snapshot
- demo-bot uses createRoute/createActivity instead of raw inserts;
  errors propagate loudly
- Callback endpoint returns 400 for GpxValidationError instead of 401
- ADR-0006 documents the invariant for future explorers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 15:02:56 +02:00
..
adr Atomic GPX save: validate + persist row + geometry in one transaction 2026-05-10 15:02:56 +02:00
conversations Move conversation log into docs/conversations/ 2026-03-22 12:00:45 +01:00
ideas Park mobile-activity-recording + mobile-nearby-sync under docs/ideas 2026-04-19 08:23:44 +02:00
legal-archive Add visibility disclosure to the binding German privacy text 2026-04-19 09:14:15 +02:00
architecture.md BRouter host observability + docs 2026-04-23 23:10:45 +02:00
demo-persona.md Apply configurable-demo-persona: per-instance demo identity + voice 2026-04-19 10:30:32 +02:00
deployment.md BRouter host observability + docs 2026-04-23 23:10:45 +02:00
information-architecture.md Refresh IA doc — all six streams shipped on 2026-04-26 2026-04-26 10:03:05 +02:00
old-trails-analysis.md Add 8 proposed changes and old trails analysis 2026-03-25 03:57:20 +01:00
philosophy.md Add project philosophy document 2026-03-22 12:00:08 +01:00
server-hardening.md Add transactional emails (SMTP) and planner features (no-go areas, notes, crash recovery) 2026-03-26 01:00:42 +01:00
tooling.md Add CLAUDE.md, README, and development tooling docs 2026-03-22 12:06:51 +01:00