From 3f41e7a09c32bae288d289a6e3a98820cc63210e Mon Sep 17 00:00:00 2001 From: iris Date: Mon, 7 Sep 2026 14:50:12 +0200 Subject: [PATCH] docs: drop redundant hyphens from -ly adverb + adjective/participle compounds Fixes 22 of 23 Microsoft.Hyphens hits: an adverb ending in -ly doesn't need a hyphen to the word it modifies (minimally scoped, currently running, deliberately stopped, ...) -- the -ly ending already unambiguously signals it's modifying the following word, so the hyphen is redundant per Microsoft style. Left one hit alone: docs/web-ui/dashboard.md's 'checked-not-originally- active' is a single 4-word compound designator (parallel structure with 'unchecked-was-active' right before it in the same sentence, describing a diffing algorithm's two possible states), not an ordinary -ly-adverb modifier -- dropping just the one hyphen vale flagged would have broken the compound into a dangling 'checked-not-originally active' fragment. Also rewrote docs/scheduler/coordinator.md's 'still-fully-queued' as a predicate ('DAGs that are still fully queued') rather than leaving a similar broken partial-hyphen chain, since 'still' and 'fully' are both plain adverbs with no reason to hyphenate at all once dehyphenated consistently. Verified via vale: only the one deliberately-left hit remains. --- docs/agent-lifecycle/persistence.md | 6 +++--- docs/integrations/forge.md | 4 ++-- docs/integrations/github.md | 2 +- docs/integrations/knowledge.md | 2 +- docs/scheduler/coordinator.md | 10 +++++----- docs/scheduler/jobq.md | 2 +- docs/scheduler/observability.md | 2 +- docs/tools/hivectl.md | 4 ++-- docs/trust-boundary/security.md | 2 +- docs/web-ui/dashboard.md | 10 +++++----- docs/web-ui/design-guide.md | 2 +- 11 files changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/agent-lifecycle/persistence.md b/docs/agent-lifecycle/persistence.md index a7c510f2..812de3e2 100644 --- a/docs/agent-lifecycle/persistence.md +++ b/docs/agent-lifecycle/persistence.md @@ -111,7 +111,7 @@ One table: The harness both writes and vacuums it — this used to be a host-side sweep, but hive-c0re runs as the unprivileged `hive-core` user under privsep and can't delete agent-owned files (host-side deletes hit -`PermissionDenied` on the bash-task trio and a readonly-database error +`PermissionDenied` on the bash-task trio and a readonly database error here), so cleanup moved in-container. `hive-agent`'s `vacuum::run` (`hive-agent/src/vacuum.rs`) sweeps hourly. Retention is **type-scoped**: it deletes only the verbose `stream` rows (the raw @@ -297,7 +297,7 @@ Under `/var/lib/hyperhive/agents//`: `hive-forge-notify` — upsert keyed todos here over the harness's in-agent socket, `HIVE_AGENT_SOCKET`; the harness merges them into `get_loose_ends` output and clears a row on `mark_todo_done`). - Replaces three formerly-separate files + Replaces three formerly separate files (`hyperhive-todos.sqlite`, `hyperhive-reminders.sqlite`, and the old file-based `mcp-loose-ends/` scanner before that) — a one-time boot migration (`db_migrate::run`) folds the legacy files into this @@ -506,7 +506,7 @@ reinstall. The harness runs as a per-agent unix user inside the container (`hyperhive.user.name`, defaults to the agent's logical label so each -container has a uniquely-named user). Operators with legacy root-owned +container has a uniquely named user). Operators with legacy root-owned state dirs need a one-time data shuffle so they don't lose their claude session. diff --git a/docs/integrations/forge.md b/docs/integrations/forge.md index 58e38826..4b7dd979 100644 --- a/docs/integrations/forge.md +++ b/docs/integrations/forge.md @@ -128,7 +128,7 @@ Forge's own read-state is thus the durable, cross-rebuild record of what's been delivered; there is **no persisted cursor**. **Gotcha:** don't reintroduce a persisted dedup cursor here. A design -that leaves threads unread and tracks delivery via a separately-persisted +that leaves threads unread and tracks delivery via a separately persisted cursor is fragile — losing that cursor across a rebuild re-delivers the agent's entire still-unread backlog as a flood of fresh wakes. Forge's own read-state is the only durable record this design needs. @@ -187,7 +187,7 @@ silently (mark-read without delivery): `own_login` is fetched at startup via `GET /api/v1/user`. On fetch failure the filter degrades open (no filtering) rather than crashing -the task — a noisy inbox beats a silently-stuck poller — but the fetch +the task — a noisy inbox beats a silently stuck poller — but the fetch is **re-attempted on each poll tick** until it succeeds, so a boot-time failure (the forge not yet reachable) self-heals instead of leaving self-echo filtering off for the whole process lifetime. diff --git a/docs/integrations/github.md b/docs/integrations/github.md index 2bb62063..f0f83fd4 100644 --- a/docs/integrations/github.md +++ b/docs/integrations/github.md @@ -51,7 +51,7 @@ credential-injection path as forge/matrix tokens. See ## Security - Use a **dedicated bot account**, never a human's. -- Mint a **minimally-scoped PAT** — only the repos/scopes the agent's +- Mint a **minimally scoped PAT** — only the repos/scopes the agent's workflow needs. Agents have passwordless sudo, so a compromised or hallucinating agent can act as the account within the token's scopes; scope is the real blast-radius limiter, and the container boundary is diff --git a/docs/integrations/knowledge.md b/docs/integrations/knowledge.md index 82d1418f..8a24f72d 100644 --- a/docs/integrations/knowledge.md +++ b/docs/integrations/knowledge.md @@ -70,7 +70,7 @@ each call site. When a pull actually moves the local clone's `HEAD` (a real change, not a no-op — for example the periodic pull finding nothing new), hive-c0re -broadcasts a short notice to every currently-registered agent's inbox: +broadcasts a short notice to every currently registered agent's inbox: sender `system`, body `[system] /knowledge updated:` followed by a `git diff --stat ..` summary of what changed (or a generic "see the repo" fallback if computing the diff itself fails). This is diff --git a/docs/scheduler/coordinator.md b/docs/scheduler/coordinator.md index 9eece2ff..a911af7b 100644 --- a/docs/scheduler/coordinator.md +++ b/docs/scheduler/coordinator.md @@ -121,7 +121,7 @@ The `stop` / `start` power ops write the durable `wanted` intent via a head so intent-write + reconcile is atomic per-agent. `restart` is the exception: it writes _no_ intent (no `SetWanted` head) — it bounces the container and lets the tail `Reconcile` converge to the agent's existing `wanted`, so a -deliberately-stopped agent isn't forced back up by a hive-wide restart. The +deliberately stopped agent isn't forced back up by a hive-wide restart. The hive-wide power ops — `restart`, `stop`, and `start` — take an agent _list_: a hive-wide `hivectl restart` / `stop` / `start` is ONE DAG with a per-agent subgraph each (independent roots, run concurrently on their own leases), not @@ -158,8 +158,8 @@ reparent(moves): Reparent(moves) (no rebuild — topology.json is read live) Notable collapses: - **`rebuild` is one uniform shape** — no `was_running` branch. - `StopForUpdate` noops when already down; the tail `Reconcile` autanoops the - start when `wanted = Offline` (a rebuild of a deliberately-stopped agent + `StopForUpdate` noops when already down; the tail `Reconcile` autonoops the + start when `wanted = Offline` (a rebuild of a deliberately stopped agent leaves it stopped). - **The swap-failure recovery-start is structural**: `Reconcile` deps on `Swap` with the one `AfterAny` edge in the system — it runs after `Swap` @@ -264,7 +264,7 @@ Two consequences worth knowing: suppression across the build and tail, where a vanished container is still a real crash. -Among simultaneously-ready nodes competing for a resource, DAG-submit order +Among simultaneously ready nodes competing for a resource, DAG-submit order wins (FIFO) so bulk operations drain predictably. The scheduler also owns the DAG-lifetime transient guard (dashboard pill + crash-watch suppression), created on lease acquisition and dropped when the DAG settles terminal. @@ -279,7 +279,7 @@ Submit-time dedup was removed with the agent-per-node move (a multi-agent DAG has no single agent to key a dedup on), so every submit enqueues a fresh DAG; whether any dedup needs reintroducing is tracked as a follow-up. -Cancel only applies to still-fully-queued DAGs (an in-flight nix build isn't +Cancel only applies to DAGs that are still fully queued (an in-flight nix build isn't interruptible) — each op is one DAG now, so there are no child DAGs to cascade to. Roll-up state: `Failed` if any node failed, else `Running` / `Queued` / `Cancelled` / `Done`. The snapshot retains the 50 most recent terminal diff --git a/docs/scheduler/jobq.md b/docs/scheduler/jobq.md index 46a27c5f..e49b76e1 100644 --- a/docs/scheduler/jobq.md +++ b/docs/scheduler/jobq.md @@ -18,7 +18,7 @@ Two ideas are all there is to it: a big operation is really a short, ordered sequence — not a single black box that's either "done" or "not done." - **A step can need a shared resource**, which only so many steps can hold - at once (a "slot"). If every currently-running step already holds the + at once (a "slot"). If every currently running step already holds the slots it needs, a new step that wants the same one waits its turn — that's the whole reason things queue instead of all firing at once. diff --git a/docs/scheduler/observability.md b/docs/scheduler/observability.md index 31546a10..8f933e2b 100644 --- a/docs/scheduler/observability.md +++ b/docs/scheduler/observability.md @@ -360,7 +360,7 @@ hive-metric api_latency_ms 142.5 --type gauge --labels model=sonnet --labels tie When `services.hyperhive.otel.enable = false` (the default), the `OTEL_EXPORTER_OTLP_ENDPOINT` env var isn't set and `hive-metric` exits -with an informative error message. No silently-dropped metrics. +with an informative error message. No silently dropped metrics. ### Wire format diff --git a/docs/tools/hivectl.md b/docs/tools/hivectl.md index 6c27e533..16160400 100644 --- a/docs/tools/hivectl.md +++ b/docs/tools/hivectl.md @@ -106,7 +106,7 @@ hivectl github set-token damocles --token # inline (visible in shell hi - `set-token`: writes `/github-token` (`0600`, agent-owned) via hive-priv — the same credential-injection path as forge/matrix tokens. - The `gh` wrapper / git credential helper read it live, so a freshly-set + The `gh` wrapper / git credential helper read it live, so a freshly set or rotated PAT takes effect with no rebuild or restart. Refuses an empty token. See [github.md](../integrations/github.md) for the full flow + security notes. @@ -202,7 +202,7 @@ unit fail to start. **Declarative, not incremental**: each invocation replaces the agent's whole entry. `set-limits sock --memory-max 8G` leaves `sock` with _only_ -a memory override, reverting any previously-set CPU quota to the hive +a memory override, reverting any previously set CPU quota to the hive default. To avoid a forgotten flag silently wiping an override, a bare `set-limits ` with no flags is rejected — clearing requires the explicit `--reset`. diff --git a/docs/trust-boundary/security.md b/docs/trust-boundary/security.md index b843cbce..d6c5742b 100644 --- a/docs/trust-boundary/security.md +++ b/docs/trust-boundary/security.md @@ -91,7 +91,7 @@ handed it. hyperhive provisions and scopes its **own** per-agent forge + matrix tokens. It does **not** automatically sandbox or scope **external** credentials (GitHub PATs, cloud keys, third-party API tokens). The scope of an external -token is **operator-accepted risk**: if you drop a broadly-scoped GitHub token +token is **operator-accepted risk**: if you drop a broadly scoped GitHub token into an agent's config, that agent has exactly that reach, with no hyperhive layer narrowing it. Scope external tokens tightly at the source (the external provider) before handing them over. diff --git a/docs/web-ui/dashboard.md b/docs/web-ui/dashboard.md index a99088d2..d6b922ea 100644 --- a/docs/web-ui/dashboard.md +++ b/docs/web-ui/dashboard.md @@ -198,7 +198,7 @@ its queue-summary banner reads the much narrower `GET /api/jobq/rollup` instead (see Container row, below) — a handful of pre-tallied counts, not the graph. -**R3BU1LD QU3U3** — pending, in-flight, and recently-settled container +**R3BU1LD QU3U3** — pending, in-flight, and recently settled container operations: rebuilds, meta-update cascades, and first-spawns. One operation runs at a time; the worker drains FIFO. **Is a mounted `JobqGraph`** (the shared generic graph-viewer Preact component, @@ -255,7 +255,7 @@ concerns, so a narrow filter never reaches further back in time to compensate. Below the queue, a **live build-log panel** (`#rebuild-live-log`, -`renderRebuildLiveLog`) shows the currently-running rebuild's output +`renderRebuildLiveLog`) shows the currently running rebuild's output inline — collapsible, with a live/ok/fail badge and a `↓ raw` download. It's keyed to the first `Running` node (in wire order) whose `payload.data.build_log_id` is set — read from the `onUpdate` @@ -365,7 +365,7 @@ Provision a single per-agent GitHub personal access token (see [`docs/integrations/github.md`](../integrations/github.md) for the injection + `gh`/git-push mechanics). No login flow — the operator pastes an existing PAT for a dedicated bot account, with a security-warning banner (dedicated account + -minimally-scoped token) and a link to +minimally scoped token) and a link to [github.com/settings/tokens](https://github.com/settings/tokens). Status reads `GET /api/github-account?agent=` → @@ -550,7 +550,7 @@ body textarea that expands on focus, datetime-local pre-filled to 5 minutes from now, mini d/h/m/s number inputs (blank or all-zero = one-shot), description). Click `+` to POST to `/api/schedules` as JSON (or `⌫` to clear the half-filled row); -carry-state preserves partially-typed inputs across re-renders. The tab pill shows the count of active +carry-state preserves partially typed inputs across re-renders. The tab pill shows the count of active schedules (at least one live target not yet cancelled). Refreshed on tab activation and after each submit/cancel. Backed by `GET /api/schedules`. No backend changes for the table layout @@ -1268,7 +1268,7 @@ below — some endpoints aren't in it yet. `description` / `interval_seconds` clears the field (so a recurring schedule flips to one-shot when `interval_seconds` is sent as `null`). `targets_add` is replace-on-conflict: - re-adding a previously-cancelled target drops the tombstone + re-adding a previously cancelled target drops the tombstone and the target starts fresh (operator intent on re-add = "this target is active again"). `targets_remove` delegates to the same path as `cancel_targets` — tombstones preserve diff --git a/docs/web-ui/design-guide.md b/docs/web-ui/design-guide.md index ef5de43b..d3f7d767 100644 --- a/docs/web-ui/design-guide.md +++ b/docs/web-ui/design-guide.md @@ -77,7 +77,7 @@ read that for the how. This section is the _policy_ layered on top: fix: a stylix-using operator has already made their choice. - **Light theme is accessibility, not a cosmetic extra.** Some people need light for contrast/low-vision reasons, others need dark for - photosensitivity — there's no universally-correct default. The OS + photosensitivity — there's no universally correct default. The OS preference (`prefers-color-scheme`) drives the default, with an explicit user override available, same shape as motion above.