Commit Graph
100 Commits
Author SHA1 Message Date
Antoine Lecompte 79c914c375 chore: remove the unused restic-api reference implementation (#684) 2026-09-15 13:08:31 +00:00
Antoine Lecompte 29a0b653e9 fix(ci): de-flake the e2e job (loop-device image, fail-fast wait, diagnostics, hook timeout) (#621) 2026-09-14 23:36:27 +01:00
Antoine Lecompteandizzy 0bfca45a5b fix(yucca sdk): surface the state database path and guard master key generation (#653)
Co-authored-by: izzy <me@insrt.uk>
2026-09-14 16:41:42 +01:00
Antoine Lecompte 0b15733005 fix(michael): drain in-flight restic requests before closing the listener on rollout (#660) 2026-09-14 08:30:44 -04:00
Antoine Lecompteandizzy a744273730 fix(yucca sdk): report interrupted backup runs to the backend on restart (#651)
Co-authored-by: izzy <me@insrt.uk>
2026-09-14 13:05:36 +01:00
Antoine Lecompte dcf3065fee fix(michael): answer GET of a missing blob or config with 404, not 500 (#650) 2026-09-11 08:49:06 -04:00
Antoine Lecompte 3e213f0891 fix(o11y): show traffic rate in bits per second on all dashboards (#639) 2026-09-10 10:50:05 -04:00
Antoine Lecompte 85c936abc6 feat(bot): add dashboard (#622) 2026-09-02 14:34:46 +00:00
Antoine Lecompte 56a1b18061 feat(cnpg): enable quorum commit on the real database clusters (#613) 2026-09-01 09:57:18 -04:00
Antoine Lecompte ec696ed762 fix(flux): make the database health check actually apply (#614) 2026-09-01 09:57:06 -04:00
Antoine Lecompte 2044b5095e fix(flux): gate the database kustomization on a serving primary (#610) 2026-09-01 09:26:14 -04:00
Antoine Lecompte f1640326b9 feat(infra): activate the futo-backups-bot prod creds (#601) 2026-09-01 09:00:41 -04:00
Antoine Lecompte 7750b71620 fix(futo-backups-bot): ignore interactions from other guilds (#602) 2026-08-31 15:42:57 -07:00
Antoine Lecompte bb0cd74bee feat(columbo): give the agent fixed fleet-health probes and a bigger tool budget (#600) 2026-08-31 16:10:02 -04:00
Antoine Lecompte 8e9cd64c16 feat(columbo): retry model calls with per-attempt deadlines (#598) 2026-08-31 11:28:12 -07:00
Antoine Lecompte ce32472f89 fix(michael): log the resolved route plus op and blob_type on access lines (#597) 2026-08-31 08:38:17 -04:00
Antoine Lecompte 500107b5ce feat(columbo): triage-refusal staff notes + per-user telemetry catalog (#596) 2026-08-31 08:38:05 -04:00
Antoine Lecompte b3aa57dc5d feat(columbo): per-investigation audit log, tool-error recovery, pipe-aware log scoping (#586) 2026-08-28 13:57:28 -04:00
Antoine Lecompte 88267dc1f7 feat(columbo): add columbo (#585) 2026-08-28 13:26:11 -04:00
Antoine Lecompte 7988ac3487 fix(futo-backups-bot): fall back to a generic agent name when the profile read is forbidden (#584) 2026-08-27 12:51:41 -07:00
Antoine Lecompte 001da241f7 chore(tf): consume the freshdesk-stack webhook credentials in the talos stacks (#582) 2026-08-27 15:33:58 -04:00
Antoine Lecompte 73006bd23b chore(tf): bump slop-place/freshdesk to 0.1.2 for the automation-action passthrough fix (#581) 2026-08-27 15:21:10 -04:00
Antoine Lecompte fa9cfd3891 refactor(tf): move freshdesk ownership into partition-level global/freshdesk stacks (#580) 2026-08-27 14:35:04 -04:00
Antoine Lecompte 64371fbaa9 feat(infra): wire the freshdesk webhook route, network policy and secrets (#578) 2026-08-27 13:09:21 -04:00
Antoine Lecompte 4e56080e0b feat(futo-backups-bot): bidirectional freshdesk sync for support tickets (#577) 2026-08-27 13:09:21 -04:00
Antoine Lecompte 121987ff79 feat(yucca-api): discord ticket to freshdesk mapping table and internal endpoints (#576) 2026-08-27 13:09:20 -04:00
Antoine Lecompte b726229b14 feat(yucca-admin-api): manage and cancel discord beta-invite drops via yuctl (#575) 2026-08-26 20:15:05 +01:00
Antoine Lecompte cca37e0200 refactor(futo-backups-bot): centralize user-facing copy in messages.ts (#574) 2026-08-26 14:18:07 -04:00
Antoine Lecompte 003cb71435 fix(futo-backups-bot): mention the everyone role as a literal @everyone (#573) 2026-08-26 13:54:37 -04:00
Antoine Lecompte 9abf625652 feat(futo-backups-bot): /beta-invite with personal links, claim batches, and optional role mention (#571) 2026-08-26 13:41:04 -04:00
Antoine Lecompte 6a37d2674a feat(web): discord beta-invite redemption on the invite page (#570) 2026-08-26 13:41:04 -04:00
Antoine Lecompte 85f3a59b2a feat(yucca-api): discord closed-beta invite claims and nonced redemption (#569) 2026-08-26 13:41:03 -04:00
Antoine Lecompte 1fbed25c53 feat(infra): activate the claim-flow ids for staging (#568) 2026-08-26 14:10:20 +00:00
Antoine Lecompte f7e60f0d41 feat(futo-backups-bot): /claim-backups-role grants the customer role (#567) 2026-08-26 09:58:48 -04:00
Antoine Lecompte 769572dea8 fix(staging): fix ingress locality in staging (#564) 2026-08-26 08:55:46 -04:00
Antoine Lecompte 2172679a36 feat(futo-backups-bot): /staff-notes links the paired staff thread (#566) 2026-08-26 08:55:33 -04:00
Antoine Lecompte 6f892c8ba6 fix(futo-backups-bot): unbreak the staff-thread spec after the suffix change (#565) 2026-08-26 08:54:57 -04:00
Antoine Lecompte 4442740ad9 feat(futo-backups-bot): sync the stored discord username from interactions (#563) 2026-08-26 08:54:35 -04:00
Antoine Lecompte 3167a48583 feat(yucca-admin-api): manage discord links via admin-api and yuctl (#562) 2026-08-26 08:54:22 -04:00
Antoine Lecompte 290e3d7a65 feat(futo-backups-bot): allow up to three open tickets per user (#561) 2026-08-26 12:31:52 +00:00
Antoine Lecompte 5eaf0f349d feat(futo-backups-bot): grafana per-user link in staff notes (#560) 2026-08-26 12:26:07 +00:00
Antoine Lecompte eb89c13118 fix(admin): wire-in the admin-api like prod (#559) 2026-08-26 12:20:09 +00:00
Antoine Lecompte e61dabe7e3 fix(futo-backups-bot): avoid the privileged thread-member listing (#557) 2026-08-26 08:13:36 -04:00
Antoine Lecompte 717ab17e18 fix(futo-backups-bot): pull staff into the staff-notes thread (#558) 2026-08-26 08:06:06 -04:00
Antoine Lecompte bed87ba085 fix(futo-backups-bot): dedupe the support sticky and survive pin failures (#551) 2026-08-25 19:35:29 +00:00
Antoine Lecompte f1bd9cf33e fix(futo-backups-bot): survive missing applications.commands scope (#550) 2026-08-25 18:55:21 +00:00
Antoine Lecompte 28834042cb feat(infra): activate futo-backups-bot staging creds (#549) 2026-08-25 14:51:36 -04:00
Antoine Lecompte a757e14ed0 feat(infra): force_apply dispatch input for prod/staging (#548) 2026-08-25 11:42:07 -07:00
Antoine Lecompte 5ad08e27d7 feat(infra): deploy futo-backups-bot (#545) 2026-08-25 14:24:51 -04:00
Antoine Lecompte 474879f399 feat(futo-backups-bot): discord support bot (#544) 2026-08-25 14:24:50 -04:00
Antoine Lecompte 93d90e3ecf feat(web): discord link confirmation page (#543) 2026-08-25 14:24:50 -04:00
Antoine Lecompte 7f61914cd8 feat(yucca-api): discord account linking (#542) 2026-08-25 14:24:50 -04:00
Antoine Lecompte 8392f4f379 feat(ceph): move user creation inside terraform (#541) 2026-08-25 06:32:50 -07:00
Antoine Lecompte c78ddee105 fix(all): various fixes (#537) 2026-08-24 13:51:25 +00:00
Antoine Lecompte dd12594761 fix(migrations): re-date again (#535) 2026-08-24 09:25:52 -04:00
Antoine Lecompte 4d3990e7f3 feat(infra): plumb postmark config into staging and prod (#493) 2026-08-24 06:45:00 -04:00
Antoine Lecompte 30166e0733 feat(yucca-admin-api): send invite emails from the allowlist flow (#492) 2026-08-24 06:44:59 -04:00
Antoine Lecompte 1d92b4b0c1 feat(emails): mailpit + mock-postmark local dev stack (#491) 2026-08-24 06:44:59 -04:00
Antoine Lecompte 2fc89b105b feat(common): postmark-backed email repository (#490) 2026-08-24 06:44:59 -04:00
Antoine Lecompte 54c880229b feat(emails): svelte invite email template rendered with the web theme (#489) 2026-08-24 06:44:58 -04:00
Antoine Lecompte 03ea70ea7c feat(o11y): michael resilience panels and alerts (#529) 2026-08-21 12:17:57 -04:00
Antoine Lecompte 6c8092ace8 feat(michael): per-backend circuit breakers with fast-fail load shedding (#528) 2026-08-21 12:17:57 -04:00
Antoine Lecompte bb28f016a3 feat(michael): budgeted cross-backend retries in the S3 pool (#527) 2026-08-21 12:17:56 -04:00
Antoine Lecompte f435601871 fix(michael): converge retried WORM puts when the existing blob matches (#526) 2026-08-21 12:17:56 -04:00
Antoine Lecompte 55488d6818 fix(go): add golangci-lint (#525) 2026-08-21 13:55:25 +00:00
Antoine Lecompte 359a227645 fix(alerts): make junos-exporter ignore one of em (#524) 2026-08-21 13:35:47 +00:00
Antoine Lecompte bbcfa7c295 fix(cnpg): fix backup alerts (#522) 2026-08-21 13:17:57 +00:00
Antoine Lecompte d4554a7a6f feat(o11y): staging observability to o11y staging mesh vmauth over netbird (#517) 2026-08-20 11:54:16 -04:00
Antoine Lecompte 57c790d660 fix(k8s): staging gw via SNI passthrough — mergeGateways is unsupported under GatewayNamespace mode (#516) 2026-08-20 11:51:21 -04:00
Antoine Lecompte a5de2a6f89 chore(netbird): remove the retired k8s operator's service user, token, and secret bootstrap (#515) 2026-08-20 15:47:29 +00:00
Antoine Lecompte 0c2298dc95 refactor(k8s): converge staging and prod onto shared infra/platform components (#514) 2026-08-20 11:21:27 -04:00
Antoine Lecompte a3b42946d5 fix(meta): log x-forwarded for IP address (#512) 2026-08-20 14:34:26 +00:00
Antoine Lecompte 153bf220e2 fix(o11y): field selector on log panels, variable-safe request tracing (#509)
* fix(o11y): field selector on log panels, variable-safe request tracing

* docs: one-line PR descriptions and commit messages
2026-08-20 13:59:32 +00:00
Antoine Lecompte 816ce71bd3 fix(migrations): re-date (#510) 2026-08-20 13:48:54 +00:00
Antoine Lecompte d760fb1993 feat(o11y): scope alerts to project=yucca, CNPG dashboard, title convention (#508) 2026-08-20 09:19:45 -04:00
Antoine Lecompte 4eaaaa6e6f fix(net): bgp (#507) 2026-08-20 13:07:35 +00:00
Antoine Lecompte 09f10fcbf5 feat(o11y): per-service log dashboards (#504)
Six VictoriaLogs dashboards (yucca-api, admin-api, michael, web,
metrics-worker, meta): by-level volume histograms via the hits endpoint,
error streams with top-message tables, per-service request breakdowns
(status, handlers/routes, slowest requests, top users and source networks on
michael, cron heartbeat on metrics-worker, regex status classes on meta),
and full live streams with LogsQL filter and request-id textboxes. Query
types are the plugin's real enum (instant/statsRange/hits); every query was
validated against the live VictoriaLogs. No prometheus datasource variable
on these boards, which keeps the linter's PromQL rule away from LogsQL.
2026-08-20 12:25:05 +00:00
Antoine Lecompte 045491d437 feat(cnpg): make better (#496) 2026-08-19 15:27:09 -04:00
Antoine Lecompte 569c17ff63 fix(o11y): point alert rules and imported dashboards at the fleet datasource (#502)
* fix(o11y): pin 5m staleness lookback on alert rule queries

VictoriaMetrics uses an instant query's step as the staleness lookback and
Grafana derives step from intervalMs, clamped to ~15s. Metrics scraped less
often than the step resolve to no-data and noDataState: OK parks the rule at
Normal while its condition is true: the junos-based rules (60s NETCONF
scrape) never fired, with the Colt transit session down. intervalMs: 300000
restores Prometheus-standard staleness for every cadence in the fleet.

* fix(o11y): make slow-cadence alert queries staleness-proof

Grafana sends the rule group's evaluation interval as the instant query's
step and VictoriaMetrics uses step as the staleness lookback; intervalMs on
the query model does not change it. Sources at or above the step's cadence
(junos at 60s, the 5m metering cron) lose that race often enough that a
multi-minute for can never sustain, so the rules sat Normal via
noDataState: OK through a real transit outage. Wrap every such selector in
last_over_time so evaluation is cadence-independent at any step.

* fix(o11y): point alert rules and imported dashboards at the fleet datasource

The default VictoriaMetrics datasource fronts vmauth-self-select, which
serves only the o11y cluster's own series: every rule over yucca, fabric or
ceph data evaluated to NoData and sat Normal through the live Colt transit
outage (confirmed via the Grafana API — all instances Normal (NoData) except
the cert rule, whose only firing labels were cluster=o11y). Pin
datasourceUid: VictoriaMetricsFleet (vmselect, whole fleet) on every rule
query and give the imported dashboards' $datasource variable the house
/^VictoriaMetrics Fleet$/ regex so they stop defaulting to the self-scoped
datasource.
2026-08-19 19:26:16 +00:00
Antoine Lecompte 552735a527 fix(o11y): make slow-cadence alert queries staleness-proof (#501)
* fix(o11y): pin 5m staleness lookback on alert rule queries

VictoriaMetrics uses an instant query's step as the staleness lookback and
Grafana derives step from intervalMs, clamped to ~15s. Metrics scraped less
often than the step resolve to no-data and noDataState: OK parks the rule at
Normal while its condition is true: the junos-based rules (60s NETCONF
scrape) never fired, with the Colt transit session down. intervalMs: 300000
restores Prometheus-standard staleness for every cadence in the fleet.

* fix(o11y): make slow-cadence alert queries staleness-proof

Grafana sends the rule group's evaluation interval as the instant query's
step and VictoriaMetrics uses step as the staleness lookback; intervalMs on
the query model does not change it. Sources at or above the step's cadence
(junos at 60s, the 5m metering cron) lose that race often enough that a
multi-minute for can never sustain, so the rules sat Normal via
noDataState: OK through a real transit outage. Wrap every such selector in
last_over_time so evaluation is cadence-independent at any step.
2026-08-19 18:59:13 +00:00
Antoine Lecompte 0fe43daaf0 fix(o11y): pin 5m staleness lookback on alert rule queries (#499)
VictoriaMetrics uses an instant query's step as the staleness lookback and
Grafana derives step from intervalMs, clamped to ~15s. Metrics scraped less
often than the step resolve to no-data and noDataState: OK parks the rule at
Normal while its condition is true: the junos-based rules (60s NETCONF
scrape) never fired, with the Colt transit session down. intervalMs: 300000
restores Prometheus-standard staleness for every cadence in the fleet.
2026-08-19 18:17:46 +00:00
Antoine Lecompte 756e6e080e fix(alerts): fix bad alerts (#497) 2026-08-19 17:43:13 +00:00
Antoine Lecompte 8c6e9e325d chore(o11y): add more dashboard and alerts (#495) 2026-08-19 13:14:25 -04:00
Antoine Lecompte ee43e55a2b feat(net): add colt (#488) 2026-08-19 13:04:17 -04:00
Antoine Lecompte b7bbe2e80e chore(yuctl): restructure and make pretty (#485) 2026-08-18 09:53:59 -04:00
Antoine Lecompte 0e3f47a769 perf(ci): stop the integration and e2e jobs waiting on rook-ceph (#435) 2026-08-07 13:40:51 +01:00
Antoine Lecompte 51472c37eb fix(infra): monitor all the things (#445) 2026-08-05 20:04:26 +00:00
Antoine Lecompteandgreptile-apps[bot] 75c77ecdfa feat(infra): add spegel (#436)
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-08-05 20:03:59 +00:00
Antoine Lecompte 02efb46f53 chore(claude): make claude comply (#432) 2026-08-05 12:54:55 -04:00
Antoine Lecompte bf69aee578 fix(yucca-sdk): repair the orchestration-api integration suites (#429) 2026-08-05 12:45:59 -04:00
Antoine Lecompte a4d422709b feat(michael): per-client parallelism and latency metrics (#427) 2026-08-05 12:09:29 -04:00
Antoine Lecompte 72b343ceba feat(michael): attribute traffic to the client's source asn (#428) 2026-08-05 15:13:04 +00:00
Antoine Lecompte a4c4b0c337 fix(yucca-api): format failure (#426) 2026-08-05 13:34:40 +00:00
Antoine Lecompte 8feda20065 feat(web): connections ui (#415) 2026-08-03 18:30:57 +00:00
Antoine Lecompte b427a7045b feat(yucca): per-connection billing rollup (#391) 2026-08-03 14:09:23 -04:00
Antoine Lecompte 55ece2fbaf feat(all): connections (#390) 2026-08-03 14:09:23 -04:00
Antoine Lecompte 94a5df9667 feat(yucca): per-user feature flags (#389) 2026-08-03 14:09:22 -04:00
Antoine Lecompte c606637450 fix(k8s): drop deadlocking topology readyExpr (#401) 2026-07-30 13:01:06 +00:00
Antoine Lecompte 1039337b13 feat(orchestrator): meta discovery and placement (#385) 2026-07-30 08:29:30 -04:00
Antoine Lecompte 7911c3bf11 feat(yuctl): config commands (#384) 2026-07-30 08:29:30 -04:00