feat(settings): align settings, registry and docs with real capabilities (MAT-136) - #175
Conversation
Lot 3 of the v0.3.0-beta.1 roadmap (MAT-136). Every control the UI enables now does something observable; everything else says so. Backend: - max_segments_per_download and max_retries from config apply to each new download instead of hardcoded domain defaults - retry_delay_seconds feeds the retry backoff base, updated live via the settings bridge; zero falls back to the default so a hand-edited config cannot retry in a hot loop - the reqwest client is built from config at startup (proxy incl. SOCKS, user agent, connect timeout) - rest_api/websocket default to false; pre_allocate_space documented as planned (segment workers write at arbitrary offsets, disabling pre-sizing is not supported) Frontend: - Remote Access renders a planned-feature notice instead of interactive REST/WS/API-key controls: no server exists, so the section can never look active from a stale config - speed limit, pre-allocate and DNS over HTTPS disabled with a Coming soon badge; Network section says proxy/UA/timeout apply at next launch Registry: - soundcloud min_vortex_version raised to 0.2.0 (released 1.2.1 uses 0.2.0-only host functions), MEGA/1fichier descriptions no longer overpromise, MEGA bumped to 1.1.0 (refuses downloads until decryption ships) - new registry_coherence integration test validates fields, semver formats, checksum shape, categories and name uniqueness in CI Docs and tooling: - README and source doc comments point at the real Tauri app-data paths per OS instead of ~/.config/vortex/ - no-manual-deps hook accepts feature-only Cargo.toml edits when the existing lock still satisfies the manifest (cargo metadata --locked)
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
🚧 Files skipped from review as they are similar to previous changes (4)
📝 WalkthroughWalkthroughThe PR makes persisted settings drive network, download, engine, and retry behavior; disables or labels unsupported settings in the UI; updates remote-access messaging; refreshes plugin registry metadata; and adds registry validation and dependency-hook checks. ChangesConfiguration-driven runtime
Registry and project metadata
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant ConfigStore
participant Application
participant NetworkClient
participant DownloadEngine
participant QueueManager
ConfigStore->>Application: Load startup_config
Application->>NetworkClient: Build client from network settings
Application->>DownloadEngine: Apply segment and split settings
Application->>QueueManager: Set retry base delay
ConfigStore->>QueueManager: Publish SettingsUpdated
QueueManager->>QueueManager: Recalculate retry backoff
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/no-manual-deps.sh`:
- Around line 122-130: The cargo metadata consistency check in the
staged-manifest handling must validate the staged Cargo.toml and lockfile rather
than the working tree. Update the logic around cargo metadata to use an isolated
staged tree/archive, or fail closed when either relevant file differs between
the index and working tree; only continue when the staged dependency pair is
confirmed consistent.
In `@src-tauri/src/adapters/driven/network/client_config.rs`:
- Around line 21-25: Update the invalid-proxy warning in the
configured_proxy_uri handling to avoid logging the raw proxy_url, which may
contain credentials. Use a generic warning or a safely redacted endpoint while
preserving the existing error detail and proxy-ignore behavior.
In `@src-tauri/src/application/services/queue_manager.rs`:
- Line 485: Update the retry scheduling flow around retry_delay and the spawned
sleep task so pending retries observe changes to retry_delay_seconds instead of
retaining the initially snapshotted delay. Retain enough pending-retry metadata
to cancel and re-arm affected timers, or otherwise make the timer react to
atomic configuration updates, while preserving retry ordering and cancellation
behavior. Add a test that changes the setting while a retry is pending and
verifies the retry uses the updated delay.
In `@src-tauri/tests/registry_coherence.rs`:
- Around line 9-17: Update the CATEGORIES allowlist in the registry coherence
test to include the valid "utility" category, matching the categories accepted
by the plugin model. Preserve all existing category entries.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 9c578178-87a9-40b6-b00f-418a58a0fada
📒 Files selected for processing (23)
CHANGELOG.mdREADME.mdregistry/registry.tomlscripts/no-manual-deps.shsrc-tauri/Cargo.tomlsrc-tauri/src/adapters/driven/network/client_config.rssrc-tauri/src/adapters/driven/network/mod.rssrc-tauri/src/application/commands/start_download.rssrc-tauri/src/application/commands/start_download_tests.rssrc-tauri/src/application/services/queue_config_bridge.rssrc-tauri/src/application/services/queue_manager.rssrc-tauri/src/domain/model/config.rssrc-tauri/src/domain/ports/driven/config_store.rssrc-tauri/src/lib.rssrc-tauri/tests/registry_coherence.rssrc/i18n/locales/en.jsonsrc/i18n/locales/fr.jsonsrc/views/SettingsView/DownloadsSection.tsxsrc/views/SettingsView/NetworkSection.tsxsrc/views/SettingsView/RemoteAccessSection.tsxsrc/views/SettingsView/SettingField.tsxsrc/views/SettingsView/SettingsView.tsxsrc/views/SettingsView/__tests__/Sections.test.tsx
There was a problem hiding this comment.
cubic analysis
All reported issues were addressed across 23 files
Linked issue analysis
Linked issue: MAT-136: [Lot 3] Aligner l’interface et le catalogue sur les capacités réelles
| Status | Acceptance criteria | Notes |
|---|---|---|
| ✅ | R-01 — Each activatable Settings control modifies the associated behavior and has an observable test. | Settings now feed runtime behavior: max_segments_per_download and max_retries are applied when creating downloads; retry_delay_seconds is propagated to the running queue manager; network settings build the HTTP client at startup. Unit/tests exercise these changes. |
| ✅ | R-02 — Any option not implemented is non-interactive or explicitly marked as future; saving does not suggest a nonexistent effect. | UI controls for speed limit, pre-allocation, and DoH are disabled and show a "Coming soon" badge; domain comments and defaults reflect that these settings are not yet consumed. |
| ✅ | R-03 — Remote access cannot be presented as active while no REST/WS server is actually running. | Remote Access section replaced by a planned-feature notice and interactive controls removed; domain defaults explicitly disable REST/WebSocket so the app cannot accidentally present an active server. |
| R-04 — MEGA and 1fichier cannot produce a fake successful download of encrypted data or an HTML page. | 1fichier free mode already surfaces CaptchaRequired and the registry description was corrected. MEGA behavior (refusing downloads until host-side decryption exists) is claimed via a plugin bump to vortex-mod-mega v1.1.0, but that plugin change lives in a separate repo and the registry entry here references locally-built checksums; the plugin PR/tag/release still needs merge + release before the refusal is deliverable to users. | |
| ✅ | R-05 — Registry descriptions, versions and min_vortex_version are coherent and validated automatically. | Registry entries were updated (soundcloud min_vortex_version, honest descriptions) and a new CI test validates plugin entries for required fields, semver format, checksum shape, categories and uniqueness. |
| ✅ | R-06 — README and developer docs indicate the correct plugin/config installation paths on supported OSes. | README and adapter trait docs were updated to reference the Tauri app-data paths for plugins/config on Linux/macOS/Windows. |
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
Merging this PR will degrade performance by 6.21%
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing |
The registry must match the artifact published by the plugin-release workflow, not a local build: the wasm is not byte-reproducible across machines (same source, different rustc environment).
|
@coderabbitai resolve |
✅ Action performedComments resolved and changes approved. |
Closes MAT-136.
Settings that claimed to work now do, and everything that doesn't work yet says so.
What changed
max_segments_per_downloadandmax_retriesapply to each new download instead of hardcoded domain defaults.retry_delay_secondsfeeds the retry backoff live through the settings bridge (R-01).user_agentin a hand-edited config falls back to the default instead of aborting startup.extract_linksandresolve_stream_urlrefuse with an explicit "downloads are not supported yet" error instead of handing the engine an encrypted CDN URL whose bytes download "successfully" as unreadable AES ciphertext (R-04). 1fichier needed no plugin change: free mode already surfacesCaptchaRequired, only its registry description lied.min_vortex_versionraised to 0.2.0, and a newregistry_coherenceintegration test validates every entry in CI: required fields, semver formats, checksum shapes, known categories, unique names (R-05).~/.local/share/dev.vortex.app/...on Linux, not~/.config/vortex/(R-06).scripts/no-manual-deps.shnow accepts a staged Cargo.toml whose lock is already in sync (cargo metadata --locked), needed because enabling the reqwestsocksfeature produces no Cargo.lock delta.Notes for review
SHA256SUMS). Note the wasm is not byte-reproducible across machines: the checksum had to be taken from the CI-built artifact, not a local build.plugin.tomlstill saysmin_vortex_version = "0.1.0"by mistake. The registry carries the correct floor; fixing the manifest needs a plugin re-release, out of scope here.Tests
cargo test --workspace: 1708 passed, 7 ignorednpx vitest run: 729 passedSummary by CodeRabbit