feat: cross-product community signal labeling — ingest and label signals from Kiwi, Peregrine, Snipe #32
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Overview
Extend Avocet's card-stack labeling UI and benchmark harness to ingest unlabeled
CommunitySignalrecords from the cf-core community DB (fed by Kiwi, Peregrine, Snipe) and route labeled outputs back to cf-orch for fine-tuning queue dispatch.Background
Avocet is already the menagerie's labeling and classifier training tool (email classifier, benchmark harness, fine-tune harness). The cf-core
communitymodule (Kiwi shared meal plan design, 2026-04-12) and cf-orchcf-ingestservice (separate ticket) create an unlabeled signal backlog that needs human review before entering fine-tuning. Avocet is the natural home for this labeling work.New signal type adapters
recipe_outcomerecipe_blooperlisting_qualityseller_trustEach adapter renders the signal's features in the card-stack UI using a type-specific card template. The existing ASMR drag-to-bucket interaction applies to all types.
Architecture
app/sources/community_signals.py— pollscf-core.communityPostgreSQL forlabel = NULLrecords by signal_typefrontend/src/components/cards//ingest/signalswith the assigned labelTier and access
Acceptance criteria
community_signals.pysource adapter polls community DB, returns unlabeled signals by typerecipe_outcomesignals, label 5 via API, verify labeled count in community DBRelated