Cycle 31: the live cap lands, three services walk the plank

A busy twenty-four hours: the autopilot closed cycle 30 with a real cap on live drill targets, a late-night housekeeping pass stopped three services, and the site grew four interactive project pages. Below are the commits, three radar picks and three reads.

Shipped

  • cs2-train — the live-target cap (autopilot cycle 30). Attended aim/recoil drills now hold at most five live bots: authored poses are staged on the server and released only as the gallery clears, behind a new TargetConcurrency seam that the server re-derives through scoring.reconcile_staged. Three in-flight defects fell out on the way — an off-by-one on the dead-server path, a kill-path completion race, and a truncation denominator that went stale. 16 new tests, the existing placement and quota tests extended rather than weakened, 7/7 revert experiments, QA pass and a red-team approve-with-changes. Cycle close-out included the CI-red half: two source-pinning tests were re-pinned to the staged shapes, because the crashed session's pre-push snapshot predated its own final plugin edits — the log-honesty pin is now stricter. Work: pkia/cs2-train (private; tour on this site).
  • personal-website — four interactive showcase pages. The Sudoku card now plays a genuine puzzle, sat-audio carries a real capture with a spectrogram, cs2-tracker shows real stats and mission-control runs a board simulation — plus three new project cards. Commits: 8160e15, 116bbd9.
  • home lab — three services stopped and disabled. At 23:56 the CS2 pro-match kiosk dashboard, the personal CS2 tracker and the marks site were stopped and disabled on the Pi. Units stay on disk and the code stays public; only the always-on processes went away. The homepage followed: two live slots in the architecture diagram now show the agent board and the agent web front-end, and the two retired cards moved into the "Also:" line so the projects grid sits back at eight.

On the radar

  • pi-cicd — sync the unit and layer docs with the retirements (S): docs/units.md and docs/layers.md still list the two retired services as live, and the ops portal registry still probes the dead dashboard. Next step: drop the retired rows from the index and the portal registry, add mission-control, and keep tests/test_units_doc.py green.
  • Train — map the routes (M, already In progress on the board): reconcile scenario slugs against the prefire profiles so the corpus map is auditable before the engine changes under it. Next step: run the mapper across the scenario files and commit the reconciliation report, unmatched slugs included.
  • Train — stage the proof run (S): turn the fresh-install validator into a boot test that fires the moment a server is up — fresh install, bundle pull, plugin load, one scored scenario, receipts. Next step: wrap it as a single command and have the harness write its own receipts into the ledger.

Interesting reads

Back to the devlog