Let the candidate mark unclear interviewer lines
What
During the interview, an "Unclear" button beside the "Live CC:" label marks the Jim turn on screen; pressing it again unmarks it. The button shows only while a Jim turn is on screen, and it is disabled on unmarked turns once 10 are marked. Jim is not told about a mark.
When the report is saved, the marked turns are resolved to their transcript text and stored as unclearLines in the history entry, after the report returns, so they are never part of the report request. The report shows a "Lines you marked as unclear" section after "Practice next", in the web card and the Markdown export, and the export also tags the marked turns in its transcript as "Jim (marked unclear)". A report reopened from Past attempts shows the section too; its export has no transcript to tag, as before.
One difference from the issue body: the web report card has no transcript, so tagging inside the transcript happens only in the Markdown export downloaded at the end of the interview.
Measurements
Local history in this browser held 21 reports: 594 to 12,109 bytes each, 6,933 on average, 145,600 bytes in total against the 167,936-byte budget, so the budget fits about 24 average reports, not 500.
Interviewer lines from three downloaded reports (93 lines): median 172 bytes, 90th percentile 333 bytes, longest 548 bytes.
With about 3 bytes of JSON per string, 10 marks add about 1.8 KB at the median line length and at most about 5.5 KB if every mark were as long as the longest line seen, about 25% and 79% of an average report. An interview at the cap therefore pushes out at most one older report, so the cap is 10. A cap of 20 could cost more than one.
Tests
tests/browser/progress.test.js: an entry at the cap keeps all 10 lines, an entry past the cap or with an oversized line is bounded on read, andunclearLinesthat is missing, null, a string, a number, an object, or an array holding a non-string is read as no marks.tests/browser/captions.test.js: the button marks and unmarks the current turn, hides during candidate speech, starts unmarked on a new Jim turn, and stops marking at the cap; hiding or disabling the focused button, or hiding the bar through the idle timeout or a code edit, moves focus to the editor.tests/browser/render.test.js: the Markdown export lists and tags marked lines, and a report without marks has no section in either view.- Existing tests that rebuild
saveHistorynow passunclearLines, and the replay vocabulary test lists the new section's words.
./scripts/test.sh passes locally, including the Playwright browser tests. One lobby layout test, "problem cards span desktop panels and return home on narrow screens", passes on some runs and fails on others here, also on an unmodified checkout.
Contract version
No version bump: no prompt, rubric, or report schema changed, and unclearLines lives in the history entry outside the report.
Screenshots
Before: the caption bar.
After: the Unclear button, unmarked and marked.
After: the report section.
Closes #391
Summary by cubic
Lets the candidate mark Jim's lines as unclear during the interview so they can review them later; pressing the new Unclear button again unmarks the line. Jim never sees the marks.
- The button shows only while a Jim turn is on screen and disables on unmarked turns once 10 are marked, which keeps a marked interview within one average report of the local history budget.
- Marks are resolved to transcript text when the report is saved and stored as
unclearLinesin the history entry, outside the report and its request, so no prompt, rubric, or report schema changes; marks that would push the report body past the server's size limit are dropped rather than costing the report. - The report and its Markdown export show a "Lines you marked as unclear" section; the export tags marked turns by id, so a repeated line is not tagged twice. Reopened reports from Past attempts show the section too; the field is read only as an array of strings, so older or hand-edited entries render as before.