Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion BACKLOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Source: `active/sonic-architect-app` (keep in `active/` as reference). Most of t

## Shipped — Data
- ✅ `data/genreProfiles.ts` — 35 EDM genre spectral targets, LUFS/crest factor/PLR ranges. **Landed:** [`apps/ui/src/data/genreProfiles.ts`](apps/ui/src/data/genreProfiles.ts).
- ✅ `data/abletonDevices.ts` — 14 spectral-band → Ableton Live 12 device mappings + FX rule engine. **Landed:** [`apps/ui/src/data/abletonDevices.ts`](apps/ui/src/data/abletonDevices.ts).
- ✅ `data/abletonDevices.ts` — 14 spectral-band → Ableton Live 12 device mappings + FX rule engine. **Landed:** [`apps/ui/src/data/abletonDevices.ts`](apps/ui/src/data/abletonDevices.ts). *Ported but demoted to a research-only scoring baseline (owner decision 2026-06-11): imported by no product code, consumed only by the recommendation-eval bridge. See the NEEDS-WIRING decision in [`apps/backend/NEEDS.md`](apps/backend/NEEDS.md).*

## Shipped — Mix Analysis
- ✅ `services/mixDoctor.ts` + `components/MixDoctorPanel.tsx` — spectral-balance scoring against genre profiles. **Landed:** [`apps/ui/src/services/mixDoctor.ts`](apps/ui/src/services/mixDoctor.ts), [`apps/ui/src/components/MixDoctorPanel.tsx`](apps/ui/src/components/MixDoctorPanel.tsx).
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ A quick map from intent to the right place to start:

## Backport Candidates

The full original `sonic-architect-app` backlog is **shipped** — genre profiles, Ableton device mappings, mix doctor, eight detectors, Phase 3 audition-sample generation, and `patchSmith.ts` (Phase 3 Vital preset generation, [`apps/ui/src/services/patchSmith.ts`](apps/ui/src/services/patchSmith.ts)). See [`BACKLOG.md`](BACKLOG.md) for the landed inventory. Consult it before re-implementing genre detection, mix analysis, acid/reverb/vocal/supersaw/bass/kick detection — they're already in [`apps/backend/analyze_detection.py`](apps/backend/analyze_detection.py) and emit fields visible in `EXPECTED_TOP_LEVEL_KEYS`.
The full original `sonic-architect-app` backlog is **shipped** — genre profiles, Ableton device mappings (`abletonDevices.ts` — ported but **research-only** since the 2026-06-11 demotion decision: a scoring baseline for the recommendation-proof harness, imported by no product code; see the NEEDS-WIRING decision in `apps/backend/NEEDS.md`), mix doctor, eight detectors, Phase 3 audition-sample generation, and `patchSmith.ts` (Phase 3 Vital preset generation, [`apps/ui/src/services/patchSmith.ts`](apps/ui/src/services/patchSmith.ts)). See [`BACKLOG.md`](BACKLOG.md) for the landed inventory. Consult it before re-implementing genre detection, mix analysis, acid/reverb/vocal/supersaw/bass/kick detection — they're already in [`apps/backend/analyze_detection.py`](apps/backend/analyze_detection.py) and emit fields visible in `EXPECTED_TOP_LEVEL_KEYS`.

## Companion Agent Docs

Expand Down
38 changes: 20 additions & 18 deletions apps/backend/NEEDS.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,9 @@ citations**, so the chain-of-custody penalty drives its adjusted aggregate to
#2). The rules **are** feature-triggered, so attaching the triggering measurement
as a citation is a concrete, harness-rewarded improvement — a candidate
sub-goal-3 "score-driven change" (frontend edit to `abletonDevices.ts` →
`npm run verify`). But see the dead-code finding under NEEDS-WIRING before
investing in this path.
`npm run verify`). Moot since 2026-06-11: the NEEDS-WIRING decision below
demoted `abletonDevices.ts` to a research-only baseline, so this candidate is
no longer a *product* improvement path.

This is the first real signal toward the Gemini verdict — likely Gemini earns its
place on citation + full-surface coverage. Confirm on real renders; the synthetic
Expand Down Expand Up @@ -169,22 +170,23 @@ factor, onset density) is the app's own projection (`analyzer.ts`); reuse it rat
than re-deriving, and only then is the deterministic score a real verdict input
rather than the synthetic illustration above.

