Earned auto-apply (fire + observability + UI), retrain cadences, Explore arrow-nav #143
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Builds on the heads-as-suggestion-source milestone (PR #142). Adds the rest of the tagging-v2 learn-from-tags loop.
Earned auto-apply (#114)
Graduated heads now apply their tag without a human — on by default (opt-out), gated by ≥30 support + each head's own 97%-precision cutoff; every auto-tag is
source='head_auto'and reversible.GET /api/heads/metrics. Migration 0060.Retrain cadences
Nightly
scheduled_train_headsbeat (passive) + a "Retrain heads" button in the Explore trail bar (active), so your tagging feedback folds into the heads without a trip to Settings.Explore ← / → navigation
Arrow keys walk the breadcrumb: ← back, → forward to a visited item or a random neighbour. Browser-style cursor (forward history preserved on back-step).
Deploy
Migrations 0059 + 0060 run automatically. Auto-apply is ON by default — after deploy + a training pass, the daily sweep applies tags from graduated heads. Disable on the card if you'd rather ease in; the metrics table is the dial to tune the precision target.
🤖 Generated with Claude Code
Graduated heads can now apply their tag without a human — gated so it's safe: - FIRING GATE: a head fires only when the master switch (head_auto_apply_enabled, default OFF) is on AND it has >= head_auto_apply_min_positives (default 30) clean labels. A precise-looking but under-supported low-N head can't spray tags. - auto_apply_sweep (heads.py): streams every embedded image in chunks, scores against the eligible heads (numpy, no sklearn), applies each head's tag where score >= its auto_apply_threshold and the tag isn't already applied/rejected, with source='head_auto' (distinguishable + reversible). dry_run counts only. - HeadAutoApplyRun (migration 0059) tracks each sweep / preview; apply_head_tags task (ml queue) + scheduled_apply_head_tags daily beat (no-op unless enabled) + recovery sweep + retention(20). - API: POST /api/heads/auto-apply {dry_run} (202 / 409 running / 400 disabled), GET /api/heads/auto-apply (recent runs + per-concept report). Settings head_auto_apply_enabled + min_positives via /api/ml/settings. Tests: sweep applies above threshold, dry-run writes nothing, skips under- supported + ungraduated heads; API disabled/dry-run/conflict guards. NEXT (slice 2): the observability the operator asked for — per-concept misfire (auto-applied-then-removed) + under-fire tracking, time-series snapshots, and a reporting API to tune. Slice 3: the UI (enable, preview, trends). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa