# Changelog

All notable changes are documented here, newest first. Entries use the timestamp scheme
`[YYYY.M.D-HHMM] - YYYY-MM-DD - HH:MM`.

## [2026.10.31-117] - 2026-10-31 - 01:17

### Added

- The explainer site is published: <https://hand-volume-control.niftylittletools.dev/> (GitLab Pages, built from `explainer/` by the new `.gitlab-ci.yml`), its `site` set for canonical links and the sitemap, and the README's **Live:** line.

## [2026.10.30-1844] - 2026-10-30 - 18:44

### Changed

- Repository: `gitlab.com/nifty-little-tools/desktop-apps/hand-volume-control`, in the README and the explainer.

## [2026.10.29-1959] - 2026-10-29 - 19:59

### Documentation

- README rewritten to the workspace structure (`_templates/README.md`): the key line, Features, Parameters/Flags (the keys and the tuning constants with their defaults) and Development (the gesture tests).

### Fixed

- `uv.lock` had recorded an older version of the project itself, which `uv sync --locked` refuses; relocked (one line, no dependency changed). `check_conformance.py` now checks it.

## [2026.10.28-2156] - 2026-10-28 - 21:56

### Added

- **Explainer site** (`explainer/`, global §11): a static Astro page in the house Cyanotype style that says what the app is, what it does, how to run it, and its privacy terms, written from this README. It is light by default with its theme remembered, has a toggleable intro and the privacy notice, and loads nothing from a third party. Built from the workspace's shared template (`_explainer/`), copied unchanged and checked by `check_conformance.py`; only `src/site.js` (its words) is this tool's own. It is published once the tool's domain is chosen (plan Phase 8). The README gains an "Explainer site" section.

## [2026.10.26-1842] - 2026-10-26 - 18:42

### Changed

- Migrated from Poetry to **uv**: `uv_build` backend (src layout), a `hand-volume-control` script entry point, `requires-python = ">=3.12"`, `.python-version` 3.12, `uv.lock`; `poetry.lock` removed. Authorship set to Arziel.
- **Unblocked the port (analysed 2026-10-23):** mediapipe 1.x removed the legacy `mp.solutions.hands` API this app used. Hand detection now runs on MediaPipe Tasks' `HandLandmarker` in video mode, the model downloaded once into the user cache directory (as `gesture-control` does). Same landmarks, same handedness filter, same control scheme.
- Dependencies moved to their current releases, lifting the old caps: mediapipe 1.1.1 (from <0.11), opencv-python 5.0 (from <4.11), numpy 2.5 (from <2), pycaw 20260927 (from a one-day pin), comtypes 1.4.17, pynput 1.8.2, platformdirs 4.13.5.
- The pure gesture maths (finger count, pinch-to-volume) moved into `gestures.py`, free of camera and audio imports. The unused `mp.solutions.drawing_utils` handle and the bare `except:` clauses are gone; a volume call that fails now reports why instead of being silently swallowed.
- README: install and run through uv, the camera finder, `THUMB_INVERT`'s new location.

### Added

- `tests/test_gestures.py`: open hand = 5, fist = 0, a mid-range pinch = 50 %, both clamps, and the pinky-up guard, with each expected value traced in a comment. 6 pass.
- README `## Privacy & security`: camera frames stay in memory; one first-run model download from `storage.googleapis.com`; the global keyboard listener sees every key but acts only on Q / H / S and records nothing.

### Security

- `pip-audit` over the new lockfile: no known vulnerabilities.

### Known issue

- The new detector is exercised by import and by the gesture tests, not yet in front of a camera: check it with your webcam (the gesture maths and thresholds are unchanged).

## [2026.10.26-1813] - 2026-10-26 - 18:13

### Changed

- `.gitattributes` normalising line endings to LF (`* text=auto eol=lf`) and marking binaries.

## Before this changelog

Reconstructed from `git log` (commit date, subject, hash):

- 2026-10-26 — Add AGPL-3.0 LICENSE (`1fa7a18`)
- 2026-06-30 — Add markdownlint config (house standard) (`64a02b4`)
- 2026-06-29 — Add house logo.svg (`5a50b49`)
- 2025-12-11 — Left finger logic fixes and resource usage reduction (`1113382`)
- 2025-12-11 — Baseline (`d1f414d`)
