Skip to content

Sync upstream 2026-11-12 (351 commits) - #18

Merged
hjescalona merged 352 commits into
smgfrom
sync/upstream-20261112-0248
Nov 12, 2026
Merged

hjescalona merged 352 commits into
smgfrom
sync/upstream-20261112-0248

Conversation

@hjescalona

Copy link
Copy Markdown

Merges main (CapSoftware/Cap@4d62155) into smg. Closes #16.

Conflict resolved: apps/web/app/(org)/dashboard/settings/organization/components/MembersCard.tsx. Upstream moved Font Awesome icons to per-icon modules and a local FontAwesomeIcon component; our members table search added imports at the same spot. Both are kept. The file is identical to the resolution in feat/members-table-search (909bce4), which Greptile reviewed 5/5 on CapSoftware/Cap#3919.

Migration: 0053_mobile_push_tokens creates two new tables (mobile_push_claims, mobile_push_tokens) with indexes. It doesn't touch existing tables. Take a MySQL backup before merging, then add migrations-approved.

Behavior changes worth knowing after deploy:

  • Viewer downloads from the share page are on by default, with organization and per-cap switches.
  • Per-video link access in the sharing dialog.
  • CAP_CHROME_EXTENSION_ID is now passed to the self-hosted web container upstream (roadmap item 10a is done).

Cap Desktop 0.6.3 calls no new server endpoints, so it works with the current deployment and with this one.

xxxxxxxxxxxxx and others added 30 commits November 9, 2026 19:39
…and Linux

A .cap recording is a package only on macOS. On Windows and Linux it is a plain folder, so the file dialog filtered to *.cap opened the folder instead of returning it and nothing inside matched the filter. The editor's Existing recording import now asks for a folder on those platforms, rooted at the recordings directory, and keeps the .cap open panel on macOS.
cmdk 0.2.1 builds a [data-value="..."] selector from the selected item's value
without escaping it, and runs it during render. The search rows used the video
title, owner name and space name as that value, so a double quote in any of
them made querySelector throw and took the dashboard down.

Rows now use their stable ids as the cmdk value, so user text never reaches the
selector. Rows with the same title and owner are also selectable one at a time
again.
The switcher items had no explicit cmdk value, so cmdk used the organization
name and hit the same unescaped selector as the dashboard search. Items now use
the organization id as their value and the list filters on the name through
cmdk's own scorer, so search results are unchanged.
fix(desktop-gpui): keep keypress times when trimming keyboard overlays
…ut zenity

rfd shows Linux message dialogs through zenity and shows nothing when it is missing, so picking a folder that is not a recording imported nothing and said nothing. The import error now falls back to Cap's own dialog there, as confirmations and alerts already do.
…d past MAX_PATH

GetDiskFreeSpaceExW was given the path as written and fails from 260
characters. Paths at the length where std switches form are now queried in
the extended-length form. A storage check that cannot run no longer fails
the save of a captured recording; a measured shortage still does.
…itor has open

Deleting a recording from Settings or the library while an editor window
had it open failed on Windows with a sharing violation after part of the
folder was already gone.

A recording folder is now moved into a holding folder beside it before it
is removed, so it leaves the library whole or not at all. Where Windows
refuses the move because of a handle that still allows deletion, the
folder is removed in place only after every file in it is known to be
deletable.

A project an editor window has open is registered with the library, which
refuses to delete it and says so, the same way it refuses the recording in
progress. The editor's own Delete closes the window first, as before.
richiemcilroy and others added 24 commits November 11, 2026 16:07
…awide sources

The encoder's size limit could fit two neighbouring tiers of a very wide
source to the same dimensions, so the job encoded and uploaded one size
twice. A rung whose fitted size matches the one above it is now skipped.
…oard

feat(web): give Cap Infra its own console
…adder

feat(media-server): encode adaptive HLS ladders, whole or split across workers
Plays an HLS stream natively on Apple browsers, loads hls.js only when it is needed elsewhere, and falls back to an MP4. Controls update the DOM directly instead of re-rendering on every frame. The playback mode and starting rendition choices are pure functions with unit tests.
The Cap logo followed by Infra in a lighter weight on the wordmark's baseline.
Destroying hls.js detaches the media source and resets the video element, so reading the position afterwards restarted the MP4 from zero and paused. The position and play state are now read before the teardown.
The console read whole video rows and handed them to a browser
component, so storage keys and request metadata went with them, and any
column added later would follow. The query now names the seven fields the
pages use.
…source

Every path that ends on the MP4 now shares one fallback that listens for the file's own error, so a failed fallback shows the failure message. The play state follows the emptied event, so a replaced source no longer leaves the button on Pause. The lockup is named Cap Infra for screen readers.
The guard only rejected a short list of columns, so a new field could be
added to the query without failing it. It now compares the selected
columns with the seven the pages show.
…fields

fix(web): send only the video fields the Cap Infra console shows
…eem-page

feat(web): license redeem page for gifts and purchases
feat(web): add a small video player and the Cap Infra lockup
…ense-gift-toggle

feat(web): send a desktop license as a gift from pricing
The console drew its own mark from the Cap logo, a divider and a word.
It now uses the same lockup as the landing page, at the same size, in
the rail, the phone header and the setup screen.
…le-lockup

feat(web): use the shared Cap Infra lockup in the console
Resolves the MembersCard import conflict with upstream's Font Awesome
module change the same way as feat/members-table-search (909bce4).
Brings migration 0053_mobile_push_tokens.
@hjescalona hjescalona added upstream-sync has-migrations migrations-approved A human reviewed the migrations and took a MySQL backup labels Nov 12, 2026
@hjescalona
hjescalona enabled auto-merge November 12, 2026 03:13
@hjescalona
hjescalona merged commit b69c3d8 into smg Nov 12, 2026
10 of 18 checks passed
@hjescalona
hjescalona deleted the sync/upstream-20261112-0248 branch November 12, 2026 03:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

has-migrations migrations-approved A human reviewed the migrations and took a MySQL backup upstream-sync

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upstream sync conflict (2026-11-12)

4 participants