Watch
0
0
Fork
You've already forked hyperhive
0
Commit graph hyperhive/nix
Author SHA1 Message Date
atlas
d48cc83dcb collectors: retry a failed start forever with a growing delay instead of hitting start-limit 2026-11-11 09:01:44 +01:00
atlas
11393bc538 budgeted agents throttle at 90% of the cap; alert on repeated oom kills 2026-11-11 02:38:53 +01:00
atlas
c014b48c22 document budgeted-agent swap and oom metrics; add oom kills panel 2026-11-11 02:38:53 +01:00
atlas
a5470d82ae an archetype's prompt prefills the new agent's agents.md in the create form 2026-11-11 02:16:22 +01:00
iris
2acde41e54 docs: the hive dashboard and agent page shrink to overviews
The hive dashboard and the per-agent page lose their control-by-control UI
description and endpoint tables from the handbook. The full text moves to
4-implementation/web-ui/dashboard.md and agent-page.md, and the handbook pages
keep what an operator needs to find and use them. Code comments that named the
old sections point at the new pages.
2026-11-11 01:50:55 +01:00
iris
0ae34b1cd0 docs: persistence and config changes become one operator page
The operator parts of the persistence and config-changes pages merge into
agents/persistence.md. The sqlite tables, state dirs, mounts and migrations move
to 4-implementation/agent-state/persistence.md, and the deploy path, meta flake,
deploy markers, startup migrations, root container, system messages and
autoupdate move to 4-implementation/agent-state/config-changes.md. Links, code
comments and nix comments that named the old sections point at the new pages.
2026-11-11 01:50:35 +01:00
iris
6695355b9d docs: code comments point at the moved SSO and matrix sections 2026-11-11 01:47:20 +01:00
damocles
1cc1cb804d hive-matrix: prefill the chat client with the server name, not the hive domain 2026-11-11 00:31:20 +01:00
atlas
bcd698eb43 vm-tests: semi-spread, the example on three machines and an outside client 2026-11-11 00:14:24 +01:00
atlas
250118d558 semi-spread example: name the store's CA on the machines without the store 2026-11-11 00:14:24 +01:00
atlas
1ad4ebdd7b vm-tests: factor the agent toplevels out of full-setup 2026-11-11 00:14:24 +01:00
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
7800f92425 semi-spread example: serve internal vhosts on the VPN addresses only, over IPv4 and IPv6 2026-11-10 17:33:58 +01:00
atlas
538da5a13a add a semi-spread example deploy and a check that evaluates it 2026-11-10 17:33:58 +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
6470e2b109 module-eval: match the tombstone message on phrases that stay on one line 2026-11-10 06:48:54 +01:00
atlas
20d286f06a remove the old snapshot store; tombstone its options 2026-11-10 06:48:54 +01:00
atlas
04a5133c1b full-setup vm test: match iris and spawn exactly in the agents-status check
The jq filter used contains(), which matches substrings per element, so an agent named spawn-two satisfied spawn. It now counts the exact names iris and spawn among the fresh agents that need a login.
2026-11-10 06:47:34 +01:00
atlas
a2cd4f3da8 full-setup: diagnose() prints the failed units and the journal tail only
On a timed-out wait, diagnose() prints systemctl --failed for the machine
or container and the last 50 journal lines of the units waited on. It no
longer prints `systemctl status` for them. Only the failure path changes.
2026-11-10 06:47:34 +01:00
atlas
702974867f full-setup vm test: wait for the agents to be deployed and need a login
A last subtest polls GET /api/agents/status on the controller socket until
iris and spawn are fresh with needs_login true, through settle() with up to
40 minutes. The header's green condition is now this check, and its note on
what is not scripted yet drops the agents' deploy.
2026-11-10 06:47:34 +01:00
atlas
b14ae9e34b full-setup vm test: spawn, a reviewer-archetype agent, replaces ruth
mara chose on the PR to test a reviewer-archetype agent named spawn first
and leave a custom root agent (ruth) for later. So the test creates spawn
with the archetype's default permissions and drops manage_root_agent, which
only ruth carried.

- hive-meta-flake/testdata/meta-flake-swarm.nix.in: the agent is spawn, and
  its web port is 8316, the port the name hashes to (ruth's was 8232).
- hive-meta-flake/src/lib.rs: the unit test that compares this fixture with
  the rendered flake renders spawn instead of ruth.
- nix/vm-tests/full-setup.nix: the agents list and step 8 use spawn.
- The `swarmctl setup status` expectation keeps its "9  ruth created and up"
  row: that is the product's fixed step text (swarmctl/src/setup.rs), not the
  test's agent. The test creates no root agent, so step 9 is expected to be
  not done, and the subtest's comment says so.
2026-11-10 06:47:34 +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
4b71bd97eb wg-hive: derive test keys from a fixed seed so every store agrees 2026-11-09 17:26:17 +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
d55cf9ed80 swarmctl setup status shows progress at a glance 2026-11-09 11:55:32 +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
5af927bfaa module-eval: match the system bundle path with its string context discarded 2026-11-08 18:59:59 +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
4fae6a7766 module-eval: pin the forge board's vcs metric names against vcs_metrics.rs 2026-11-08 18:11:27 +01:00
atlas
2e23f3debf swarm-controller: count default-branch merges and lines per repo 2026-11-08 18:11:27 +01:00
atlas
c25cf3d48a hive-priv: fetch the swarm signature from attic before verifying a locally valid closure 2026-11-08 11:49:51 +01:00
atlas
3550cc0e1b module-eval: the egress dashboard now has 15 panels in the access-log layout 2026-11-08 11:20:10 +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