File size: 8,956 Bytes
03d531b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e07820e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ab6f318
 
 
 
 
 
 
 
 
 
 
 
fa35534
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# Interactive UX tasks

## Status legend

| Status | Meaning |
|---|---|
| `todo` | Not started |
| `doing` | In progress |
| `partial` | Implemented as a useful first version but not complete |
| `done` | Completed for the current architecture |
| `blocked` | Waiting on prerequisite decision/work |

## Phase 0: Documentation and design capture

| ID | Task | Status | Acceptance criteria |
|---|---|---|---|
| UX-000 | Capture feature requirements | done | Requirements documented in `FEATURE_REQUIREMENTS.md` |
| UX-001 | Capture scope boundaries | done | MVP/V2/backlog documented in `SCOPE.md` |
| UX-002 | Capture feasibility matrix | done | Scores documented in `FEASIBILITY_MATRIX.md` |
| UX-003 | Capture implementation tasks | done | Task backlog documented here |
| UX-004 | Capture progress | done | Progress documented in `PROGRESS.md` |
| UX-005 | Align supplied docs with implemented project | done | All documents updated to reflect current code/API/UI behavior |

## Phase 1: State model and persistence

| ID | Task | Status | Acceptance criteria |
|---|---|---|---|
| UX-101 | Define persisted job state schema | done | `supervised_state.py` creates `supervision_state.json` with hits, clusters, constraints, events, suggestions, and undo state |
| UX-102 | Add event log | done | User/system changes append events and the event log is stored with job output |
| UX-103 | Add constraint store | done | `must-link`, `cannot-link`, `force-cluster`, `lock-cluster`, `suppress-pattern`, and `pin-representative` are saved |
| UX-104 | Add artifact/cache references | partial | State stores hit audio file refs and manifest fingerprint; feature refs and content-addressed feature cache are not implemented yet |
| UX-105 | Add deterministic replay command | todo | A job can be regenerated from source digest, params, and constraints |
| UX-106 | Add semantic undo stack | done | `POST /api/jobs/{job_id}/undo` restores the previous semantic state snapshot |

## Phase 2: Confidence and review queue

| ID | Task | Status | Acceptance criteria |
|---|---|---|---|
| UX-201 | Compute hit assignment confidence | partial | Each hit has confidence from cluster confidence, label agreement, energy rank, representative/explicit/suppressed state; feature-vector margin is not implemented |
| UX-202 | Compute cluster confidence | partial | Each cluster has confidence from purity, size, representative, lock state; true feature cohesion/stability is not implemented |
| UX-203 | Add uncertainty ranking | done | Backend returns `review_queue` sorted by priority |
| UX-204 | Add low-confidence UI emphasis | done | Hit rows and review queue emphasize low-confidence and suppressed items |
| UX-205 | Add review quick actions | partial | Accept, favorite, move, pull-out, suppress are available; split/restore/batch actions are still incomplete |

## Phase 3: Constraint-aware editing

| ID | Task | Status | Acceptance criteria |
|---|---|---|---|
| UX-301 | Move hit to cluster endpoint | done | Moving a hit creates `force-cluster` and usually `must-link` constraints |
| UX-302 | Pull hit into new cluster endpoint | done | Pulling a hit creates a new user cluster plus `cannot-link`/`force-cluster` constraints |
| UX-303 | Lock cluster endpoint | done | Locked cluster state persists and is shown in the UI |
| UX-304 | Local neighborhood recomputation | partial | Semantic state and confidence are recomputed; true cached feature-neighborhood reclustering is not implemented |
| UX-305 | Constraint violation detection | todo | Backend reports attempted changes that violate user constraints |
| UX-306 | Undo last interaction | done | User can reverse the previous semantic edit |
| UX-307 | Suggest similar moves from a hit move | partial | Heuristic suggestions are generated using label, centroid, and energy similarity |

## Phase 4: Missed onset and bleed interactions

| ID | Task | Status | Acceptance criteria |
|---|---|---|---|
| UX-401 | Add force-onset endpoint | todo | User can add onset by time; hit is sliced/classified/clustered |
| UX-402 | Add waveform click interaction | partial | Existing waveform clicks audition nearest hit; add-onset mode is not implemented |
| UX-403 | Add bleed suppression endpoint | done | User can mark hit as bleed/noise and create a suppress-pattern example |
| UX-404 | Implement similar-false-positive search | partial | Heuristic suppress suggestions are generated from energy/centroid/label similarity |
| UX-405 | Add suppression restore | todo | Suppressed hits can be restored individually or in batches |

