Watch
0
0
Fork
You've already forked hyperhive
0
Commit graph hyperhive/nix/host-modules
Author SHA1 Message Date
atlas
86c5dac89d swarm-archive: external s3 backend (options, prune path, docs, module-eval cases, vm fake s3)
- swarm-archive.nix, lib/archive-server.nix: deploy.archive.backend and
  deploy.archive.s3.* options; the s3 server and the prune read the key from the
  store into rclone's environment; the prune lists and addresses repositories
  through rclone instead of a local directory
- swarm-bao.nix: the archive reads swarm/services/archive/s3/*
- docs: archive.md "External S3" section, two credentials-reference rows
- module-eval: builder.nix cases for local and s3, the missing-setting
  assertion; bao-grants.nix gains the s3 read grant
- vm test: second node with a fake rclone serve s3 whose key is generated at
  test time
2026-11-11 00:13:19 +01:00
iris
71b634d461 grafana: the ci runner board shows each runner, with a runner filter
The panels took the max or sum over the one swarm runner. A runner variable
(the series' service.instance.id) filters every panel, and uptime, job slots
and slot use show one series per runner, so a runner registered by hand shows
up beside the swarm's once its metrics reach the store.
2026-11-10 18:40:48 +01:00
atlas
793d987a88 swarm-archive: forget future-dated snapshots before each prune; fix the grants case
A client chooses a snapshot's time, so snapshots dated ahead could fill
--keep-last and push the real ones out of a prune. The prune now forgets
snapshots dated more than an hour after now first, and logs their ids. The
VM test forges one and checks the real snapshot stays. The bao-grants case
that read a + path as a glob now names the literal path, and two cases that
pinned 'nothing else' list the archive grants. The ciRunner stanza is back
at its original indent.
2026-11-10 08:32:54 +01:00
atlas
91f36f39d2 swarm-archive: grant only once an archive is up; keep logins across a gap in placements
The archive host creates a ready marker in the store and swarm-controller
writes no credentials before it exists, so a swarm without an archive, and a
mixed-version swarm, leave every hive backup a logged no-op. A hive with no
declaration no longer counts as placing nothing: its copies and its agents'
user lines stay. The restic password is pinned by tests across a revoke, a
re-placement and a move.
2026-11-10 08:18:45 +01:00
atlas
306aae0378 swarm-archive: back up every agent's state to an append-only restic repository per agent
swarm-archive serves restic repositories with rclone, append-only, one login
and one repository per agent. swarm-controller writes each placed agent's
login and restic password to the store, replaces them on a move and removes
them when the agent is destroyed. Every hive backs its agents up hourly under
its own store identity. The archive host prunes by retention.
2026-11-10 07:49:49 +01:00
atlas
20d286f06a remove the old snapshot store; tombstone its options 2026-11-10 06:48:54 +01:00
iris
7dd147adb4 swarm ui: show when an agent's claude login was stored, and delete it
The agent's settings get a claude login row: when the swarm stored the
login, read by the minter from the leaf's metadata, or that none is, with a
delete that removes every version after a confirmation. New minter steps
(status, delete), controller routes (GET claude-login, DELETE
claude-login/stored) and a read and delete grant on the leaf's metadata,
pinned in the module-eval check.
2026-11-09 22:22:29 +01:00
atlas
fbbdf26a19 gateway: per-vhost public flag, private listen addresses, and IPv6 listeners 2026-11-09 21:40:36 +01:00
iris
b6af390581 grafana: the data-transferred-by-domain panel steps at 5 minutes and draws bars
Squid logs a tunnel's bytes once, when it closes, so a large download was
one point in a small bucket and read as instantaneous. The panel now has a
5 minute minimum interval and bars, so that point is a visible bar. The
module-eval check pins both.
2026-11-09 21:14:46 +01:00
atlas
892675628d nats and bao can listen on a routable address, opt-in 2026-11-09 17:42:20 +01:00
atlas
2a0ebe35ba run authelia's digest under a real shell, not the service user's nologin 2026-11-09 15:50:23 +01:00
atlas
52cdfe84a0 keep the mirror hint off forge errors, forward the hyperhive mirror from any controller host 2026-11-09 13:07:41 +01:00
atlas
a6b5bafa83 seed a hyperhive/hyperhive mirror so update_meta finds it on a fresh swarm 2026-11-09 12:19:46 +01:00
atlas
1c3b37e46a page pending_logins from hh-hive-warning for hives without the needs-login gauge 2026-11-09 10:56:50 +01:00
atlas
9043be4a61 export hyperhive.agent.needs_login and alert per agent 2026-11-09 10:35:16 +01:00
atlas
9d62ef44b5 nix trusts the swarm's root through its own CA bundle, so root's nix clients reach the cache 2026-11-08 18:37:34 +01:00
atlas
2e23f3debf swarm-controller: count default-branch merges and lines per repo 2026-11-08 18:11:27 +01:00
atlas
0566b501bd egress dashboard: data transferred by domain over time 2026-11-08 11:20:10 +01:00
atlas
ef68baa00f pull swarm closures through the nix daemon: substituters in the fragment, merged root-only netrc 2026-11-08 11:06:28 +01:00
atlas
817c222951 container stats: sample the ci runner's container 2026-11-08 10:34:13 +01:00
atlas
a20596fa59 swarmctl: add bao init and bao grant-bootstrap
init prints the store's keys and root token once and keeps none; with
--and-grant it goes on to the granter bootstrap in the same process.
grant-bootstrap does that step alone, reading the root token from a
hidden prompt or stdin. The token reaches bao only as BAO_TOKEN in the
child's environment.
2026-11-08 09:09:13 +01:00
atlas
e9321297c0 swarm-grafana: a host dashboard for the collector's system metrics
Adds host.json (hive and host filters over the hostmetrics series),
registers it in the provisioned dashboard list, lists it in the swarm
services handbook, and adds a module-eval case that it ships and every
query filters on both variables.
2026-11-08 09:01:21 +01:00
atlas
aeef4634e1 report the btrfs-subvolume root in host filesystem metrics 2026-11-08 03:03:49 +01:00
atlas
319dd6a808 alert when claude usage runs ahead of the clock, per account 2026-11-08 02:05:50 +01:00
atlas
dab7768869 scope the cache access to hive-core: client-side nix copy, daemon trusts only the key 2026-11-08 01:56:55 +01:00
atlas
ecd4445680 hive-c0re pulls closures through the nix daemon; hive-priv verifies the swarm signature before applying 2026-11-08 01:56:55 +01:00
atlas
d8ad1e1794 forgejo, bao: let the go process collector read /proc/stat so the uptime panels have data 2026-11-07 21:27:21 +01:00
iris
d516bb890c remove the forge links from the hive dashboard and the agent page
Each agent row on the hive dashboard, and the agent page's link menu, linked
to the agent's forge profile and its config repo. Both are gone, with what
only they used:

- hive-agent no longer builds the two links, the `Forge` link kind, or the
  `forge_public_url` field of its state, and no longer reads
  `HIVE_FORGE_PUBLIC_URL`. The agent page's link menu and the dashboard row's
  icon strip (which skips a forge link an agent not yet rebuilt still sends)
  drop their forge handling.
- hive-c0re's dashboard state no longer carries `forge_public_url`.
- `HIVE_FORGE_PUBLIC_URL` is no longer forwarded to agents through the meta
  flake (the forwarded-variable list, its test fixture, the controller's
  settings and the VM test), so the next meta flake render differs by that
  one line. hive-c0re still reads it for the forge URL a hive publishes, so
  `swarm.forge.publicUrl` stays, with its description corrected.
- The docs stop describing the links.
2026-11-07 13:43:44 +01:00
atlas
1b6d7f3c99 swarm: a failed facts copy counts in the held-deploys gauge 2026-11-07 12:59:50 +01:00
iris
0e84fe8bc4 docs: the handbook follows the three layers: swarm, hives, agents
The handbook's sections were agent-lifecycle, integrations, swarm, tools,
trust-boundary and web-ui, which do not follow how the system is built, so a
reader could not tell which layer a page is about. Its pages now sit in
swarm/, hives/ and agents/, with the accounts an agent can hold outside the
system in external-accounts/.

- swarm/: forge, matrix and the knowledge repo join the swarm pages, and so
  does the swarmctl reference.
- hives/: the dashboard, hivectl and its reference, and the operator/agent
  boundary, with a README that takes over the old web-ui and tools pages.
- agents/: the roster, persistence, config changes, the agent's own web page
  (was web-ui/agent) and the security model, with a README.
- external-accounts/: GitHub and GitLab.

Pages are moved whole; none is split yet. Every reference follows: relative
links in the docs, `docs/2-handbook/...` paths in code comments, the nix
checks that regenerate the CLI references and the ignore list, and docs/README.md,
whose handbook section is now by layer.
2026-11-07 12:19:36 +01:00
atlas
b0f6ccaa64 attic-init: replace the stored public key with the one the cache reports
a re-created cache signs with a new key; the fact was only created once, so
every hive then rejected the swarm's closures. the cache's grant gains update
on that one leaf, and a store that refuses it leaves the key as it was.

Closes #6181
2026-11-07 10:40:07 +01:00
damocles
06b303aff2 hivectl: the open verb is gone and the docs say what hivectl has 2026-11-07 07:57:50 +01:00
atlas
e9025823d9 agent: export swarm-queue connected gauge and skipped-publish counter, with dashboard panels 2026-11-07 07:56:17 +01:00
atlas
f1f611ba01 tmpfiles creates the agents root owned by hive-core
a fresh host's hive-priv made /var/lib/hyperhive/agents root-owned, so
hive-c0re could not create agent dirs (nightly run #7113). the rule
names no mode, so existing hosts are unchanged.

Closes #6143
2026-11-06 20:32:42 +01:00
iris
6739bb903d docs: sort the top-level directories into five sections by what the reader wants
Every docs directory moves under 1-getting-started, 2-handbook,
4-implementation or 5-project; the options reference (section 3) comes from
the website and has no directory here. trust-boundary stays whole under the
handbook for now. web-ui, swarm and tools split between handbook and
implementation, and the command-line references move to
2-handbook/reference. Links, path references in code and nix, and the docs
index follow the moves; no page content changes.
2026-11-06 18:46:57 +01:00
atlas
47ec47e25b start the forge mint unit from the trust refresh
a late store root dependency-fails forgejo-swarm-controller-account on
first boot and the refresh never started it, so the controller got no
forge token (vm-nightly #7084). list it as a trust consumer.

Closes #6109
2026-11-06 15:45:34 +01:00
atlas
aed7c8451a read the running rev and the hyperhive flake from /etc files, not the unit 2026-11-06 11:35:48 +01:00
atlas
89bbeb9757 the bridge resolver answers other record types for its own names locally instead of waiting on an upstream 2026-11-05 16:04:40 +01:00
iris
2b78634944 swarm-grafana: dashboards for the swarm builder, the CI runner, Matrix and the notification router 2026-11-05 10:44:33 +01:00
atlas
cb5a9b2bd7 report the real error when the granter role's bootstrap step fails, and retry on a standby store 2026-11-05 08:57:10 +01:00
atlas
bef9d401a4 matrix: report homeserver up, latency and database size through existing collectors
tuwunel 1.9.4 exports no metrics. The host collector gets an httpcheck
receiver on the gateway's /_matrix/client/versions (new
services.hyperhive.otel.httpChecks, declared by hive-matrix), and a timer in
the hive-matrix container pushes the database directory's size through the
forwarder's OTLP port, as the attic cache-size unit does. The size step
dereferences the state directory's symlink and pushes nothing for a result
under 4096 bytes.
2026-11-05 08:30:06 +01:00
iris
d1f83c64ce swarm-grafana: a dashboard for grafana itself 2026-11-05 08:08:57 +01:00
damocles
652c0e9614 swarm-claude-login: export login step, duration, expiry and active session metrics 2026-11-05 01:31:23 +01:00
damocles
7efcfd0644 swarm-notify-router: export event, todo, review request and consumer metrics 2026-11-05 01:31:23 +01:00
iris
ffe2116561 swarm-grafana: shorten the forge board description 2026-11-05 00:47:17 +01:00
iris
bc5c36dba6 swarm-grafana: the forge and CI runs boards become one forge board with content, runtime and CI runs tabs 2026-11-05 00:47:17 +01:00
atlas
e30f5849d5 swarm-builder: export build counts, durations, queue wait and publish failures through the host's collector
The builder pushes its build metrics (builds by kind and outcome, build
duration, queue depth and wait, reply publish failures) to its forwarder's
OTLP receiver, which relays them to the swarm collector.

It also registers the standard store client-certificate gauges
(bao.client_cert.*, cert=builder) on the same exporter. They are the
builder's liveness signal: exported every minute whether or not a build
runs. The cert-metrics table in docs/scheduler/observability.md gains the
builder row.
2026-11-05 00:43:25 +01:00
atlas
0bc350a8a1 ci runner: export its built-in metrics through the container's forwarder 2026-11-04 22:26:54 +01:00
atlas
dd5fde848f squid blocks a runtime deny list from the controller in every egress mode, ahead of the allow list 2026-11-04 22:16:35 +01:00
atlas
1e2e93da59 report the granter login's real error and retry on a standby store 2026-11-04 19:37:09 +01:00