Skip to content

release: website dev to main - #62

Merged
jm-rivera merged 7 commits into
mainfrom
dev
Oct 24, 2026
Merged

jm-rivera merged 7 commits into
mainfrom
dev

Conversation

@jm-rivera

@jm-rivera jm-rivera commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Releases dev at 5c73d728 to production: #54, #56, #60, #61 and #63, each deployed and green on the dev service.

#60 keeps three exported accounts behind every organisation account_daily names. Production runs migration 0021_account_daily_before_today on deploy, which recreates the view so the threshold counts accounts created before today (UTC) and adds account_daily_source. #60 and #63 add the export_rules digest, which covers the exported row shape and the day read's SQL, so the first dfo-prod-website-export run after the deploy reloads every day of website_export.event once, current days first. #63 bounds every Postgres and BigQuery call in the export Job, destroys a Postgres client that times out, and stops the Job at 28 minutes with a report of the phase in flight and the days not started.

#61 and #63 write one request line per request, on finish or on close, with new finished and prerender fields, and log a placeholder path for any target other than a path, an http(s) URL or *; static assets write no line. The fields infra's website_requests_daily reads are unchanged. #54 answers unknown /api/v1 routes with a not_found problem document. #56 makes each tools card on the home page a link to its docs page.

Only the arrow button navigated, through router.push, while the card's
pointer cursor and whole-card hover made the rest look clickable. A
Link now fills each card, and the arrow is a second link to the same
page, kept out of the tab order and the accessibility tree.

Generated with Claude <noreply@anthropic.com>
Generated with Claude <noreply@anthropic.com>
…ards-clickable

fix(tools): make each tools card a link to its docs page
…tion (#60)

account_daily counts only accounts created before today (UTC), the accounts
the export holds, so a named domain always shows at least 3 of them. The
account export fails on an empty user table, replaces the table with no rows
when every account is from today, and fails on an empty webmail_domain.

Each exported event row carries export_rules, a digest of the export rules,
ROW_SHAPE_VERSION and an HMAC under the hashing key, and every day holding an
older digest reloads. A day that fails no longer blocks later days, the run
stops starting days after a 20-minute budget, and its error names the failed,
short, and unreached days.
#61)

registerRequestLogging attaches one close listener per response, so a request
writes exactly one line with a finished flag, and a response that closes
before the app sends a status logs 499. The path is the request target as it
arrived, normalised without reading // as a host. A document prerender is
kind page with a prerender flag. Static assets are dropped before the caller
HMAC is computed. docs/analytics.md describes the line and the account and
event export rules.
…cument (#54)

A path under /api/v1 that no proxy route handles fell through to the
site's HTML 404 page, so the SDK saw a refusal with no code. The
optional catch-all route src/app/api/v1/[[...path]]/route.ts now
answers every method with the application/problem+json document the
APIs use for their own unknown routes: code not_found, retryable
false, and a fresh trace id repeated in x-dfo-trace-id. Next.js
matches the datasets, graph, search and studio routes first, so
nothing they serve changes, and the catch-all forwards nothing.
Every Postgres and BigQuery call in the event and account exports has a
client-side bound, and a Postgres client that times out is destroyed.
A 28-minute watchdog in runAndExit logs the phase in flight, the days
not started and the faults so far, and exits 1 before the Job's 1800 s
task timeout; every other failure is logged once with its phase. The
window days run before the stale backlog. Day counts come from one exact
query over the table, readDay stops on a short page, and the
export_rules digest covers the readDay SQL, so a change to the exported
row shape reloads history. A golden test pins exported rows to
ROW_SHAPE_VERSION.

The request log classifies the target at request start, adds no
listener for static assets, and logs a placeholder path for any target
other than an origin-form path, an http(s) URL or "*".
@jm-rivera
jm-rivera merged commit 8f8587b into main Oct 24, 2026
3 of 4 checks passed

This branch was successfully deployed

1 active deployment
dev — 5c73d728 Deployed Oct 24, 2026 by jm-rivera via deploy / deploy #30
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