# L'Armada — completed board archive

Snapshot of resolved Claude-Code board tasks, archived before /compact so the active
board stays lean. Narrative achievement logs live in the numbered `NNN-*.md` files; this
is just the tracker history (id · subject). Last archived: 2026-07-29.

## Foundation & distribution
- #1 Scaffold L'Armada toolbox in Tidal repo
- #7 Settle distribution strategy + RouteNote reality check
- #9 Seed escales ledger + flotille network graph
- #14 Build distribution decision SPA (le Sextant)

## Ardour stems · boundaries · per-take EDA
- #13 Parse Ardour 'Tidal Multi' session → stem map
- #25 Per-orbit timbral boundary detection for set-splitting
- #39 v2 boundary bleed: spectral/per-sound novelty (shared-orbit leaks)
- #54 build_eda.py: per-take EDA emitter (eda_{take}.json) + TakeEDA model
- #55 EDA-status ledger (Stage 0): map local stems → takes, classify reachability
- #56 Drop empty/sketch take-types from candidate links (reconciler refinement)

## Judge UI
- #28 Judge UI: waveform + seekbar + per-moment notes
- #40 Fix Judge UI orbit annotations: derive from .tidal, not hardcoded ROLE_MAP
- #41 Judge UI QOL: waveform zoom/scroll + loop-by-select

## Triangle reconciler · catalog DRY · toolbox
- #42 DRY data layer: pydantic models → JSON Schema → generated TS types
- #46 Triangle reconciler: ground A↔B↔C into one CatalogView
- #47 Model CatalogView in models.py (DRY) + regen TS
- #48 Triangle viz: lit-cell catalog confirmation dashboard
- #49 pytest suite: UT (parser, agree) + IT-on-real-data + DRY contract
- #50 tide.py build driver: regenerate all downstream artifacts (parsers-over-copy)
- #51 Demote catalog.yaml → authored overlay + generated artifact
- #52 Triangle drawer: ground-truth validators (source + audio + gig)
- #57 Triangle viz usability pass (PLN feedback)
- #58 Proper toolbox: load-once + robust serving (no path fragility)
- #59 Pattern n-grams: duplicated-section detection + 'name each pattern' clustering
- #60 Surface pattern registry in the triangle drawer + a clusters view
- #67 Normalize style labels (SSOT in models.py)

## Fleet color language
- #61 Fleet color language: ontology-in-models → generated tokens

## Sample grounding · feature stack · semantic L2 · dataviz  (the fun-sprint, 2026-06-07)
- #68 Improve sample-family classifier coverage
- #69 Sample-family grounding via CLAP zero-shot (sample_classify.py)
- #72 Featurize: one-shot librosa extractor (sample_features.py)
- #73 Featurize: TDD UT suite on real samples (kick/bass/hat/break invariants)
- #75 Featurize: run across corpus samples → sample_features.json
- #77 feature_eda: correlation matrix + redundancy pruning
- #78 feature_eda: PCA + intrinsic dimensionality
- #79 feature_eda: clustering vs CLAP/name/resolver + feature importance
- #81 Superfeature shortlist → 'ParVagues Unwrapped' exploratory viz  (log 014)
- #82 Semantic L2: CLAP vibe-search + find-similar (shipped similarity, not tags)  (log 015)
- #83 Step 1: re-run resolver as clap-fine → land sample_families.json
- #86 serve.py /vibe + /similar endpoint (CLAP query)
- #87 Vibe-search + find-similar + vibe-map in unwrapped.html
- #88 Landing index + track-style tag cloud
- #64 EPIC: 'Information is Beautiful' dataviz of the corpus — shipped (corpus.html
  narrative + Unwrapped explorable w/ vibe-search, density field, zoom + landing)

## OPAL 2026 rig hardening — the surface, and the transition (log 017, 018, 019)
- #46 SURFACE REMAP phase 1: faders + knobs column-aligned
- #90 REMAP verification gate PASSED for phase 1
- #94 REMAP phase 2: the button rows column-align (166 refs) — then the 32 role
  inversions it shipped, repaired the same day by tools/button_roles.py + the
  role-first migrator (5089eec, 2c178c9, 6ed637d).  Left open on purpose: 12 sites
  where one orbit drives two gestures and only one momentary cell exists (needs #54).
- #97 ONE authored grid: five hardcoded copies of the LCXL convention become derived
  or generated (2778f1c)
- #100 pvlint PV011 — one FX bus SLOT shared by two orbits ("like shared busses they
  screw things").  Landed as PV011 because PV010 took the button role/row rule PLN
  asked for in the same breath.  Found crushbus 41 shared by take_5's bass and choir.
- #84 the editor now TELLS the rig which track is loaded — the HUD writes
  ~/.cache/parvagues/current-track, which lcxl-leds --watch already polled but nothing
  ever wrote during a set (2576e77, pulsar-parvagues-hud)
- #35 eval-highlight: per-stream colours never matched (runtime emitted
  `event-highlight-1`, CSS said `.event-highlight-d1`) AND the wiggle was still live,
  because the outline fix sat in the ~/.pulsar/styles.less copy while `border: 1px`
  survived in the package sheet underneath — a cascade winner cannot unset a property
  it never mentions (2c0524e, pulsar-tidalcycles)
