The redroid box has no Claude API, so add two HTTP backends used there: ocr_extract()
(the on-box mrnumber-ocr tesseract service → {text,lines}) and openai_chat() (an
OpenAI-compatible /v1/chat/completions LLM on a DO GPU droplet). Plus selectors
extract_backend() (ocr|vision, default vision) + rating_llm_url()/model() so plum-dev
keeps the Claude path unchanged. Additive; @whatsapp unaffected.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The factory was hard-wired to quinn (client_id arg + QUINN_MY_* env). Extract a
RecordingProfile { inputArg, buildEnv }: quinnRecordingProfile() is the unchanged
default (client_id → --client-id, QUINN_MY_*), so @whatsapp is byte-for-byte
unaffected; peopleRecordingProfile() forwards an optional `ref` (→ --ref) and injects
PEOPLE_* for mr-number (whose lookup script records the people-service signal itself).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add record_people_signal() + people_base_url()/people_service_token() targeting the
cocotte people service POST /internal/people/signals (mesh-only, lime:3061). Screening
verdicts become person signals keyed by (handle, channel); the person is auto-upserted.
valueText carries the bare verdict consumers switch on; rich detail rides valueJsonb.
The legacy quinn.my post_screening() is retained (still used by @whatsapp) but marked
do-not-add-new-callers; remove once that app migrates.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
lix-build + lix-configs (derived build toolchain), ui-icons + ui-fab (recovered
from deployed SPA dist sourcemaps), ui-zname (recovered from verdaccio storage).
All published to cocotte-forge Verdaccio; this repo is the durable source home.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>