**FINDING — the deterministic source is currently dead code (affects sub-goal 3
framing).** `apps/ui/src/data/abletonDevices.ts` is imported **nowhere** in the UI
(no component, no test) — verified by grep. ASA's product recommendations come
entirely from Gemini (`Phase2Result`); the deterministic engine is unwired,
ported-but-unused. Consequence: a "score-driven improvement" to `abletonDevices.ts`
(e.g. the citation-emit fix flagged above) would **not reach any user** — it would
raise a harness number for code nobody runs, which is harness-gaming, not a product
improvement (PURPOSE.md decision #5). So before sub-goal 3 treats the deterministic
path as a real recommendation source, decide one of:
1. **Wire `abletonDevices.ts` into the product** (so its recs — and any citation
improvement — actually reach users), then score + improve it; or
2. **Treat it as a research-only baseline** in the three-source comparison (score
it, but land score-driven *product* improvements on the **Gemini** path
instead — which needs the `chore/...` branch + renders).
This is the honest reason no score-driven improvement was "landed" this session:
the only render-free candidate would have improved dead code.
**FINDING — the deterministic source is dead code on the product path. ✅ DECIDED
2026-06-11: demoted to research-only baseline (option 2).**
`apps/ui/src/data/abletonDevices.ts` is imported **nowhere** in the UI (no
component, no test) — verified by grep. ASA's product recommendations come
entirely from the Phase 2 providers (`Phase2Result`); the deterministic engine is
unwired, ported-but-unused. Consequence: a "score-driven improvement" to
`abletonDevices.ts` (e.g. the citation-emit fix flagged above) would **not reach
any user** — it would raise a harness number for code nobody runs, which is
harness-gaming, not a product improvement (PURPOSE.md decision #5). The owner
resolved the wire-or-demote choice: **demote**. Standing consequences:
1. The module stays where it is as the scored free baseline in the three-source
comparison (its file header now records the status); it is **not** to be
wired into the product.
2. Score-driven *product* improvements land on the **Phase 2 provider** path
instead. The citation-emit candidate above is off the table as a product
change (it remains a legitimate baseline-fairness tweak if the comparison
ever needs it).

---

Expand Down
5 changes: 4 additions & 1 deletion apps/backend/RECOMMENDATION_VERDICT.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,7 @@ not a synthesis artifact.
2. **`melodic_techno_arp_124` Gemini 0 recs** — investigate the parse/shape outlier
on a real render before trusting that fixture's contribution.
3. The deterministic `AudioFeatures` projection is approximate (not the app's
`analyzer.ts`); reconcile when wiring the deterministic path for real.
`analyzer.ts`). The wire-or-demote question was resolved 2026-06-11: the
deterministic engine is a research-only baseline and will not be wired into
the product (see `NEEDS.md`), so reconciling the projection matters only for
baseline fairness in this comparison, not for any product path.
6 changes: 4 additions & 2 deletions apps/backend/scripts/emit_deterministic_recs.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
/**
* Deterministic recommendation source bridge (GOAL.md sub-goal 3 inner loop).
*
* EVAL / RESEARCH ONLY. Wraps the product's deterministic recommendation engine
* (`apps/ui/src/data/abletonDevices.ts`) and emits the scorer's normalized rec
* EVAL / RESEARCH ONLY. Wraps the deterministic recommendation engine
* (`apps/ui/src/data/abletonDevices.ts` — itself research-only since the
* 2026-06-11 demotion decision; see apps/backend/NEEDS.md) and emits the
* scorer's normalized rec
* shape so `scripts/evaluate_recommendations.py --source deterministic` can grade
* the *free* path without a Gemini call. Importing the real module keeps a single
* source of truth — no Python re-port to drift from the TS.
Expand Down
11 changes: 11 additions & 0 deletions apps/ui/src/data/abletonDevices.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,17 @@
*
* Maps spectral characteristics to specific Ableton device recommendations.
* This is deterministic — no hallucination possible.
*
* RESEARCH-ONLY BASELINE — not on the product path (owner decision, 2026-06-11).
* No UI component or service imports this module; product recommendations come
* from the Phase 2 interpretation providers. Its sole consumer is the eval
* bridge `apps/backend/scripts/emit_deterministic_recs.ts`, which scores it as
* the free deterministic baseline in GOAL.md sub-goal 3's three-source
* comparison. Do NOT wire it into the product, and land score-driven *product*
* improvements on the Phase 2 path instead — raising this module's harness
* score improves code no user runs (see the NEEDS-WIRING decision in
* apps/backend/NEEDS.md). Keep it import-pure: the bridge runs it under Node
* native type-stripping with no build step.
*/

export interface DeviceRecommendation {
Expand Down
Loading