Commit 73063f4a by PLN (Algolia)

docs(tasks): structured completed-task archive (#65, #64) for long-term learning

New armada/tasks/completed-archive.md — per-task entries with description/done/learnings/
deps + commit hashes, richer than board-archive.md's terse snapshot, written as blog/video
source material. Seeded with this session's completed tasks: #65 (serve.py broken-pipe fix,
d70c3ee7 — keystone audition QOL) and #64 (Information-is-Beautiful dataviz epic + its
craft learnings). Appended by the /pre-compact ritual before clearing the board.
parent 270a01d6
# L'Armada — completed-task archive (structured)
Long-term learning + blog/video source material. Each entry = a finished board task
captured in full (description · done · learnings · deps), appended by the `/pre-compact`
ritual before the task is cleared off the active board. Richer than the terse tracker
snapshot in `board-archive.md`. Newest first.
---
## #65 — Fix serve.py Range broken-pipe crash on audio seek
- **Description:** `armada/serve.py copyfile()` threw `ConnectionResetError`/`BrokenPipeError`
(Errno 104) when a browser aborts/seeks a Range request mid-stream (e.g. `proxy_take89.mp3`
in the triangle drawer) — the 206 responses worked but the unhandled exception spammed the
console.
- **Done:** Wrapped both copy branches of `copyfile()` and guaranteed the file handle closes
in a `finally`; swallow `BrokenPipeError`/`ConnectionResetError`. Verified: a mid-stream
abort (`curl --max-time` cut) leaves NO traceback and the server keeps serving (206
follow-up OK). Commit **d70c3ee**.
- **Learnings:** A client disconnect on `<audio>` scrubbing is *normal*, not a failure —
swallow it, don't log it. This was the keystone QOL fix: it de-frictions every audition
task (#35 ear-verify, #43/#44 frag-audition, #20 best-take), so cheap-but-high-leverage.
- **Deps:** Blocked nothing formally; unblocks the ear-gating workflow ergonomically.
## #64 — "Information is Beautiful" dataviz of the generated corpus (EPIC)
- **Description:** Phase-2 infodesign of the tide-table corpus (after data-scientist
exploration) — explorable insights served to a music aficionado.
- **Done:** `corpus.html` narrative + the **Unwrapped** explorable (vibe-search via CLAP,
dominant-colour density field, zoom/pan) + landing `index.html` + honest style cloud +
serve.py `/vibe` warm endpoint. Shipped across the prior session's commits; vibe-search,
field-tuning, label-completion (1490/1501 samples), and zoom all landed.
- **Learnings:** Dots are the stars — the field stays subtle; **don't average hues** (→ mud),
use the per-cell DOMINANT family colour + purity-fade + desaturate + lift. Cache the field
offscreen, rebuild on colour/axis/filter change, never on hover. Per-one-shot CLAP
genre/mood is unreliable (0.3s hits) but CLAP **embeddings are gold for relative
similarity** (vibe-search / find-similar). Seed free-text search with the user's OWN words.
DarkReader can fight a dark theme — suspect the inverter before re-tuning to a phantom.
- **Deps:** Spawned #63 (cross-app SPA landing — the tide-table index shipped; tying in the
React surfaces remains). Set the foundation the emotion-engine work (#89–#92) built on.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment