ADR-002: Author Feed Path Convention (Profiles + Announcements)¶
Status¶
Accepted
Context¶
Authors need a unified feed showing both: 1. PROFILE documents: Egregora's analyses about the author 2. ANNOUNCEMENT documents: User command events (bio updates, alias changes, etc.)
Warning observed: PROFILE doc missing 'subject' metadata, falling back to posts/
This ADR establishes the feed-style layout where each author has their own directory containing all documents about them or by them.
Decision¶
Documents with subject metadata route to author-specific subdirectories:
URL: /posts/profiles/{author_uuid}/{slug} Filesystem: docs/posts/profiles/{author_uuid}/{slug}.md
Document Types in Author Feed¶
1. PROFILE Documents¶
- Purpose: Egregora's analytical posts ABOUT the author
- Examples: "Alice: Photography Techniques", "Bob: Technical Contributions"
- Slug format:
{date}-{aspect}-{author_id}(e.g.,2025-03-15-photography-550e8400) - Append-only: Each analysis creates a NEW post (never overwrites)
2. ANNOUNCEMENT Documents¶
- Purpose: User command events (bio changes, alias updates, avatar changes)
- Examples: "Alice Updated Bio", "Bob Set New Alias"
- Slug format:
{date}-{event_type}-{author_id}(e.g.,2025-03-15-bio_update-550e8400) - Append-only: Each command creates a NEW post
Metadata Requirements¶
PROFILE documents MUST have:
ANNOUNCEMENT documents MUST have:
Routing Logic¶
Feed-Style Benefits¶
- Complete author timeline: All content about/by an author in one place
- Chronological ordering: Date-prefixed slugs enable temporal sorting
- Append-only architecture: History is preserved, never overwritten
- Context for LLM: Profile history feeds into future analyses via Jinja templates
- MkDocs blog integration: Each author directory works as a blog category
Consequences¶
Easier¶
- Unified feed per author showing evolution over time
- Easy to find all content related to a specific author
- Profile history available for LLM context (avoids repetition)
- Natural blog-style layout in MkDocs
- Clear separation between content types via naming
Harder¶
- Generators MUST always set
subjectmetadata (validated at creation time) - More complex routing logic than flat structure
- Profile history loading adds context fetch step
Implementation Requirements¶
validate_profile_document()enforcessubjectmetadata_generate_meaningful_slug()creates semantic, unique slugsget_profile_history_for_context()compiles timeline for LLM- URL conventions route both PROFILE and ANNOUNCEMENT to author feeds
Related¶
- ADR-001: Media Path Convention
- GitHub Issue #1256: Fix Profile Routing to Author Subdirectories
src/egregora/agents/profile/generator.py: Append-only profile generationsrc/egregora/agents/profile/history.py: Jinja-based history compilationsrc/egregora/agents/commands.py: ANNOUNCEMENT document creation