Files
Dragan SpiridonovandRuflo & AQE 31c288db71 fix(console): bound CLI numbers at the reader, keep unreadable counts visible, and a resume by Claude keeps hand-out counts
Leftovers of #3817/#3822 and #3818/#3823.

Numbers from CLI JSON (#3822). JSON.parse('1e999') is Infinity; a count can
also be negative, fractional or absurd. Bounded where read with data/safe.ts
countOf / ratioOf and a new measureOf (finite, within +-1e12):
- secure.ts scanReader: every severity count and the total are at least
  the listed findings, so a summary never reads CLEAN beside a listed
  finding. A count or total the tool printed but no reader can trust stays
  UNKNOWN (SecFindings.unreadable / isTotalUnknown), with the listed
  findings only as its lower bound: "critical ?" / "high ≥2 ?",
  "? findings (total unreadable)", COUNTS UNREADABLE. securityBand() is the
  one rule for the band (views/bar.ts) and the menu badge (menu-style.ts):
  it warns on high/critical ("N+" when anything is unknown) and on any
  unknown count or total. Threat confidence via ratioOf, composition score via measureOf.
  The verdict-exit judgement (#3934, SCAN_FOUND/countsWith) is unchanged.
- Same class swept in perf.ts, mh-lab.ts (labLines cells, gepa chars,
  genome ids, receipts), neural.ts, memory-lines.ts,
  data/evolve.ts, data/research.ts and data/cli.ts.

Mission resume (#3823). setPaused takes who resumed. The mission-resume
palette entry built inside Claude's console_run (state.control.viaModel)
resumes as 'model': hand-out counts are kept and an advisor stop-the-line
is not re-opened, so an exhausted task gets no new billed hand-out. The
person's resume (page buttons, palette, a typed /ruflo run) still gives
every task its hand-outs back.

Co-Authored-By: Ruflo & AQE
Claude-Session: https://claude.ai/code/session_01CGoza3gyxBjpaiMPhGHcHs
2026-10-10 10:57:58 -04:00
..
2026-10-07 18:10:29 -04:00