mise ~/.config/mise/config.toml tools: crush@0.91.0

feat(api): add /admin/solved endpoint and commit source handling
This commit is contained in:
Prad Nukala
2026-08-25 15:43:21 -04:00
parent aba3d9b18b
commit e4de74c935
4 changed files with 99 additions and 12 deletions
+10 -3
View File
@@ -40,6 +40,7 @@ day never feeds drills just because its calendar week lapsed.
| `POST /webhook/github` | HMAC (`WEBHOOK_SECRET`) | `/done <n> pass\|fail` comments (owner only, any issue); `review`-issue close → gate scoring |
| `GET /chart/{progress,ladder,heatmap}.svg`, `GET /badge/gate.svg` | public | hand-rolled SVGs, `max-age=300` (GitHub Camo's freshness floor) |
| `GET /api/stats` | public, CORS-pinned to the docs origin | one JSON document for `/progress` |
| `POST /admin/solved` | `Authorization: Bearer <LINK_KEY>` | `{"lc":[…]}` — solutions committed under `work/`; logs each *first* solve (`source='commit'`), skips anything past stage `new`, takes `?dry=1&date=` |
| `POST /admin/{digest,review,reconcile}` | `Authorization: Bearer <LINK_KEY>` | manual triggers; `digest` takes `?dry=1&force=1&date=` |
## Crons (DST-proof)
@@ -59,9 +60,15 @@ routes). Bindings in `wrangler.jsonc`: `DB` (D1 `srs`), `EMAIL`
(`send_email`, restricted to the verified destination). Sender domain
`prdlk.com` is onboarded to Email Sending.
The `sync-d1.yml` Actions workflow additionally pushes curriculum issue
edits into D1 immediately (`POST /admin/reconcile` with the
`SRS_ADMIN_KEY` repo secret); the morning cron is the backstop.
Two Actions workflows push into D1 with the `SRS_ADMIN_KEY` repo secret:
`sync-d1.yml` sends curriculum issue edits to `POST /admin/reconcile`
(the morning cron is the backstop), and `close-solved.yml` sends the whole
implemented `work/` set to `POST /admin/solved` on every push to `main`.
That second call is what keeps a committed solution from being invisible
here: closing its issue is not a state change the Worker can see — the
catalog reconcile ignores issue state, and only `logAttempt()` moves the
ladder. `close-solved` still owns the issue close itself (it knows the files
and the commit), so this path only writes D1 and mirrors Project fields.
## Local dev