EC fork audit 2026-09 — tracking index #35
Closed
opened 2026-09-12 02:13:45 -04:00 by jared
·
0 comments
No Branch/Tag Specified
lotus
chore/dev-tool-security
feat/expected-devices
lotus-upstream-v0.28.0
feat/call-summary-details
feat/soundboard-mic-mix
feat/mobile-self-tile
feat/screenshare-audio-state
feat/decorations-origin
docs/lotus-call-error
lotus-stall-retry
docs/lotus-protocol
lotus-soundboard-not-permitted
lotus-mic-sampler-churn
lotus-call-error
fix/audio-output-list
lotus-notify-none
lotus-screenshare-prompt
lotus-call-origin
v0.28.0-lotus.4
v0.28.0-lotus.3
v0.28.0-lotus.2
v0.28.0-lotus.1
v0.25.0-lotus.29
v0.25.0-lotus.28
v0.25.0-lotus.27
v0.25.0-lotus.26
v0.25.0-lotus.25
v0.25.0-lotus.24
v0.25.0-lotus.23
v0.25.0-lotus.22
v0.25.0-lotus.21
v0.25.0-lotus.20
v0.25.0-lotus.19
v0.25.0-lotus.18
v0.25.0-lotus.17
v0.25.0-lotus.16
v0.25.0-lotus.15
v0.25.0-lotus.14
v0.25.0-lotus.13
v0.25.0-lotus.12
v0.25.0-lotus.11
v0.25.0-lotus.10
v0.25.0-lotus.9
v0.25.0-lotus.8
v0.25.0-lotus.7
v0.25.0-lotus.6
v0.25.0-lotus.5
v0.25.0-lotus.4
v0.25.0-lotus.3
v0.25.0-lotus.2
v0.25.0-lotus.1
v0.20.1
Labels
Clear labels
a11y
area: audio-pipeline
area: build-publish
area: deafen
area: decorations
area: denoise
area: livekit
area: mobile-ui
area: soundboard-inject
area: upstream-sync
area: widget-actions
bug
dependencies
docs
enhancement
performance
priority: critical
priority: high
priority: low
priority: medium
research
security
tech-debt
ux
Accessibility
Fork area: audio-pipeline
Fork area: build-publish
Fork area: deafen
Fork area: decorations
Fork area: denoise
Fork area: livekit
Fork area: mobile-ui
Fork area: soundboard-inject
Fork area: upstream-sync
Fork area: widget-actions
Something is not working
Package versions and advisories
Docs wrong or missing
New feature
Audio pipeline cost, re-render storms, leaks
Data loss, security hole, or crash on a main path
Broken feature or serious usability problem
Minor issue or polish
Wrong behaviour in an edge case or notable degradation
Origin checks, capability leaks, media/key handling
Code health, fragile patterns
Usability or visual inconsistency
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: LotusGuild/element-call#35
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Element Call fork audit 2026-09 — tracking index
Four parallel code-reading passes over
lotus@e36aef8a(audio pipeline, widget action bus & security, in-call UI/mobile, build/publish/upstream-sync), scoped togit diff v0.20.1..lotus. Every finding was verified against the code before filing; the P6-2 items already open in cinny'sLOTUS_TODO.mdwere not refiled. Host-side halves of cross-cutting problems are filed in LotusGuild/cinny and cross-referenced from the relevant issue here.Labelling: one
priority: *, one type label, onearea: *per issue; milestones High (due 2026-10-15) and Medium & Low (due 2026-11-30).Totals: 34 issues — 6 high, 17 medium, 11 low.
By area: denoise 8, widget-actions 8, decorations 4, build-publish 4, mobile-ui 3, livekit 2, soundboard-inject 2, deafen 1, upstream-sync 1, audio-pipeline 1.
High
bugdeafenprocessedTrack, which later gets stoppedbugdenoisefocus_participantis a silent no-op in EC's default grid layoutbugwidget-actionsbugdecorationsbugbuild-publishsrc/lotus/*at alltech-debtbuild-publishMedium
uxdenoisebugdenoiseperformancedenoiseLocalTrackPublishedevents start two denoise processors (two AudioContexts, two wasm inits)performancedenoisenulldoes not clear a quality cap, contrary to the host contractbuglivekitbuglivekituxsoundboard-injectperformancesoundboard-injectio.lotus.*toWidget actions are accepted from any originsecuritywidget-actionsuxwidget-actionsbugdecorationsbugwidget-actionsa11ydecorationscall_statecan emit up to 8 messages/second; dedupe runs after the throttleperformancewidget-actionslotusTransparent/lotusThemeprovide no contrast guard for an arbitrary host backgrounduxmobile-uibugbuild-publishtech-debtupstream-syncLow
channelCount: 1(nochannelCountMode: "explicit")bugdenoisebugdenoiseanyand break silently on an asset bumptech-debtdenoisebugaudio-pipelinesecuritydecorationsuxwidget-actionsbugwidget-actionslotusCallState=1in standalone (non-widget) mode builds the whole pipeline for nothingperformancewidget-actionsuxmobile-uilotusFlag/lotusParamURL cache is captured once at module load, not re-readtech-debtmobile-uiconcurrencyguard, unlike the cinny workflow it's modeled onperformancebuild-publishFix-first recommendation
setAudioEnabled$) instead of per-participantsetVolume; this single change also fixes the first-joiner race and the known soundboard-audio divergence.processedTrack = undefined), prevents a permanently dead mic.pnpm lintandpnpm test:unitinto CI and add the first tests undersrc/lotus/, so everything else here has regression protection.focus_participantforce spotlight mode and clear the pin on leave/hangup (pair with cinny#56 for the unpin UI).strictOriginCheck = trueon the widget transport; one line, closes the inbound-action origin gap.Checked and found sound
The
98fbdbd5inject double-publish fix under every interleaving; denoise survival across LiveKit reconnects on the success path;safeMediaUrl/safeAssetBasescheme and origin checks; all lotus module teardowns; every toWidget handler replies before gating; decoration roster capping and ref-counting; upstream capability negotiation unchanged;pnpm audit --prodclean; no Lotus credentials in Dockerfile/config; knip/tsc/vitest globs includesrc/lotus/*.Status 2026-09-13
All 34 issues closed. Shipped as
0.25.0-lotus.1(upstream v0.25.0 merge + first fix round) and0.25.0-lotus.2(remaining 24), both CI-published; cinny pinned to0.25.0-lotus.2at ba0cc3e4. Host-side halves (request_state, focus by device id, soundboard muted reason) landed in cinny f50f50be.