From 5cdf8f227beb5f69530137feb84eb1bb6b008c3e Mon Sep 17 00:00:00 2001 From: Julian Cuni Date: Sun, 5 Jul 2026 09:20:58 +0200 Subject: [PATCH 1/2] deploy(park-buzi): pin TAG=stage-365b648 (supersedes 93f9ebe, adds anpr do-while fix) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same payload as the 93f9ebe pin (camera press-gate + cooldown backstop + duplicate-plate anomaly, reader channel tagging + phantom feed filter, log rotation/format) plus the anpr poll-loop do-while fix (at least one analyze attempt per detection). Code-only — no migration. Manual Komodo step: refresh ResourceSync → Execute → Deploy. Then the vendor-tool reader session (prefixes Q:/K:, Card Input format 8H, symbology cut) — server first, readers second. Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V --- komodo/resources.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/komodo/resources.toml b/komodo/resources.toml index b54ca46..7a80dc2 100644 --- a/komodo/resources.toml +++ b/komodo/resources.toml @@ -49,7 +49,7 @@ REGISTRY=git.infra.msai.al/mca/parking_solution # Staging booth: pinned immutable stage-. After each promotion (merge dev → stage, CI builds # :stage-), bump this to the new sha and re-sync/deploy from Core. The moving `:stage` tag # exists as the pointer; we deploy the sha, not the mover. -TAG=stage-93f9ebe +TAG=stage-365b648 COOKIE_SECURE=0 VISION_ENABLED=1 WS_ALLOWED_ORIGINS= From a9f18be7003e0bad5b54339fce6a8d884c92f3e7 Mon Sep 17 00:00:00 2001 From: Julian Cuni Date: Sun, 5 Jul 2026 10:40:42 +0200 Subject: [PATCH 2/2] feat(logging): extend log retention to 60 days and update log level options --- komodo/.env.komodo.example | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/komodo/.env.komodo.example b/komodo/.env.komodo.example index ffa168e..73fca59 100644 --- a/komodo/.env.komodo.example +++ b/komodo/.env.komodo.example @@ -68,9 +68,10 @@ WS_ALLOWED_ORIGINS= # # (multi-NIC hosts; usually auto-detected fine) # WEB_DIST_DIR= # where the built SPA lives (the image sets it) # --- logging --- -# LOG_LEVEL=info # debug|info|warn|error -# LOG_RETENTION_DAYS=30 # app_logs auto-purge age -# LOG_RETENTION_MAX_ROWS=50000 # app_logs row cap +# LOG_LEVEL=info # trace|debug|info|warn|error|fatal (pino) +# LOG_RETENTION_DAYS=60 # app_logs auto-purge age (~2 months, matches the +# # container-log rotation caps in compose.prod) +# LOG_RETENTION_MAX_ROWS=50000 # app_logs row cap (burst guard regardless of age) # RECYCLE_BIN_RETENTION_DAYS=30 # soft-deleted items auto-purge age (0 = keep forever) # --- snapshots (camera evidence; stored re-encoded, then pruned under disk pressure) --- # SNAPSHOT_MAX_EDGE=1280 # downscale long edge (px) before storing @@ -84,7 +85,11 @@ WS_ALLOWED_ORIGINS= # DEVICE_POLL_MS=8000 # device health poll interval # PRINTER_POLL_MS=5000 # printer status poll interval # LANE_BUSY_TTL_MS=30000 # how long a lane stays "busy" after a vehicle push -# CAPTURE_TTL_MS=30000 # snapshot evidence cache TTL +# CAPTURE_TTL_MS=30000 # credential-enrollment arm window (card capture form) +# --- readers (DT-008 channel tagging — must MATCH the vendor tool's output prefixes; +# see wiki/entities/dingtian-dt008-reader.md) --- +# READER_QR_PREFIX=Q: # optical-decode marker the reader prepends +# READER_CARD_PREFIX=K: # RF-read marker the reader prepends # --- ANPR / vision (server side) --- # VISION_URL is compose-set (above). These are the knobs you may tweak per booth: # VISION_TIMEOUT_MS=1500 # per /analyze call timeout @@ -98,6 +103,8 @@ WS_ALLOWED_ORIGINS= # # barrier means the car waits >8s before reading clean. # ANPR_POLL_MAX_MS=30000 # hard ceiling on one loop from start (so a continuously # # busy lane can't slide the window forever) +# ENTRY_DUP_PLATE_WINDOW_MIN=15 # entry ANPR duplicate-plate lookback (same plate already +# # OPEN under another session → signed anomaly) # ════════════════════════════════════════════════════════════════════════════ # VISION CONTAINER env (the Python ANPR service — its OWN process, prefix VISION_)