It is the hour a room becomes available. Reaching it later is reaching it; only a time somebody pinned to a stop can be missed. Read as an anchor it did the exact opposite of what it means: arrive at 16:14 at a hotel that checks in from 11:00 and the rail reported five hours fourteen late, then read that 11:00 as earlier than the 15:00 before it, took it for a new day and pushed the hotel onto tomorrow. The day it came from was left with one stop and dropped out of the list altogether, so the stop before it appeared to vanish. The schedule now takes it as a floor: waited for when the drive gets there first, and otherwise silent. Waiting still prints in ink, because the hour is one somebody named; arriving late to it prints as computed, because nothing was decided. Same shape of mistake as the check-out, from the other side. One says the earliest you may be somewhere, the other the latest you may still be — neither says when you drive.
@trek/shared
Single source of truth for TREK's API contracts, expressed as Zod schemas and consumed by both the server (request validation + inferred DTO types) and the client (typed requests/responses).
This package is part of the incremental NestJS + React 19 migration (see the "Brownfield Rewrite" board). It is intentionally dormant until modules start importing it — adding it changes nothing for users.
Rules
- One folder per domain:
src/<domain>/<domain>.schema.ts(+.spec.ts). - Domain-agnostic building blocks live in
src/common/. - A route is only considered migrated once its contract lives here.
- Schemas are the source of truth; server DTOs and client types are inferred from them
(
z.infer<typeof schema>), never hand-duplicated.
Consumption (dev)
Both apps resolve @trek/shared to this package's TypeScript source:
- Server (
tsx): viapathsinserver/tsconfig.json. - Client (
vite): viaresolve.aliasinclient/vite.config.ts(+pathsfor the type-checker).
Production packaging (Docker / workspace wiring) is introduced in card F2, when the server first depends on this package at runtime. Until then prod builds are untouched.
Not yet here
The canonical error envelope is finalised in card F5 (it must match TREK's current Express error responses byte-for-byte), so it is deliberately not invented in F1.