# Changelog All notable changes to this project are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) (dated entries; no version tags are cut in this repo — POC stage, `main` is the release line). ## [Unreleased] Nothing pending. ## 2026-09-17 — Unified `config.yaml` with extensible model presets ### Added - `config.yaml` — single canonical config (stream, models, counting knobs, batch, output paths, camera). Secrets/deployment-only values stay in `.env`. - `src/config_loader.py` — stdlib-dataclasses + pyyaml loader, zero new dependencies. Missing file falls back to `.env` + legacy defaults with a `UserWarning`; `MODEL_MODE` env still honoured once with a `DeprecationWarning`. - `tests/test_config_loader.py` — 8 smoke tests (load/validate, precedence, atomic mode-switch round-trip, YAML-only mode-E extension, legacy warnings). - Per-class `iou` and `min_bbox_area` in `models.detection_params` (shared across modes; `iou` default `0.7` = Ultralytics default, no behaviour change). - `--config` CLI flag on `predict.py` (default: `config.yaml` next to `predict.py`). ### Changed - **Model modes are data**: `config.yaml → models.modes` holds engines (path key + contributed classes) and class filters only. `predict.py` derives tracker roles structurally — adding mode E/F/... needs no code change, and the dashboard `/api/model-modes` lists new modes automatically. - Dashboard `POST /api/batch/mode {"model_mode": "X"}` validates against `config.yaml` and persists atomically (tmp+replace, comments preserved) to `models.active_mode`. Manual `karung-counter` restart still required. - `batch_mode.json` keeps only the manual/auto batch `mode`; its legacy `model_mode` key is ignored (warned when it disagrees). - `zones.json` keeps geometry only (polygons + left/right limits); legacy knob keys there are ignored with a warning — `config.yaml counting.*` is canonical. - `deploy_to_jetson.py` also syncs `config.yaml`. - `src/tracking.py` / `src/detection.py` accept an `iou` parameter (default `0.7`, v3 callers unaffected). ## 2026-09-15 — Default model mode B → C - Production default is now **Mode C** (combined v4 sack+truck + yolo11n box-only on a dedicated tracker) instead of Mode B (shared sack+box tracker). Changed in `predict.py`, `counter_dashboard.py`, `.env.example`, and docs. Sack path uses the proven v4 model; sack/box track-ID spaces no longer collide. ## 2026-09-14 — `models/modelREADME.md` rename - `models/README.md` → `models/modelREADME.md` to avoid confusion with the root README. No content change. ## 2026-09-11 — Model weights tracked, per-mode matrix - `models/*.pt` + `*.onnx` are now git-tracked (clone-ready); `*.engine` stays gitignored (rebuildable via `export_model.py` on the Jetson). - All weights moved under `models/` with a per-mode detector/filter matrix (`models/modelREADME.md`); `predict.py` paths, `deploy_to_jetson.py`, and docs updated. - Multi-model modes (A/B/C/D, default B at the time) + box counting + manual-mode banner (`6e4af50`). ## 2026-09-10 — Single `predict.py` entrypoint, experiments archived - Production + dev CLI unified in `predict.py` (runs as `karung-counter.service` with zero args). Retired experiments moved to `archive/` via `git mv` (`predict_new.py`, `rpo_iki/`, `simple_predict.py`, check/merge/test scripts). - Docs guides added (`docs/architecture.md`, `models.md`, `configuration.md`, `scripts.md`) plus DB/batch helper scripts; pytest smoke tests + CI. ## 2026-08-24 — Manual & auto batch modes, dual-port dashboards - Manual/auto batch counting, operator (port 5000) + monitoring (port 5721) dashboards, historical batch data views and corrections.