Test Evaluation · agent-browser run
The core PR #5 feature works. The refactored InterviewModal correctly fetches the seeded "Default Constitution" template, renders it as a curated option in the picker, and iterates its 28 questions in the questioning phase. Bug-fix verified: the sim-profile Interview button flow is functional end-to-end from login through question 1.
But one user-facing blocker surfaced unrelated to the PR: the "Create New Sim" dialog's Save button fires but no HTTP request leaves the browser — dialog closes silently, no toast, no error, no record created on PDS. Direct POST to /api/records succeeds, so the backend is fine. The bug lives in the avatar-save / avatar-editor client component.
Secondary finding: before this test could run, the live production deployment on Vercel had been in an Error state for 4+ hours. Prior to manually triggering vercel --prod, simocracy.org was still serving a 5-day-old build missing all of PRs #1–#6. The auto-deploy-from-git integration needs investigation.
| # | Step | Result | Notes |
|---|---|---|---|
| 1 | Navigate to simocracy.org | PASS | Landing page renders: heading, walking sims (James Win, Sim1, Radark), "Create a Sim" CTA, Sign In button. |
| 2 | Login as satyam2.climateai.org / password 1 | PASS | OAuth flow to auth.climateai.org, password prompt, authorize page, returned with My Sims nav item and avatar. Cookie session-token set. |
| 3 | Navigate to /my-sims | PASS | Empty-state card: "You haven't created any sims yet" + "Create Your First Sim" button. |
| 4 | Open Create Sim dialog | PASS | Dialog renders with live-preview canvas, character set picker (Adult/Elder/Animal/Children), 13 part tabs, color pickers. |
| 5 | Customize appearance — randomize, switch hair tab | PASS | Randomize button produces a differently-dressed sim. Hair tab swaps option grid. Preview canvas updates in real time. |
| 6 | Enter sim name | PASS | Typing via keyboard type after click on the input works. Counter increments (10/64). Save button transitions from disabled to enabled. |
| 7 | Click "Save to ATProto" | FAIL | Dialog closes silently. No toast, no error, no /api/records POST in network log. No sim record appears on PDS. Reproduced 3× across two sessions. See §Blocker below. |
| 7b | Workaround: direct POST to /api/records via fetch from devtools |
PASS | Backend works. Record created: at://did:plc:cpoagodpqrgs4t7thi5z37uf/org.simocracy.sim/3mjuz3oqz3s2e. UI rehydrated on next page load. |
| 8 | Navigate to sim profile | PASS | My Sims shows "1 sim" count. Carousel card clickable. Profile loads with Chat / Interview / Connect to Agent buttons, Constitution (empty), Speaking Style (empty). |
| 9 | Click "Interview" button | PASS | Modal opens on intro phase. Shows: "Interview Mode" heading, 3-step preview ("Pick an interview template", "Answer its questions", "Review, save & optionally derive"), "Begin Interview" CTA. Three-step preview confirms PR #5 refactor is live. |
| 10 | Advance to pick-template phase | PASS | Picker renders: "Choose a template" heading, "CURATED" section, "Default Constitution" card with ⭐ Curated badge, description, "28 questions" counter, Back/Start buttons. Seeded template from PR #3 is correctly surfaced as facilitator-starred. End-to-end: PR #3 seed → PR #4 fetchers → PR #5 picker UI all cooperating. |
| 11 | Select Default Constitution → Start | PASS | Advances to questioning phase. Progress bar: "Question 1 of 28". First prompt correctly loaded: "What's your personal definition of a \"high-impact project\"?" — matches the hardcoded source text verbatim, proving the seed→record→template→UI roundtrip is lossless. Mic button and nav buttons render. Test goal reached. |
/api/records POST, no /api/upload-blob POST.0 sim records) until I bypassed the UI and POSTed directly from devtools.In components/avatar/avatar-save.tsx:45, handleSave opens with:
if (!activeName.trim()) return;
activeName derives from controlledName, which is lifted state in
AvatarEditor (name from useState). Between the onChange
that populated name and the click that fires handleSave,
there's a Radix Dialog / React-DOM reconciliation window in which the
disabled prop has updated (so the click fires) but the closure that
handleSave captured may still see the previous activeName.
Net effect: button enables, user clicks, handler checks a stale activeName,
finds it empty, returns silently. Dialog closes because Radix treats the click
as activating the submit action.
This is the only path a new user has to create a sim through the product UI. Every new-user onboarding that hits this bug will think the product is broken — no toast, no error, nothing to click next. No workaround exists short of devtools.
Two options — either is fine:
return with toast.error("Please enter a name")
so the user gets feedback if the state race does happen.
controlledName prop pattern; give AvatarEditor's input
ref-based reads via a "submit" callback, so handleSave always
reads the current DOM value rather than closure-captured React state.
Option 1 is a 2-line fix and unblocks users today. Option 2 is the architecturally correct answer for next iteration.
At test start, simocracy.org was serving build
dpl_3HoARWkJ1LAmoazSJRZHgxhiM2bH (age: 5 days).
The latest push containing PRs #1–#6 triggered a Vercel deploy
simocracy-v2-i24e4ubr3 4 hours before the test that errored silently
(status: ● Error, logs unreachable via the CLI).
I unblocked the test by running vercel --prod --yes, which built and deployed
cleanly in ~4 minutes, producing dpl_BYduicYSdLoHqUomdEE7c5LCj9wp (confirmed
via JS bundle URLs in the updated page and via /api/auth/whoami returning
200 — that endpoint is from PR #5, so its presence confirmed the new code is now
live).
Action item: investigate why the GitHub → Vercel auto-deploy integration errored.
This same pattern blocked PR #2's indexer deploy earlier in the session (that repo's
auto-deploy was also broken; had to run railway up manually). Two separate
auto-deploy pipelines are both broken or unreliable. Worth a dedicated debugging
pass before the next feature lands.
Every component of PRs #1–#5 was exercised in this test.
org.simocracy.interviewTemplate via the native GraphQL API
(verified earlier via introspection; indexer fallback to PDS covers the compat-layer gap).
fetchInterviewTemplates +
facilitator-starred detection work: PDS fallback returned the seed and the star record
resolved the template as curated. Indexer compat endpoint still returns 0
(known pre-existing issue), but PDS-fallback covers it transparently.
intro → pick-template → questioning. The intro's 3-step preview,
the picker with curated grouping, the progress bar showing Question 1 of 28,
and the correct first prompt all confirm the refactor is live.
PR #6 (gathering-suggested templates + yesNo batching + updateCouncil.createdAt fix)
was not exercised in this scenario — it lives on the gathering detail page,
which is a separate test.
Full end-to-end run, WebM (~2 MB):
Earlier attempt (before Vercel redeploy) also saved at
tests/recordings/create_sim_interview.webm — contains 3 reproductions of
the Save blocker.

















