B / app.py

Commit History

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).
662807d
verified

linxinhua commited on

Fix auto-restart watchdog strptime: log filenames now include _<sessioncode> suffix; parse only the YYYYMMDD_HHMMSS prefix so idle check succeeds.
739d992
verified

linxinhua commited on

revise-gate modal: reword body to "Please revise at least 10% ... before submitting your final version."
4a839ec
verified

linxinhua commited on

revise-gate modal: single-line body, no title, button -> Go back to argument
f3196ba
verified

linxinhua commited on

revise-gate modal: quantified 90%/10% wording
309ec26
verified

linxinhua commited on

app.py: simplify gr.Blocks title to single letter (A/B) for consistency with C
cf2f052
verified

linxinhua commited on

logger.py + app.py: batch-checkpoint refactor (same shape as soc-ca).
7a166f7
verified

linxinhua commited on

recovery: rename localStorage keys to current condition names + JS namespace __SOC_RECOVERY -> __RECOVERY (clean up no_ai / socratic_frame legacy)
24c2d48
verified

linxinhua commited on

key-pool rotation: per-session OpenAI key assignment from OPENAI_KEY_01..10 (app.py)
a022f28
verified

linxinhua commited on

walkthrough: MSG2 new wording (AI assistant generated version + optional chat); 5 new tutorial images from ans-ca/
cfca241
verified

linxinhua commited on

INTRO_MESSAGE: bold 'Read it carefully ...' clause; merge optional-chat sentence; close-session paragraph kept separate
2814ba1
verified

linxinhua commited on

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.
bacd4db
verified

linxinhua commited on

B condition: add post-essay general chat. After perfect_answer is shown, msg_input + send_btn become interactive; on_send builds messages from case + initial_argument + perfect_answer (NOT discussion_plan) and calls LLM. Logs each chat turn via SessionLogger.add_turn(manager_verdict=None).
760a1f1
verified

linxinhua commited on

Fix broken patch: full app.py from local no_ai with title=B
5be0721
verified

linxinhua commited on

INTRO_MESSAGE: B condition reframed for AI-assistant essay + optional chat
2a71eae
verified

linxinhua commited on

case + placeholder: B condition reframed as 'AI assistant generates + optional chat'
6329f3e
verified

linxinhua commited on

Rename page title to "B" for A/B blinding
81fbf0f
verified

linxinhua commited on

STEP 1 framework detection rewritten from keyword-matching to reasoning-mode diagnosis. Previous prompt used indicator keyword lists ('right to X', 'consent', 'privacy' → duty_rights, etc.), which would misclassify drafts that mention a topic but argue through a different framework. New STEP 1 asks the LLM to (a) identify the load-bearing reasoning move, (b) ask 3 diagnostic questions in order (predicted outcomes / principles regardless of outcomes / character of an actor), (c) apply a topic-vs-load decoupling table, (d) verify via 'remove the lens' test. Mixed drafts hard-default to consequence. Regression tested in socratic_frame (8/8 cases including 1 synthetic privacy+consequence, 4 pilot consequence+privacy, 3 pilot duty_rights+privacy). Other downstream sections (essay generation, discussion plan, hooks) unchanged.
9fda70f
verified

linxinhua commited on

Session-recovery propagated from socratic: hidden gr.Textbox (#recovery-payload) + Gradio .then(js=...) chains write/clear localStorage; on_submit_initial / on_end_session yield JSON events on their CONFIRM yields. RECOVERY_HEAD adds modal styling + window.__SOC_RECOVERY helpers; storage key no_ai_session_v1; touch-observer adapted (no chat input — watches chatbot clicks + arg_input edits). on_recover_session rebuilds chatbot as [case_display, user_arg, INTRO_MESSAGE, perfect_answer.text] (mirrors on_submit_initial yield 2) and re-activates the 60s snapshot_timer. SessionLogger.from_dict restores dominant_framework (no_ai's logger lacks argument_submitted_at, so that field is skipped).
81f0f87
verified

linxinhua commited on

UI parity with socratic/socratic-frame: (1) hide Gradio Chatbot top chrome via show_label=False + CSS for share/clear/delete/trash; (2) strip the '# Case: ...' H1 from the initial chatbot message via display-only CASE_TEXT_DISPLAY; (3) hide the left yellow feedback-hint column (guide-col visible=False) so chatbot expands left, and drop the bottom-row mirror column to keep action buttons aligned under right-col.
2cf117d
verified

linxinhua commited on

UI parity with socratic/socratic-frame: (1) hide Gradio Chatbot top chrome via show_label=False + CSS for share/clear/delete/trash; (2) strip the '# Case: ...' H1 from the initial chatbot message via display-only CASE_TEXT_DISPLAY; (3) hide the left yellow feedback-hint column (guide-col visible=False) so chatbot expands left, and drop the bottom-row mirror column to keep action buttons aligned under right-col.
2021c0b
verified

linxinhua commited on

UI parity with socratic/socratic-frame: (1) hide Gradio Chatbot top chrome via show_label=False + CSS for share/clear/delete/trash; (2) strip the '# Case: ...' H1 from the initial chatbot message via display-only CASE_TEXT_DISPLAY; (3) hide the left yellow feedback-hint column (guide-col visible=False) so chatbot expands left, and drop the bottom-row mirror column to keep action buttons aligned under right-col.
4f0339d
verified

linxinhua commited on

UI parity with socratic/socratic-frame: (1) hide Gradio Chatbot top chrome via show_label=False + CSS for share/clear/delete/trash; (2) strip the '# Case: ...' H1 from the initial chatbot message via display-only CASE_TEXT_DISPLAY; (3) hide the left yellow feedback-hint column (guide-col visible=False) so chatbot expands left, and drop the bottom-row mirror column to keep action buttons aligned under right-col.
d7c1b05
verified

linxinhua commited on

UI parity with socratic/socratic-frame: (1) hide Gradio Chatbot top chrome via show_label=False + CSS for share/clear/delete/trash; (2) strip the '# Case: ...' H1 from the initial chatbot message via display-only CASE_TEXT_DISPLAY; (3) hide the left yellow feedback-hint column (guide-col visible=False) so chatbot expands left, and drop the bottom-row mirror column to keep action buttons aligned under right-col.
417dc48
verified

linxinhua commited on

Record walkthrough_started_at client-side, pass to on_submit_initial via js= wrapper at submit
02dcc00
verified

linxinhua commited on

Move walkthrough_started_at + start_session to walkthrough END Start click (with JS retry)
9387dbd
verified

linxinhua commited on

Record walkthrough_started_at on Start walkthrough click (first click only)
278e578
verified

linxinhua commited on

Bump chatbot to 65vh and argument textbox to 55vh
fd7055a
verified

linxinhua commited on

Add welcome overlay before walkthrough; make image walkthrough full-screen; rename Done -> Start
fa60166
verified

linxinhua commited on

Add tutorial image carousel (entry overlay, Done on last slide)
ab02820
verified

linxinhua commited on

Hide Gradio chatbot copy button + add third yellow-panel bullet for leaving reactions unclicked
84c8b7d
verified

linxinhua commited on

Stronger HF-widget hide + (no_ai) clipboard lockdown
39080d8
verified

linxinhua commited on

Deploy: perfect_answer prompt simplified to consequence-only (always generates plan; duty-rights / responsibility-character branches removed)
769b091
verified

linxinhua commited on

Deploy: no_ai control bot — chapters TOC + essay logging
f5f3917
verified

linxinhua commited on