Skip to content

std.compute.coordination

Janus now ships std.compute.coordination, a CPU-first planner for civilian multi-agent coordination.

The initial surface includes:

  • AgentState, WorkZone, Obstacle, and PlanConfig
  • GaussianKernel, gaussian_at, and field_at
  • AgentReadiness, agent_stale_ticks, agent_memory_remaining_ticks, agent_memory_valid, agent_readiness, and agent_can_travel for memory-age, freshness-budget, and readiness preflight
  • CandidateFacts, zone_idle_ticks, travel_time, candidate_facts, and candidate_status, including the public COORD_UNREACHABLE_TRAVEL_TIME sentinel for stopped agents
  • ZoneReadiness, zone_readiness, and zone_blocked hard-obstacle preflight for explainable zone rejection
  • score_candidate and deterministic plan_greedy
  • Assignment rows with explicit CoordStatus and AgentMode
  • assignment query/stats/health helpers for row rejection/conflict checks, status buckets, normalized planner-output rates, compact health classification, and agent/zone lookup
  • DecisionFrame plus encode/decode helpers for STL inline effects
  • DecisionLedger replay reducers and total-row, rows-per-frame, and assignment/rejected/conflict/stale-agent-rate helpers for decoded decision-frame streams, plus replay tick-span reporting
  • std.compute.coordination_stl event shaping for STL producers
  • LSM-backed STL proof coverage for append, lookup, decode, replay, and flush
  • CoordCell plus a canonical JCK1 key codec for read-heavy LMX catalogs
  • deterministic 3x3 CoordCell neighborhood helpers for nearby catalog reads

The design deliberately keeps storage out of the hot loop. Use the planner for bounded, allocation-free assignment; use LSM-backed STL for replayable decision records; use DecisionLedger to summarize decoded frames; use decision_frame_total_rows / decision_ledger_total_rows as dashboard denominators; use decision_ledger_rows_per_frame for replay load; use decision_ledger_tick_span to report replay-window width; use agent_stale_ticks, agent_memory_remaining_ticks, agent_readiness, agent_can_travel, CandidateFacts, candidate_status, and COORD_UNREACHABLE_TRAVEL_TIME for preflight/explainability rows; use assignment query/stats helpers to inspect planner output, compute normalized live-buffer rates, track normalized replay conflict and stale-memory pressure, and classify planner or replay state as CoordHealth; rejected-rate helpers expose the complement to assignment success in both live planner stats and decoded replay ledgers; use zone_readiness or zone_blocked to explain hard obstacle rejection before planning; use CoordCell keys and neighborhood windows when read-heavy field-map and zone-index lookups move into LMX. The planner still does not open or mutate an LMX store. Ready agents with no safe unassigned zone now report unsafe_assignment, so hard-safety rejection is not hidden as a generic no_candidate. assignment_rejected and assignment_conflict expose the same row-level semantics used by the stats and decision-frame reducers.

The proof gate is:

Terminal window
./scripts/zb test-coordination
./scripts/zb test-coordination-stl
./scripts/zb test-coordination-stl-lsm

This release also aligns the coordination work with the existing Gaussian splat :compute direction: Gaussian kernels are shipped here as generic influence fields for coverage, drift, and avoidance. Renderer-specific splat physics remains a separate pathfinder under std.spatial.gaussian and std.compute.splat_pipeline.