Daily automation
Last live update 2026-09-26 08:33 UTC. Runs automatically every day at 06:00 UTC via GitHub Actions.
"Sync all" dispatches the same workflow the nightly cron runs — GitHub + Hubstaff ingest, work-unit derivation, then the Claude ranking conclusion — on the GitHub Actions runner, not this deployment (credentials never live in Vercel; see below). Limited to once every 60 minutes so a repeated click can't burn the org's API quota.
Last run and last success are different things
A source that fails every night still has a recent last run. Showing only that would make stale data look fresh.
| Source | State | Last success | Rows | Last run | Notes | Action |
|---|---|---|---|---|---|---|
| github | fresh | 2026-09-26 08:33 42 min ago | 3,109 | 2026-09-26 08:33 ok | Code activity across every branch of every repository. CLI only — runs for minutes. | CLI only |
| hubstaff | partial | 2026-09-26 08:33 42 min ago | 64 | 2026-09-26 08:33 ok | Tracked time and tasks. Backfilled in 7-day chunks; the API refuses wider windows. 18 event(s) failed; last: DatabaseError: null value in column "employee_id" of relation "time_intervals" violates not-nu | CLI only |
| derive | fresh | 2026-09-26 08:45 30 min ago | 204 | 2026-09-26 08:45 ok | Derives work units from stored pull requests and links evidence. Local, idempotent, no credential. | |
| claude | never | never succeeded | — | never run | Organisation-level AI usage. This provider cannot attribute usage to a person. | CLI only |
| openai | never | never succeeded | — | never run | AI usage and cost. Organisation level — the two accounts are product traffic, not developers. | CLI only |
| aws | failing | 2026-09-26 08:45 30 min ago | 245 | 2026-09-26 08:42 failed | Infrastructure activity and cost. Not connected — needs a read-only AWS profile. | CLI only |
| asana | never | never succeeded | — | never run | Live path verified 2026-09-02 against a PERSONAL workspace (29 tasks, 3 projects). No OneTouch team workspace exists yet, so nothing here describes OneTouch work. | CLI only |
| notion | stale | 2026-09-23 23:55 2.4 days ago | 8 | 2026-09-23 23:55 ok | Tasks, documents and comments. Not connected — needs NOTION_TOKEN and the pages shared with the integration. An integration sees only what is explicitly shared, so an empty result means nothing was connected, not that nothing was written. | CLI only |
| ranking | fresh | 2026-09-26 08:50 30 min ago | 1 | 2026-09-26 08:45 ok | Claude-generated conclusion over the KPI + commit-quality + time evidence above. Runs last in the daily pipeline, after derive. See /ranking. | CLI only |
Why the credentials never touch this deployment
A deliberate limit, not a missing feature.
The GitHub, Hubstaff and Anthropic credentials the ingest needs are not in this deployment's environment — only DATABASE_URL is. Putting live org credentials into a public-facing Vercel deployment would widen the blast radius of a leaked deployment for no real capability in return. Instead, GitHub/Hubstaff/Anthropic secrets live only in this repo's GitHub Actions secrets, and Sync all above just asks that workflow to run now instead of waiting for 06:00 UTC — this deployment only ever holds a narrowly-scoped token that can start that one workflow. derive in the table is the one exception: it reads pull requests already in the database, needs no credential, and is idempotent, so it can run directly from this deployment.
# to run the full ingest by hand instead, from the project directory with # DATABASE_URL and the credentials in .env.local set: npx tsx scripts/sync.ts # GitHub + Hubstaff + Asana/Notion if configured npx tsx scripts/derive-work.ts # work units from merged PRs (WORK_SOURCE=github-derived only) npx tsx scripts/generate-ranking.ts # Claude ranking conclusion (needs ANTHROPIC_API_KEY)