feat(feeds): implement timeline and discover feed system with aggregator docs master
## 🎉 Major Feature: Complete Feed System Implementation Implements the complete Timeline and Discover feed architecture for Coves, following atProto patterns with proper separation of concerns (handlers → services → repositories). This is a foundational feature for the alpha release. ### New Features **Timeline Feed (User-Specific)** - `social.coves.feed.getTimeline` XRPC endpoint - Authenticated user feed showing posts from subscribed communities - Full architecture: Handler → Service → Repository - Integration tests with cursor pagination (368 lines) **Discover Feed (Public)** - `social.coves.feed.getDiscover` XRPC endpoint - Public feed showing recent posts from all communities - Optimized for performance with documented indexing strategy - Comprehensive security tests (273 lines) **Shared Infrastructure** - Created `feed_repo_base.go` (340 lines) to eliminate code duplication - Shared lexicon definitions in `social.coves.feed.defs` - HMAC-SHA256 signed cursors for pagination integrity - Consistent error handling across both feeds ### Technical Improvements **Code Quality** - Eliminated ~700 lines of duplicate code via shared base repository * timeline_repo.go: 426 → 131 lines (-69% duplication) * discover_repo.go: 383 → 124 lines (-68% duplication) - Consistent formatting with gofumpt - Comprehensive inline documentation **Security Enhancements** - HMAC cursor signing prevents pagination tampering - CURSOR_SECRET environment variable for production deployments - DID format validation (must start with "did:") - Rate limiting strategy documented (100 req/min per IP) - Input validation at handler level **Performance** - Database indexes documented for optimal query performance - Cursor-based pagination for large result sets - Efficient joins between posts, communities, and users ### Aggregator System Updates **Documentation** - Documented critical alpha blocker: aggregator user registration - Aggregators cannot post until indexed as users in AppView - Proposed solution: `social.coves.aggregator.register` endpoint - Quick fix alternative documented for testing **Code Cleanup** - Consistent formatting across aggregator codebase - Improved test readability - Updated PRD with alpha blockers section ### Files Changed (30 files, +2406/-308 lines) **New Implementations** - `internal/api/handlers/timeline/` - Timeline XRPC handler - `internal/api/handlers/discover/` - Discover XRPC handler - `internal/core/timeline/` - Timeline business logic - `internal/core/discover/` - Discover business logic - `internal/db/postgres/feed_repo_base.go` - Shared repository base - `internal/db/postgres/timeline_repo.go` - Timeline data access - `internal/db/postgres/discover_repo.go` - Discover data access - `internal/atproto/lexicon/social/coves/feed/` - Feed lexicons - `tests/integration/timeline_test.go` - Timeline integration tests - `tests/integration/discover_test.go` - Discover integration tests **Updated** - `cmd/server/main.go` - Feed service initialization - `internal/api/routes/` - Timeline and discover routes - `docs/aggregators/PRD_AGGREGATORS.md` - Alpha blocker docs - `tests/integration/helpers.go` - Shared test utilities ### Testing - ✅ All 11 integration tests passing - ✅ Timeline feed with authentication - ✅ Discover feed security validation - ✅ Cursor pagination integrity - ✅ Aggregator authorization flows ### Migration Path To revert this entire feature in the future: ```bash git revert -m 1 <this-merge-commit-id> ``` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>