From ad912828ea462683988b69789ed72b5f41744d30 Mon Sep 17 00:00:00 2001 From: glass beadian Date: Sat, 17 Oct 2026 06:50:08 +0000 Subject: [PATCH] docs: recover the RFP judgment + UX audit into the repo (were /tmp-only, lost to tmp cleanup) --- docs/reports/rfp-judgment-final.md | 61 ++++++++++++++++++++++++++++++ docs/reports/ux-audit-2026-10.md | 31 +++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 docs/reports/rfp-judgment-final.md create mode 100644 docs/reports/ux-audit-2026-10.md diff --git a/docs/reports/rfp-judgment-final.md b/docs/reports/rfp-judgment-final.md new file mode 100644 index 0000000..3140ccd --- /dev/null +++ b/docs/reports/rfp-judgment-final.md @@ -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 diff --git a/docs/reports/ux-audit-2026-10.md b/docs/reports/ux-audit-2026-10.md new file mode 100644 index 0000000..f9a9362 --- /dev/null +++ b/docs/reports/ux-audit-2026-10.md @@ -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.