Skip to content

Let App say which clock a time was set on, and stop forgetting the session - #2

Merged
abdoulore merged 1 commit into
mainfrom
app-time-labels-and-session
Aug 9, 2026
Merged

abdoulore merged 1 commit into
mainfrom
app-time-labels-and-session

Conversation

@abdoulore

Copy link
Copy Markdown
Owner

Four things the operator app got wrong at the edges, none of which the contract or the API was at fault for.

Times. A datetime-local input carries no timezone, so the browser reads what was typed as local wall clock while the vault stores the instant it resolves to. The reading was correct and nothing said so: an operator in UTC+1 typing 14:30 wrote 13:30 into the contract with no way to notice. Both time fields now name the zone and echo the UTC that gets stored, and the review step shows the instant twice, once on each clock. The offset is read at the chosen time rather than at now, so a January release picked in July is not an hour out. Recurring and sweep never showed their start time in the review at all, on a step that claims to be exactly what the contract will enforce; they do now.

Sessions. signedIn was component state and the session is an HttpOnly cookie, so every reload rendered read-only while the browser was still holding a perfectly good session, and asked an already signed-in operator to sign in again. GET /api/session reports on that cookie and nothing else, rate limited with the other public reads, no chain read, and it cannot mint a session of its own. Asked once on mount; a failure leaves the app signed out, which is the safe way to be wrong.

Links. The app wordmark now goes back to the landing page, and the landing page offers the app from its nav as well as the hero. Both routes in are injected from the same APP_URL behind the same switch, so setting it to "" still closes every door rather than leaving a dead one. The narrow-screen rule kept Repo and dropped everything else; it now keeps both links that leave the page.

Also repairs the close glyph in the create modal, which a PowerShell -replace round trip had left as mojibake, and moves the README test count to the measured 337.

Four things the operator app got wrong at the edges, none of which the
contract or the API was at fault for.

Times. A datetime-local input carries no timezone, so the browser reads
what was typed as local wall clock while the vault stores the instant it
resolves to. The reading was correct and nothing said so: an operator in
UTC+1 typing 14:30 wrote 13:30 into the contract with no way to notice.
Both time fields now name the zone and echo the UTC that gets stored, and
the review step shows the instant twice, once on each clock. The offset is
read at the chosen time rather than at now, so a January release picked in
July is not an hour out. Recurring and sweep never showed their start time
in the review at all, on a step that claims to be exactly what the contract
will enforce; they do now.

Sessions. signedIn was component state and the session is an HttpOnly
cookie, so every reload rendered read-only while the browser was still
holding a perfectly good session, and asked an already signed-in operator
to sign in again. GET /api/session reports on that cookie and nothing else,
rate limited with the other public reads, no chain read, and it cannot mint
a session of its own. Asked once on mount; a failure leaves the app signed
out, which is the safe way to be wrong.

Links. The app wordmark now goes back to the landing page, and the landing
page offers the app from its nav as well as the hero. Both routes in are
injected from the same APP_URL behind the same switch, so setting it to ""
still closes every door rather than leaving a dead one. The narrow-screen
rule kept Repo and dropped everything else; it now keeps both links that
leave the page.

Also repairs the close glyph in the create modal, which a PowerShell
-replace round trip had left as mojibake, and moves the README test count
to the measured 337.
@vercel

vercel Bot commented Aug 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
covenantz Ready Ready Preview Aug 9, 2026 5:04pm

@abdoulore
abdoulore merged commit 5e40f2c into main Aug 9, 2026
3 checks passed

This branch was previously deployed

1 inactive deployment
Preview — 5c2418e6 Deployed Aug 9, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant