Task board: Round 19 section; versioning convention in CLAUDE.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 11:30:37 -04:00
parent 502a6106f4
commit 1bf346229c
2 changed files with 47 additions and 1 deletions

View File

@ -117,6 +117,15 @@ persistence) → GUI (Qt widgets that read the manager and connect to its signal
root are never moved; the new path syncs cross-machine via the `location` root are never moved; the new path syncs cross-machine via the `location`
newest-wins merge in `conflict_resolver`). Nothing else may move or rewrite newest-wins merge in `conflict_resolver`). Nothing else may move or rewrite
music files. The library JSON is the source of truth for everything else. music files. The library JSON is the source of truth for everything else.
- **Versioning & self-update:** `__version__` in `lintunes/__init__.py` is
the single source of truth (`setup.py` regex-reads it, never imports the
package). Claude bumps minor for feature rounds and patch for fix-only
rounds as part of each round's final commit; trav decides major bumps. The
status-bar version button (`gui/version_button.py` + `lintunes/updater.py`)
checks `origin` shortly after launch and every 4 h, and a click runs
`git pull --ff-only` then re-execs the app — pushing `master` is
effectively releasing to the other machines (a new pip dependency still
needs a manual `pip install -e .` there).
- `scripts/` holds one-off maintenance tools (`audit_artwork.py`, - `scripts/` holds one-off maintenance tools (`audit_artwork.py`,
`recover_artwork.py`, `clear_computed_ratings.py`) run manually against a data `recover_artwork.py`, `clear_computed_ratings.py`) run manually against a data
dir; most default to dry-run and need `--write` to mutate files. dir; most default to dry-run and need `--write` to mutate files.

View File

@ -3,7 +3,44 @@
Legend: `[ ]` todo · `[~]` in progress · `[x]` done. Legend: `[ ]` todo · `[~]` in progress · `[x]` done.
When a round closes, move its finished items to `tasks-done.md`. When a round closes, move its finished items to `tasks-done.md`.
## Round 18 (current) — the 2026-07-02 backlog batch ## Round 19 (current) — version display, git self-update, BPM fix
Plan reference: `~/.claude/plans/some-fixes-features-for-lintues-merry-journal.md`.
Tests land in `tests/test_round19.py`. First versioned release: **0.1.0**.
- [x] Version number bottom-left in the status bar: `__version__` in
`lintunes/__init__.py` is the single source of truth (setup.py
regex-reads it); shown by the new `gui/version_button.py`; tooltip
carries the git short hash so two machines on the same version but
different commits are distinguishable.
- [x] Git self-update: new `lintunes/updater.py` fetches upstream ~10 s
after launch and every 4 h (daemon threads, lastfm.py pattern). Commits
behind → a `*` on the version button; click → confirm dialog →
`git pull --ff-only` → clean quit (flush + player shutdown) →
`os.execv` relaunch on the new code (positional file args stripped so
they don't re-import). Pull failures (offline / conflicting local
edits) surface in the status bar and leave the running app untouched.
Not a git checkout / no upstream → button is just a static label.
Limitation: a round that adds a pip dependency still needs a manual
`pip install -e .` per machine. Pushing `master` is now effectively
"releasing" to the other machines.
- [x] Status-bar bug found while verifying: the totals label was added with
`addPermanentWidget(…, stretch=1)`, which squeezed the transient
message area to zero width — every `showMessage` (scrobbles, tag-write
errors, import status, sync notices) has been invisible since the
label landed in Round 5. Both readouts are now non-permanent widgets:
a transient message temporarily replaces them, then they return.
- [x] BPM tap button: whole-session averaging — removed the 8-tap rolling
window in `tap_tempo.py` (trav's "no rhythm" suspicion was the window,
not him). All taps since the session started are averaged; a >2.5 s
gap still begins a new session. Verified live under Xvfb: 8 fast +
8 slow taps read the blended overall average, not just the recent 8.
- [ ] **verify by eye in the running app**: version reads bottom-left;
after the next `git push`, machine 2 shows the `*` within ~10 s of
launch and click-to-update pulls + restarts; tap out a real song's
BPM and sanity-check the number.
## Round 18 — the 2026-07-02 backlog batch
Plan reference: `~/.claude/plans/can-you-knock-out-synthetic-horizon.md`. Plan reference: `~/.claude/plans/can-you-knock-out-synthetic-horizon.md`.
Tests land in `tests/test_round18.py`. (The equalizer backlog item moved to Tests land in `tests/test_round18.py`. (The equalizer backlog item moved to