Capturing only the interesting signals. Full browser console has lots of Three.js deprecation noise that's pre-existing and unrelated.
[Simocracy] Indexer failed, falling back to PDS:
Error: No results from indexer, trying PDS
The indexer's records(collection: ...) compat endpoint returns 0 for all
collections post-deploy — a known pre-existing issue. PDS fallback in lib/indexer.ts
makes everything work transparently. Not caused by this feature.
# Three Save clicks in session 1 — zero matching POSTs:
$ grep -E "POST.*api/(records|upload-blob)" network.log
(no output)
# Direct POST from devtools succeeded:
$ fetch("/api/records", { ... }).then(r => r.json())
=> { "cid": "bafyrei...", "uri": "at://.../org.simocracy.sim/3mjuz3oqz3s2e" }
# Vercel deployments (at test start):
4h simocracy-v2-i24e4ubr3-gainforest.vercel.app ● Error (commit 10785a3)
5d simocracy-v2-b39o891ne-gainforest.vercel.app ● Ready (old commit)
# After vercel --prod --yes (me):
now simocracy-v2-2me2tdo98-gainforest.vercel.app ● Ready (commit 10785a3)
tests/TEST_create_sim_interview.md
Video (final run, passes)tests/recordings/create_sim_interview_v2.webm
Video (first run, 3× reproducing Save bug)tests/recordings/create_sim_interview.webm
Screenshotstests/screenshots/*.png (19 images)
This reporttests/report/create_sim_interview.html
components/avatar/avatar-save.tsx. Add
a toast on the silent return at minimum; refactor controlled-name pattern for
robustness. This blocks every new user.main,
Vercel gets webhook, deploy errors silently. Same symptom as Railway for the
indexer repo earlier. Likely a common config / env-var issue across both.records(collection: ...)
GraphQL query returns 0 for every NSID even though native queries work. PDS
fallback covers the gap but latencies suffer (300–1500 ms extra on every fetch).