## Phase 5: Suggestions and explanations

| ID | Task | Status | Acceptance criteria |
|---|---|---|---|
| UX-501 | Add suggestion model | done | Suggestions have type, confidence, reason, preview count, status, accept/reject state |
| UX-502 | Generate move suggestions from cluster edits | partial | Basic suggestions generated after move edits |
| UX-503 | Generate split suggestions from cannot-link edits | partial | Basic split suggestions generated after pull-out edits |
| UX-504 | Generate suppression suggestions | partial | Basic suppression suggestions generated after suppress edits |
| UX-505 | Add suggestion inbox UI | done | Suggestions are visible and can be accepted/rejected |
| UX-506 | Add explain-cluster endpoint | done | Backend returns representative, confidence reasons, outliers, constraints, label distribution |
| UX-507 | Add explanation drawer UI | done | UI renders explanation JSON for the selected cluster |
| UX-508 | Add diff previews before suggestion acceptance | todo | Suggestions show exact before/after cluster membership changes before acceptance |

## Phase 6: Counterfactuals and advanced quality features

| ID | Task | Status | Acceptance criteria |
|---|---|---|---|
| UX-601 | Add parameter diff estimator | todo | UI can preview approximate effect of parameter changes |
| UX-602 | Add cached local parameter recompute | todo | Parameter changes reuse hit features where possible |
| UX-603 | Add reconstruction error map | todo | Backend computes original-vs-reconstruction mismatch by region |
| UX-604 | Add reconstruction correction workflow | todo | User can select bad region and get likely causes/fixes |
| UX-605 | Add multi-resolution cluster hierarchy | todo | Clusters can be browsed coarse-to-fine |

## Phase 7: Preference memory / teach mode

| ID | Task | Status | Acceptance criteria |
|---|---|---|---|
| UX-701 | Persist user correction profiles | todo | Reusable preference profile stores accepted correction patterns |
| UX-702 | Apply profile to new jobs | todo | New jobs can opt into prior preferences |
| UX-703 | Add profile safety controls | todo | User can inspect, disable, delete, and scope learned preferences |
| UX-704 | Evaluate profile impact | todo | Benchmarks compare profile-on vs profile-off results |

## Current recommended next task

Start with `UX-401` plus supervised export.

Reason:

The project now has a replayable state/events/constraints foundation plus supervised edited artifact export. The largest UX gaps are cluster merge/relabel/split, cached feature-neighborhood reclustering, and edited-vs-original comparison.


## Pass 5 completed

- [x] Render semantic edits into `supervised/` artifacts.
- [x] Add force-onset endpoint and waveform add-onset mode.
- [x] Add suppressed-hit restore endpoint and button.
- [x] Add exact suggestion diff previews.
- [x] Add validation script for supervised export and force-onset.

## Next interactive tasks

- [ ] Cluster merge/relabel/split controls.
- [ ] Cached feature-vector local reclustering.
- [ ] Edited-vs-original comparison view.
- [ ] Browser tests for waveform add-onset and edited export.

## Automatic card-flow follow-up tasks

- [x] Auto-start processing after drop/upload.
- [x] Group sample cards by type.
- [x] Add draw-another-candidate interaction.
- [x] Add dismiss-card interaction.
- [x] Add simple trim/extend/save timing interaction.
- [x] Add waveform zoom/pan.
- [ ] Persist drawn candidate cards as representative overrides.
- [ ] Recluster locally after card-level decisions.
- [ ] Add browser-level tests for the card flow.


## Selected cards and separation backends

Completed:

- [x] Add Spleeter backend option.
- [x] Default new jobs to Spleeter `spleeter:4stems` + `drums`.
- [x] Keep Demucs as explicit quality/fallback backend.
- [x] Add `none` backend for full-mix preview.
- [x] Add optional `requirements-spleeter.txt`.
- [x] Add per-card checkbox selection.
- [x] Add selected-only backend export.
- [x] Persist draw-next representative overrides.
- [x] Rewrite preview audio immediately for trim/extend edits.
- [x] Add regression smoke test for selected export/card actions.

Next:

- [ ] Add card-column relabel/merge/split actions.
- [ ] Add browser-level tests for card selection/export/edit flows.
- [ ] Add localized high-quality separation refinement on short candidate windows.