feat/glitchtip-error-reporting 98dcc21 + 1f8cf1e, sweep fixture marker 836d21d, workflow + CI staging gate + box deploy script. Hold merge until the Fastly block is lifted and flamenet-e2e carries 310c315.
feat/glitchtip-error-reporting 98dcc21 + 1f8cf1e, sweep fixture marker 836d21d, workflow + CI staging gate + box deploy script. Hold merge until the Fastly block is lifted and flamenet-e2e carries 310c315.
A minimal Sentry envelope sender over Vapor's client, no new dependency.
Errors, criticals and 5xx responses each become one event; warnings stay
on stdout; info and debug are never sent.
An event is an allowlist: level, scrubbed message, error type, route
template, method, status, fingerprint and the log call's source line.
No headers, bodies, query strings, addresses, user block or logger
metadata (Vapor's ErrorMiddleware attaches the full URL and User-Agent
there; it is dropped unread).
Scrubbing removes route parameter and query values by value first, so a
username is caught whatever its shape, then UUIDs, fnids, JWTs, bearer
and key=value secrets, SQL key details, emails, IPv4/IPv6, phone
numbers, hex and token-shaped runs, long numbers and identifiers after
words like device, account, attachment and report.
30 events a minute, one per fingerprint per 60 seconds, 2 second
timeout, fire and forget, no retries. A request's errors are collected
on its logger and sent once with its route and status.
WireErrorMiddleware's path masking moves to PathMask, output unchanged.
FN_SENTRY_DSN is documented in docs/CONFIGURATION.md and the generated
configuration page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
503 is what a draining relay answers during a planned restart, so it no
longer becomes an event. Every other 5xx still does, and an error logged
while answering a 503 is still reported.
FN_RELEASE, baked into the image by `--build-arg FN_RELEASE=<sha>`
(Dockerfile, and passed through by Scripts/staging-gate.sh), is sent as
the event's release. Unset, empty or not a plain version string, and
events carry none.
The configuration, hosting and self-hosting pages, and the Spanish
self-hosting page, said SMTP was the relay's only outbound code. The
relay also dials Apple's push service, peer relays, Stripe, an S3 store
and now the error collector. Each is listed with the setting that turns
it on, ending on what a relay with all of them unset opens: nothing.
self-hosting.leaf is generated from flamenet-e2e SELF-HOSTING.md, so
.e2e-ref moves to 310c315, that change made on the pinned commit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ErrorReportingTests carries a JWT-shaped string whose signature decodes
to "signature-bytes-here". The secret sweep failed on it, so the fixture
count goes from 1 to 2 with the marker on that one line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
.gitlab-ci.yml becomes .gitea/workflows/ci.yml on mac1/mac2 (amd64), with
the same checks: secret sweep, swift build and test on swift:6.1-noble,
section 8 conformance at the pinned e2e commit, doc-page hashes, the
configuration doc and package completeness (HEAD variants advisory).
The image is built with --build-arg FN_RELEASE=<sha> and the staging gate
(Scripts/ci-staging-gate.sh, same checks as staging-gate.sh) runs against
that image before it is pushed. On main, deploy/gitea-deploy.sh pulls the
gated image on the box, dumps the database, tags it flamenet-relay:prod,
checks the edge and key_log row count, rolls back to :previous on failure,
and recreates the test fleet. The self-host compose pulls from
git.extant2000.com.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The image job installed the static docker 27.5.1 CLI, which ships without
the buildx plugin. docker build then fell back to the legacy builder and
refused the Dockerfile's RUN --mount=type=cache (run 260, job 633). Install
docker-ce-cli and docker-buildx-plugin from Docker's apt repo, the same way
the suite workflows do.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ci-staging-gate.sh spliced $ALL_PAGES into the sh -c script text. The
English page list from Entrypoint.swift is newline-separated, so the
newline ended the `for p in` list early and sh failed with "unexpected
word (expecting do)" before any page was requested (run 384, job 948).
Pass the pages as positional arguments and the relay host as an env var.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
feat/glitchtip-error-reporting
98dcc21+1f8cf1e, sweep fixture marker836d21d, workflow + CI staging gate + box deploy script. Hold merge until the Fastly block is lifted and flamenet-e2e carries 310c315.e630890dbato28dcdd9bf528dcdd9bf5to93d0986a2b