feat(carwash): entry-stream sampling for the review outbox; park-2 wired to the collector
Build & push images / images (push) Successful in 4m22s
Build & push images / images (push) Successful in 4m22s
The wash stream is small; the entry camera photographs every car in exactly the view the classifier is trained on. The booth can now queue entry vehicle reads as pure training material — crop + the camera's class, no order, no operator, no category. - Core announces every vehicle read (deviceEvents.emitVehicleRead from snapshot.ts); the Car Wash module listens, samples entry reads in-process (sampleEntry: exactly one in N) and queues them (enqueueEntry). CARWASH_REVIEW_ENTRY_SAMPLE=N; 1 = every entry (storage and bandwidth are not the limit — user); 0/unset = off. Forwarded by compose. - Packages carry kind: "wash" | "entry". Collector: kind column, entry meta validated without the operator fields, review screen shows an entry sample as such, export has a kind column, operator agreement computed from wash items only. Setup line shows "1 in N entries sampled"; status carries entrySample. - komodo: park-2's four review lines enabled (collector URL by Netbird DNS name, booth-2, the shared per-booth secret, every entry sampled) — the collector is up on the overlay. - Tests on both sides. Wiki: vision-review-outbox (entry stream + the internet-feed assessment), log. Claude-Session: https://claude.ai/code/session_01FWncR69HgGPuei1dLrW3cU
This commit is contained in:
@@ -39,6 +39,24 @@ locked-down collector without exposing anything to the open internet.
|
||||
image is dropped from the row once delivered; a voided order is abandoned unsent; anything
|
||||
older than 14 days is abandoned ("expired") rather than resurfacing a fortnight in a burst.
|
||||
|
||||
## The entry stream — the real accelerator (built 2026-09-07)
|
||||
|
||||
The wash stream is small; the **entry camera photographs every car**, in exactly the view the
|
||||
classifier is trained on, with zero domain shift. So the booth can also queue **one in N entry
|
||||
vehicle reads** as pure training material: the crop and the camera's class, *no* order, *no*
|
||||
operator, *no* category — same crop-and-blur pipeline, same one-way path, same privacy
|
||||
properties. `CARWASH_REVIEW_ENTRY_SAMPLE=N` (0/unset = off; needs the three upload settings).
|
||||
Seam: the core announces every vehicle read (`deviceEvents.emitVehicleRead`, snapshot.ts, entry
|
||||
and exit) and the Car Wash module decides — it samples entry reads in-process (`sampleEntry()`,
|
||||
exactly one in N) and calls `enqueueEntry()`; the core never imports the module. Packages carry
|
||||
`kind: "wash" | "entry"`; the collector stores the kind, the review screen shows an entry sample
|
||||
as "entry stream — label the vehicle", the export carries a `kind` column, and **operator
|
||||
agreement is computed from wash items only** (an entry sample has no operator decision).
|
||||
|
||||
An internet feed was considered the same day and kept OUT of the collector's ingest: licensed
|
||||
sets only, in a separate folder with provenance, used as warm-up and weighted down, and never
|
||||
the judge of accuracy — the evaluation set is gate crops only.
|
||||
|
||||
## The package
|
||||
|
||||
`multipart/form-data`: `meta` (JSON) + `image` (JPEG). Meta = `{ v, booth, item, order, at,
|
||||
|
||||
+12
@@ -3121,3 +3121,15 @@ the overlay address; commented `trainer` profile seam for the GPU), a third buil
|
||||
build-images.yml, and a `wash-collector` stack on `art-docker-station` in komodo/resources.toml
|
||||
(secret refs to fill). Booth payload now carries `operatorCategory.classes`. Tests: app.test.ts.
|
||||
Updated [[vision-review-outbox]], [[fleet-deployment-komodo]].
|
||||
|
||||
## [2026-09-07] ingest | Entry-stream sampling for the review outbox
|
||||
User asked about feeding internet pictures through the collector; assessment: licensed only,
|
||||
separate folder, warm-up weight, never the evaluation set — and the stronger accelerator is the
|
||||
ENTRY stream (every car, the gate view, zero domain shift). Built: `deviceEvents.emitVehicleRead`
|
||||
from snapshot.ts (core announces; the module listens), `ReviewOutbox.sampleEntry()` (one in N,
|
||||
in-process) + `enqueueEntry()` (crop + camera class, no order/operator/category), env
|
||||
`CARWASH_REVIEW_ENTRY_SAMPLE` (compose + resources template + .env.example), packages carry
|
||||
`kind`; the collector stores kind, the review screen shows entry samples as such, export has a
|
||||
kind column, operator agreement is wash-only. Setup line shows "1 in N entries sampled". Also:
|
||||
Setup → Car wash is a two-column grid (the master-data card was squeezed at max-w-2xl). Tests
|
||||
on both sides. Updated [[vision-review-outbox]].
|
||||
|
||||
Reference in New Issue
Block a user