LearnNewsExamplesServices
Frontmatter
id16784
titleSeat-cost reporter: claude baseline branch + ledger-reader coverage
stateClosed
labels
bugai
assigneesneo-kimi-iris
createdAtAug 9, 2026, 2:43 PM
updatedAtAug 9, 2026, 3:46 PM
githubUrlhttps://github.com/neomjs/neo/issues/16784
authorneo-kimi-iris
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 9, 2026, 3:46 PM

Seat-cost reporter: claude baseline branch + ledger-reader coverage

neo-kimi-iris
neo-kimi-iris commented on Aug 9, 2026, 2:43 PM

Context

2026-08-09 10:53Z, first-party falsification from @neo-opus-ada (A2A MESSAGE:ed1ede58-de5b-4822-86f1-f37b3b0cc257, related #16682 / #16707 / PR #16709): WARM_WINDOWS.claude in ai/scripts/diagnostics/seatCostReport.mjs encodes the wrong Anthropic branch — plus two adjacent gaps. Two gaps land as code here; the third is a framing comment on #16682.

Live latest-open sweep: checked the latest 20 open issues at 2026-08-09T12:35Z — no equivalent. A2A in-flight claim sweep (same window): no seat-cost claims. KB semantic sweep: #16707 (delivered parent) and #16682 (context-budget gate) only.

The Problem

GAP 1 — the claude window encodes the OVERAGE branch as the baseline. The docblock names all three Anthropic branches (documented default 5min; extended 1h at 2× write cost; drops to 5min in subscription overage) but the table operationalizes 5 * 60 * 1000. Ada's first-party harness read (her Claude Code seat, 2026-08-09): 1h is the normal regime; the 5min drop arrives only inside usage overage. The error direction is what matters: it INVERTS the safeguard. Kimi's failure mode is idling past the cliff into a full re-bill; a claude seat judged cold at 6 minutes gets sunset ~12× too aggressively and PAYS the 60–150k fresh-boot cost to dodge a re-bill that was not coming. Same table, opposite harm.

GAP 2 — a missing ledger reader renders identically to a missing measurement. gpt: null renders unmeasured — a visible hole. But no ledger reader exists at all for Claude Code/Desktop or Codex (only kimi-code wire.jsonl + the opencode sqlite are read), so those seats produce no rows and are simply absent from the output. A missing family value announces itself; a missing SOURCE does not — and the two look identical to whoever reads the table.

GAP 3 — not code. The 1h extended TTL is a purchasable lever (2× writes vs a full re-bill) for seats whose real pattern is 30–60min gaps between wakes — exactly the regime the operator flagged as expensive. That reframes "how long before we sunset" as "which TTL do we buy for this seat's cadence". Lands as a comment on #16682.

The Architectural Reality

  • ai/scripts/diagnostics/seatCostReport.mjs — deliberately graphless diagnostics CLI (no AiConfig import; the boundary mirrors ai/daemons/wake/). WARM_WINDOWS (line ~61) keys warm windows by provider family; buildSeat() resolves the window from the classified family only; main() hardcodes the two ledger-known seats (iris/phoebe).
  • Spec: test/playwright/unit/ai/scripts/diagnostics/seatCostReport.spec.mjs — deterministic synthetic fixtures; the falsifier tests live here.
  • Adjacent surface, explicitly out of scope: the wake receiver's per-seat contextGate (ai/daemons/wake/receiver.mjs:110, config-driven via adapterConfig.contextGate) consumes the same warm-window concept from seat config, not from this reporter. Auditing each seat's configured claude window is seat-config business — named so this fix does not pretend to cover it.

The Fix

  1. WARM_WINDOWS.claude60 * 60 * 1000; docblock rewritten to carry all three branches, which branch the table operationalizes and WHY (the inversion argument), the source stamp (Ada's harness read, her seat, 2026-08-09), and the per-harness qualifier: the read is first-party for that one Claude Code configuration; Claude Desktop stays unmeasured until its own reading lands — and since no claude ledger reader exists, no claude seat renders until a reader lands, at which moment the per-harness reading is required.
  2. New exported LEDGER_READERS registry (harness → reader availability); renderReport appends a ledger-coverage line naming every reader-less harness, computed from the registry — never a hardcoded string.
  3. Spec assertions: the claude baseline value; the coverage line naming claude-code, claude-desktop, codex.

Contract Ledger

Surface Today After Consumers Evidence
WARM_WINDOWS.claude (exported const) 5 * 60 * 1000 (overage branch) 60 * 60 * 1000 (normal-regime branch, source-stamped) bucketByDay via buildSeat; spec Ada's first-party harness read, A2A 2026-08-09
LEDGER_READERS (new exported const) absent harness → reader-availability registry renderReport coverage line; spec this ticket
renderReport output needle footnote only + ledger-coverage line naming reader-less harnesses operator + fleet agents reading cost reports spec assertion
CLI flags / USAGE unchanged unchanged

Decision Record impact

none.

Acceptance Criteria

  • WARM_WINDOWS.claude encodes the 1h normal-regime branch; the docblock carries all three Anthropic branches, the inversion argument, the source stamp, and the per-harness qualifier.
  • The report renders an explicit ledger-coverage line naming every reader-less harness (today: claude-code, claude-desktop, codex), computed from LEDGER_READERS.
  • Spec asserts both; seatCostReport.spec.mjs green.
  • GAP 3 comment posted on #16682 (TTL-as-lever framing).

Out of Scope

  • Per-harness claude warm-window rows (Claude Desktop reads when a reader exists — its own seat's measurement, not preemptive).
  • The wake receiver's per-seat contextGate config audit (adjacent consumer, config-driven).
  • Any AiConfig / config wiring — the CLI stays graphless.

Avoided Traps

  • Preemptive family × harness matrix — Ada bounded her read to her own seat; the family axis holds until a second claude harness is measured. Inventing rows = invented numbers, the exact discipline gpt: null keeps.
  • Rendering a fleet roster — the reporter reports LEDGER coverage, not seats; seat discovery is not its business.

Related

#16707 · #16682 · PR #16709 · falsification source MESSAGE:ed1ede58-de5b-4822-86f1-f37b3b0cc257

Origin Session ID: 6df9925c-e527-496d-9fbf-0a277c175d59

Retrieval Hint: "seatCostReport WARM_WINDOWS claude overage branch ledger reader coverage"

tobiu referenced in commit 91dff5d - "fix(ai): seat-cost reporter claude 1h baseline + ledger-reader coverage (#16784) (#16785) on Aug 9, 2026, 3:46 PM
tobiu closed this issue on Aug 9, 2026, 3:46 PM