Repository navigation
Conversation
fclairamb
added a commit
that referenced
this pull request
Jun 22, 2026
Co-locates the docs in this repo (`web/docs/`, Docusaurus) and serves them from the binary at the **`/docs`** path on every host (like `/dash0`, `/status0`), so `solidping.io/docs` works with no extra infra. `docs.solidping.io` redirects into `/docs` (`server.docs_host`). ## Highlights - `web/docs/`: Docusaurus 3.10.1; API reference generated at build from `server/internal/app/openapi/openapi.yaml` (can't drift). - Go: `//go:embed all:docsres` + `/docs` routes + docs-host redirect; Swagger explorer moved `/docs` → `/openapi`. - Makefile / CI / Dockerfile: docs build + embed wiring. - Rename internal wiki `docs/` → `wiki/` (ends the docs/ vs web/docs/ collision). - `deploy/docs-ingress.yaml`: optional ingress template for the docs.solidping.io subdomain. Marketing site moved to the `solidping-website` repo (PRs #2, #3 there). Implements `specs/done/2026/06/2026-06-22-01-docs-site-from-code-repo.md`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
6 tasks done
fclairamb
added a commit
that referenced
this pull request
Jul 5, 2026
) ## Summary Eight specs implemented via `/implement-todos`, each independently audited (a fresh, skeptical, read-only agent verifying the actual code and tests against every requirement — not the implementing subagent's own self-report) before being archived. Two subagent crashes occurred mid-batch (API connection errors) and were recovered from partial state rather than restarted from scratch. 1. **Sidebar live-connection status dot (green/gray/red)** — a small indicator in the sidebar footer showing real-time WebSocket connection health; four-state registry (`connecting`/`live`/`reconnecting`/`disabled`), single-flight-safe. 2. **Multi-region check jobs: durable phase leveling and bounded claim-ahead parking** — production incident fix. Region-staggered scheduling now survives restarts and late runs via phase-locked rescheduling (no more lockstep herding); claim-ahead parking is bounded per job instead of consuming the whole worker pool for minutes. 3. **DB connection pool: role-aware sizing and headroom under the Postgres role limit** — found while diagnosing #2 on the dev cluster (role connection limit was silently exhausted by idle connections). Per-node-role pool defaults, idle-connection reaping, and a startup warning when the pool can't fit the role's connection limit. 4. **Email rework: unified design, dashboard links, per-check unsubscribe** — kills the hand-built HTML string-builder path for incident emails in favor of the same templated/premailer pipeline auth emails already use; redesigned base layout; dashboard/incident links in every email; a full per-recipient unsubscribe subsystem (purpose-tagged signed tokens, RFC 8058 one-click, suppression table, dashboard management UI). 5. **Auth session continuity: silent access-token refresh, sliding sessions, and a Sessions vs API tokens UI** — fixes users being logged out mid-session (the backend already had a refresh flow the frontend never called). Single-flight proactive + reactive refresh, sliding session expiry, JWT claims bound to their issuing session, a session cap, and a new Sessions page distinct from the API-tokens page (device/browser/OS, current-session badge, sign-out-other-sessions). 6. **Heartbeat pings: capture caller metadata** — records User-Agent/source IP/HTTP method on every heartbeat ping (the one check type where SolidPing is the callee, not the caller), surfaced as a "Caller" card on the result detail page. Shares the IP-extraction helper with auth instead of adding a third hand-rolled copy. 7. **Check detail: one chart line per region + Recent Results region filter with duration stats** — the "All regions" chart view was still a single merged (sawtooth) series; now renders one colored line per region with a matching legend. Recent Results gains a server-side region filter and a tier-aware min/avg/max/p95 stats strip (exact over raw windows, weighted-combined with a `~` prefix over rollup windows, verified to match the aggregation job's own weighting math). 8. **Check result detail: previous / next result navigation** — chevron buttons to step chronologically through a check's results without bouncing back to the check page each time; scoped to the same periodType as the (possibly rolled-up) row being viewed, with a stable same-timestamp tie-break. ## Test plan - [x] Each spec independently audited by a fresh read-only agent against the merged code (not the implementing subagent's own self-report) before being archived — see individual spec files under `specs/done/2026/07/`. - [x] One spec (email rework) had a narrow gap surface after its first "clean" audit — a coordinator spot-check found one acceptance criterion's "both directions" test coverage was at the wrong layer for one direction; a follow-up fix subagent closed it before archiving. - [x] Two subagent crashes (multi-region chart series; auth session continuity) were recovered from partial/uncommitted state on the same branch rather than restarted, with the recovered work independently re-verified. - [x] Backend: `make build-backend lint-back test` green throughout, including dual-backend (SQLite + real embedded-Postgres) coverage for the DB-pool, multi-region scheduling, and result-neighbor specs. - [x] Frontend: `make build-dash0` + `bun run lint` green with zero new ESLint errors introduced (pre-existing ~45-error baseline unchanged); Playwright E2E added for the sidebar dot, per-region chart/filter/stats, and result prev/next navigation. - [x] Manually built for `linux/amd64` and deployed to the k8xp dev cluster (all three `solidping-dev` deployments) for live testing; `/api/mgmt/version` confirmed the deployed commit. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
fclairamb
added a commit
that referenced
this pull request
Sep 14, 2026
Three bumps close every open Dependabot alert on the repo. - kin-openapi 0.142.0 -> 0.144.0 (alerts #6 critical, #7 medium): ValidationHandler.Load() fail-open auth bypass via the default NoopAuthenticationFunc, and an unauthenticated nil-pointer panic in openapi3filter when validating a `content` parameter whose media type carries no schema. Indirect, pulled by oapi-codegen. - goxmldsig 1.4.0 -> 1.6.0 (alert #1 high): loop-variable capture in validateSignature let a crafted document bypass signature validation. Indirect, pulled by crewjam/saml. - github.com/docker/docker -> github.com/moby/moby/{client,api} (alerts #2, #3, #4, #5): docker/docker stopped publishing Go modules at v28.5.2 — Docker 29 split the Go client into github.com/moby/moby/client and the API types into github.com/moby/moby/api. There is no patched v28, so the only way off the vulnerable module is the migration. The moby migration is mechanical but not a pure import rewrite, because the split client reshaped its call signatures: - every call takes an options struct and returns a result struct (ContainerInspect/List/Start/Remove/Logs, CopyTo/FromContainer, ImagePull, Ping); - InspectResponse is flat — the ContainerJSONBase embedding is gone; - Summary.State is container.ContainerState and Health.Status is container.HealthStatus, both typed strings now; - container.Port is container.PortSummary; - port sets/maps moved to the network package with a real Port type (network.MustParsePort) and netip.Addr host IPs, replacing docker/go-connections/nat — which drops to indirect; - EndpointSettings.Gateway is a netip.Addr, not a string. Behaviour is unchanged for the docker check and container discovery. The one compatibility note: the split client's floor is Docker API 1.40 (Docker 19.03, 2019), up from 1.24. API-version negotiation still runs, so Podman and older-but-supported daemons are unaffected. go mod tidy also promotes chromedp/cdproto to a direct requirement — it is directly imported by internal/checkers/checkbrowser and was mislabeled indirect. Verified: make lint-back, go vet ./... , go vet -tags slowtests ./... , and the full `make test` suite all green; oapi-codegen still builds against kin-openapi 0.144.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
fclairamb
added a commit
that referenced
this pull request
Sep 14, 2026
Three bumps close every open Dependabot alert on the repo. - kin-openapi 0.142.0 -> 0.144.0 (alerts #6 critical, #7 medium): ValidationHandler.Load() fail-open auth bypass via the default NoopAuthenticationFunc, and an unauthenticated nil-pointer panic in openapi3filter when validating a `content` parameter whose media type carries no schema. Indirect, pulled by oapi-codegen. - goxmldsig 1.4.0 -> 1.6.0 (alert #1 high): loop-variable capture in validateSignature let a crafted document bypass signature validation. Indirect, pulled by crewjam/saml. - github.com/docker/docker -> github.com/moby/moby/{client,api} (alerts #2, #3, #4, #5): docker/docker stopped publishing Go modules at v28.5.2 — Docker 29 split the Go client into github.com/moby/moby/client and the API types into github.com/moby/moby/api. There is no patched v28, so the only way off the vulnerable module is the migration. The moby migration is mechanical but not a pure import rewrite, because the split client reshaped its call signatures: - every call takes an options struct and returns a result struct (ContainerInspect/List/Start/Remove/Logs, CopyTo/FromContainer, ImagePull, Ping); - InspectResponse is flat — the ContainerJSONBase embedding is gone; - Summary.State is container.ContainerState and Health.Status is container.HealthStatus, both typed strings now; - container.Port is container.PortSummary; - port sets/maps moved to the network package with a real Port type (network.MustParsePort) and netip.Addr host IPs, replacing docker/go-connections/nat — which drops to indirect; - EndpointSettings.Gateway is a netip.Addr, not a string. Behaviour is unchanged for the docker check and container discovery. The one compatibility note: the split client's floor is Docker API 1.40 (Docker 19.03, 2019), up from 1.24. API-version negotiation still runs, so Podman and older-but-supported daemons are unaffected. go mod tidy also promotes chromedp/cdproto to a direct requirement — it is directly imported by internal/checkers/checkbrowser and was mislabeled indirect. Verified: make lint-back, go vet ./... , go vet -tags slowtests ./... , and the full `make test` suite all green; oapi-codegen still builds against kin-openapi 0.144.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 I have created a release beep boop
1.0.0 (2026-03-24)
Features
This PR was generated with Release Please. See documentation.