Started: : · Demo at: : Demo misconception: M-FRIC-04 — friction always opposes velocity
Updated only at sync points, by whoever merges last. One writer per sync means this file never conflicts. Individual work goes in
progress/deepthi.md,progress/jeswin.md,progress/preethesh.md— append there after every commit.
Deepthi · feat/agents |
Jeswin · feat/core |
Preethesh · feat/web |
|
|---|---|---|---|
| Now | all four agents + 3 misconception files merged; seam to feat/core verified live | server skeleton merged (routes, fixtures, orchestrator, voice wrappers) | fully live browser session verified: vision → debate → judge → transfer → defeat |
| Last merge | ab56f7e | 1850685 | (this merge) |
| Blocked on | — | — | hardware mic check |
The UI direction now takes inspiration from my AI Tutor: warm, approachable, rounded, spacious, and centred on one clear action at a time. For ULTA, that means a debate-first session screen where Chintu, the belief meter, captions, and stage rail remain dominant. The existing Chintu.jsx is the avatar reference; wire its emotion states, gestures, belief-threshold surprise flash, Maya lip-sync, and reduced-motion fallback without altering the component.
This section supersedes stale implementation assumptions in the historical log below. The original three-misconception library remains only for deterministic fixture/demo mode; the live product now derives a validated concept package from the student's actual uploaded work and never silently substitutes M-FRIC-04.
- Deepthi / agents: Diagnosis accepts any academic subject from an uploaded page, spoken/typed reasoning, or both; rejects prompt injection; and runs a second independent evidence-grounded Sonnet audit before creating a session. Correct, vague, blurry, unrelated, malformed, and unsupported input returns
UNKNOWNwithout a session. Chintu, Judge, and Verifier consume the validated dynamic concept package; all Claude agents share one Sonnet-only model configuration. Deterministic agent suite: 61 checks. Live regressions covered text-only algebra plus friction, algebra, chemistry, a correct solution, blur, unrelated UI, and image-borne prompt injection. Expanded live Chintu adversarial suite: 9/9 held, while a complete explanation still made him yield. - Jeswin / core: Exact session IDs and legal stages are enforced; turns are deduplicated; arbitrary post-pass Chintu turns are rejected; Judge and provider failures fail closed; verification is idempotent; uploads and JSON bodies are bounded; API errors stay JSON; sessions expire after inactivity. Diagnosis accepts any non-empty combination of image and learner explanation. Sarvam STT defaults to live-tested
saaras:v3, Maya uses Arjun, and both voice providers retain quiet browser-safe fallbacks. The 22-check core suite covers state transitions, cross-session isolation, text-only start, TTL cleanup, voice validation, providerless behavior, and dynamic fallback content. - Preethesh / web: The shipped default calls the real server. Entry is genuinely multimodal: voice or typed reasoning can start without a photo, while a page optionally sharpens the diagnosis. Failure is honest and retryable, with no bundled misconception substitution. Voice is click once to record and click again to send, with typed fallback, stale-operation guards, stream cleanup, and exactly one submitted turn. The UI and full-body animated Chintu were redesigned around the agreed warm tutor reference while retaining captions, lip sync, reduced motion, and responsive layouts. Eight Playwright runs cover desktop and mobile entry, no-photo start, voice lifecycle, and the complete debate-to-transfer flow.
- Live end-to-end evidence: A dynamic algebra upload completed Vision diagnosis → Chintu debate → Judge → generated transfer problem → defeat screen in the browser, with Maya audio returned for Chintu turns. A forced Judge network failure recovered in place without advancing the stage or locking the mic. Providerless and oversized-upload paths were also exercised.
| Component | Owner | Status | Notes |
|---|---|---|---|
| M-FRIC-04 misconception file | D | ✅ | full CONTRACTS §4 schema |
| M-NEWT-03, M-NEWT-07 | D | ✅ | library capped at three per anti-goals |
| Diagnosis agent | D | ✅ | vision verified live both ways: wrong work → M-FRIC-04 0.95, correct work → UNKNOWN; real phone photo still worth one check |
| Chintu agent | D | ✅ | adversarial run live: 6/6 attacks held after prompt fix |
| Judge agent | D | ✅ | live: fails keyword-only, passes real mechanism (0.95→0.2) |
| Verifier agent | D | ✅ | live: fresh transfer problem in a different context |
| Server + 6 routes | J | ✅ | verified live with USE_FIXTURES=false calling real agents |
| Fixtures | J | ✅ | full-session arc works |
| Orchestrator state machine | J | ✅ | |
| Sarvam STT | J | ✅ | live: real transcription round-trip through /api/stt |
| Maya TTS | J | ✅ | live: 8.5s Chintu audio via /api/tts (Arjun, emotion tags, PCM→WAV) |
| App shell + session screen | P | ✅ | §36 anatomy, browser-verified |
| Chintu avatar wired | P | ✅ | imported as-is, isolation kept in props |
| Belief meter | P | ✅ | 400ms lag, red→amber→green, Judge-driven |
| Captions | P | ✅ | always render; audio is enhancement |
| Defeat screen | P | ✅ | bars old→new, SPOT last, static dashboard slide |
| Full loop end to end | all | ✅ | live via API AND through the browser UI (headless): photo → diagnose → debate → judge pass → transfer verified → defeat screen. Demo laptop run still pending |
⬜ not started · 🟡 in progress · ✅ done · ⛔ blocked · ✂️ cut
- Merged: feat/core (1850685, Jeswin first per plan), feat/web (0f050b3), feat/agents (4135711, rebased)
- Working end to end: fixture path clicks through; USE_FIXTURES=false verified live — routes load the real agents, agents degrade in character without a key
- Blocked: ANTHROPIC_API_KEY (agents), Sarvam/Maya keys (voice)
- Decided: agent module interface is ESM with session-based exports chintu/judge/verify matching routes.js; transfer answers judged against transferProblem.expected_reasoning
- Cut: nothing
Decision point: is a real session running end to end? If no, cut the Verifier and Transfer stage now.
- Merged: feat/agents (ab56f7e), feat/web (judge-first sequencing fix)
- Verdict: YES — fully live session through the web UI: real vision diagnosis of the sample photo, live Chintu debate, judge pass, live transfer problem, transfer verified, defeat screen. Frontend defect found and fixed at this seam: parallel chintu+judge calls interleaved on the stateful server session and corrupted the Judge's view of history; turn calls are now sequential, judge first.
- Cut: nothing — Verifier and Transfer stay.
- Merged:
- Known broken, accepted:
- Demo laptop tested: ⬜
- Backup recording made: ⬜
Anything that changes how the system behaves. Reason is mandatory — a decision without one gets relitigated at hour three.
| T+ | Who | Decision | Why |
|---|---|---|---|
| 0:20 | all | Contracts frozen | Three people can't build in parallel against a moving interface |
| 0:20 | all | M-FRIC-04 is the demo | One flawless session beats five shaky ones |
| 1:40 | P | Mock layer lives inside web/ behind VITE_USE_MOCKS | server/fixtures don't exist yet and web can't create them; flag flip swaps to real routes with zero component changes |
| 1:40 | P | Belief meter takes the Judge's belief_strength, not Chintu's | the meter only moves when the Judge confirms the model shifted |
| 2:00 | D | Judge keyword rule enforced in prompt AND a code gate (pass with empty repair_evidence or <8 words → fail) | prompts drift under pressure; the demo-critical behaviour must be deterministic |
| 2:40 | D | Agents are ESM with route-facing adapters; chintu() adapter is the isolation boundary | session handed by routes contains correct_model; extraction must be field-by-field where the routes call in |
CONTRACTS.md changes only by agreement at a sync point. Every change logged here.
| T+ | Who | Changed | Agreed by |
|---|---|---|---|
Fill this in at Sync 3, not before. Read it out loud once before presenting.
- Laptop, browser, tabs open:
USE_FIXTURESset to:- The handwritten sheet used:
- Language selected:
- The line that opens the pitch:
- If it breaks:
USE_FIXTURES=true, reload. If that breaks: play the recording.
Who does what: Deepthi pitches · Jeswin drives · Preethesh watches for breakage with the fixture flag ready.