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

5.1 KiB

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

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

let trust = trust_store.get_trust_rank(&agent_id).await?;

Returns default TrustRank (score 0.5) for new agents.

Update TrustRank

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)

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

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:

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:

#[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
  • Lens - TrustAwareAuthorityLens integration
  • The Hive - Learning loop vision
  • Simulation - Testing TrustRank in controlled scenarios