Commit fefb292
fix(review): apply remaining MEDIUM/LOW backlog from multi-agent review
Round-3: clears the deferred backlog after the round-2 CRITICAL/HIGH pass.
7 parallel fixers over disjoint file sets; each finding verified against source.
Concurrency / correctness:
- smartcut._clip_lock: replace size-cap eviction with a reference-counted
context manager — an entry now lives exactly as long as some caller holds or
waits on it, closing the residual TOCTOU where two callers could be handed
different locks for one path (concurrent smart_cut clobbering one output)
- app.py /api/reframe: a metadata-save failure after a successful reframe now
raises HTTP 500 instead of returning 200 with on-disk/metadata divergence
- app.py /api/batch: clean up the failing item's output dir + jobs entry on the
build_main_cmd ValueError and QueueFull paths (was leaking orphan dirs)
Resilience / hang protection:
- diarization.extract_audio_to_wav: add 1800s ffmpeg timeout (matches the ASR
sibling) + broaden except to TimeoutExpired
- social_publisher: 5s bound on the SSRF-guard getaddrinfo (was unbounded,
could pin a thread-pool slot)
- download.py: re-resolve the URL host at download time and refuse if it now
points only at internal/loopback ranges (DNS-rebinding past the API SSRF check)
Validation:
- schemas: ZernioConfigRequest gains api_key/timezone max_length + an accounts
validator (≤16 entries, known platforms, str ≤256); PublishRequest.scheduled_for
gains max_length=64
Observability (surface silent failures, keep fallbacks):
- main.transcribe_video: WARNING when Deepgram fails before the Whisper fallback
- transcribe_cache.load_cached_transcript: distinguish corrupt entry (warn +
delete so next run rewrites) from a genuine cache miss
- job_results._build_clips + job_artifacts.relocate_root_job_artifacts: log the
swallowed exception instead of silent pass/return-False
- social_publisher: scheduling-without-collision-data is now explicit in logs
(Zernio fetch failure no longer reads like an empty calendar)
Performance / cleanup:
- reframe.py: lazy-init MediaPipe FaceDetection/FaceMesh (was ~300ms TFLite load
at import on every pipeline + every --reframe-only subprocess); all .process()
call sites migrated to the getters. Removed dead SpeakerTracker
stabilization_frames param/attribute (never read; real suppression is cooldown)
- compose._apply_smartcut: drop the dead legacy-sidecar shortcut (the bare
*_smartcut.mp4 name is never written under the current Subtitles→Smart Cut
order; smart_cut's own plan-hash cache + legacy fallback already cover it).
Supersedes the round-1 mtime guard on that now-removed branch.
Frontend (live redesign/):
- useModalA11y: callback-ref for onClose so the focus-trap effect stops re-running
(and stealing focus mid-type) on every parent re-render
- publish.jsx: mountedRef guards the 500ms post-publish setTimeout
- RedesignApp: track + clear toast auto-dismiss timers on unmount
- create.jsx: aria-pressed on the preset cards
Tests: test_concurrency_fixes.py rewritten for the context-manager _clip_lock
(registry identity + refcount + held-entry-not-evicted). Host 418 passed/3
skipped; Docker integration 23 passed; eslint 0; vite build OK.
Deliberately NOT changed (contract/behavior risk outweighs benefit; documented):
response_model on every endpoint (would risk dropping fields the UI reads),
process_endpoint multipart/json double-parse refactor (no repro, risky),
window.prompt/confirm replacement (cosmetic), global-smooth odd-frame trajectory
(opt-in quality knob — eye-decides per CLAUDE.md). esbuild≤0.24 dev-CORS is
dev-server-only and already mitigated by the backend origin checks.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VDkEfcWP5suCdutKJKnvCM1 parent f939db6 commit fefb292
17 files changed
Lines changed: 253 additions & 101 deletions
File tree
- dashboard/src/redesign
- src/clippyme
- api
- domain
- integrations
- pipeline
- tests/domain
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
94 | 98 | | |
95 | 99 | | |
96 | 100 | | |
| |||
115 | 119 | | |
116 | 120 | | |
117 | 121 | | |
118 | | - | |
| 122 | + | |
| 123 | + | |
119 | 124 | | |
120 | 125 | | |
121 | 126 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
79 | 84 | | |
80 | 85 | | |
81 | 86 | | |
| |||
133 | 138 | | |
134 | 139 | | |
135 | 140 | | |
| 141 | + | |
136 | 142 | | |
137 | 143 | | |
138 | 144 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
10 | 19 | | |
11 | 20 | | |
12 | 21 | | |
| |||
26 | 35 | | |
27 | 36 | | |
28 | 37 | | |
29 | | - | |
| 38 | + | |
30 | 39 | | |
31 | 40 | | |
32 | 41 | | |
| |||
45 | 54 | | |
46 | 55 | | |
47 | 56 | | |
48 | | - | |
| 57 | + | |
| 58 | + | |
49 | 59 | | |
50 | 60 | | |
51 | 61 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
519 | 519 | | |
520 | 520 | | |
521 | 521 | | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
522 | 525 | | |
523 | 526 | | |
524 | 527 | | |
| |||
536 | 539 | | |
537 | 540 | | |
538 | 541 | | |
539 | | - | |
540 | | - | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
541 | 546 | | |
542 | 547 | | |
543 | 548 | | |
| |||
1080 | 1085 | | |
1081 | 1086 | | |
1082 | 1087 | | |
1083 | | - | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
| 1091 | + | |
| 1092 | + | |
| 1093 | + | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
1084 | 1099 | | |
1085 | | - | |
1086 | | - | |
1087 | | - | |
1088 | 1100 | | |
1089 | 1101 | | |
1090 | | - | |
| 1102 | + | |
| 1103 | + | |
1091 | 1104 | | |
1092 | 1105 | | |
1093 | 1106 | | |
| |||
1100 | 1113 | | |
1101 | 1114 | | |
1102 | 1115 | | |
| 1116 | + | |
| 1117 | + | |
| 1118 | + | |
| 1119 | + | |
| 1120 | + | |
| 1121 | + | |
1103 | 1122 | | |
1104 | 1123 | | |
1105 | 1124 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
224 | 224 | | |
225 | 225 | | |
226 | 226 | | |
227 | | - | |
| 227 | + | |
228 | 228 | | |
229 | 229 | | |
230 | 230 | | |
| |||
312 | 312 | | |
313 | 313 | | |
314 | 314 | | |
315 | | - | |
| 315 | + | |
316 | 316 | | |
317 | | - | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
89 | 74 | | |
90 | 75 | | |
91 | 76 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| 9 | + | |
| 10 | + | |
8 | 11 | | |
9 | 12 | | |
10 | 13 | | |
| |||
94 | 97 | | |
95 | 98 | | |
96 | 99 | | |
97 | | - | |
| 100 | + | |
| 101 | + | |
98 | 102 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| 10 | + | |
| 11 | + | |
9 | 12 | | |
10 | 13 | | |
11 | 14 | | |
| |||
112 | 115 | | |
113 | 116 | | |
114 | 117 | | |
115 | | - | |
| 118 | + | |
116 | 119 | | |
117 | 120 | | |
118 | | - | |
| 121 | + | |
119 | 122 | | |
120 | 123 | | |
121 | 124 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
92 | | - | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
93 | 97 | | |
94 | 98 | | |
95 | 99 | | |
96 | | - | |
97 | | - | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
98 | 106 | | |
99 | 107 | | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
118 | 127 | | |
119 | 128 | | |
120 | 129 | | |
| |||
0 commit comments