Skip to content

feat(settings): align settings, registry and docs with real capabilities (MAT-136) - #175

Merged
mpiton merged 4 commits into
mainfrom
feat/mat-136-align-capabilities
Jul 18, 2026
Merged

feat(settings): align settings, registry and docs with real capabilities (MAT-136)#175
mpiton merged 4 commits into
mainfrom
feat/mat-136-align-capabilities

Conversation

@mpiton

@mpiton mpiton commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Closes MAT-136.

Settings that claimed to work now do, and everything that doesn't work yet says so.

What changed

  • max_segments_per_download and max_retries apply to each new download instead of hardcoded domain defaults. retry_delay_seconds feeds the retry backoff live through the settings bridge (R-01).
  • Proxy, user agent and connection timeout build the shared HTTP client at startup; the Network section states changes apply at next launch. An invalid user_agent in a hand-edited config falls back to the default instead of aborting startup.
  • Speed limit, pre-allocate space and DNS over HTTPS have no engine wiring yet: disabled with a "Coming soon" badge (R-02).
  • The Remote Access section is replaced by a planned-feature notice, so REST/WebSocket/Web UI can't look active while no server exists (R-03).
  • MEGA plugin 1.1.0: extract_links and resolve_stream_url refuse 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 surfaces CaptchaRequired, only its registry description lied.
  • Registry: honest MEGA/1fichier descriptions, soundcloud min_vortex_version raised to 0.2.0, and a new registry_coherence integration test validates every entry in CI: required fields, semver formats, checksum shapes, known categories, unique names (R-05).
  • README and source doc comments show the real plugin/config paths per OS: ~/.local/share/dev.vortex.app/... on Linux, not ~/.config/vortex/ (R-06).
  • scripts/no-manual-deps.sh now accepts a staged Cargo.toml whose lock is already in sync (cargo metadata --locked), needed because enabling the reqwest socks feature produces no Cargo.lock delta.

