stemedb/ai-lookup/features/trust-rank.md
jordan 1ce4004807 feat: Complete Phase 2 (The Cortex) - query, lens, and API layers
This commit adds the read path (Cortex) to complement the write path (Spine):

## Crates
- stemedb-api: HTTP API with axum + utoipa OpenAPI
  - /v1/assert, /v1/query, /v1/epoch, /v1/skeptic, /v1/trace, /v1/audit
  - Metered endpoints with quota enforcement
  - Ed25519 signature verification
- stemedb-lens: Truth resolution lenses
  - RecencyLens, ConsensusLens, ConfidenceLens
  - VoteAwareConsensusLens (Ballot Box pattern)
  - TrustAwareAuthorityLens (The Hive pattern)
  - SkepticLens (conflict analysis)
  - EpochAwareLens (paradigm-safe queries)
- stemedb-query: Query engine with materialized views

## Storage Extensions
- VoteStore: Vote aggregation with cached counts
- TrustRankStore: Agent reputation with decay
- AuditStore: Query audit trail
- IndexStore: SP/P/S index structures
- SupersessionStore: Epoch supersession chains

## SDKs
- sdk/go/steme: Go HTTP client with Ed25519 signing
- sdk/go/adk: ADK-Go tools for AI agents

## Documentation
- Updated CLAUDE.md, architecture.md, roadmap.md
- New ai-lookup entries for all services
- Use case docs for consumer health intelligence
- Arena roadmap for simulation advancement

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 13:22:44 -07:00

176 lines
5.1 KiB
Markdown

# TrustRank
**Last Updated:** 2026-01-31
**Confidence:** High
**Status:** Implemented in `stemedb-storage` v0.1.0
## Summary
TrustRank is a per-agent reputation system that tracks accuracy and weights assertions in the Authority lens. This is the foundation of "The Hive" learning loop, enabling closed-loop learning where agent predictions are validated against reality.
**Key Facts:**
- Agent reputation scores range [0.0, 1.0]
- Default score for new agents: 0.5
- Accurate predictions increase reputation (+0.05)
- Inaccurate predictions decrease reputation (-0.1, higher penalty to discourage spam)
- Confidence half-life: Scores decay over time (default 30 days)
- Content-addressed by agent Ed25519 public key
**File Pointer:** `crates/stemedb-storage/src/trust_rank_store.rs`
## Data Model
```rust
pub struct TrustRank {
pub agent_id: [u8; 32], // Ed25519 public key
pub score: f32, // Reputation [0.0, 1.0]
pub last_updated: u64, // Unix timestamp
pub assertions_count: u64, // Total assertions made
pub accuracy_count: u64, // Correct assertions
}
```
**Storage Layout:**
- Key: `TR:{agent_id}` (32-byte Ed25519 public key)
- Value: Serialized TrustRank (rkyv)
## Operations
### Get TrustRank
```rust
let trust = trust_store.get_trust_rank(&agent_id).await?;
```
Returns default TrustRank (score 0.5) for new agents.
### Update TrustRank
```rust
let new_score = trust_store.update_trust_rank(&agent_id, delta, timestamp).await?;
```
Adjusts score by delta, clamped to [0.0, 1.0].
### Record Outcome (Learning Loop)
```rust
let new_score = trust_store.record_outcome(&agent_id, was_accurate, timestamp).await?;
```
**Learning Rules:**
- `was_accurate = true`: score += 0.05, accuracy_count++
- `was_accurate = false`: score -= 0.1, assertions_count++ only
- Both: assertions_count++
### Apply Decay
```rust
let decayed_count = trust_store.decay_trust_ranks(current_timestamp, None).await?;
```
**Decay Formula:**
```
score = score * (0.5 ^ (elapsed_days / half_life_days))
```
Default half-life: 30 days. Custom half-life can be provided.
## The Hive Learning Loop
```
1. Agent submits assertion with confidence 0.8
-> TrustRank lookup: 0.7 (experienced agent)
-> Weighted score: 0.8 * 0.7 = 0.56
2. Reality assertion arrives (e.g., official data)
-> Compare: Did the agent's prediction match?
3. Outcome recorded:
-> If accurate: TrustRank 0.7 -> 0.75
-> If inaccurate: TrustRank 0.7 -> 0.6
4. Future assertions from this agent weighted accordingly
```
## Integration with Authority Lens
The TrustAwareAuthorityLens uses TrustRank to weight assertions:
```rust
use stemedb_lens::TrustAwareAuthorityLens;
let lens = TrustAwareAuthorityLens::new(trust_store);
let resolution = lens.resolve_async(&candidates).await;
// Resolution selects assertion with highest:
// weighted_score = assertion.confidence * agent.trust_rank
```
**Example Scenario:**
| Agent | Assertion Confidence | TrustRank | Weighted Score | Winner? |
|-------|---------------------|-----------|----------------|---------|
| Novice | 0.95 | 0.2 | 0.19 | No |
| Expert | 0.8 | 0.7 | 0.56 | No |
| Master | 0.75 | 0.95 | 0.7125 | ✅ Yes |
The Master's assertion wins despite lower raw confidence because their reputation is highest.
## Decay Mechanics
TrustRank decays over time to reflect that past accuracy doesn't guarantee future accuracy.
**Half-Life Examples:**
| Initial Score | Time Elapsed | Final Score |
|--------------|--------------|-------------|
| 1.0 | 30 days | 0.5 |
| 1.0 | 60 days | 0.25 |
| 0.8 | 30 days | 0.4 |
| 0.5 | 30 days | 0.25 |
**Why Decay?**
- Agents may become less accurate over time (model drift, outdated knowledge)
- Prevents "tenured" agents from coasting on past reputation
- Forces continuous demonstration of accuracy
## Testing
Comprehensive test coverage in `trust_rank_store.rs`:
```rust
#[tokio::test]
async fn test_record_outcome_updates_score() {
let trust_store = GenericTrustRankStore::new(store);
let agent_id = [1u8; 32];
// Record accurate outcome
let score = trust_store.record_outcome(&agent_id, true, 1000).await?;
assert!((score - 0.55).abs() < 0.001); // 0.5 + 0.05
// Record inaccurate outcome
let score = trust_store.record_outcome(&agent_id, false, 2000).await?;
assert!((score - 0.45).abs() < 0.001); // 0.55 - 0.1
let trust = trust_store.get_trust_rank(&agent_id).await?;
assert_eq!(trust.assertions_count, 2);
assert_eq!(trust.accuracy_count, 1);
assert_eq!(trust.accuracy_rate(), 0.5);
}
```
## Future Enhancements
- **Domain-Specific TrustRank:** Track reputation per subject/predicate domain
- **Multi-Signature Aggregation:** Combine TrustRanks of all signers, not just primary
- **Adaptive Learning Rates:** Adjust delta based on agent's history
- **Trust Graph:** Factor in reputation of agents who vouch for this agent
- **Adversarial Detection:** Identify and penalize coordinated attacks
## Related Topics
- [Lens](../services/lens.md) - TrustAwareAuthorityLens integration
- [The Hive](../../vision.md) - Learning loop vision
- [Simulation](./simulation.md) - Testing TrustRank in controlled scenarios