Skip to content

fix: report accurate swarm directive progress - #61

Merged
christopherjnelson merged 1 commit into
mainfrom
fix/swarm-progress-observability
Sep 20, 2026
Merged

christopherjnelson merged 1 commit into
mainfrom
fix/swarm-progress-observability

Conversation

@christopherjnelson

Copy link
Copy Markdown
Member

What this changes

  • Record each worker's position before the prior tick's physical action, so the next observation can identify movement toward a directive target.
  • Report at-target when a worker reaches its directive target, including when it waits there. Report Zero's worker status from actual position change instead of treating every accepted action as progress.
  • Add focused offline regressions for move-to-target and wait-at-target observations. The worker action policy, deterministic stall/replan trigger, Zero cadence, and simulated-player behavior are unchanged.

Evidence from the 25-tick export

The supplied complete, all-agent export is zero-swarm-v1 with eight agents, casual-cleaner, and 25 committed ticks. All eight agents survived. Workers made 87 moves, 22 infections, and 66 waits (including three fallback waits). Zero made nine moves, nine infections, and seven waits. There were 31 accepted infections and eight cleaner disinfections, leaving 23 infected cells. The cleaner moved 17 times and had eight blocked cleans.

All 175 retained worker observations said directiveProgress: stalled, including moves that reduced target distance. The service saved each worker's post-action cell as previousCell, making the next observation compare a cell with itself. The prior Zero projection also labeled any accepted worker action, including a wait, as advancing.

In 84 of 175 worker decisions, the assigned target was already the worker's current cell; in 83, it was adjacent. All 87 worker moves reduced target distance. Sixty-three successful Jev waits occurred at the target; 60 of those had an expand directive on a friendly infected cell. These counts suggest short targets followed by waits until replanning, but this PR does not change that policy before a paired live comparison.

There were 194 retained provider attempts: 19 OpenRouter Zero attempts and 175 TypeSafe Jev attempts. One Zero plan fell back on tick 18 after malformed JSON; three Jev decisions fell back on ticks 1, 6, and 10 because their probability distributions were incomplete or inconsistent. Provider-reported OpenRouter cost was 0.113722785 credits. TypeSafe monetary cost is unknown from this export. The 1.863722785-credit admission exposure includes a 0.01-credit reservation for each of the 175 unknown-cost TypeSafe attempts and is not a bill.

This casual-cleaner run had no captures, so it cannot establish survival under trail-hunter-v1 pressure. It also cannot establish whether Jev beats deterministic worker selection. That requires paired live A/B inputs after this progress telemetry is corrected.

Validation

The repository owner ran the local validation gate:

pnpm validate
pnpm test:e2e

No paid provider benchmark is part of this PR or CI.

@christopherjnelson
christopherjnelson marked this pull request as ready for review September 20, 2026 20:50
@christopherjnelson
christopherjnelson merged commit ab47a54 into main Sep 20, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant