End Session gates: turn off end_session_gate (probe-count/20-min condition no longer blocks); demote revise_check to a one-shot warning (first click below the ~10% revision threshold shows the revision modal and blocks; every later click finalises regardless).
Fix auto-restart watchdog (strptime parsing log filenames with new _<sessioncode> suffix), SyntaxWarning (\s in JS-inside-Python string), and pin python_version to 3.11 (avoids Python 3.14 asyncio cleanup noise with Gradio 6.x).
Auto-grow chat input: lines=1, max_lines=6; CSS splits chat-input from buttons (textarea grows 42-160px; buttons stay 42px); chat-row aligns flex-end so Send stays at the bottom of the input.
Opening + transition-due rewritten as multi-message output via <<<MSG-BREAK>>> marker. Opening: host hardcodes M1 (greeting + 'I'm here to help you think through your argument, rather than think for you' framing with explicit bolded phrases), LLM generates M2 (verbatim 'We may look at a few aspects of your argument, such as:' + bullet agenda + 'There is no single correct answer here. You can push back or ask me to rephrase anything unclear : )') and M3 (verbatim 'Let's start with one part of your draft. You wrote that [quote].' + first probe question). Transition-due: Block 1 (close-of-topic recap + revision rec + 'on the right' pointer) and Block 2 (transition phrase + new probe + question) now render as two separate chatbot bubbles. stream_turn splits raw LLM output on MSG_BREAK_MARKER after streaming completes; during streaming the marker is hidden behind a paragraph break to keep the participant from seeing the literal token. Other turn types (engaging-default / needs-clarification / plan-complete) unchanged.
UI hotfix: restore aha!/ugh. buttons. The previous top-chrome-hide CSS included '.icon-button-wrapper { display: none }', but Gradio uses that same wrapper class for the repurposed Like/Dislike (aha/ugh) buttons in the message footer, so they disappeared along with the share/clear toolbar buttons. Drop the wrapper rule and rely solely on aria-label / title matchers for share/clear/delete/trash.
UI hotfix: restore aha!/ugh. buttons. The previous top-chrome-hide CSS included '.icon-button-wrapper { display: none }', but Gradio uses that same wrapper class for the repurposed Like/Dislike (aha/ugh) buttons in the message footer, so they disappeared along with the share/clear toolbar buttons. Drop the wrapper rule and rely solely on aria-label / title matchers for share/clear/delete/trash.
UI hotfix: restore aha!/ugh. buttons. The previous top-chrome-hide CSS included '.icon-button-wrapper { display: none }', but Gradio uses that same wrapper class for the repurposed Like/Dislike (aha/ugh) buttons in the message footer, so they disappeared along with the share/clear toolbar buttons. Drop the wrapper rule and rely solely on aria-label / title matchers for share/clear/delete/trash.
UI hotfix: restore aha!/ugh. buttons. The previous top-chrome-hide CSS included '.icon-button-wrapper { display: none }', but Gradio uses that same wrapper class for the repurposed Like/Dislike (aha/ugh) buttons in the message footer, so they disappeared along with the share/clear toolbar buttons. Drop the wrapper rule and rely solely on aria-label / title matchers for share/clear/delete/trash.
UI hotfix: restore aha!/ugh. buttons. The previous top-chrome-hide CSS included '.icon-button-wrapper { display: none }', but Gradio uses that same wrapper class for the repurposed Like/Dislike (aha/ugh) buttons in the message footer, so they disappeared along with the share/clear toolbar buttons. Drop the wrapper rule and rely solely on aria-label / title matchers for share/clear/delete/trash.
UI: drop the bottom-row mirror column. Since the top-row guide-col is visible=False (Gradio collapses it and the chatbot panel expands left), the bottom row's empty scale=1 mirror column was no longer mirroring anything — it reserved blank space on the left and pushed the chat input + Send button out of alignment with the chatbot panel above. Removing it puts chat-row (scale=3) directly under the chatbot, and bottom-action-col (scale=2) directly under the argument textbox.
UI: hide Gradio Chatbot top chrome and the case H1 title (parity with socratic). show_label=False on gr.Chatbot + CSS to suppress the residual label badge and share/clear/delete/trash icons that Gradio 6.11 still renders. Strips the leading '# Case: ...' H1 from the initial chatbot message via display-only CASE_TEXT_DISPLAY; full CASE_TEXT (with title) still passed to the LLM in stream_turn.
Deploy v8.3: add Look-back check to question_set generation. Manager must scan INITIAL_ARGUMENT + RECENT_TURNS + CURRENT_MSG before outputting any fresh question_set (opening or transition-due) and adjust the entry angle of candidate questions that would draw an 'as I said' pushback (redundancy) or 'I already rejected that premise' pushback. Probe target stays fixed; only entry angle moves. Two worked examples added (expected_consequences pivot, evaluation rejected-premise reformulation). Common mistakes updated.