6.6 KiB
Executable File
Trial Start Debug Guide
❌ Problem: "I can't start the trial"
This guide will help you systematically debug why the trial start functionality isn't working.
🔍 Step 1: Verify System Setup
Database Connection
# Check if database is running
docker ps | grep postgres
# If not running, start it
bun run docker:up
# Check database schema is up to date
bun db:push
# Verify seed data exists
bun db:seed
Build Status
# Ensure project builds without errors
bun run build
# Should complete successfully with no TypeScript errors
🔍 Step 2: Browser-Based Testing
Access the Wizard Interface
- Start dev server:
bun dev - Open browser:
http://localhost:3000 - Login:
sean@soconnor.dev/password123 - Navigate: Studies → [First Study] → Trials → [First Trial] → Wizard Interface
Check Browser Console
Open Developer Tools (F12) and look for:
Expected Debug Messages (when clicking "Start Trial"):
[WizardInterface] Starting trial: <id> Current status: scheduled
[WizardControlPanel] Start Trial clicked
Error Messages to Look For:
- Network errors (red entries in Console)
- tRPC errors (search for "trpc" or "TRPC")
- Authentication errors (401/403 status codes)
- Database errors (check Network tab)
🔍 Step 3: Test Database Access
Quick API Test
Visit this URL in your browser while dev server is running:
http://localhost:3000/api/test-trial
Expected Response:
{
"success": true,
"message": "Database connection working",
"trials": [...],
"count": 4
}
If you get an error, the database connection is broken.
Check Specific Trial
If the above works, test with a specific trial ID:
http://localhost:3000/api/test-trial?id=<trial-id-from-above-response>
🔍 Step 4: Verify Trial Status
Requirements for Starting Trial
- Trial must exist - Check API response has trials
- Trial must be "scheduled" - Status should be "scheduled", not "in_progress" or "completed"
- User must have permissions - Must be administrator, researcher, or wizard role
- Experiment must have steps - Trial needs an experiment with defined steps
Check Trial Data
In browser console, after navigating to wizard interface:
// Check trial data
console.log("Current trial:", window.location.pathname);
// Check user session
fetch('/api/auth/session').then(r => r.json()).then(console.log);
🔍 Step 5: tRPC API Testing
Test tRPC Endpoint Directly
In browser console on the wizard page:
// This should work if you're on the wizard interface page
// Replace 'TRIAL_ID' with actual trial ID from URL
fetch('/api/trpc/trials.get?batch=1&input={"0":{"json":{"id":"TRIAL_ID"}}}')
.then(r => r.json())
.then(console.log);
Test Start Trial Endpoint
// Test the start trial mutation
fetch('/api/trpc/trials.start', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
"0": {
"json": {
"id": "TRIAL_ID_HERE"
}
}
})
}).then(r => r.json()).then(console.log);
🔍 Step 6: Common Issues & Fixes
Issue: "Start Trial" Button Doesn't Respond
- Check browser console for JavaScript errors
- Verify the button isn't disabled
- Check if
isStartingstate is stuck ontrue
Issue: Network Error / API Not Found
- Check middleware isn't blocking tRPC routes
- Verify NextAuth session is valid
- Check if API routes are properly built
Issue: Permission Denied
- Check user role: must be administrator, researcher, or wizard
- Verify study membership if role-based access is enabled
- Check
checkTrialAccessfunction in trials router
Issue: "Trial can only be started from scheduled status"
- Current trial status is not "scheduled"
- Find a trial with "scheduled" status or create one manually
- Check seed data created scheduled trials properly
Issue: Database Connection Error
- Database container not running
- Environment variables missing/incorrect
- Schema not pushed or out of date
🔧 Manual Debugging Steps
Create Test Trial
If no scheduled trials exist:
-- Connect to database and create a test trial
INSERT INTO trial (
id,
experiment_id,
participant_id,
status,
session_number,
scheduled_at,
created_at,
updated_at
) VALUES (
gen_random_uuid(),
'EXPERIMENT_ID_HERE',
'PARTICIPANT_ID_HERE',
'scheduled',
1,
NOW(),
NOW(),
NOW()
);
Check User Permissions
-- Check user system roles
SELECT u.email, usr.role
FROM users u
LEFT JOIN user_system_roles usr ON u.id = usr.user_id
WHERE u.email = 'sean@soconnor.dev';
-- Check study memberships
SELECT u.email, sm.role, s.name as study_name
FROM users u
LEFT JOIN study_members sm ON u.id = sm.user_id
LEFT JOIN studies s ON sm.study_id = s.id
WHERE u.email = 'sean@soconnor.dev';
🚨 Emergency Fixes
Quick Reset
# Complete reset of database and seed data
bun run docker:down
bun run docker:up
bun db:push
bun db:seed
Bypass Authentication (Development Only)
In src/server/api/routers/trials.ts, temporarily comment out the permission check:
// await checkTrialAccess(db, userId, input.id, [
// "owner",
// "researcher",
// "wizard",
// ]);
📞 Getting Help
If none of the above steps resolve the issue:
-
Provide the following information:
- Output of
/api/test-trial - Browser console errors (screenshots)
- Network tab showing failed requests
- Current user session info
- Trial ID you're trying to start
- Output of
-
Include environment details:
- Operating system
- Node.js version (
node --version) - Bun version (
bun --version) - Docker status (
docker ps)
-
Steps you've already tried from this guide
✅ Success Indicators
When trial start is working correctly, you should see:
-
Debug logs in console:
[WizardInterface] Starting trial: abc123 Current status: scheduled [WizardControlPanel] Start Trial clicked [WizardInterface] Trial started successfully -
UI changes:
- "Start Trial" button disappears/disables
- Toast notification: "Trial started successfully"
- Trial status badge changes to "in progress"
- Control buttons appear (Pause, Next, Complete, Abort)
-
Database changes:
- Trial status changes from "scheduled" to "in_progress"
started_attimestamp is set- Trial event is logged with type "trial_started"
The trial start functionality is working when all three indicators occur successfully.