# UAT: Muscle Loss Contradiction (Skeptic Lens)

**Date:** YYYY-MM-DD
**Feature:** First-Class Contradiction
**Status:** [ ] PASS / [ ] FAIL / [ ] BLOCKED

## Scenario

Two peer-reviewed studies report opposing conclusions on GLP-1 agonist muscle-sparing effects:
- Study A (PMID_38001234): "Significant muscle loss observed"
- Study B (PMID_38005678): "Muscle mass preserved vs placebo"

Both are Tier 1 (Clinical) sources with similar confidence. The Skeptic Lens should surface both claims without forcing resolution.

## Acceptance Criteria

| Criterion | Expected | Met? |
|-----------|----------|------|
| Both claims coexist | Neither deleted | [ ] |
| Conflict score | >= 0.88 | [ ] |
| Status | "Contested" | [ ] |
| Claims array | 2 distinct values | [ ] |
| No hallucinated average | No "moderate loss" | [ ] |

## Test Matrix

| Step | Action | Expected | Actual | Status |
|------|--------|----------|--------|--------|
| 1 | Ingest Study A claim | Hash returned | | [ ] |
| 2 | Ingest Study B claim | Hash returned | | [ ] |
| 3 | Query skeptic lens | Both claims returned | | [ ] |
| 4 | Check conflict_score | >= 0.88 | | [ ] |
| 5 | Check status | Contested | | [ ] |
| 6 | Verify no averaging | 2 distinct ObjectValues | | [ ] |

## Setup Commands

```bash
# Start StemeDB
cargo run --bin stemedb-api &

# Wait for startup
sleep 2
```

## Test Commands

### Step 1: Ingest Study A (muscle loss = true)

```bash
curl -X POST http://localhost:18180/v1/assertions \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Semaglutide:MuscleMass",
    "predicate": "muscle_sparing_effect",
    "object": {"Boolean": false},
    "confidence": 0.85,
    "source_class": "Clinical",
    "source_hash": "0000000000000000000000000000000000000000000000000000000000000001"
  }'
```

**Expected:** `{"hash": "..."}`
**Actual:**
**Status:** [ ]

### Step 2: Ingest Study B (muscle loss = false)

```bash
curl -X POST http://localhost:18180/v1/assertions \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Semaglutide:MuscleMass",
    "predicate": "muscle_sparing_effect",
    "object": {"Boolean": true},
    "confidence": 0.82,
    "source_class": "Clinical",
    "source_hash": "0000000000000000000000000000000000000000000000000000000000000002"
  }'
```

**Expected:** `{"hash": "..."}`
**Actual:**
**Status:** [ ]

### Step 3: Query with Skeptic Lens

```bash
curl "http://localhost:18180/v1/skeptic?subject=Semaglutide:MuscleMass&predicate=muscle_sparing_effect"
```

**Expected:**
```json
{
  "status": "Contested",
  "conflict_score": 0.88,
  "claims": [
    {"value": {"Boolean": false}, "weight_share": 0.51, "assertion_count": 1},
    {"value": {"Boolean": true}, "weight_share": 0.49, "assertion_count": 1}
  ],
  "candidates_count": 2
}
```

**Actual:**
**Status:** [ ]

### Step 4: Verify Conflict Score

From Step 3 response, extract `conflict_score`.

**Expected:** >= 0.88
**Actual:**
**Status:** [ ]

### Step 5: Verify Status

From Step 3 response, check `status` field.

**Expected:** "Contested"
**Actual:**
**Status:** [ ]

### Step 6: Verify No Averaging

Confirm `claims` array contains exactly 2 entries with distinct `Boolean` values.
NO claim should have an averaged or interpolated value.

**Expected:** 2 distinct ObjectValues (true and false)
**Actual:**
**Status:** [ ]

## Sign-Off Checklist

- [ ] Both studies ingested successfully
- [ ] Skeptic lens returns both claims
- [ ] Conflict score >= 0.88
- [ ] Status is "Contested"
- [ ] No hallucinated average value
- [ ] Neither original claim deleted

## Notes

*Record any observations, edge cases, or issues here.*

---

**Tester:**
**Date:**
**Result:**
