stemedb/docs/presentations/generated/agile-agent-team.json
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

117 lines
5.9 KiB
JSON

{
"meta": {
"id": "agile-agent-team",
"title": "Agile AI Agent Team",
"subtitle": "Knowledge Coordination with Episteme",
"version": "4.0.0"
},
"actors": {},
"slides": [
{
"type": "title",
"id": "title"
},
{
"type": "hook",
"id": "hook",
"line": "Your agents have amnesia.",
"subline": "Every correction you make is forgotten by the next session."
},
{
"type": "code",
"id": "drift-logging",
"title": "Day 1: You correct the agent",
"code": "// Agent used console.log\n// You: \"We use winston, not console.log\"\n\nimport { logger } from './logger';\n\nlogger.info('User authenticated', { userId });\n"
},
{
"type": "code",
"id": "drift-logging-2",
"title": "Day 30: New session",
"code": "// Agent writes new code...\n\nconsole.log('User authenticated');\nconsole.log('userId:', userId);\n\n// The correction from Day 1? Gone.\n"
},
{
"type": "code",
"id": "drift-http",
"title": "Day 45: You correct again",
"code": "// Agent used axios\n// You: \"We standardized on fetch\"\n\nconst response = await fetch('/api/users', {\n headers: { 'Authorization': `Bearer ${token}` }\n});\n"
},
{
"type": "code",
"id": "drift-http-2",
"title": "Day 60: Another new session",
"code": "// Agent writes new code...\n\nimport axios from 'axios';\n\nconst response = await axios.get('/api/users', {\n headers: { 'Authorization': `Bearer ${token}` }\n});\n\n// Forgot again. Different session, different choices.\n"
},
{
"type": "code",
"id": "spiral",
"title": "6 months later: 10 ways to do 1 thing",
"code": "// Logging\nconsole.log() // 47 files\nwinston.info() // 23 files\npino.info() // 12 files\ndebug() // 8 files\n\n// HTTP\nfetch() // 31 files\naxios.get() // 28 files\ngot() // 6 files\n\n// Auth\nRS256 // 4 services\nES256 // 3 services\nHS256 // 2 services (why??)\n"
},
{
"type": "hook",
"id": "spiral-question",
"line": "Which one is correct?",
"subline": "Nobody knows. The decision was never recorded."
},
{
"type": "code",
"id": "catastrophe",
"title": "The Catastrophe",
"code": "// Auth service A expects RS256\n// Auth service B was deployed with ES256\n// An agent queried \"what's our JWT algorithm?\"\n// Got the most recent answer: ES256 (from an RFC proposal)\n\nHTTP 401 Unauthorized\n{\n error: \"invalid_signature\",\n expected: \"RS256\",\n received: \"ES256\"\n}\n\n// 3:00 AM. Pager fires. 47-minute outage.\n"
},
{
"type": "code",
"id": "catastrophe-why",
"title": "The Root Cause",
"code": "// The RFC was stored without lifecycle state\n// The query returned the most recent entry\n// No way to distinguish \"proposed\" from \"approved\"\n// The agent treated an idea as truth\n\n// And now you have to audit 9 services\n// to figure out which JWT algorithm is actually correct.\n"
},
{
"type": "hook",
"id": "fix-intro",
"line": "What if corrections persisted?",
"subline": "Across sessions. Across agents. Forever."
},
{
"type": "code",
"id": "fix-store",
"title": "Store decisions with context",
"code": "episteme.assert({\n subject: \"project/logging\",\n predicate: \"library\",\n value: \"winston\",\n\n lifecycle: \"approved\", // not proposed, not deprecated\n confidence: 1.0, // this is a decision, not a guess\n source: \"adr-0012\" // traceable to a decision record\n});\n"
},
{
"type": "code",
"id": "fix-query",
"title": "Query with lifecycle filter",
"code": "// Before writing code, agent checks constraints\n\nconst constraints = await episteme.query({\n subject: \"project/logging\",\n lifecycle: \"approved\"\n});\n\n// Returns: { library: \"winston\", confidence: 1.0 }\n\n// Agent uses winston. Every time. Every session.\n"
},
{
"type": "code",
"id": "fix-diff",
"title": "The difference",
"code": "// Without Episteme:\nquery({ subject: \"auth/jwt\", predicate: \"algorithm\" })\n// Returns: ES256 (most recent entry - a proposal)\n\n// With Episteme:\nquery({ subject: \"auth/jwt\", predicate: \"algorithm\", lifecycle: \"approved\" })\n// Returns: RS256 (the actual decision)\n"
},
{
"type": "code",
"id": "time-travel",
"title": "Debug what you believed, not what you know now",
"code": "// Post-incident: what did we believe at 9pm?\n\nepisteme.query({\n subject: \"auth/jwt\",\n predicate: \"algorithm\",\n as_of: \"2024-01-15T21:00:00Z\"\n});\n\n// Returns: ES256 (the belief at incident time)\n\nepisteme.diff({\n subject: \"auth/jwt\",\n from: \"2024-01-15T14:00:00Z\",\n to: \"2024-01-15T21:00:00Z\"\n});\n\n// Shows: RFC proposal added at 2:32pm\n// Root cause identified.\n"
},
{
"type": "code",
"id": "correction",
"title": "Fix the record, not just the code",
"code": "// Mark the bad assertion\nepisteme.supersede({\n target: \"ax7f3k9...\",\n reason: \"RFC was proposal, not approved decision\",\n corrected_by: \"sre-oncall\"\n});\n\n// Add a constraint so it never happens again\nepisteme.assert({\n subject: \"auth/jwt\",\n predicate: \"algorithm\",\n value: \"RS256\",\n lifecycle: \"approved\",\n supersedes: \"ax7f3k9...\"\n});\n\n// Future sessions will see this. Forever.\n"
},
{
"type": "vision",
"id": "vision",
"title": "Episteme",
"points": [
"Claims, not facts. Uncertainty is first-class.",
"Lifecycle awareness. Proposals ≠ decisions.",
"Corrections that persist across sessions.",
"Time travel for incident investigation."
],
"tagline": "Git for Truth"
}
]
}