B

Commit History

  1. 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). Running

    Verified signature
    662807d
  2. Fix auto-restart watchdog strptime: log filenames now include _<sessioncode> suffix; parse only the YYYYMMDD_HHMMSS prefix so idle check succeeds.

    Verified signature
    739d992

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

    Verified signature
    4a839ec
  2. revise-gate modal: single-line body, no title, button -> Go back to argument

    Verified signature
    f3196ba
  3. revise-gate modal: quantified 90%/10% wording

    Verified signature
    309ec26

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

    Verified signature
    cf2f052
  2. logger.py + app.py: batch-checkpoint refactor (same shape as soc-ca).⁠

    Verified signature
    7a166f7
  3. logger.py: batch-checkpoint refactor (see app.py commit for details)

    Verified signature
    7f552fa

  1. switch hf_dataset to AE-Talk-bot/log-B-Jun-18-2026 (split per-condition to relieve HF commit rate limit)

    Verified signature
    f0afbbe
  2. recovery: rename localStorage keys to current condition names + JS namespace __SOC_RECOVERY -> __RECOVERY (clean up no_ai / socratic_frame legacy)

    Verified signature
    24c2d48
  3. key-pool rotation: per-session OpenAI key assignment from OPENAI_KEY_01..10 (core/__init__.py)

    Verified signature
    06671d5
  4. key-pool rotation: per-session OpenAI key assignment from OPENAI_KEY_01..10 (core/logger.py)

    Verified signature
    1e08cf7
  5. key-pool rotation: per-session OpenAI key assignment from OPENAI_KEY_01..10 (core/perfect_answer.py)

    Verified signature
    f044ccc
  6. key-pool rotation: per-session OpenAI key assignment from OPENAI_KEY_01..10 (core/config_loader.py)

    Verified signature
    836ea29
  7. key-pool rotation: per-session OpenAI key assignment from OPENAI_KEY_01..10 (app.py)

    Verified signature
    a022f28

  1. switch to log-Jun-17-2026 + B-ans

    Verified signature
    38bb053
  2. walkthrough: MSG2 new wording (AI assistant generated version + optional chat); 5 new tutorial images from ans-ca/

    Verified signature
    f20ce2e
  3. walkthrough: MSG2 new wording (AI assistant generated version + optional chat); 5 new tutorial images from ans-ca/

    Verified signature
    d25ff66
  4. walkthrough: MSG2 new wording (AI assistant generated version + optional chat); 5 new tutorial images from ans-ca/

    Verified signature
    cc20da6
  5. walkthrough: MSG2 new wording (AI assistant generated version + optional chat); 5 new tutorial images from ans-ca/

    Verified signature
    ae49f04
  6. walkthrough: MSG2 new wording (AI assistant generated version + optional chat); 5 new tutorial images from ans-ca/

    Verified signature
    5ca16ae
  7. walkthrough: MSG2 new wording (AI assistant generated version + optional chat); 5 new tutorial images from ans-ca/

    Verified signature
    cfca241

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

    Verified signature
    2814ba1
  2. Rename condition + mode_prefix to *-ca to match local folder rename. hf_dataset unchanged (legacy data stays in same dataset under new subfolder).

    Verified signature
    dfa615e

  1. 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.

    Verified signature
    bacd4db

  1. general_chat_prompt: strip to vanilla — just case + initial_argument + perfect_answer, no behavior steering

    Verified signature
    42d0f27
  2. general_chat_prompt: drop defensive "do not reveal discussion plan / probe / framework" rule since none are provided to the bot

    Verified signature
    6c3fd4a
  3. 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).

    Verified signature
    760a1f1
  4. 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).

    Verified signature
    aaf68e2
  5. 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).

    Verified signature
    0f143c5
  6. Fix broken patch: full app.py from local no_ai with title=B

    Verified signature
    5be0721
  7. INTRO_MESSAGE: B condition reframed for AI-assistant essay + optional chat

    Verified signature
    2a71eae
  8. case + placeholder: B condition reframed as 'AI assistant generates + optional chat'

    Verified signature
    6329f3e
  9. case + placeholder: B condition reframed as 'AI assistant generates + optional chat'

    Verified signature
    2e4c509

  1. Rename page title to "B" for A/B blinding

    Verified signature
    81fbf0f
  2. Update config.yaml

    Verified signature
    b662ba9
  3. Update README.md

    Verified signature
    0112eef
  4. Update README.md

    Verified signature
    cdf0e41
  5. Update README.md

    Verified signature
    dcb7f6b
  6. Update README.md

    Verified signature
    b78cf46
  7. Point B at new dataset (log-Jun-10-2026) with mode_prefix=B-non-ca

    Verified signature
    497315e
  8. STEP 1 framework detection: full reasoning-mode diagnosis with refined mixed-drafts rule. STEP 1 replaces keyword indicator lists with (a) identify load-bearing reasoning move, (b) 3 diagnostic questions in order (predicted outcomes / principles regardless of outcomes / character of an actor), (c) topic-vs-load decoupling table, (d) 'remove the lens' verification test. Mixed drafts rule: NOT a hard consequence default. Instead, pick the participant's CORE argument by explicit emphasis markers ('the most important reason' / 'perhaps for me' / 'the thing that is most ethically questionable is X') (highest priority), argumentative weight, then 'remove the lens' decisive test. Consequence is last-resort fallback only. Tested against pilot Kantian argument 5/5 correctly → duty_rights. Other downstream sections (essay, plan, hooks) unchanged.

    Verified signature
    1ce0e2b
  9. 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.

    Verified signature
    9fda70f

  1. 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).

    Verified signature
    81f0f87

  1. 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.

    Verified signature
    2cf117d
  2. 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.

    Verified signature
    6774e16
  3. 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.

    Verified signature
    2021c0b
  4. 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.

    Verified signature
    4f0339d
  5. 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.

    Verified signature
    d7c1b05

  1. 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.

    Verified signature
    417dc48