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 Lecompte and izzy
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 Lecompte and izzy
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 Lecompte and greptile-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