docs+comments: say what changed instead of tagging the tracker item
The prose added by this branch named the tracker item in seventeen places, which check-issue-refs.sh rejects: a `#N` tag is dead weight for anyone reading the public mirror, where no issue data exists. Each one now states the fact it was pointing at — the parent field is gone — so the sentence stands on its own. Two of those lines also carried a rustdoc break: `[`write`]` in topology.rs is ambiguous between the module's own `write` fn and the `write!` macro, which `-D rustdoc::broken-intra-doc-links` fails. Spelled `[`write()`]`, per rustdoc's own suggestion. The host_config.rs rewrite is two lines rather than three so the doc block stays under check-comment-blocks.sh's 30-line ceiling.
This commit is contained in:
parent
179f873722
commit
336ed5a010
10 changed files with 28 additions and 28 deletions
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
<!-- vale write-good.Passive = NO -->
|
<!-- vale write-good.Passive = NO -->
|
||||||
|
|
||||||
Agents are a **flat set**, with no parent/child tree: #4472 removed the
|
Agents are a **flat set**, with no parent/child tree: the `parent` field
|
||||||
`parent` field `topology.json` used to carry, and every mechanism that
|
`topology.json` used to carry is gone, along with every mechanism that
|
||||||
read it. The capability store scopes which agents can manage which
|
read it. The capability store scopes which agents can manage which
|
||||||
others; a tree position no longer scopes anything.
|
others; a tree position no longer scopes anything.
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ agent's `state` read-write and `config` read-only; never `harness`). An
|
||||||
agent holding no capability sees its own dirs and nothing else. See
|
agent holding no capability sees its own dirs and nothing else. See
|
||||||
[`persistence.md`](persistence.md)'s _Cross-agent access to state._
|
[`persistence.md`](persistence.md)'s _Cross-agent access to state._
|
||||||
|
|
||||||
### Reading the pre-#4472 format
|
### Reading the legacy format
|
||||||
|
|
||||||
`topology.json` used to be a map of `name → parent | null`. The reader
|
`topology.json` used to be a map of `name → parent | null`. The reader
|
||||||
still accepts that shape and keeps its keys, so a hive upgrading across
|
still accepts that shape and keeps its keys, so a hive upgrading across
|
||||||
|
|
|
||||||
|
|
@ -344,8 +344,8 @@ The RW on `state` is deliberate, not an oversight: the holder recovers
|
||||||
other agents, which includes writing into their state (for example
|
other agents, which includes writing into their state (for example
|
||||||
seeding notes, clearing a stuck sentinel) as well as reading it.
|
seeding notes, clearing a stuck sentinel) as well as reading it.
|
||||||
|
|
||||||
This is the **only** cross-agent mount. #4472 removed the topology
|
This is the **only** cross-agent mount. Dropping the topology parent
|
||||||
parent field, and with it the unconditional grant every agent used to
|
field took with it the unconditional grant every agent used to
|
||||||
get over its own direct children — an agent holding no capability now
|
get over its own direct children — an agent holding no capability now
|
||||||
sees its own dirs and nothing else.
|
sees its own dirs and nothing else.
|
||||||
|
|
||||||
|
|
@ -395,8 +395,8 @@ Contents:
|
||||||
- `topology.json` — the agent roster (`["alice", "bob", "ruth"]`).
|
- `topology.json` — the agent roster (`["alice", "bob", "ruth"]`).
|
||||||
Written by `topology::reconcile` on every meta sync; read by
|
Written by `topology::reconcile` on every meta sync; read by
|
||||||
`topology::all_agents`, which is the set the `ManageRootAgent`
|
`topology::all_agents`, which is the set the `ManageRootAgent`
|
||||||
capability grants mounts over. Carried a `parent` per agent until
|
capability grants mounts over. Carried a `parent` per agent in the
|
||||||
#4472; the reader still accepts that shape and keeps its keys.
|
legacy format; the reader still accepts that shape and keeps its keys.
|
||||||
- `tool-groups.json` — per-agent MCP tool group grants
|
- `tool-groups.json` — per-agent MCP tool group grants
|
||||||
(`{ "alice": ["messaging", "inbox", "execution"] }`). Written by
|
(`{ "alice": ["messaging", "inbox", "execution"] }`). Written by
|
||||||
`tool_groups::set_groups`; injected as `HIVE_TOOL_GROUPS` env
|
`tool_groups::set_groups`; injected as `HIVE_TOOL_GROUPS` env
|
||||||
|
|
|
||||||
|
|
@ -89,8 +89,8 @@ angle-bracket and asterisk shapes below are structurally safe.
|
||||||
inbox view; no agent ever `recv`'s them.
|
inbox view; no agent ever `recv`'s them.
|
||||||
|
|
||||||
`<parent>` and `<children>` were two more, resolved against a
|
`<parent>` and `<children>` were two more, resolved against a
|
||||||
`topology.json` parent field. #4472 removed that field and both
|
`topology.json` parent field. That field and both sentinels no longer
|
||||||
sentinels with it: address `operator` where you would have said
|
exist: address `operator` where you would have said
|
||||||
`<parent>`, and name the recipients (or broadcast to `*`) where you
|
`<parent>`, and name the recipients (or broadcast to `*`) where you
|
||||||
would have said `<children>`. Nothing rewrites a recipient at send time
|
would have said `<children>`. Nothing rewrites a recipient at send time
|
||||||
any more — what an agent passes is what the broker stores.
|
any more — what an agent passes is what the broker stores.
|
||||||
|
|
|
||||||
|
|
@ -59,8 +59,8 @@ surfaces, not tab panes.
|
||||||
**C0NTAINERS** — live containers rendered as a flat,
|
**C0NTAINERS** — live containers rendered as a flat,
|
||||||
alphabetically-sorted list. The renderer still walks
|
alphabetically-sorted list. The renderer still walks
|
||||||
`ContainerView.parent` for a depth-first tree with ASCII glyphs
|
`ContainerView.parent` for a depth-first tree with ASCII glyphs
|
||||||
(`├─`, `└─`, `│ ` continuation columns), but #4472 removed that field,
|
(`├─`, `└─`, `│ ` continuation columns), but that field no longer
|
||||||
so every row sits at depth 0 and the renderer paints no glyph. The tree
|
exists, so every row sits at depth 0 and the renderer paints no glyph. The tree
|
||||||
sorts alphabetically;
|
sorts alphabetically;
|
||||||
roots likewise. The tree tolerates cycles in the parent graph —
|
roots likewise. The tree tolerates cycles in the parent graph —
|
||||||
it appends orphaned containers (not reachable from any root)
|
it appends orphaned containers (not reachable from any root)
|
||||||
|
|
@ -981,7 +981,7 @@ identically.)
|
||||||
|
|
||||||
### Topology tree
|
### Topology tree
|
||||||
|
|
||||||
⚠️ **Dormant since #4472,** which removed `ContainerView.parent`:
|
⚠️ **Dormant now that `ContainerView.parent` no longer exists:**
|
||||||
`buildAgentTree` now puts every container at depth 0 and the rules below are
|
`buildAgentTree` now puts every container at depth 0 and the rules below are
|
||||||
all no-ops — the list renders flat. The walk and the prefix painting are
|
all no-ops — the list renders flat. The walk and the prefix painting are
|
||||||
still in `swarm.js`; retiring them falls to the frontend owner rather
|
still in `swarm.js`; retiring them falls to the frontend owner rather
|
||||||
|
|
@ -1032,8 +1032,8 @@ frosted-mauve bar slides up from the bottom of the viewport
|
||||||
- `DESTR0Y` / `PURG3` — always available
|
- `DESTR0Y` / `PURG3` — always available
|
||||||
<!-- vale write-good.Passive = YES -->
|
<!-- vale write-good.Passive = YES -->
|
||||||
|
|
||||||
#4472 removed the `M0V3` picker that used to sit here — an agent has
|
The `M0V3` picker that used to sit here no longer exists — an agent
|
||||||
no parent to move it to any more.
|
has no parent to move it to any more.
|
||||||
- **`✕ clear`** button + `Esc` key clear the entire selection.
|
- **`✕ clear`** button + `Esc` key clear the entire selection.
|
||||||
|
|
||||||
Every render prunes stale selections (agents destroyed while
|
Every render prunes stale selections (agents destroyed while
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ pub fn check_send_allowed(to: &str) -> Result<(), String> {
|
||||||
//
|
//
|
||||||
// This bypass used to be spelled `<parent>`, which the broker
|
// This bypass used to be spelled `<parent>`, which the broker
|
||||||
// resolved per `topology.json` and which fell back to `operator`
|
// resolved per `topology.json` and which fell back to `operator`
|
||||||
// for a root agent. #4472 removed the parent field, so every
|
// for a root agent. The parent field is gone now, so every
|
||||||
// agent is what that fallback called a root — the exemption is
|
// agent is what that fallback called a root — the exemption is
|
||||||
// now written as the name it always resolved to. Same reachable
|
// now written as the name it always resolved to. Same reachable
|
||||||
// set, one fewer indirection.
|
// set, one fewer indirection.
|
||||||
|
|
|
||||||
|
|
@ -282,7 +282,7 @@ trait Surface {
|
||||||
/// of a container: this is where a turn failure or a plugin-install
|
/// of a container: this is where a turn failure or a plugin-install
|
||||||
/// failure surfaces when nothing inside the harness can act on it.
|
/// failure surfaces when nothing inside the harness can act on it.
|
||||||
///
|
///
|
||||||
/// Was `<parent>` before #4472, a sentinel the broker resolved per
|
/// Was `<parent>` while the hierarchy existed, a sentinel the broker resolved per
|
||||||
/// `topology.json` and which already fell through to `operator` for a
|
/// `topology.json` and which already fell through to `operator` for a
|
||||||
/// root agent. With the parent field gone every agent takes that
|
/// root agent. With the parent field gone every agent takes that
|
||||||
/// branch, so the recipient is written out rather than resolved.
|
/// branch, so the recipient is written out rather than resolved.
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
//! **There is no hierarchy here any more.** The file used to be a map of
|
//! **There is no hierarchy here any more.** The file used to be a map of
|
||||||
//! `name → parent | null` and this module owned the parent/child tree that
|
//! `name → parent | null` and this module owned the parent/child tree that
|
||||||
//! fed `<parent>` / `<children>` routing, the reparenting API and the
|
//! fed `<parent>` / `<children>` routing, the reparenting API and the
|
||||||
//! dashboard's tree view. All of that is gone (#4472); what the file is
|
//! dashboard's tree view. All of that is gone; what the file is
|
||||||
//! *for* now is the one thing that survived the removal — naming every
|
//! *for* now is the one thing that survived the removal — naming every
|
||||||
//! agent, which is the set a
|
//! agent, which is the set a
|
||||||
//! [`hive_sh4re::permissions::Capability::ManageRootAgent`] holder gets
|
//! [`hive_sh4re::permissions::Capability::ManageRootAgent`] holder gets
|
||||||
|
|
@ -28,8 +28,8 @@ pub fn topology_path() -> PathBuf {
|
||||||
crate::paths::meta_root().join(TOPOLOGY_FILE)
|
crate::paths::meta_root().join(TOPOLOGY_FILE)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// On-disk shapes [`read`] accepts. The array is what [`write`] emits; the
|
/// On-disk shapes [`read`] accepts. The array is what [`write()`] emits; the
|
||||||
/// map is the pre-#4472 `name → parent | null` format, kept readable so a
|
/// map is the legacy `name → parent | null` format, kept readable so a
|
||||||
/// hive that upgrades across this change keeps its roster instead of
|
/// hive that upgrades across this change keeps its roster instead of
|
||||||
/// blanking it until the next `reconcile` pass — and a blank roster is not
|
/// blanking it until the next `reconcile` pass — and a blank roster is not
|
||||||
/// a cosmetic gap, it is every `ManageRootAgent` holder losing its mounts
|
/// a cosmetic gap, it is every `ManageRootAgent` holder losing its mounts
|
||||||
|
|
@ -204,7 +204,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The upgrade path. A hive whose `topology.json` still carries the
|
/// The upgrade path. A hive whose `topology.json` still carries the
|
||||||
/// pre-#4472 `name → parent` map must read as the same roster, parent
|
/// legacy `name → parent` map must read as the same roster, parent
|
||||||
/// values discarded — otherwise the first read after the upgrade hands
|
/// values discarded — otherwise the first read after the upgrade hands
|
||||||
/// `ManageRootAgent` holders an empty mount set.
|
/// `ManageRootAgent` holders an empty mount set.
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
||||||
|
|
@ -862,8 +862,8 @@ async fn run_deploy_tail(
|
||||||
/// flake affects — the fan-out set for `MetaUpdate` DAGs. Empty
|
/// flake affects — the fan-out set for `MetaUpdate` DAGs. Empty
|
||||||
/// `inputs` or any input under `hyperhive` → every container;
|
/// `inputs` or any input under `hyperhive` → every container;
|
||||||
/// otherwise just the agents named by `agent-<name>` inputs.
|
/// otherwise just the agents named by `agent-<name>` inputs.
|
||||||
/// Sorted by name — #4472 removed the parent field the old depth sort
|
/// Sorted by name — the parent field the old depth sort keyed on is
|
||||||
/// keyed on, and with every agent a root that sort already reduced to
|
/// gone, and with every agent a root that sort already reduced to
|
||||||
/// this.
|
/// this.
|
||||||
///
|
///
|
||||||
/// `inputs` is the caller-supplied flake-input-name list (the dashboard's
|
/// `inputs` is the caller-supplied flake-input-name list (the dashboard's
|
||||||
|
|
|
||||||
|
|
@ -92,8 +92,8 @@ fn config_bind_source(name: &str) -> PathBuf {
|
||||||
/// directories so nspawn doesn't refuse to start; missing dirs are
|
/// directories so nspawn doesn't refuse to start; missing dirs are
|
||||||
/// non-fatal.
|
/// non-fatal.
|
||||||
///
|
///
|
||||||
/// The only caller left is the `ManageRootAgent` grant — #4472 removed the
|
/// The only caller left is the `ManageRootAgent` grant; the parent/child
|
||||||
/// parent/child tree that used to hand every agent its own children here.
|
/// tree that handed every agent its own children here is gone.
|
||||||
///
|
///
|
||||||
/// **Three dirs, three different answers** — the uniformity of the
|
/// **Three dirs, three different answers** — the uniformity of the
|
||||||
/// original loop is what hid that:
|
/// original loop is what hid that:
|
||||||
|
|
@ -335,8 +335,8 @@ async fn set_nspawn_flags(
|
||||||
// now says so out loud instead of deriving it from a field that no
|
// now says so out loud instead of deriving it from a field that no
|
||||||
// longer discriminates.
|
// longer discriminates.
|
||||||
//
|
//
|
||||||
// This is the *only* cross-agent mount left. #4472 dropped the
|
// This is the *only* cross-agent mount left. Dropping the topology
|
||||||
// topology parent field, and with it the unconditional grant every
|
// parent field took with it the unconditional grant every
|
||||||
// agent used to get over its own direct children — so an agent with
|
// agent used to get over its own direct children — so an agent with
|
||||||
// no capability now sees its own dirs and nothing else.
|
// no capability now sees its own dirs and nothing else.
|
||||||
if crate::capabilities::has_cap(agent_name, Capability::ManageRootAgent) {
|
if crate::capabilities::has_cap(agent_name, Capability::ManageRootAgent) {
|
||||||
|
|
|
||||||
|
|
@ -267,8 +267,8 @@ pub async fn run(coord: Arc<Coordinator>) -> Result<()> {
|
||||||
|
|
||||||
let current_rev = current_flake_rev(&coord.hyperhive_flake);
|
let current_rev = current_flake_rev(&coord.hyperhive_flake);
|
||||||
|
|
||||||
// Resolve container names to logical agent names, then sort. #4472
|
// Resolve container names to logical agent names, then sort. The
|
||||||
// removed the parent field this used to depth-sort by; with no
|
// parent field this used to depth-sort by is gone; with no
|
||||||
// hierarchy left to respect, alphabetical is the whole order — and it
|
// hierarchy left to respect, alphabetical is the whole order — and it
|
||||||
// is exactly what the depth sort already produced once every agent
|
// is exactly what the depth sort already produced once every agent
|
||||||
// was a root.
|
// was a root.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue