# UAT Quick Start Guide

Get Week 4 UAT scenarios running in 5 minutes.

## Prerequisites

```bash
# 1. Ensure you're in the stemedb repo
cd /Users/jordanwashburn/Workspace/orchard9/stemedb

# 2. Build everything (one-time setup)
cargo build --workspace
```

## Step-by-Step Execution

### 1. Start the API Server (Terminal 1)

```bash
cargo run -p stemedb-api
```

Wait for output like:
```
INFO  stemedb_api] Server running on http://0.0.0.0:18180
```

### 2. Validate API Readiness (Terminal 2)

```bash
cd uat/consumer-health
./validate_api_readiness.sh http://localhost:18180
```

Expected output:
```
✅ API is READY for UAT execution
```

### 3. Run UAT Tests

**Option A: All scenarios at once**
```bash
STEMEDB_API_URL=http://localhost:18180 \
cargo test --test consumer_health_uat run_all_uat_scenarios -- --ignored --nocapture
```

**Option B: Individual scenarios**
```bash
# GLP-1 Muscle Loss Contradiction
STEMEDB_API_URL=http://localhost:18180 \
cargo test --test consumer_health_uat uat_glp1_muscle_loss_contradiction -- --ignored --nocapture

# Gastroparesis Multi-Source
STEMEDB_API_URL=http://localhost:18180 \
cargo test --test consumer_health_uat uat_gastroparesis_multi_source -- --ignored --nocapture

# Layered Consensus
STEMEDB_API_URL=http://localhost:18180 \
cargo test --test consumer_health_uat uat_layered_consensus -- --ignored --nocapture
```

## What You Should See

### Successful Test Output

```
=== UAT: GLP-1 Muscle Loss Contradiction ===
Step 1: Ingest Study A (muscle loss observed)
  ✓ Study A hash: abcd1234...
Step 2: Ingest Study B (muscle mass preserved)
  ✓ Study B hash: ef567890...
Step 3: Query Skeptic Lens
  Status: Contested
  Conflict Score: 0.88
  Claims: 2
  Candidates: 2
✓ PASS: GLP-1 Muscle Loss Contradiction
```

### Failed Test (Common Issues)

**Issue 1: Connection refused**
```
API error 000: Connection refused
```
**Fix:** Make sure API server is running in Terminal 1.

**Issue 2: 404 Not Found**
```
API error 404: No assertions found
```
**Fix:** This is normal if database is empty. Tests create data first.

**Issue 3: 400 Bad Request - Invalid signature**
```
API error 400: At least one signature is required
```
**Fix:** Signature validation is enforced. See "Known Issues" below.

## Known Issues

### Signature Validation

If tests fail with signature errors:

1. **Check if API has test mode** (recommended)
2. **OR generate real signatures** (complex, not recommended for UAT)

### Database State

Tests write to a persistent database. To start fresh:

```bash
# Stop API server (Ctrl+C in Terminal 1)
# Remove database
rm -rf /tmp/stemedb-data  # or wherever your DB is
# Restart API server
cargo run -p stemedb-api
```

## Next Steps After Successful Run

1. **Capture Results**
   - Take screenshots of test output
   - Copy actual values into UAT markdown files
   - Update test matrices

2. **Sign Off**
   - Mark scenarios as PASS in markdown files
   - Update `crates/stemedb-ontology/ROADMAP.md`
   - Commit results

3. **Report Issues**
   - Create GitHub issues for any failing tests
   - Document unexpected behavior
   - Propose fixes

## Advanced Usage

### Run with different API URL

```bash
STEMEDB_API_URL=http://staging.example.com:18180 \
cargo test --test consumer_health_uat -- --ignored --nocapture
```

### Run specific test multiple times

```bash
for i in {1..5}; do
  echo "=== Run $i ==="
  STEMEDB_API_URL=http://localhost:18180 \
  cargo test --test consumer_health_uat uat_glp1_muscle_loss_contradiction -- --ignored --nocapture
done
```

### Save test output to file

```bash
STEMEDB_API_URL=http://localhost:18180 \
cargo test --test consumer_health_uat run_all_uat_scenarios -- --ignored --nocapture \
2>&1 | tee uat_results_$(date +%Y%m%d_%H%M%S).log
```

## Troubleshooting

### "cargo: command not found"
Install Rust: https://rustup.rs/

### "package stemedb-api not found"
```bash
cargo build --workspace
```

### "Permission denied" for validate script
```bash
chmod +x uat/consumer-health/validate_api_readiness.sh
```

### Tests are slow / timing out
Increase sleep durations in test code:
```rust
std::thread::sleep(std::time::Duration::from_secs(5));  // was 2
```

## Documentation Links

- [Full Execution Plan](./WEEK4_EXECUTION_PLAN.md) - Detailed instructions
- [Delivery Summary](./WEEK4_DELIVERY_SUMMARY.md) - What was built
- [UAT Scenarios](./README.md) - All 12 scenarios
- [API Documentation](http://localhost:18180/swagger-ui/) - While server is running

## Getting Help

**Check logs:**
- API server logs in Terminal 1
- Test output in Terminal 2

**Common commands:**
```bash
# Check if API is running
curl http://localhost:18180/v1/health

# View OpenAPI spec
curl http://localhost:18180/api-docs/openapi.json | jq .

# Check database location
# (Look for STEMEDB_DATA_DIR in API server logs)
```

---

**Quick Reference Card**

```
┌─────────────────────────────────────────────────────────────┐
│ Terminal 1: cargo run -p stemedb-api                        │
│ Terminal 2: ./validate_api_readiness.sh http://localhost... │
│ Terminal 2: STEMEDB_API_URL=... cargo test --test ...       │
└─────────────────────────────────────────────────────────────┘
```