Notes for review

  • vortex-mod-mega v1.1.0 is merged, tagged and released; the registry checksums match the published release assets (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.
  • The released soundcloud 1.2.1 plugin.toml still says min_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 ignored
  • npx vitest run: 729 passed
  • clippy, fmt, oxlint, tsc, cargo-deny, knip all pass

Summary by CodeRabbit

  • New Features
    • Download creation now applies configuration-driven segments and retry count, with configurable retry-delay backoff (base delay).
    • Network client now builds from saved settings, including safer User-Agent handling and resilient proxy setup.
  • Changed
    • Speed limit, pre-allocation, and DNS-over-HTTPS settings are now marked “Coming soon”; network changes show a “next launch” restart hint.
    • Remote access settings are replaced by a non-interactive “planned” notice.
    • Remote-access defaults are now off by default; MEGA plugin rejects unsupported modes more clearly.
  • Bug Fixes
    • Improved registry validation (format/coherence) and corrected registry/config documentation paths.
  • Tests & Tooling
    • Added CI registry coherence tests and new unit tests for retry behavior and network client configuration.
    • Pre-commit dependency-table checks are more permissive when lock updates match.

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-code-review

Copy link
Copy Markdown

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

@github-actions github-actions Bot added documentation Improvements or additions to documentation dependencies rust frontend labels Jul 18, 2026
@coderabbitai

coderabbitai Bot commented Jul 18, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 19a1953e-6f52-4b7d-b294-55c9f49905d1

📥 Commits

Reviewing files that changed from the base of the PR and between 59d96a8 and 21d6c4b.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • scripts/no-manual-deps.sh
  • src-tauri/src/adapters/driven/network/client_config.rs
  • src-tauri/tests/registry_coherence.rs
🚧 Files skipped from review as they are similar to previous changes (4)
  • scripts/no-manual-deps.sh
  • CHANGELOG.md
  • src-tauri/tests/registry_coherence.rs
  • src-tauri/src/adapters/driven/network/client_config.rs

📝 Walkthrough

Walkthrough

The 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.

Changes

Configuration-driven runtime

Layer / File(s) Summary
Runtime configuration wiring
src-tauri/src/adapters/driven/network/*, src-tauri/src/lib.rs, src-tauri/src/application/commands/*, src-tauri/src/domain/model/config.rs
Startup HTTP clients, segmented downloads, destinations, and new download segment/retry values now use persisted configuration, with safe defaults for invalid network values.
Live retry backoff configuration
src-tauri/src/application/services/queue_manager.rs, src-tauri/src/application/services/queue_config_bridge.rs
Settings updates change QueueManager’s exponential retry base, with zero-value fallback, exponent clamping, a 300-second cap, and tests.
Settings UI states
src/views/SettingsView/*, src/i18n/locales/*
Unsupported download and DNS settings are disabled with Coming soon badges, network settings show a restart hint, and remote access is presented as planned rather than interactive.

Registry and project metadata

Layer / File(s) Summary
Registry validation and metadata
registry/registry.toml, src-tauri/tests/registry_coherence.rs, README.md, CHANGELOG.md, scripts/no-manual-deps.sh
Plugin metadata and platform paths are updated, registry entries receive format and uniqueness checks, and the dependency hook permits already-satisfied locked manifests.

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
Loading

Possibly related PRs

  • mpiton/vortex#171: Both PRs modify handle_start_download with related download persistence changes.

Suggested labels: configuration, ci

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 77.55% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the PR’s main scope: aligning settings, registry metadata, and docs with actual capabilities.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 1211fc8 and 0902b9a.

📒 Files selected for processing (23)
  • CHANGELOG.md
  • README.md
  • registry/registry.toml
  • scripts/no-manual-deps.sh
  • src-tauri/Cargo.toml
  • src-tauri/src/adapters/driven/network/client_config.rs
  • src-tauri/src/adapters/driven/network/mod.rs
  • src-tauri/src/application/commands/start_download.rs
  • src-tauri/src/application/commands/start_download_tests.rs
  • src-tauri/src/application/services/queue_config_bridge.rs
  • src-tauri/src/application/services/queue_manager.rs
  • src-tauri/src/domain/model/config.rs
  • src-tauri/src/domain/ports/driven/config_store.rs
  • src-tauri/src/lib.rs
  • src-tauri/tests/registry_coherence.rs
  • src/i18n/locales/en.json
  • src/i18n/locales/fr.json
  • src/views/SettingsView/DownloadsSection.tsx
  • src/views/SettingsView/NetworkSection.tsx
  • src/views/SettingsView/RemoteAccessSection.tsx
  • src/views/SettingsView/SettingField.tsx
  • src/views/SettingsView/SettingsView.tsx
  • src/views/SettingsView/__tests__/Sections.test.tsx

Comment thread scripts/no-manual-deps.sh
Comment thread src-tauri/src/adapters/driven/network/client_config.rs
Comment thread src-tauri/src/application/services/queue_manager.rs
Comment thread src-tauri/tests/registry_coherence.rs

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment thread scripts/no-manual-deps.sh Outdated
Comment thread src-tauri/src/adapters/driven/network/client_config.rs Outdated
Comment thread src-tauri/tests/registry_coherence.rs Outdated
Comment thread src-tauri/tests/registry_coherence.rs
Comment thread src-tauri/tests/registry_coherence.rs
@codspeed-hq

codspeed-hq Bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will degrade performance by 6.21%

⚡ 1 improved benchmark
❌ 4 regressed benchmarks
✅ 21 untouched benchmarks

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Benchmark BASE HEAD Efficiency
detect_md5 657.5 ns 745 ns -11.74%
detect_sha256 734.4 ns 821.9 ns -10.65%
create_valid 252.2 ns 281.4 ns -10.37%
reject_invalid 522.8 ns 581.1 ns -10.04%
split 471.9 ns 413.6 ns +14.1%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing feat/mat-136-align-capabilities (21d6c4b) with main (1211fc8)

Open in CodSpeed

@coderabbitai coderabbitai Bot removed the ci label Jul 18, 2026
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 coderabbitai Bot added the ci label Jul 18, 2026
@mpiton

mpiton commented Jul 18, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai resolve

@coderabbitai

coderabbitai Bot commented Jul 18, 2026

Copy link
Copy Markdown
✅ Action performed

Comments resolved and changes approved.

@mpiton
mpiton merged commit 215cdb1 into main Jul 18, 2026
17 of 18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant