95 Commits
Author SHA1 Message Date
Jonathan Rainville 42be31514d docs(roadmap): update roadmap to fit 2.40 priorities and update progress 2026-08-24 13:51:34 -04:00
Andrey Bocharnikov 50ef59a117 feat(browser): isolate the Tabs that show a downloaded file
A Tab opened to display a downloaded file is no longer a browsing Tab.
`profileParams` gains an orthogonal `localPreview` flag; it selects a
profile of its own — always off the record, never named — with no
injected scripts, no web channel and no connector.

The local-URL policy splits along the same line: browsing profiles reach
no file:// at all (a local path in the address bar dead-ends), and only
the preview profile reaches the downloads and player-page directories.
The default profile, which backs views whose storage profile could not be
created, carries the browsing policy either way.

WebEngine views drop localContentCanAccessRemoteUrls everywhere and grant
localContentCanAccessFileUrls to previews alone, so the player page can
load the media beside it.

Stack-target: PR 21853
2026-08-13 09:42:17 +04:00
Andrey Bocharnikov 3690001a17 refactor(browser): take Tabs out of the Downloads context
Retry correlation moves into DownloadsStore: armRetry mints the token and
attachDownload reattaches the Record the Backend echoed it with. That
replaces the URL match plus 10s expiry timer in the context — an unanswered
arm can no longer capture an unrelated Download of the same URL, so there
is nothing to expire.

The context no longer walks the Tab strip. It asks the host to re-issue on
a profile (downloadUrlFn) and reports who a Download belongs to
(downloadAttributed); BrowserLayout owns both platform answers. On desktop
the re-issue runs on a transient WebEngine page owned by the profile, so a
Retry now works with no matching Tab open at all — the Tab was only ever a
profile carrier there. Viewless re-issues reach QML through ProfileManager,
which needs no Tab either.

The pristine-popup close moves to BrowserLayout with the rest of the Tab
knowledge; its coverage went with it, and BrowserLayout has no test seam.

Stack-target: PR 21851
2026-08-13 09:42:17 +04:00
Andrey Bocharnikov 524a6a5b76 feat(browser): make the media open route a set of Backend Capabilities
Three facts about opening a downloaded media file were baked in as one global
answer. All three belong to the Backend, so they join
BrowserBackendCapabilities beside inPageMediaPlaybackSupported.

proprietaryCodecsSupported. M4A/AAC and MP4/H.264 were excluded everywhere
because our Qt WebEngine build ships without the licensed codecs — a fact about
that build, not about WebKit or the Android WebView, which decode them through
the OS. On iOS a page's inline player played an mp4 while the same file, once
downloaded, went to the share sheet.

mediaPlayerPageRequired. The generated player page exists only because WebEngine
turns a top-level navigation to local media into a fresh Download. Keeping it
everywhere is what broke iOS playback: the page sits in TempLocation, the media
in the downloads directory, and a plain local load grants the web content
process only the file it was handed — so the page came up and the audio in it
never loaded.

loadFileUrl(fileUrl, readAccessUrl) joins the Web View seam beside loadUrl,
implemented by both adapters and proxied by LazyWebViewAdapter — the
seam member easiest to forget. The grant is left empty, so it resolves to the
file's own directory: the narrowest one that works.

Nothing is deleted — a Backend answering "yes" still gets the page, so falling
back is one line. Verified on an iOS device: mp3, mp4 and webm all open in a Tab
with a native player.
2026-08-13 09:42:17 +04:00
Andrey Bocharnikov c7fd119d3c feat(browser): Download Records domain — store, history, and the open seam
Introduce the downloads domain per ADR 0006 (added here):

- DownloadRecord is the one list identity. Live Backend downloads attach
  to Records; UI reads Records only, never live download objects.
- DownloadsStore owns downloadModel / downloadStripModel (session-only
  pills) / downloadsListModel (newest-first view) as JS arrays of
  Records, behind a single injectable 'platform' seam. Download History
  persists via the browser preferences mechanism (create + terminal
  states only) — keys and raw accessors land in BrowserPreferenceKeys /
  BrowserPreferencesStoreBase alongside the Tab Session ones.
- BrowserDownloadOpenContext is the extracted open seam: it decides the
  open route per Record — direct navigation, a generated local player
  page for media (player/media_player.html|js), or the platform opener —
  and defines the only file:// URLs the browser may navigate to.
- DownloadFormatUtils.js centralizes the open-allowlist predicates and
  file-name eliding; Record byte counts are doubles, so large (>2^31)
  download sizes survive.
- Browser CONTEXT.md documents the finished downloads design.

Tested in tst_DownloadsStore (platform seam faked as one object) and
tst_BrowserDownloadOpenContext; the Storybook DownloadsStore stub stays
an empty QtObject — pages and tests mock inline.
2026-08-13 09:42:17 +04:00
Jonathan Rainville f0ca5f1d08 docs(roadmap): update roadmap progress 2026-08-09 14:32:02 -04:00
Andrey Bocharnikov d2b988a0ae docs(adr): keep third-party media caching in the Qt network layer
Records two decisions that belong together, because caching only decides how
often the bytes cross the network while the CDN URL decides how many bytes
there are: HTTP caching for collectible media stays in the QNetworkDiskCache
that the QML engine's network access factory installs rather than moving behind
the status-go media server, and list-sized media is asked for by rewriting the
Cloudinary delivery URL where the render size is known.

Also records, as an accepted risk, that the factory gives every manager its own
QNetworkDiskCache pointed at one shared directory — which Qt documents as
unsupported. Measured with a probe in create(): two managers in Storybook's
remote mode, a third in the application where XHR from QML takes the engine's
own manager. The consequence is that the size cap is enforced against each
cache's partial view of the directory, and that the statistics screen has to
measure the directory itself rather than ask any one cache.
2026-08-06 14:26:30 +04:00
Siddarth Kumar aca56a93bb chore: bring in nim status-go bindings and nuke vendor 2026-08-04 07:18:19 +05:30
Jonathan Rainville bcb30b734c docs(roadmap): update roadmap progress 2026-07-31 15:42:18 -04:00
Alex Jbanca 500730dbfb chore(wallet): address review nits — model docs, notify signal, controller teardown
- SendModalHeader / StickySendModalHeader / SimpleSendModal: document the
  roles the terminal picker model actually exposes
- CollectiblesSelectorModel: give filteredFlatModel a NOTIFY signal so the
  QML binding that reads it stops warning
- assets_view module: tear the controller down like token_selector does
- ADR 0005: describe the float-at-UI contract and note BuyCryptoModal still
  layers proxies above the terminal model
2026-07-27 18:50:27 +03:00
Alex Jbanca 17e83c7235 docs: ADR — terminal adaptor models 2026-07-27 18:50:27 +03:00
Jonathan Rainville 377341f6f2 docs(roadmap): add issue for the logos storage epic 2026-07-22 10:51:45 -04:00
sunleosandJonathan Rainville abe1048484 chore(roadmap): update 2026-H2.md (#21546)
Co-authored-by: Jonathan Rainville <rainville.jonathan@gmail.com>
2026-07-21 11:44:22 -04:00
Alex Jbanca 6378842d94 feat(threadpool): typed task-completion handoff
Add finishTyped/takeTyped: a worker parks a fully-built, exclusively-owned
object graph in a registry and delivers only an integer handle across the
queued-invoke bridge, so the GUI slot moves (not copies, not re-parses JSON)
the graph into place. ORC/ARC only; compile-guarded on -d:useMalloc. Includes
the cross-thread soak test and ADR-0004.
2026-07-20 11:12:35 -04:00
Jonathan Rainville 80e7c0203d docs(roadmap): update progress 2026-07-10 17:27:28 -04:00
Alex Jbanca d3b8917a04 chore: Drop DOtherSide
+ Move monitoring to statusq
2026-07-07 10:44:53 +03:00
Jonathan Rainville da09884f73 docs(roadmap): create 2026 H2 roadmap and update H1 2026-07-06 13:21:17 -04:00
Andrey Bocharnikov 20c74206b7 fix: coarse status-go cleanup and document platform sentinel maintenance
* Wipe vendor/status-go/build/ on platform switch instead of individual
libstatus binaries

doc: condense ADR 0003

fix comments
2026-07-03 15:33:46 +04:00
Andrey Bocharnikov 84291d58d2 doc: add ADR for platform sentinel and iOS libsds localization
Document the umbrella platform sentinel in status-desktop, mobile
status-go delegation model, and the superseded iOS Nim-runtime symbol
localization workaround now fixed upstream in nim-sds v0.2.5.
2026-07-03 15:33:46 +04:00
Jonathan Rainville c32b3cdece docs(release): add post-release steps 2026-06-22 15:33:30 -04:00
Jonathan Rainville 5a421bd6bd docs(release): update release process document following the retro
Focuses mostly on documenting what to do before the RC cut.
Also removes mentions of the release board. It seems that working on the normal milestone board worked well.
2026-06-22 15:33:30 -04:00
Alex Jbanca 963aba1711 chore: Update docs 2026-05-04 16:21:48 +03:00
Alex Jbanca beb8fefc2d feat(Mobile Profiling): add mobile profiling support and related scripts 2026-05-04 16:21:48 +03:00
Noelia f4b92c352d chore(Roadmap): Roadmap update
Updated epics progress.
2026-04-27 16:03:57 +02:00
Noelia 4ccf7b6739 chore(Roadmap): Update epic progress
Update epic progress
2026-04-20 16:10:25 +02:00
Noelia 3b2aaa2050 chore(roadmap): update roadmap progress
Update epic progress for 2.38 milestone based on current GitHub Project status.
2026-04-13 16:01:03 +02:00
Noelia ded3d36add chore(roadmap): update 2026-H1 progress
Update epic progress for 2.38 milestone based on current GitHub Project status.
2026-04-08 14:56:36 +02:00
Anthony Laibe dc3f7a1d1c Update support status for Hoodi network integration 2026-04-07 10:54:09 +02:00
Noelia fbc39d35a5 chore(roadmap): update 2026-H1 progress
Update epic progress for 2.38 milestone based on current GitHub Project status.
2026-04-07 10:54:09 +02:00
Alex Jbanca e9e3afebaf fix(localNotifications): Various fixes found during PR review
- normalize notification id
- parse the status-go json for errors
- hook setUIVisible(false) on android app crash
- make sure setUIVisible doesn't block the main thread
- properly identify group chat notifications
2026-04-01 09:24:28 +03:00
Alex Jbanca 083dc26918 chore: Add ADR for android push notifications 2026-04-01 09:24:28 +03:00
Alex Jbanca 4fdcf9ec1d feat(android): status-go as a service
Add an option to run status-go as a service on android using Androdi Binder as a transport.

See ADR for more details docs/adr/0001-android-status-go-as-a-service.md
2026-03-20 09:22:26 +02:00
Jonathan Rainville c9a67c73b8 docs: update epic workflow and release docs to match retrospective 2026-03-19 17:55:42 +00:00
Jonathan Rainville 3ac05f01b8 chore(roadmap): adds missing sds task and fix typo 2026-03-17 16:56:01 +00:00
sunleos d7a955a24b Added "Improve handling of online/offline and wallet error banners" 2026-03-17 16:56:01 +00:00
Jonathan Rainville 7c8e441547 docs(roadmap): add issues to roadmap 2026-03-17 16:56:01 +00:00
Jonathan Rainville d2eb0f7ccb docs(roadmap): update progress 2026-03-17 16:56:01 +00:00
Jonathan Rainville 1ef3bc0fe6 fix some small points 2026-03-17 16:56:01 +00:00
Jonathan Rainville cab2d0abc4 docs(roadmap): update roadmap for Q2 2026-03-17 16:56:01 +00:00
Jonathan Rainville a4e0c817cc docs(roadmap): roadmap for Q1 of 2026 (#19540) 2026-02-09 15:18:24 -05:00
Jonathan Rainville 587cb6a5f8 docs(epic-workflow): add epic delivery guide on how to manage epics (#19551)
* docs(epic-workflow): add epic delivery guide on how to manage epics

* docs(epic-workflow): add QA sub tasks to list

* chore: add a new point

* chore: update guide link
2026-01-16 10:22:36 -05:00
Jonathan Rainville 52adcef857 docs(release): add release process guide for internal contributors (#19543)
* docs(release): add release process guide for internal contributors

* docs(release): clarify who must cherry-pick

* docs(release): update critical bugs and how to version
2026-01-15 16:15:57 -05:00
Jonathan Rainville 7a1455be96 chore: rename status-desktop to status-app
Adapts the docs and different mentions of the repo from status-desktop to status-app

Also adapts the docs to talk about the Status App and not just Status Dekstop. Adds links to the Mobile build too.
2025-12-10 11:36:43 -05:00
Jonathan Rainville c1e60e4d71 docs(roadmap): update roadmap progress 2025-11-24 13:43:32 -05:00
Jonathan Rainville 54a420a3b3 docs(roadmap): update progress and remove gantt chart as out of date 2025-11-10 13:46:13 -05:00
Jonathan Rainville 361cc80d63 docs(roadmap): update roadmap progress 2025-10-27 23:06:38 -04:00
Jonathan Rainville e04645f79e docs(roadmap): update progress on roadmap 2025-10-03 12:56:06 -04:00
Jonathan Rainville e84e2c2bd0 docs(roadmap): update roadmap progress 2025-09-29 16:09:24 -04:00
Jonathan Rainville fb47f2be61 docs(waku): adds furps for communities over Waku (#18485) 2025-09-26 13:35:51 -04:00
Jonathan Rainville dd6489a1da docs(roadmap): update progress on the different Epics 2025-09-19 13:32:21 -04:00