docs: recover the RFP judgment + UX audit into the repo (were /tmp-only, lost to tmp cleanup)

This commit is contained in:
glass beadian 2026-10-17 06:50:08 +00:00
parent f3631307aa
commit ad912828ea
2 changed files with 92 additions and 0 deletions

View file

@ -0,0 +1,61 @@
# Editor v2 RFP — FINAL judgment (3 of 4; deepseek a no-show)
deepseek: 5 launch attempts, all died to infra (latest: lease expired at seq 17, no output). Excluded.
In hand: nemotron (19/25 preliminary), glm53 (24/25 preliminary), qwen38 (scored below).
## qwen38 (qwen3.8-27b) — assessment
Strengths:
- Landscape-native schema from v1 (`aspect: '16:9' 720p | '9:16' 1080×1920`, `fit: cover|contain`) —
satisfies the mandatory amendment glm53 needed, natively.
- Captions are schema-first: Speaches faster-whisper large-v3-turbo (correct model per research),
words JSON as source of truth, SRT/VTT/ASS derived, ASS burn-in re-timed through the EDL.
- Container generalization is disciplined: the in-flight produce payload becomes a degenerate
EdlProject → ONE validator, ONE render path; version discriminator + version-bump policy as the
explicit anti-NLE-creep defense.
- Job model reuses the in-flight producer lease pattern (`kind='assemble'`, SKIP LOCKED).
- Render: one process / one filter_complex / one encode, measured 1.2× RT; stream-copy honestly
rejected inside assemblies; cards as loop-PNG from the existing overlay renderer — no drawtext
at all; pre-spawn trim validation against probe durationMs; retry/timeout/scratch-cleanup policy.
- AI: Speaches + SigLIP + job runner on gpu-01 over Tailscale, worker stays pure FFmpeg; VRAM budget
table; license register incl. BLOCKED list (XTTS-v2 CPML, F5-TTS CC-BY-NC, RVM GPL-3, Ultralytics AGPL-3);
auto-editor as SUGGESTED cuts with human confirm.
- UI: only new files, primitives named as reused, mobile single-column with chevron reorder, ≥44 px
targets, one-thumb flow, 8 documented shortcuts, exact brand tokens.
- Risk honesty: 5 risks with mitigations; "preview ≈ final"; measured-vs-EST labeling.
Weaknesses: stale migration number (036 vs actual next); no explicit schema-drift guard; no
render-CPU-contention semaphore; thinner canvas/revision formalism than glm53.
## Final scoring (1–5 per criterion)
| Criterion | nemotron | glm53 | qwen38 |
|---|---|---|---|
| Correctness vs real constraints | 3.5 | 4.5 | 4.5 |
| Concreteness (files/jobs/models) | 4 | 5 | 5 |
| Speed-to-value for crews | 4 | 4.5 | 4.5 |
| Look-and-feel respect | 4 | 5 | 5 |
| Risk honesty | 3.5 | 5 | 5 |
| **Total** | **19/25** | **24/25** | **24/25** |
## Verdict
glm53 and qwen38 tie at 24/25. Tie-break on the deltas: glm53's only mandatory amendment was a SCHEMA
change (portrait-only canvas); qwen38's gaps are ADDITIVE process guards.
**Decision: adopt qwen38 as the editor-v2 plan base, with two glm53 amendments folded in:**
1. glm53's mirror-file + mirror-assert convention for the EDL schema (API↔worker drift guard).
2. glm53's render semaphore (≤2 concurrent niced renders) so batch renders never starve the live compositor.
nemotron: not adopted (wrong transcription stack, captions missing, matting confusion).
deepseek: no-show; may be re-run later for a second opinion but is not blocking.
## Implementation status
- S1 EDL schema + /video/edl API + 043 store: SHIPPED (media-control/edl.ts, EdlController, 043)
- L1 assemble lane: SHIPPED (044 claim widening, runner probe+assemble lanes, assemble-builder,
overlay-png cards, ffprobe port) — e2e verified (2 clips + card + overlay → derived asset)
- M1 editor UI: queued
- M2 transcription lane: sidecar deployed (Speaches-compatible faster-whisper on moxexleyhp1-1 GPU,
http://100.70.240.7:9000) — hub wiring pending
- v1.5 search (SigLIP): sidecar deferred — TEI 1.8 cannot parse google SigLIP configs; needs a newer
TEI or the planned FastAPI wrapper

View file

@ -0,0 +1,31 @@
# UX Audit — app.occupymedia.cc (live, read-only) — October 2026
**Auditor:** fresh account `uxaudit-2653`, registered via `/onboarding` (solo path).
**Method:** Playwright 1.63 / Chromium, Desktop 1440×900 and Mobile 390×844 (iPhone UA, 3× DPR).
**Scope:** landing, onboarding, sidebar + mobile nav, streams, compose, calendar, video, groups, settings, audit, chat embed, files embed, inbox/approvals/analytics/connections/team/archive/control-room/search/more.
**Brand check:** dark brand consistent across every screen (#060403/#0F0A09/#FF1610 trio honored); no off-brand colors observed.
## Findings
| # | Sev | Screen / element | Finding |
|---|-----|------------------|---------|
| 1 | **P0** | Compose → Publish | Button disabled with no visible reason (zero channels default): helper line far above only. No tooltip/inline reason. |
| 2 | **P0** | First-run home (/streams) | Language Spanish-only with no toggle (t() hard-codes .es in no-collectives-home.tsx) while the landing has a working EN/ES toggle. Fails the 5-second first-run test for EN users. |
| 3 | P1 | Sidebar | 16 ungrouped nav items, no sectioning; home route labeled "Streams"; dead "Onboarding" item when signed in. |
| 4 | P1 | /groups | Orphaned route — linked from nowhere; background 404 /groups on load (caught). |
| 5 | P1 | Settings | Nearly empty dead-end for solo accounts: read-only identity block + raw dump of ~40 permission strings. |
| 6 | P1 | More menu | "Security & sessions" duplicates "Settings" (same destination); "Invite member"/"Roles" both → /team; no Groups link. |
| 7 | P1 | Terminology drift | Channels vs Connections; Video vs Video library vs PeerTube; Audit vs Audit trail vs Audit log; Streams vs Home; Files vs Library vs Drive. |
| 8 | P1 | Compose post-submit | Publish vs Post label drift; "0 accounts" helper reinforces nothing happens; no destination confirmation after publish. |
| 9 | P2 | Icons | Nav icons reused across unrelated items (video icon for Streams/Control Room/Video; files icon for Files+Archive; home icon for Onboarding). |
| 10 | P2 | Onboarding | username `pattern="[a-z0-9][a-z0-9_.-]{1,31}"` invalid regex → console error, native validation silently disabled. |
| 11 | P2 | Chat embed | Desktop Element embed fine (harmless config 404); mobile hand-off is good. |
| 12 | P2 | Files embed | Solo empty state good; background 400 /files?groupId=sample-group (caught). NOTE: Drive tab has since been REMOVED (oCIS retired) — stale. |
| 13 | P2 | Loading/error states | Strong: branded spinner, OfflineBadge, per-screen empty states with next-step + CTA. Highlight. |
| 14 | P2 | Mobile touch targets | Good: 44px enforced; Post 44×44, FAB 64×64; bottom nav + FAB thumb-friendly. |
| 15 | P2 | Empty states | Consistent + useful across screens; only Settings (Finding 5) is a dead end. |
## Status note (2026-10-16)
Findings 1–8 + 10 queued for fixes (ux-fix agent); Finding 12's Drive tab is already resolved
(oCIS retired, Library replaces it). Sidebar grouping (3) and terminology unification (7) land
with the same pass.