Daily, auditable triage reports for selected public repositories in the
openimsdk organization, implemented as a Next.js service on Vercel.
The report distinguishes repository/API failures from real zero values and tracks:
- every open Issue, its complete public discussion, labels, assignees, waiting time, maintainer response status, and deterministic attention reason;
- every open pull request, reviews, checks, CI result, draft state, and staleness;
- twice-daily additions, follow-ups, closures, merges, and persistent backlog;
- per-repository totals and full historical snapshots;
- a concise OpenIM group notification linking to the complete report.
Vercel Cron calls protected morning and evening routes every day at 09:00 and
17:00 Asia/Shanghai. Each run fetches complete public GitHub data, refuses to
publish partial scans, stores immutable twice-daily snapshots plus latest.json in
Vercel Blob, then sends an OpenIM group notification containing the stable
report URL.
The Next.js server component only serializes list and summary fields to the browser. Full Issue discussions, PR reviews, and CI checks load from the item detail API when a row is selected.
Prerequisites: Node.js 22+ and an authenticated GitHub CLI.
npm install
npm run scan:local
npm test
npm run devThe local scan uses GITHUB_MONITOR_TOKEN or the current gh auth token. It
never writes GitHub data.
Connect a public Vercel Blob store and configure these server-side environment variables for Production:
GITHUB_MONITOR_TOKEN: fine-grained, read-only access to public repository metadata. Do not use a broad personal token.OPENIM_SECRET: OpenIM server secret used only to obtain a short-lived admin token at send time.CRON_SECRET: random value of at least 16 characters; Vercel supplies it as the cron request bearer token.BLOB_READ_WRITE_TOKEN: injected when the Blob store is connected.REPORT_BASE_URL: optional canonical production URL.
OpenIM endpoint, admin user, group, and sender identifiers are non-secret
configuration in config/openim.json.
The cron expressions in vercel.json are UTC and resolve to 09:00 and 17:00
in Asia/Shanghai. Two independent once-daily routes keep the schedule compatible
with Vercel Hobby plan interval limits.
Maintainers are comments or reviews whose GitHub author_association is
OWNER, MEMBER, or COLLABORATOR.
- P1: an external Issue reply in the last 24 hours has no later maintainer response, or a pull request has failing CI.
- P2: an Issue has no maintainer response for 30 days, or a pull request has no maintainer review.
- P3: another unanswered Issue, or a pull request inactive for 30 days.
- P4: no urgent deterministic triage signal.
Reports contain only public GitHub data. Secrets and OpenIM tokens are never written to report artifacts.