Tagging-v2: heads are the suggestion source (learn-from-tags) + rail accept/reject #142
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?
Lands the first production milestone of tagging-v2 (#114): suggestions now come from per-concept heads that learn from the operator's tags, replacing the static Camie predictions + per-tag centroid.
What's in this merge
tag_head+head_training_run(migration 0058),heads.pytrain/score service (reuses the eval's proven math),train_headsCelery task + recovery/retention/beat,/api/headsendpoints,head_min_positives/head_auto_apply_precisionsettings.SuggestionService.for_imagesources fromheads.score_image; Camie prediction + centroid removed from the suggestion path. Suggestion tests rewritten head-based.Deploy sequence (order matters)
:latest— migration 0058 runs automatically.Deliberately deferred (follow-up)
The wider Camie rip (ingest tagger + ImagePrediction table + inert alias UI) and the next milestone slice (CCIP characters + comic-panel/region crops) are separate.
🤖 Generated with Claude Code
test_rejected_tag_surfaced_flagged_then_reversible asserted "Rejectme" but an existing tag keeps its stored name ("rejectme"), so the suggestion's display_name is lowercase. Match by canonical_tag_id instead (casing-robust). The feature was correct — only the assertion was wrong (run 1595 integration). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa