docs: restructure into topic subdirectories, collapse duplicated index
Per mara's go-ahead on hyperhive#3902 ("getting started is good, but
terminal rendering does not go in there i think"):
Moved 21 top-level docs/*.md files into 7 new topic subdirectories
(existing web-ui/, turn-loop/, swarm/, tools/, crates/ untouched):
getting-started/ setup.md
agent-lifecycle/ agent-hierarchy.md, approvals.md, persistence.md
trust-boundary/ boundary.md, security.md
integrations/ forge.md, matrix.md, github.md, knowledge.md
networking/ gateway.md, network.md, snapshot-store.md
scheduler/ jobq.md, coordinator.md, ci.md, observability.md
process/ conventions.md, gotchas.md, pr-review-gate.md
web-ui/ terminal-rendering.md (moved into the EXISTING dir,
per mara's correction to the original getting-started
guess -- it's UI implementation detail, not onboarding)
The physical layout now matches docs/README.md's own topical headers,
which already amounted to this taxonomy -- see the scoping comment on
the issue for the two findings that motivated this (a genuine
duplication between CLAUDE.md's old "Reading paths" list and
docs/README.md's grouped one, since drifted out of sync with each
other; and the flat layout not matching the grouping we already had).
Fixed every cross-reference this moved across the whole repo (~120
files: docs/ internal links at every depth, Rust doc comments, nix
module option docs, crate READMEs) -- verified two ways: a grep sweep
confirming zero remaining references to any old path, and a script
that resolves every markdown link in docs/**/*.md + CLAUDE.md +
README.md against the filesystem and reports anything that doesn't
exist (zero broken links).
Collapsed CLAUDE.md's "Reading paths" section (the duplicate) down to
a pointer at docs/README.md, now the single index. Rewrote
docs/README.md itself to use the new subdirectory paths and added the
one doc it was missing that CLAUDE.md's old copy had (pr-review-gate.md).
Classified all 22 docs/*.md files first via a haiku subagent (mara's
suggestion) on two axes -- proposed grouping and operator-vs-
implementation focus -- before finalizing the taxonomy; spot-checked
the report and found internal inconsistencies (its classification
table disagreed with its own summary section for a few files), so this
taxonomy is my original proposal + the one correction mara gave
directly, not a blind application of the subagent's table. The
operator-focus data it gathered is still useful for a follow-up
content pass (docs skewing 'mixed' rather than pure operator-facing),
not addressed in this PR -- structure only.
nix fmt clean, both pre-push lints clean.
This commit is contained in:
parent
e4a22b4190
commit
07b62612b0
124 changed files with 301 additions and 377 deletions
96
CLAUDE.md
96
CLAUDE.md
|
|
@ -10,12 +10,12 @@ when you need depth on a subsystem. This file is the index.
|
|||
the env var — inside an agent container `localhost` is the *agent*, not
|
||||
the forge, so a hardcoded loopback address fails to connect.
|
||||
- Operator/agent trust-boundary design:
|
||||
**[docs/boundary.md](docs/boundary.md)** (`area/ops` issues
|
||||
**[docs/trust-boundary/boundary.md](docs/trust-boundary/boundary.md)** (`area/ops` issues
|
||||
for the deployment/gateway/privsep work — the separator is a **slash**,
|
||||
and `--label area:ops` now fails with `did you mean "area/ops"?`).
|
||||
- Agent trust model (trust boundary, prompt-injection threat model,
|
||||
capability = accepted risk), credential isolation + sandbox threat model:
|
||||
**[docs/security.md](docs/security.md)**.
|
||||
**[docs/trust-boundary/security.md](docs/trust-boundary/security.md)**.
|
||||
|
||||
## Repo map
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ hand-maintained per-file tree drifts out of sync with the code.
|
|||
- **`hivectl/`** — standalone operator CLI (`hivectl` binary). Talks to
|
||||
the `hive-c0re` daemon over the host admin socket (`hive-host-sock`
|
||||
wire types) — does NOT link `hive-c0re`. Full, always-current verb
|
||||
reference (CI-enforced against the clap tree, see `docs/conventions.md`):
|
||||
reference (CI-enforced against the clap tree, see `docs/process/conventions.md`):
|
||||
[`docs/tools/hivectl-cli.md`](docs/tools/hivectl-cli.md).
|
||||
- **`hive-agent/`**, **`hive-agent-mcp/`** —
|
||||
in-container harness, two sibling crates for every agent (not a
|
||||
|
|
@ -80,7 +80,7 @@ hand-maintained per-file tree drifts out of sync with the code.
|
|||
- **`hive-priv/`** — minimal root privileged-helper, socket-activated at
|
||||
`/run/hive/priv.sock`; performs the few root operations (bind-mount
|
||||
edits, nsenter) the unprivileged `hive-c0re` delegates to it. See
|
||||
`docs/boundary.md`.
|
||||
`docs/trust-boundary/boundary.md`.
|
||||
- **`hive-forge/`** — `hive-forge` Forgejo CLI wrapper; one module per
|
||||
verb under `src/verbs/`.
|
||||
- **`hive-forge-notify/`** — per-agent notification poller daemons; turns
|
||||
|
|
@ -156,7 +156,7 @@ hand-maintained per-file tree drifts out of sync with the code.
|
|||
written in place** — one file, shared with `swarm-authelia-bridge`; see
|
||||
that crate's README for what both writers must uphold. Full, always-current
|
||||
verb reference (CI-enforced against the clap tree, same pattern as
|
||||
`hivectl`'s — see `docs/conventions.md`):
|
||||
`hivectl`'s — see `docs/process/conventions.md`):
|
||||
[`docs/tools/swarmctl-cli.md`](docs/tools/swarmctl-cli.md).
|
||||
|
||||
### External dependencies with no directory here
|
||||
|
|
@ -191,91 +191,17 @@ hand-maintained per-file tree drifts out of sync with the code.
|
|||
|
||||
## Reading paths
|
||||
|
||||
Pick the doc that matches your task. None depend on the others —
|
||||
read them à la carte.
|
||||
|
||||
- **"How do I bring a fresh hive online (first-run hivectl
|
||||
bootstrap)?"** → [`docs/setup.md`](docs/setup.md).
|
||||
- **"What does the dashboard look like?"** →
|
||||
[`docs/web-ui.md`](docs/web-ui.md) (index; sub-pages:
|
||||
[`shape`](docs/web-ui/shape.md),
|
||||
[`dashboard`](docs/web-ui/dashboard.md),
|
||||
[`agent`](docs/web-ui/agent.md)).
|
||||
- **"How does the per-agent terminal classify + colour
|
||||
events?"** → [`docs/terminal-rendering.md`](docs/terminal-rendering.md).
|
||||
- **"How does claude get its prompt and what tools does it have?"** →
|
||||
[`docs/turn-loop/`](docs/turn-loop/README.md) (index: the loop, binary shape,
|
||||
turn outcomes; sub-pages:
|
||||
[`claude-invocation`](docs/turn-loop/claude-invocation.md),
|
||||
[`config`](docs/turn-loop/config.md), [`mcp`](docs/turn-loop/mcp.md)).
|
||||
- **"How do config changes flow from manager to operator to
|
||||
container?"** → [`docs/approvals.md`](docs/approvals.md).
|
||||
- **"What state survives destroy / purge / restart?"** →
|
||||
[`docs/persistence.md`](docs/persistence.md).
|
||||
- **"Naming, commit style, wire protocol, the `data-async`
|
||||
pattern."** → [`docs/conventions.md`](docs/conventions.md).
|
||||
- **"Why does the nspawn flag look like that?"** →
|
||||
[`docs/gotchas.md`](docs/gotchas.md).
|
||||
- **"What nginx vhosts does the gateway serve? How does matrix
|
||||
discovery work?"** → [`docs/gateway.md`](docs/gateway.md).
|
||||
- **"How do per-agent forge accounts work? What does forge_notify
|
||||
poll + how does it format wake messages?"** →
|
||||
[`docs/forge.md`](docs/forge.md).
|
||||
- **"What verbs does `hive-forge` support? How do I post a comment,
|
||||
upload an attachment, manage subscriptions?"** →
|
||||
[`docs/tools/forge.md`](docs/tools/forge.md).
|
||||
- **"What does `hivectl` do? How do I provision a forge/matrix account,
|
||||
manage gateway users, restart containers, or drop into an agent shell?"** →
|
||||
[`docs/tools/hivectl.md`](docs/tools/hivectl.md).
|
||||
- **"How does the matrix-tuwunel container work? What about
|
||||
fluffychat-web and per-agent matrix accounts?"** →
|
||||
[`docs/matrix.md`](docs/matrix.md).
|
||||
- **"How do I give an agent a GitHub account (`gh` + `git push`)?
|
||||
How is the PAT injected?"** → [`docs/github.md`](docs/github.md).
|
||||
- **"How does DNS resolution work in agent containers? What's the
|
||||
bridge network for?"** → [`docs/network.md`](docs/network.md).
|
||||
- **"How do I connect two hives into a swarm? How do I declare peer
|
||||
hives and configure TLS trust?"** →
|
||||
[`docs/swarm/`](docs/swarm/README.md).
|
||||
- **"Which deployment shapes are supported — all-local, services on the
|
||||
controller host, fully spread out?"** →
|
||||
[`docs/swarm/services.md`](docs/swarm/services.md#deployment-shapes).
|
||||
- **"Where do agent snapshots go? How does the swarm's `btrfs receive`
|
||||
endpoint authenticate a pushing hive, and what does a snapshot
|
||||
actually contain?"** →
|
||||
[`docs/snapshot-store.md`](docs/snapshot-store.md).
|
||||
- **"What is the job queue, as a general idea?"** →
|
||||
[`docs/jobq.md`](docs/jobq.md) (operator-facing, no hive-c0re specifics).
|
||||
- **"How does the rebuild queue work? What are the concrete step kinds,
|
||||
queue sources, scheduler internals?"** →
|
||||
[`docs/coordinator.md`](docs/coordinator.md).
|
||||
- **"How does the CI runner work? What's the auto-registration flow?"** →
|
||||
[`docs/ci.md`](docs/ci.md).
|
||||
- **"What is `/knowledge`? How does the hive-wide knowledge repo sync,
|
||||
and how do I contribute a document?"** →
|
||||
[`docs/knowledge.md`](docs/knowledge.md).
|
||||
- **"How do I export Claude Code metrics (tokens, cost, tool calls) to
|
||||
a Prometheus/Grafana collector? What OTEL options are available?"** →
|
||||
[`docs/observability.md`](docs/observability.md).
|
||||
- **"What does a PR review verdict actually gate? Should a reviewer
|
||||
wait for CI before approving? What does arming auto-merge commit an
|
||||
operator to?"** → [`docs/pr-review-gate.md`](docs/pr-review-gate.md).
|
||||
**[`docs/README.md`](docs/README.md) is the single index** — grouped by topic
|
||||
(getting started, agent lifecycle, trust boundary, integrations, networking,
|
||||
scheduler, process). Read it instead of a second copy here; this file used to
|
||||
carry its own parallel "Reading paths" list, and the two drifted out of sync
|
||||
with each other.
|
||||
|
||||
## Conventions & process
|
||||
|
||||
The docs below own the details — this section just points at them.
|
||||
|
||||
- **Commit style, naming, identity, reconcile verb:** →
|
||||
[`docs/conventions.md`](docs/conventions.md).
|
||||
- **Never add `#[allow(clippy::…)]`** — fix the lint instead (extract a
|
||||
helper, add backticks, etc.). Details + worked examples: →
|
||||
[`docs/conventions.md`](docs/conventions.md#building--local-checks).
|
||||
- **NixOS / nspawn quirks** (bind mounts, conf flags, etc.): →
|
||||
[`docs/gotchas.md`](docs/gotchas.md).
|
||||
- **Turn loop, sentinels (rate-limit, auth-failed), context
|
||||
window:** → [`docs/turn-loop/`](docs/turn-loop/README.md).
|
||||
- **Two-step spawn, approval flow, flake.lock validation:** →
|
||||
[`docs/approvals.md`](docs/approvals.md).
|
||||
[`docs/process/conventions.md`](docs/process/conventions.md#building--local-checks).
|
||||
- **Pre-push lint hook** (catches tracker-tag and comment-block failures
|
||||
before CI does — install once per clone):
|
||||
`ln -sf ../../scripts/pre-push .git/hooks/pre-push`
|
||||
|
|
|
|||
Loading…
Reference in a new issue