Bundles the dev commits since the last main merge, all CI-green:
Tagging eval (milestone #114 slice 1) — 6e3c5f6 backend + 6cd7281 frontend. Admin tile (Settings → Tagging) that trains a logistic-regression head vs the old centroid on your own tags (reusing stored SigLIP embeddings), reports cross-validated AP/F1 + a learning curve + example thumbnails. Persisted in tag_eval_run (mirrors library_audit_run) so the report survives navigation. Runs on the ml queue; recovery sweep + retention + beat. scikit-learn added to the ML image.
Bundles the dev commits since the last main merge, all CI-green:
- **Tagging eval (milestone #114 slice 1)** — `6e3c5f6` backend + `6cd7281` frontend. Admin tile (Settings → Tagging) that trains a logistic-regression head vs the old centroid on your own tags (reusing stored SigLIP embeddings), reports cross-validated AP/F1 + a learning curve + example thumbnails. Persisted in `tag_eval_run` (mirrors `library_audit_run`) so the report survives navigation. Runs on the ml queue; recovery sweep + retention + beat. scikit-learn added to the ML image.
- **Explore focus-everywhere** (`c8a8e23`), **Provenance in Explore** (`e34f79f`), **Explore page-scroll/top-gap fix** (`d63dfa5`).
- **Sticky table headers** on the Allowlist/Alias/ImportTask tables (`9583783`).
- **Cluster tag-gaps backend cleanup** (`e3855a5`).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Allowlist / Alias / ImportTask tables scroll their bodies (height=360/480) but
the column headers scrolled away with the rows, so you lost the column labels
(operator-flagged 2026-06-27). Add Vuetify `fixed-header` so the header row
stays pinned while the body scrolls.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Slice 1 of milestone #114 (tagging v2). Proves the frozen-embedding + trained-
head spine on the operator's own data, reusing the SigLIP embeddings already
stored on image_record — no re-embedding, no GPU.
Per concept: train a logistic-regression HEAD (positives + negatives = explicit
rejections + sampled unlabeled) vs the old single-CENTROID baseline; report
cross-validated precision/recall/AP for both, a LEARNING CURVE (AP/F1 as tagged
positives grow 10→30→100→300), and example image ids (head-would-suggest /
head-doubts-positive) to eyeball.
Persisted so the report SURVIVES navigation (operator-flagged): the run + full
report live in a new tag_eval_run row (mirrors library_audit_run); the admin
card will rehydrate from GET on mount, not transient state.
- models.TagEvalRun + migration 0056; runs on the ml queue (only worker with
numpy/sklearn) — numpy/sklearn lazy-imported so the API can still enqueue.
- services/ml/tag_eval (compute + start helper, one-running guard), tasks.ml
.tag_eval_run, api/tag-eval (POST create, GET history light / detail w/ report).
- recover_stalled_tag_eval_runs sweep + retention (keep last 20) + 5-min beat
(rule 89). scikit-learn added to requirements-ml.
- tests: param normalization + the rehydrate read-path + create/conflict.
Frontend admin card (trigger + render persisted report) follows next.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Frontend for #1130. A maintenance tile in Settings → Tagging:
- Editable concept list + "Run eval" → POST /api/tag-eval (one running at a time).
- Rehydrates on mount via the persisted run (getRun by latest id) and polls while
running — so the report SURVIVES navigation (operator-flagged); the task runs
backend-side regardless and the card reconnects to its row.
- Renders the saved report: per-concept head-vs-centroid metrics table (AP/F1/
precision/recall) with Δ AP, the learning curve (AP @ N positives), and
thumbnail galleries (head-would-suggest / head-doubts-positive) for eyeballing.
Backend: _examples now stores thumbnail_urls (not just ids) so the report is a
self-contained artifact that renders without per-id lookups on reload.
No new top-level surface — slots into the existing maintenance area.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Bundles the dev commits since the last main merge, all CI-green:
6e3c5f6backend +6cd7281frontend. Admin tile (Settings → Tagging) that trains a logistic-regression head vs the old centroid on your own tags (reusing stored SigLIP embeddings), reports cross-validated AP/F1 + a learning curve + example thumbnails. Persisted intag_eval_run(mirrorslibrary_audit_run) so the report survives navigation. Runs on the ml queue; recovery sweep + retention + beat. scikit-learn added to the ML image.c8a8e23), Provenance in Explore (e34f79f), Explore page-scroll/top-gap fix (d63dfa5).9583783).e3855a5).🤖 Generated with Claude Code