feat: hotato console — the /calls daily surface#43
Merged
Conversation
R5 /calls: browsable feed over the derived score sidecar, opened mode=ro with the production evidence db ATTACHed mode=ro on one connection (query_only + the bridge's metadata-only authorizer installed after the attach, so writes, further ATTACHes, and payload_json reads are denied at the SQLite level). Rows join score records with session metadata: evidence -clock anchor beside the arrival stamp (each labeled with its clock), evidence-derived duration, session state, score state, worst dimension + the measured failure-reason sentence, per-call hop-latency p50/p95 with its declared authorities, and evidence-lane completeness. SCORED / NOT_SCORABLE (with reason) / ERROR are first-class rows (I2). Filters (state, scorability, since/until) are query params; malformed input is a 400, never a silently dropped filter; pagination is keyset from page one (last_event DESC, subject ASC; no OFFSET — asserted at the SQL-trace level) (I3). R8: a trends strip over the filtered window — volume, score-state split, candidate-moment share (columnar: SCORED rows carrying a measured failure-reason sentence), and per-kind hop-latency p50/p95 (nearest-rank; kinds never pooled; authorities stated) (I5). R6 /calls/<id>: per-dimension observations (never blended), ranked candidate moments with measured magnitudes + plain-English timing sentences, the timing waterfall keeping derived durations apart from event-reported values, every hop row with its declared authority, scorer version + config hash, the session's evidence lanes, drill-through to the production evidence plane, and the local audio path exactly as the evidence recorded it (serve has no audio-serving route; none invented). R7: the feed's JSON mirror carries an ETag (sha256 of the canonical model bytes) and answers a matching If-None-Match with a body-less 304; a small inline script polls it every few seconds, shows 'updated Ns ago', and re-renders only the feed region when the ETag changes. No external code; the page is complete as served with JavaScript off. R4: hotato console --production-db DB = serve + production db + the score-on-arrival worker in one command, with the printed tokenised URL landing on /calls; every serve flag keeps working and every view stays reachable. Nav gains the Calls tab (Suite-health rename stays PR-3). Unusable sidecar (schema mismatch) is a 400 carrying the rebuild instruction; unconfigured console / absent sidecar are explicit in-product states. Docs on WORKSPACE.md (llms-full regenerated); CHANGELOG Unreleased entry; 22 tests in tests/test_serve_calls.py.
hotato turn-taking eval8 of 8 scenarios pass. 0 fail. No regression.
RegressionsNone. Reproducible timing measured locally from call audio. Swap the bundled self-test step for your own captured recordings to gate on your agent. github.com/attenlabs/hotato |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Wave A PR-2: the daily view over the score-on-arrival engine (#42).
hotato console --production-db DB: serve + the scoring worker in one process, landing on/calls. All serve flags unchanged; every existing view stays reachable./calls: the feed — every scored production session with SCORED / NOT_SCORABLE (reason in-row) / ERROR as first-class visible states; an unscorable call never reads as OK. Query-param filters (state, scorability, time window; malformed input = 400), keyset pagination (no OFFSET anywhere — asserted via SQL trace), and a trends strip: volume, state split, candidate-moment share, per-kind hop-latency p50/p95 with declared authorities./calls/<id>: per-dimension observations (never blended), ranked candidate moments with measured magnitudes and plain-English sentences, a timing waterfall keeping derived (derived:event_timestamps) and event-reported values in separate columns, scorer version + config hash, evidence-lane completeness, audio path as text (no new file-serving route).Independently verified by a fresh reviewer with its own fixture db and a live
hotato consoleprocess: state rendering, keyset SQL + cursor walk, provenance rendering, 304 revalidation, loopback + 401s on every unauthenticated route, traversal probes 404, scope/diff clean (CHANGELOG purely additive this time). The verifier's own full-suite re-run was cut off at 87% (no failures logged); the builder's complete run was green except the two known machine-environmental failures — this CI run is the clean-environment confirmation.Spec: hotato-growth/research/CONSOLE-WAVE-A-SPEC.md (R4–R8)
https://claude.ai/code/session_015njkxtoAKioqTPT2k14xFr