Your AI assistant confidently told you your authentication system uses JWTs.
That was true 6 months ago. You migrated to sessions 3 months ago. But your RAG system still has old embeddings pointing to the JWT documentation.
Your AI is lying—not maliciously, but because it's serving stale context.
This is the fundamental flaw of static documentation and traditional RAG: They capture point-in-time snapshots, but teams evolve continuously. Architecture changes. Decisions get reversed. Features ship and deprecate. The longer a RAG system runs, the more it diverges from reality.
This post explains why static documentation fails, how traditional RAG inherits these problems, and why teams need live context systems that reflect current reality.
Table of Contents
- The Static Documentation Problem
- How Traditional RAG Inherits This Problem
- What is Live Context?
- The Cost of Stale Context
- Live Context Architecture
- Real-World Examples
- How to Fix Your RAG System
- The Future: Always-Current Knowledge
The Static Documentation Problem
The Documentation Decay Curve
Day 1: Documentation is written
- 100% accurate
- Reflects current state
- Everyone references it
Month 3: First changes not documented
- Code changed (new feature added)
- Documentation not updated
- Accuracy: 90%
Month 6: Major architecture change
- Migration to new system
- Old docs still exist (marked "outdated" if you're lucky)
- Accuracy: 70%
Year 1: Documentation is fiction
- Multiple undocumented migrations
- New patterns in use
- Old docs still show up in search
- Accuracy: 40%
Year 2: Documentation is abandoned
- No one trusts the docs
- Everyone asks senior engineers instead
- Accuracy: <20%
This happens in every company. Documentation decay is inevitable.
Why Documentation Rots
Reason 1: Maintenance burden
- Developers ship code
- Updating docs is "someone else's job"
- Result: Docs lag behind code
Reason 2: Distributed knowledge
- Architecture decision discussed in Slack
- Spec written in Notion
- Code implemented in GitHub
- Meeting recording captures context
- Which one is "the docs"?
Reason 3: No single source of truth
- Confluence says use JWT
- GitHub README says use sessions
- Slack discussion says "we're migrating"
- Which is current?
Reason 4: Manual synchronization
- Code changes → Someone must manually update docs
- Every day, 100 changes happen
- No human can keep up
How Traditional RAG Inherits This Problem
RAG's Dirty Secret: Stale Embeddings
Traditional RAG workflow:
- Ingest documents (Notion, Confluence, PDFs)
- Chunk text (split into 512-token chunks)
- Generate embeddings (vector representations)
- Store in vector DB (Pinecone, Weaviate, Chroma)
- User queries → Find similar chunks → Generate answer
The problem: Steps 2-4 happen once. Embeddings are static snapshots.
When things change:
- Code migrates from JWT to sessions (not re-embedded)
- Architecture changes (old embeddings still in vector DB)
- New features ship (not indexed until next full re-ingestion)
- Old docs remain (no expiration, no "outdated" flag)
Result: RAG answers based on stale data.
Example: The JWT Migration
Timeline:
January: Team uses JWT for authentication
- Notion doc: "Auth Architecture v1 - JWT"
- GitHub code:
auth-service/jwt.ts - RAG ingests, creates embeddings
March: Team migrates to sessions
- Slack #engineering: 50-message debate about JWT limitations
- Notion: "Auth Architecture v2 - Sessions" (new doc)
- GitHub PR #567: Migration code, old JWT code deprecated
- Old Notion doc: Still exists (marked "outdated" at top)
June: New developer asks RAG
Developer: "How does our authentication work?"
RAG:
- Finds embeddings from January (JWT doc)
- Generates answer: "Your authentication uses JWTs. Here's how it works..."
Reality: Team uses sessions since March.
Developer implements JWT flow (following RAG answer).
Code review: "We don't use JWTs anymore. Rewrite this."
Time wasted: 4 hours.
Whose fault?
- Not the developer (followed AI guidance)
- Not the RAG (answered based on available data)
- The system's fault: Static embeddings don't reflect change.
Why Re-Embedding Doesn't Solve It
"Just re-embed everything daily!"
Problems:
- Cost: Embedding 10,000 docs daily = $500+/month
- Performance: Full re-indexing takes hours (downtime)
- Still has lag: Changes between re-embeddings are invisible
- Doesn't solve multi-source: Slack discussion happens today, Notion doc updated next week—which is current?
Re-embedding is expensive and insufficient.
What is Live Context?
Live Context is an information system that:
- Continuously syncs data from sources (hourly, real-time via webhooks)
- Tracks temporal signals (creation time, update time, deprecation markers)
- Understands evolution (connects old decisions to new decisions)
- Ranks by recency (recent content weighted higher)
- Flags stale content (old docs marked as outdated)
- Unifies multi-source (Slack discussion + Notion spec + GitHub code = one narrative)
Live Context ≠ Just "newer embeddings". It's a fundamentally different architecture.
The Cost of Stale Context
Cost 1: Wasted Developer Time
Scenario: New engineer onboarding
With stale docs:
- Reads outdated architecture docs (30 minutes)
- Implements following old pattern (2 hours)
- Code review: "This is outdated, we changed approach 6 months ago"
- Rewrites using current pattern (2 hours)
- Total time wasted: 4.5 hours
With live context:
- Queries unified system: "How does our architecture work?"
- Gets current spec + Slack discussions about migration + GitHub code
- Implements correctly first time
- Time saved: 4.5 hours
At scale: 10 new engineers/year × 10 onboarding tasks each = 450 hours/year wasted on stale docs = $67,500 at $150/hour.
Cost 2: Wrong Decisions
Scenario: Architecture decision
With stale docs:
- PM checks Notion: "We support on-premise deployment"
- Commits to customer: "Yes, we can deploy on-premise"
- Engineering team: "We deprecated on-premise 6 months ago"
- PM to customer: "Actually, we can't do that anymore"
- Deal lost: $150k ARR
With live context:
- PM queries system: "Do we support on-premise?"
- Gets current status: "Deprecated 6 months ago (see Slack discussion, GitHub deprecation PR)"
- PM to customer: "We don't support on-premise, but here's our cloud security..."
- Deal continues with accurate info
Cost 3: Security Vulnerabilities
Scenario: Security best practices
With stale docs:
- Notion: "Use bcrypt for password hashing" (from 2020)
- New developer implements bcrypt
- Security audit: "We use Argon2 now (bcrypt deprecated in 2023)"
- Security debt introduced
With live context:
- Query: "Password hashing best practices"
- Gets current standard: Argon2 (with GitHub implementation reference)
- Implements correctly
- No security debt
Live Context Architecture
How Zine Implements Live Context
1. Continuous Sync (Not One-Time Ingestion)
Traditional RAG:
Ingest once → Embed → Store → Serve forever (stale)
Live Context (Zine):
Continuous sync:
- Hourly: GitHub, Slack, Notion, Linear (incremental updates)
- Webhooks (Pro plan): Real-time when content created
- Only new/changed content processed (efficient)
Result: Always current within 1 hour (or real-time with webhooks).
2. Temporal Ranking
Traditional RAG:
- All chunks treated equally
- Old docs rank as high as new docs
Live Context:
- Recency boost: Content from last 30 days ranked higher
- Deprecation detection: Docs marked "outdated" or "deprecated" ranked lower
- Evolution tracking: Connects old spec → new spec → implementation
Example query: "Authentication implementation"
Returns (ranked):
- Notion (updated last week): "Auth v2 - Sessions"
- GitHub code (current):
auth-service/sessions.ts - Slack #engineering (2 weeks ago): Discussion about migration
- Notion (flagged as outdated): "Auth v1 - JWT" ⚠️ Deprecated
User sees: Current approach + context for why it changed + old approach (flagged).
3. Multi-Source Synthesis
Traditional RAG:
- Query Notion → Answer based on Notion
- Doesn't check if GitHub code matches Notion docs
Live Context:
- Query across all sources simultaneously
- Synthesizes: Notion spec + Slack discussion + GitHub implementation + meeting decision
Example: "Why did we choose Postgres?"
Returns (unified):
- Slack #engineering (9 months ago): 50-message debate (Postgres vs. MongoDB)
- Meeting recording (timestamp 23:14): CTO's decision rationale (audio)
- Notion: "Database Architecture" (final decision documented)
- GitHub PR #123: Implementation
User gets complete narrative: The debate → The decision → The implementation.
4. Change Detection
Live Context tracks:
- New content added
- Content modified (Notion page updated, code committed)
- Content deprecated (marked explicitly or implicitly via time)
Alerts example:
- Notion "API Security Checklist" updated yesterday
- System alerts: "API security guidelines changed—review new requirements"
5. Graph-Based Relationships
Traditional RAG: Flat vector space (no relationships)
Live Context: Graph structure
- Nodes: Content (Slack messages, Notion docs, GitHub PRs)
- Edges: References (PR references issue, issue references customer request)
Example query: "SSO feature"
Returns (connected graph):
- Customer email → "Requested SSO"
- Slack #product → Discussed priority (references email)
- Notion spec → Requirements (references Slack discussion)
- Linear ticket → Implementation (references Notion spec)
- GitHub PR → Code (references Linear ticket)
- Slack #product → Launch announcement (references PR)
Traditional RAG: Returns 6 disconnected chunks. Live Context: Returns connected narrative (causally linked).
Real-World Examples
Example 1: The Redis Timeout Configuration
What changed:
- 3 months ago: Redis timeout set to 5000ms (working fine)
- Last week: PR #567 changed timeout to 1000ms (performance optimization)
- Today: Checkout API errors spiking
Traditional RAG (stale):
- Developer queries: "Redis timeout configuration"
- RAG returns: "Redis timeout is 5000ms" (from 3 months ago)
- Developer confused: "But the code says 1000ms?"
Live Context (Zine):
- Developer queries: "Redis timeout configuration"
- Returns:
- GitHub code (current):
timeout: 1000ms(changed last week) - GitHub PR #567: "Optimize Redis performance" (changed timeout)
- Slack #incidents (today): "Checkout errors spiking since timeout change"
- Old config:
timeout: 5000ms(flagged as outdated)
- GitHub code (current):
- Developer sees: Current config + recent change + likely problem cause
Example 2: The Deprecated API Endpoint
What changed:
- 6 months ago:
/api/v1/authendpoint (JWT-based) - 3 months ago:
/api/v2/authlaunched (session-based) - Today:
/api/v1/authstill works (for backwards compatibility) but deprecated
Traditional RAG (stale):
- Developer queries: "Authentication API"
- RAG returns: "Use
/api/v1/auth" (from old docs) - Developer implements v1 (deprecated)
- Code review: "Why are you using v1? Use v2."
Live Context (Zine):
- Developer queries: "Authentication API"
- Returns:
- GitHub (current):
/api/v2/auth(recommended) - Notion: "API v2 Migration Guide"
- Slack #engineering: "v1 deprecated, migrate to v2 by Q4"
- Old endpoint:
/api/v1/auth⚠️ Deprecated (backwards-compat only)
- GitHub (current):
- Developer uses v2 correctly
Example 3: The Feature That Shipped 2 Days Ago
What changed:
- 2 days ago: SSO feature shipped to production
Traditional RAG (stale, won't re-embed for days):
- Sales team queries: "Do we support SSO?"
- RAG: "SSO is planned for Q4" (from old roadmap doc)
- Sales to customer: "SSO coming Q4"
- Customer: "But I see it in your app right now?"
- Credibility lost
Live Context (Zine):
- Sales queries: "Do we support SSO?"
- Returns:
- Slack #product (2 days ago): "SSO shipped to prod!"
- GitHub PR #789: Merged 2 days ago
- Notion: "SSO User Guide" (published yesterday)
- Old roadmap: "SSO planned Q4" (flagged as outdated)
- Sales to customer: "Yes! We just shipped it 2 days ago."
- Credibility maintained
How to Fix Your RAG System
If You're Building RAG In-House
Checklist:
-
✅ Implement continuous sync (not one-time ingestion)
- Hourly or real-time webhook updates
- Incremental re-embedding (not full re-index)
-
✅ Add temporal signals to embeddings
- Include creation date, last modified date
- Boost recent content in ranking
-
✅ Track deprecation explicitly
- Flag docs with "outdated" markers
- Demote deprecated content in results
-
✅ Unify multi-source (not just docs)
- Ingest Slack, GitHub, email (not just Notion)
- Connect related content (PR references issue, etc.)
-
✅ Expose change history
- Show "old version" vs. "new version"
- Explain why it changed (link to Slack discussion)
Estimated engineering effort: 3-6 months for a 2-3 person team.
Or: Use a Live Context Platform (Zine)
Zine solves all of this out-of-the-box:
- ✅ Continuous sync (hourly + webhooks)
- ✅ Temporal ranking (recency-weighted)
- ✅ Deprecation detection (flags outdated content)
- ✅ Multi-source ingestion (30+ connectors)
- ✅ Graph-based relationships (connected narratives)
- ✅ Change tracking (evolution history)
Setup time: 15 minutes (connect tools, sync data).
No engineering required.
The Future: Always-Current Knowledge
The Problem with Human-Maintained Docs
Traditional model:
- Developers change code
- Someone (hopefully) updates docs
- Docs lag behind code (always)
This will never work at scale.
The Live Context Model
Automated model:
- Developers change code (GitHub commit)
- System detects change automatically
- System connects: Code change → Slack discussion → Notion spec
- System updates knowledge graph (no human intervention)
- Queries return current state (always)
Result: Docs are always current, automatically.
Where This Is Going
Phase 1 (Now): Live search
- Query returns current context (with recency ranking)
Phase 2 (2025-2026): Proactive alerts
- System detects: "API security guidelines changed"
- Alerts developers: "Review new security requirements"
Phase 3 (2026-2027): Auto-documentation
- Code changes → System auto-generates updated docs
- Slack decision → System auto-updates specs
- Docs maintain themselves
Phase 4 (2027+): Self-healing knowledge
- System detects stale content (no updates in 6 months + referenced code deleted)
- System auto-flags as deprecated
- System suggests updates based on current code
- Knowledge never rots
Why Zine
We built Zine because:
- Documentation always rots (human maintenance doesn't scale)
- RAG with static embeddings serves stale answers
- Teams need current context, not outdated docs
- Knowledge lives across tools (Slack, GitHub, Notion), not just docs
- Manual synchronization is impossible at scale
Zine is the first live context platform:
- Continuous sync: Hourly + webhooks (always current)
- Temporal ranking: Recent content prioritized
- Multi-source: 30+ connectors (Slack, GitHub, Notion, email, meetings)
- Graph-based: Understands relationships, not just similarity
- Evolution tracking: Connects old decisions → new decisions
- Change detection: Flags stale content automatically
Try it: zine.ai (free tier available)
Next Steps
If your RAG system is serving stale answers:
- ✅ Audit Your System: When was the last re-embedding? How old is your data?
- ✅ Test with Recent Changes: Query something that changed last week—does RAG know?
- ✅ Implement Continuous Sync: Or use a platform that does (like Zine)
- ✅ Add Temporal Signals: Rank recent content higher
- ✅ Connect Multi-Source: Ingest Slack, GitHub, not just docs
Or try Zine (15-minute setup, solves all of this):
- Sign up
- Connect Slack, GitHub, Notion
- Test query: "How does our authentication work?"
- See current context (not stale docs)
Related Guides:
- Read: Agentic Information Orchestration - Why RAG isn't enough
- Read: MCP Integration - Give your coding agent live context
- Read: Slack Knowledge Base - Search team discussions
- Schedule a demo - See live context in action
Documentation rots. RAG serves stale answers. Live context reflects reality.
Stop asking your AI about the past. Ask about the present.