Repository navigation
Mask titles and turn errors, and fix four review findings - #60
Merged
Merged
Conversation
Worst-first puts the heaviest sessions on screen together and pushed the Updated column off the right edge; widths had only been checked against the recency view, where every row is a one-turn cron job. Durations over an hour read 66h 26m rather than 3985m 54s: narrower, and legible, which the old format was not. The title column goes from 240px to 170px, having been sized for prompt text back when titles were prompt text; a shared fleet's titles are session ids. Measured on the real fleet: 1042px table in a 1042px card, Updated fully visible, two prose titles out of two hundred clipping with tooltips intact. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZDHk4yVYP4jMZkTUMQ1Lw
Masking covered events.raw and nothing else. A session title is the first eighty characters of the first prompt and a turn error is model or tool text, and both went to their own columns in clear. OpenCode showed it worst: the same error string masked through putEvent and plaintext through setTurnState, in one function. maskText now guards both columns at every writer - titles from six adapters, errors from closeTurn, failTurn and OpenCode's state update. agent_name is left alone on purpose: it is a directory basename, and masking it would only mangle repository names. Also: the problem score divided two integers, so 14 tool calls over 3 turns scored 4 rather than 4.67; "show more" kept offering more past the server's 2000-row cap, reachable at 3,179 sessions; a port in use crashed with a stack trace instead of naming the port; and the README still said the shared server was not built yet. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NZDHk4yVYP4jMZkTUMQ1Lw
gengwg
added a commit
that referenced
this pull request
Sep 8, 2026
Mask titles and turn errors, and fix four review findings
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.
From an external review. Its headline finding was right, and is the kind of gap worth having someone else find.
Masking covered
events.rawand nothing else. A session title is the first eighty characters of the first prompt; a turn error is model or tool text. Both were written to their own columns in clear. OpenCode showed it worst: the same error string went throughputEventmasked and intoturns.errorplaintext, in the same function.maskTextnow guards both columns at every writer — titles from six adapters, errors fromcloseTurn,failTurnand OpenCode's state update.agent_nameis left alone deliberately: it is a directory basename, and masking it would only mangle repository names.Also fixed:
AGENTLENS_CORS_ORIGINis documented now too.Two findings did not survive checking. The
seqbackfill does not scan the table on startup —EXPLAIN QUERY PLANgivesSEARCH events USING INDEX idx_events_seq, since the index is created first. And the uncommitted layout change it flagged had already been committed.Deliberately not taken: foreign keys on ingest (orphans are already handled by the shipper and invisible in the UI), pausing the fleet poll during a trace (the header stats should stay live), and the timeline lane labels (cosmetic, and
turn.createdgenuinely is the input).92 tests pass, two of them new and covering exactly the gap.
https://claude.ai/code/session_01NZDHk4yVYP4jMZkTUMQ1Lw