# UAT: Semantic Decay (Knowledge Half-Life)

**Date:** YYYY-MM-DD
**Feature:** Source-Aware Decay
**Status:** [ ] PASS / [ ] FAIL / [ ] BLOCKED

## Scenario

Medical knowledge decays at different rates based on source class:
- **Regulatory (Tier 0):** Never decays
- **Clinical (Tier 1):** 730-day half-life (2 years)
- **Anecdotal (Tier 5):** 30-day half-life

A 200-day-old Clinical study should have effective confidence ~0.45x original.
A 200-day-old Reddit post should have effective confidence ~0.01x original (essentially expired).

## Acceptance Criteria

| Criterion | Expected | Met? |
|-----------|----------|------|
| Regulatory never decays | conf unchanged at 200 days | [ ] |
| Clinical decay correct | ~0.45x at 200 days | [ ] |
| Anecdotal decay correct | ~0.01x at 200 days | [ ] |
| Decay applied at query | Not at write time | [ ] |

## Test Matrix

| Step | Action | Expected | Actual | Status |
|------|--------|----------|--------|--------|
| 1 | Ingest Regulatory assertion | Hash returned | | [ ] |
| 2 | Ingest Clinical assertion | Hash returned | | [ ] |
| 3 | Ingest Anecdotal assertion | Hash returned | | [ ] |
| 4 | Query with decay (200 days) | Decayed confidences | | [ ] |
| 5 | Verify Regulatory unchanged | 0.95 | | [ ] |
| 6 | Verify Clinical decayed | ~0.43 | | [ ] |
| 7 | Verify Anecdotal expired | ~0.01 | | [ ] |

## Decay Formula

Confidence decay follows exponential half-life:
```
effective_conf = original_conf * (0.5 ^ (age_days / half_life_days))
```

| Source Class | Half-Life (days) | 200-day decay factor |
|--------------|------------------|----------------------|
| Regulatory | Infinite | 1.0 |
| Clinical | 730 | 0.826 |
| Observational | 365 | 0.682 |
| Expert | 180 | 0.464 |
| Community | 90 | 0.214 |
| Anecdotal | 30 | 0.010 |

## Setup Commands

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

## Test Commands

### Step 1: Ingest Regulatory Assertion (FDA)

```bash
# Use a timestamp 200 days ago
TIMESTAMP_200_DAYS_AGO=$(($(date +%s) - 17280000))

curl -X POST http://localhost:18180/v1/assertions \
  -H "Content-Type: application/json" \
  -d "{
    \"subject\": \"Semaglutide\",
    \"predicate\": \"approved_for\",
    \"object\": {\"Text\": \"Type2Diabetes\"},
    \"confidence\": 0.95,
    \"source_class\": \"Regulatory\",
    \"timestamp\": $TIMESTAMP_200_DAYS_AGO
  }"
```

**Expected:** Hash returned
**Actual:**
**Status:** [ ]

### Step 2: Ingest Clinical Assertion

```bash
curl -X POST http://localhost:18180/v1/assertions \
  -H "Content-Type: application/json" \
  -d "{
    \"subject\": \"Semaglutide\",
    \"predicate\": \"hba1c_reduction_percent\",
    \"object\": {\"Number\": 1.5},
    \"confidence\": 0.95,
    \"source_class\": \"Clinical\",
    \"timestamp\": $TIMESTAMP_200_DAYS_AGO
  }"
```

**Expected:** Hash returned
**Actual:**
**Status:** [ ]

### Step 3: Ingest Anecdotal Assertion (Reddit)

```bash
curl -X POST http://localhost:18180/v1/assertions \
  -H "Content-Type: application/json" \
  -d "{
    \"subject\": \"Semaglutide\",
    \"predicate\": \"user_experience\",
    \"object\": {\"Text\": \"Lost 20 lbs in 3 months\"},
    \"confidence\": 0.95,
    \"source_class\": \"Anecdotal\",
    \"timestamp\": $TIMESTAMP_200_DAYS_AGO
  }"
```

**Expected:** Hash returned
**Actual:**
**Status:** [ ]

### Step 4: Query with Decay Lens

```bash
# Query all Semaglutide assertions with decay applied
curl "http://localhost:18180/v1/query?subject=Semaglutide&lens=decay"
```

**Expected:** Three assertions with decayed effective_confidence values
**Actual:**
**Status:** [ ]

### Step 5: Verify Regulatory Unchanged

From Step 4 response, find the `approved_for` assertion.

**Expected:** effective_confidence = 0.95 (unchanged)
**Actual:**
**Status:** [ ]

### Step 6: Verify Clinical Decayed

From Step 4 response, find the `hba1c_reduction_percent` assertion.

**Expected:** effective_confidence ~ 0.79 (0.95 * 0.826)
**Actual:**
**Status:** [ ]

### Step 7: Verify Anecdotal Expired

From Step 4 response, find the `user_experience` assertion.

**Expected:** effective_confidence ~ 0.01 (essentially expired)
**Actual:**
**Status:** [ ]

## Sign-Off Checklist

- [ ] All three source classes ingested
- [ ] Decay applied at query time (not write time)
- [ ] Regulatory sources never decay
- [ ] Clinical sources decay correctly
- [ ] Anecdotal sources expire quickly
- [ ] Decay factors match documented half-lives

## Notes

*The "73-day half-life" mentioned in the GLP-1 Living Review use case refers to the overall effective knowledge decay for mixed-source queries. Individual source classes have different rates.*

---

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