Commit 397670c1 by PLN (Algolia)

docs(tasks): archive the Douanier callable-API session (#37–#41, #32)

parent 11c8f9d6
......@@ -195,3 +195,63 @@ memory `project_douanier_api`. Named after Le Douanier Rousseau (the customs gat
the rest are `ytsearch1:` queries so we never ship a guessed/broken video id. Pedagogically
diverse on purpose — fuel for #19 autotune + #20 batch-explore.
- **Deps:** feeds #19 / #20.
## #37 — Refit for erable: CPU image + nech.pl platform contract
- **Description:** the SRE replied (SRE.md) that erable has NO GPU / ~2 GB RAM and CLAP/torch
won't fit; ship a CPU-deployable image. Same letter reframed api.nech.pl as a multi-API
PLATFORM (we're the `audio` sub-API).
- **Done:** Dockerfile (python:3.12-slim + ffmpeg/libsndfile + torch-free requirements-deploy.txt)
**~1 GB image**, <2 GB RAM, default engine=light. Conformed the app: public path `/audio/v1`
(gateway strips it; routes at root + `root_path`), **central auth** (trust gateway-injected
X-Tenant/X-Scopes, loopback-only; dropped our SQLite bearer/quota = #23/#24 superseded),
`/metrics` Prometheus, `/separate` → 503 `compute_unavailable` seam. DEPLOY.md = erable
contract. Commit 722dade.
- **Learnings:** the SRE EDGE WENT LIVE first (503 warming_up at the public URL) — deploy is
now a one-command unblock. The container holds ONLY armada/api/ → every engine must be
self-contained (no tide-table/Foundry import at runtime). 32/32 tests; validated in-container.
- **Deps:** unblocks #42 deploy + #33 onboard; superseded #23/#24.
## #38 — Modular ears building blocks: /features + /analyze/samples
- **Done:** two CPU/torch-free cached endpoints. `/features` (~35-dim spectral/MFCC/chroma/key/
envelope + rhythm); `/analyze/samples` (per-sample EDA + role percs|bass|melodic|tops|atmos by
MEASURED spectrum, never the name). `engines/feats.py` self-contained (vendored from
sample_features/audio_lens). Shared `_cached()` helper (DRY across the 3 analyze routes). Commit 9eb2623.
- **Learnings:** vendoring fixed the librosa-0.11 `feature.rhythm.tempo` bug the tide-table
original silently swallowed (→ `feature.tempo`). Role-by-measurement upholds feedback_mastering_eda.
40/40 tests; validated in the torch-free container.
- **Deps:** established the vendoring pattern reused by #39/#41.
## #39 — /grade: the Foundry loop grader as a building block
- **Done:** `/grade` exposes the Foundry mechanical quality grader (composite 0..1 + S/A/B/C/D
tier + seam/zc/bar/level/dc/bass sub-scores + flags). `engines/grade.py` is a BYTE-FOR-BYTE
vendored copy; tests/test_grade_endpoint.py is a DRIFT GUARD (imports the Foundry canonical
standalone, asserts identical grade/tier/sub + WEIGHTS/THRESH). Commit cd3caa7.
- **Learnings:** vendoring + a drift-guard test = DRY-safe deployment when the container can't
hold the source repo (parsers-over-copy applied to a vendored copy). 43/43 tests.
- **Deps:** the CPU slice of #31 (/loops + /correlate still need a corpus/finder).
## #40 — Low-hanging endpoints: /onsets, /waveform, /analyze
- **Done:** `/onsets` (hit times + tempo + rate), `/waveform` (per-bin [min,max] + 0..1 RMS
envelope — render-ready), `/analyze` (composite emotion+features+sample in one cached call).
`engines/signal.py` self-contained librosa. Commit 8c2be60.
- **Learnings:** /onsets+/waveform are aimed at hexa's hydra VISUALS (rhythmic sync + reactive
envelope) — the API's value isn't just analysis, it's render-ready signal. 50/50 tests.
- **Deps:**
## #41 — /loudness, /spectrum (FFT-as-a-service), /naming
- **Done:** `/loudness` (BS.1770 integrated LUFS via pyloudnorm + 4×-oversample true-peak +
crest + gain-to-target -14/-9); `/spectrum` (downsampled mel/linear spectrogram bands×frames,
0..1, frames=1=avg spectrum — PLN's "FFT-as-a-service" idea); `/naming` (vendored Foundry
namer, drift-guarded, + feats.character_of). pyloudnorm added to requirements-deploy. Commit f11bef9.
- **Learnings:** /spectrum is the canonical cache-as-margin building block — compute the FFT
once, serve the bounded matrix forever. **11 engines total.** 58/58 tests.
- **Deps:**
## #32 — Make it callable: OpenAPI snapshot + zero-dep TS client
- **Done:** `clients/openapi.json` (3.1 snapshot, servers pinned to api.nech.pl/audio/v1, +
drift-guard test vs the live app), `clients/douanier.ts` (typed, zero-dep, one method/engine,
`_cache` surfaced, DouanierError; tsc --strict clean), `clients/README.md` (Vercel example +
scope table + codegen one-liner). Commit 11c8f9d.
- **Learnings:** a hand-written zero-dep client beats generated bloat for ~11 simple multipart
routes; the snapshot-drift test keeps hexa's spec honest as routes evolve. 60/60 tests.
- **Deps:** unblocks #33 (onboard hexa); needs #42 deploy to be live-callable.
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