Go to file
Krzysztof kuhy Rudnicki 888c877048 Add sync-ready log schema: stable id, tombstone undo, composite components
Lays the Python-side groundwork for the phone companion app's eventual
log sync (Milestone 0 of the diet-app-as-wise-balloon plan):
- log_meal() stamps every entry with a UUID id for union-by-id merging
  across devices.
- undo_last_today() now tombstones (deleted: true, re-signed) instead of
  popping the entry, so a sync merge can't resurrect a stale copy of
  something already undone on another device.
- log_meal() accepts components, the full per-item macros for a
  composite meal, so a food bank rebuilt purely by replaying the log can
  recover every component's standalone nutrition.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:22:24 +02:00
.github/workflows Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
diet_guard Add sync-ready log schema: stable id, tombstone undo, composite components 2026-06-22 18:22:24 +02:00
docs Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
scripts Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
.gitignore Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
.pre-commit-config.yaml Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
CLAUDE.md Document the durable-clone editable-install requirement 2026-06-22 12:54:10 +02:00
diet-guard-gate.service Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
diet-guard-gate.timer Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
install.sh Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
pyproject.toml Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
README.md Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
requirements.txt Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00

diet_guard

A log-to-unlock gate: locks the desktop until a meal is logged once a meal slot (08:00 / 12:00 / 16:00 / 20:00) has elapsed without one, and tracks a sealed daily calorie/macro budget.

Install

bash install.sh

This installs the package + dependencies into system Python's user site-packages (the systemd service runs /usr/bin/python directly, not a venv — see CLAUDE.md), installs the systemd user timer, seals your daily budget, and locks the budget file immutable.

Usage

python -m diet_guard init          # one-time: compute and seal today's budget
python -m diet_guard gate --demo   # test the lock window (safe, closeable)

The timer runs the gate automatically every ~30 minutes; no manual invocation is needed once installed.

Development

python -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/pre-commit install && .venv/bin/pre-commit install --hook-type pre-push
.venv/bin/python -m pytest diet_guard/tests/ --cov=diet_guard --cov-branch --cov-fail-under=100

See CLAUDE.md for scheduling details and production deployment gotchas, and docs/design.md for the original feature spec.