Corpus Collaboration System Documentation¶
Overview¶
The OpenContracts Corpus Collaboration System enables rich, community-driven interactions within corpus contexts. This system transforms OpenContracts from a document annotation platform into a collaborative knowledge hub by adding discussion capabilities, voting/reputation systems, and moderation tools.
Epic Issue¶
This system was implemented as part of Epic #581 - Corpus Interactivity: Discussion Collaboration System.
Implemented Sub-Epics¶
The following sub-epics have been completed:
- #549 - Update GraphQL schema and mutations for thread support
- #550 - Epic: Voting System & Reputation
- #554 - Create GraphQL mutations for voting with rate limiting
- #557 - Create GraphQL mutations for moderation actions
- #558 - Epic: Badge System
- #562 - Epic: Notification System
- #565 - Epic: Corpus Engagement Metrics & Analytics
Current Implementation Status¶
Backend: ✅ Complete¶
The backend implementation is fully functional with: - Complete database models for threads, voting, reputation, moderation, badges, and notifications - Comprehensive GraphQL API with mutations and queries - Robust permission system with corpus owners and designated moderators - Rate limiting to prevent abuse - Automatic reputation calculation and notification creation via Django signals - Soft delete functionality for reversible moderation - Badge system with auto-awarding capabilities - Real-time notification system for all user interactions - Extensive test coverage (8 test files, 100,000+ characters of tests)
Frontend: ✅ Partial Implementation¶
The frontend has partial implementation: - Agent mentions with TipTap editor extension (autocomplete UI) - Chat interface components for agent conversations - Backend API is ready to support full UI implementation for discussion threads
Core Features¶
1. Discussion Threads¶
- Create threaded discussions at the corpus or document level
- Support for nested message replies (unlimited depth)
- Thread metadata: title, description, creation timestamp
- Conversation types: CHAT (agent-based) or THREAD (discussion)
2. Voting & Reputation System¶
- Upvote/downvote functionality on messages
- User reputation tracking (both global and per-corpus)
- Denormalized vote counts for performance
- Asynchronous reputation calculation via signals
- Protection against self-voting
3. Moderation System¶
- Corpus-level moderator designation with granular permissions
- Thread locking to prevent new messages
- Thread pinning to highlight important discussions
- Soft deletion of threads and messages (reversible)
- Complete audit trail of all moderation actions
- Permission hierarchy: superusers > corpus owners > designated moderators > creators
4. Badge System¶
- Global and corpus-specific badges
- Manual and automatic badge awarding
- Configurable criteria for auto-awards (reputation thresholds, contribution metrics)
- Badge icons and customizable colors
- Complete audit trail of badge awards and revocations
- Integration with notification system
5. Notification System¶
- Real-time notifications for all user interactions
- 14 notification types: replies, mentions, votes, badges, moderation actions, thread participation
- @username mention detection with smart parsing
- Configurable read/unread status
- GraphQL API for managing notifications
- Automatic cleanup via signal handlers
- Rich notification context data
6. Agent Mentions¶
- Reference AI agents in chat messages using
@agentsyntax - Autocomplete search for agents via GraphQL query
- Support for global agents and corpus-scoped agents
- Server-side permission enforcement using
visible_to_user() - Markdown link format:
[@Agent Name](/agents/agent-slug) - ManyToMany relationship tracking between messages and mentioned agents
- Default agents: Document Assistant, Corpus Assistant
7. Rate Limiting¶
- Multi-level rate limiting to prevent abuse
- Different limits for different operation types
- User-tier based limits (superuser > authenticated > anonymous)
- IP and user-based tracking
8. Engagement Metrics & Analytics¶
- Denormalized engagement metrics per corpus (threads, messages, contributors)
- Time-based metrics (7-day and 30-day activity)
- Async calculation via Celery tasks
- Global and corpus-specific reputation leaderboards
- GraphQL queries for metrics and leaderboards
- Dashboard-ready aggregated statistics
Documentation Structure¶
This documentation is organized into the following sections:
- Overview - This document
- Backend Architecture - Database models, signals, and core logic
- GraphQL API - Mutations, queries, and type definitions
- Voting & Reputation - How voting and reputation scoring works
- Moderation System - Moderator roles, permissions, and actions
- Notifications - Notification system and user alerts
- Testing - Test coverage and testing strategies
- Implementation Timeline - What was built and when
Quick Links¶
Key Backend Files¶
- Models:
opencontractserver/conversations/models.py,opencontractserver/badges/models.py,opencontractserver/notifications/models.py,opencontractserver/agents/models.py - Signals:
opencontractserver/conversations/signals.py,opencontractserver/notifications/signals.py - Thread Mutations:
config/graphql/conversation_mutations.py - Voting Mutations:
config/graphql/voting_mutations.py - Moderation Mutations:
config/graphql/moderation_mutations.py - Badge Mutations:
config/graphql/badge_mutations.py - Notification Mutations:
config/graphql/notification_mutations.py - Queries:
config/graphql/queries.py - Rate Limits:
config/graphql/ratelimits.py - Mention Parser:
opencontractserver/utils/mention_parser.py
Test Files¶
opencontractserver/tests/test_threading.pyopencontractserver/tests/test_voting.pyopencontractserver/tests/test_voting_mutations_graphql.pyopencontractserver/tests/test_moderation.pyopencontractserver/tests/test_conversation_mutations_graphql.pyopencontractserver/tests/test_conversation_query.pyopencontractserver/tests/test_badges.pyopencontractserver/tests/test_notifications.pyopencontractserver/tests/test_notification_graphql.pyopencontractserver/tests/test_agents.py
Development Guidelines¶
All contributions to this feature set followed these requirements:
Test Coverage¶
- Backend: All changes include comprehensive tests
- Run with:
docker compose -f test.yml run django python manage.py test - Target: >90% coverage for new code
-
All tests must pass before PR approval
-
Frontend: UI components must include Playwright component tests
- Run with:
yarn run test:ct - Mock backend data appropriately
- Test user interactions, loading states, and error handling
Code Quality¶
- Pre-commit hooks: Run
pre-commit run --all-filesbefore pushing - Ensures code formatting (Black, isort, prettier)
- Linting (flake8, ESLint)
- Type checking where applicable
Pull Request Process¶
- Target Branch: PRs opened against the
v3.0.0.b3branch - PR Description: Includes link to issue, description of changes, test coverage summary, screenshots/videos for UI changes
- Reviews: At least one approval required
- CI/CD: All GitHub Actions checks must pass
Next Steps¶
The following epics remain to be implemented:
- #569: Epic: Thread Search & Discovery
- #572: Epic: Frontend UI Implementation (Discussion threads UI - agent chat UI partially complete)
Last Updated: 2026-01-09