Watches user activity on issues, sends reminders on disqualification threshold, and eventually unassigns inactive user to ensure that tasks don't stall, and subtracts XP.
The system utilizes a dedicated CRON workflow (cron.yml) that runs periodically to manage and update reminders. This CRON system maintains state in a database and automatically enables/disables itself based on pending updates. During CRON runs it creates installation-scoped Octokit instances per repository and directly executes the reminder/disqualification flow without editing comments.
Daemon Disqualifier is built as a TypeScript-based GitHub Action that monitors pull request activity and manages reviewer assignments. The system uses a combination of event-driven processing and scheduled tasks to maintain an efficient code review workflow.
The project includes a comprehensive test suite using Jest:
- Unit Tests: Cover individual components and utilities
- Integration Tests: Test interaction between components
- Mock System (
tests/__mocks__/):- Database mocks
- HTTP route mocks
- GitHub API mocks
- User activity simulation
bun installRuntime state is stored in Postgres through DATABASE_URL.
The deployment workflow only provisions the shared ubiquity-os-postgres Prisma database in Deno Deploy. Deno app lifecycle is managed by ubiquity-os/deno-deploy@main, and both the Deno worker and cron.yml read DATABASE_URL from the selected GitHub environment.
Collision avoidance inside the shared database is handled by project-specific tables.
Set DATABASE_URL in both the main and development GitHub environments before enabling Deno deploys or CRON runs.
To start Jest testing, run
bun run test- plugin: ubiquity-os/daemon-disqualifier
with:
# Time period after which inactive reviewers are unassigned
negligenceThreshold: "7 days"
# Time period after which warning notifications are sent
followUpInterval: "3.5 days"
# Enable faster processing for priority items
prioritySpeed: true
# Enforce pull request requirement
pullRequestRequired: true
# List of GitHub webhook events to process (these are the tail of the webhook event i.e. pull_request.review_requested)
eventWhitelist:
- "review_requested"
- "ready_for_review"
- "commented"
- "committed"
availableDeadlineExtensions:
enabled: true
amounts:
- "Priority: 1 (Normal)": 5
- "Priority: 2 (Medium)": 4
- "Priority: 3 (High)": 3
- "Priority: 4 (Urgent)": 2
- "Priority: 5 (Emergency)": 1