Task board: Round 19 section; versioning convention in CLAUDE.md
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@ -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.
|
||||||
|
|||||||
39
TASKS.md
39
TASKS.md
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user