Architecture — credit-driven, role-based

The current design, after the 2026-07 pivot (see the journey). The reframe: stop chasing perception modules and make the load-bearing decision which role, paid by marginal contribution. The agent is a small multi-layer cognition — heuristic execution, a disciplined skill menu, and one learned, credit-driven decision on top.

One idea runs through it. The team's native primitives are partition (own a region) and marginal credit (be paid for your unique contribution) — not the single-agent frontier + A* primitives the old stack was built from, which structurally fight connectivity and division of labour.

The three layers multi-layer cognition

L3 · Decision (learned) pick a role · a skill · a goal — from the belief L2 · Skills (library) disperse · relay-backbone · flock L1 · Controller + perception (scripted) greedy/A* move-to-goal · SLAM · λ̂₂ environment goal / skill / role behaviour move a_{i,t} belief b_{i,t}
The learned policy (L3) chooses a role/skill/goal from the belief; the skill layer (L2) names a behaviour; the scripted controller (L1) turns it into primitive moves and runs perception. Decisions flow down (blue); the belief flows up (orange). Only L2–L3 are learned.

L1 · Execution & perception heuristic · 0 learned params

Motion: A* to a goal cell, collision avoidance, and the relay controllers — hold (a static beacon that keeps the bridge from where it stands) and λ₂-anchor (actively climb local connectivity). Perception, always on: a SLAM / occupancy belief (the neighbour-fused map), a geodesic distance field over that belief (true reach cost with walls respected — not Euclidean), and a decentralized λ̂₂ (Fiedler) estimator — how load-bearing each agent is to the comm graph. These are capabilities, not choices: rich, always available, never selected.

L2 · Skills — the menu small & disciplined

The handful of behaviours the decision toggles between — a disciplined menu, not a flat pile:

L3 · The decision learned · credit-driven

One head picks each agent's role — explorer (CVT) vs relay — trained by per-agent marginal credit. Roles are load-bearing and self-sizing: a redundant relay earns ≈0 and flips to exploring, so the right relay count emerges per map instead of being an authored number. This is the deliberate reversal of the deprecated "roles emerge from a flat, homogeneous policy" proposal — our own experiments showed a homogeneous policy will not hold connectivity, because nothing chooses to hold.

The learned policy — a compact actor–critic CTDE

L2–L3 are one small network trained with MAPPO under CTDE: a shared actor mapping each agent's local observation to action logits, and a centralized critic that scores the global state during training only (discarded at deployment). The backbone is CNN local perception → GNN message-passing — the comm graph is the bridge along which agents fuse neighbours' features — pooled to a 64-d belief. That pooling makes it size-invariant: one network serves every world and team size.

local obs o_{i,t}: 5×H×W Actor π_θ CNN+GNN · 64d · ≈114k π_θ(·|o) 9 goal logits sample a_{i,t} global state s: 3×H×W Critic V_φ CNN · 64d · ≈39k V_φ(s) scalar value advantage Â_t = return − V_φ(s_t) → actor's loss
The actor (shared by all agents) turns a local observation into action probabilities; the critic turns the global state into one value (training only). Their gap is the advantage that scales the actor's update; the critic is discarded at deployment.

Size: ≈ 114k actor params (shared across all N agents) + ≈ 39k critic (training-only) ≈ 0.15 M — tiny, size-invariant, CPU-runnable. The full technical build-out — CNN/GNN internals, exact parameter tables, the composite training loss (policy + value + connectivity-aux + regularizers), the Lagrangian, and the adversarial threat model — is in the White Paper, §4.

The training signal — difference-reward credit the coverage lever

Each agent is paid its marginal contribution Di = G(team) − G(team without i), not one shared team reward. At cover_r = 0 that is the fresh cells only it covered (coverage) plus its Fiedler-centrality (connectivity). This is the coverage lever: it breaks the huddle (agents clumped — connectivity satisfied, coverage dead) into a sweep, +7 to +23 coverage points at 32²/10, 2–6× over a shared reward (see findings). Under CTDE the central critic still trains on the team return; only the policy advantage becomes per-agent.

Connectivity — soft, with a relay backbone no hard mask

Connectivity is held softly — a learned Lagrangian penalty on algebraic connectivity λ₂ — and never a hard action mask, on purpose: the research question is how connectivity breaks under a covert adversary, and a hard mask makes it unbreakable. Credit alone over-spreads and drops connectivity at scale (the new wall); a few explicit relays hold the graph so the rest cover freely. Planned: feed λ̂₂ as a decision input so the load-bearing agents know to hold — targeted holding, not a blunt global penalty (which only slides along the coverage↔connectivity frontier instead of moving it).

What changed from the deprecated design

Deprecated (the old stack)Current
Frontier — go to the edge of the knownCVT partition — own & rake a region
Shared team rewardDifference-reward credit (per-agent marginal)
Role head demoted / emerge-from-flat-policyRoles load-bearing, credit-driven, self-sizing
A* as the coverage motionA* demoted to transit + warm-start teacher; coverage = the rake
Hard connectivity maskSoft λ₂ + relay backbone (breakable — for the resilience study)
Perception-module chase (attention, occupancy, extra channels)Frozen — proven null levers

As built vs planned honest status

The spine: belief → per-agent credit → who explores vs who holds → a partition that covers while a backbone keeps the graph connected. Coverage is settled; the relay backbone and the last connectivity points are the active front. That same credit signal — each agent's marginal contribution — doubles as the resilience detector the covert-adversary study needs.