Skip to content

1.1.3: authenticate the local WebDAV, surface Quark read errors, lifecycle and installer fixes - #2

Merged
007xf merged 5 commits into
mainfrom
fix/review-20261109
Nov 10, 2026
Merged

007xf merged 5 commits into
mainfrom
fix/review-20261109

Conversation

@007xf

@007xf 007xf commented Nov 10, 2026

Copy link
Copy Markdown
Owner

Summary

Fixes from a multi-angle review of 1.1.2 (33 findings, 20 confirmed), plus a pre-release review of this branch.

Security

  • The loopback WebDAV server (127.0.0.1:8686) had no authentication. It now requires the user name quarkfs and a per-Mac random password (stored 0600, passed to the engine through the environment, never in process arguments). Infuse users must enter them once after upgrading.

Playback and errors

  • Read errors that only reached the engine log are now shown in the app: Quark's refusal of large files (code 23018, download file size limit), expired login, and repeated read failures. Large files that Quark refuses on this download interface still cannot be read; QuarkFS now says why instead of failing silently. The engine keeps its default identity.

Lifecycle

  • A WebDAV engine left behind by a crash or force quit is stopped on the next start (matched by PID, start time and its own runtime config path).
  • Quit and port changes no longer stop a working bridge before they know the operation can succeed; a failed port change is rolled back.
  • A login saved while another operation runs is no longer dropped. Deliberate stops no longer log a false "connection stopped" error.
  • Engine logs rotate (10 MB, one backup) at NOTICE level.

Scripts and docs

  • The release script refuses an engine without the Quark backend or cmount. The safe installer restores the previous app on interruption and explains every refusal. First-launch instructions cover macOS 15+.

Verification

Core smoke tests, application behaviour checks (fixture engine, no account), single-instance checks, arm64 release build, script syntax and script checks, and the engine integration check against a local folder (authentication, listing, byte ranges, read-only) all pass. Each fix has a check that failed before it; 13 mutations of the fixes are each caught by a check.

Not verified: a real Quark account, real Infuse playback, and a real macOS 15 Gatekeeper prompt.

🤖 Generated with Claude Code

007xf and others added 5 commits November 10, 2026 22:56
Playback and diagnostics
- Write the Quark PC client user agent into the runtime config so the engine
  no longer requests download links as the web page, which Quark refuses for
  large files with code 23018. The config is now built in QuarkFSCore.
- Follow both engine logs while they run and report download size limits
  (23018), expired logins and repeated read failures in the window, the menu
  bar and the activity log. Recognise expired logins in mount failures.
- Log at NOTICE with 10 MB rotation and one backup instead of unbounded INFO.

Local WebDAV
- Require Basic authentication with a random per-install password stored in
  a user-only file and passed to the engine through its environment. Copied
  connection details include the credentials.

Lifecycle
- Record the WebDAV engine and stop it on the next launch if QuarkFS crashed
  or was force-quit; remove a leftover runtime config at startup.
- Stop the bridge only once a quit can no longer be cancelled.
- Reject an occupied port before stopping a working bridge, and roll back
  to the previous port when the restart fails.
- Do not report deliberate bridge stops as unexpected exits, and do not turn
  a cancelled mount or completed unmount into a failure when the engine's
  termination is handled late.
- Wait for a running operation before saving a login; otherwise explain why
  it was not saved and let the QR sheet offer a new code.

Scripts and docs
- Refuse release engines without the Quark backend or cmount.
- Installer: accept a Universal 1.0.x app as the app being replaced, explain
  every verification failure, ignore interrupts during the swap and restore
  the previous app from filesystem state.
- Link only current core objects in the behaviour and single-instance checks.
- Document the macOS 15+ Open Anyway step and the new WebDAV credentials.

Tests
- Behaviour checks for config content and permissions, WebDAV
  authentication, 23018 reporting, failure-mode bridges, stop-before-clear,
  re-login, occupied ports and rollback, crash recovery, cancelled quits,
  logins during other work and unmount outcomes, using fake mount tools and
  a simulated cmount in EngineFixture.py.
- Smoke checks for every cache profile, log options, credentials, log
  classification and tailing, and leftover-engine identification.
- EngineIntegration.py checks config parsing, environment-based
  authentication and log options against the real engine.
- New Tests/QuarkFSCoreTests/ScriptChecks.zsh, also run in CI, never
  executes the installer itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove the user_agent override so the runtime config is back to the
remote type and obscured cookie only. Tests now assert that no user_agent
key is written. Docs state that Quark refuses large files on this download
interface (code 23018) and that such files cannot be read through QuarkFS.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
- Stop a leftover WebDAV engine before the credential and engine
  preflight, so logging out or a missing engine no longer leaves the
  crashed app's engine serving the drive with its old cookie.
- Clear the intentional-stop marker when stopping the mount engine
  fails, so a later real crash is reported instead of read as a clean
  unmount.
- Report an expired login even after 20 other engine issues were shown.
- Mark the copied WebDAV connection text as concealed and transient
  pasteboard content so clipboard managers skip the password.
- Add behaviour checks for the relaunch-while-logged-out, log cap and
  pasteboard cases, and update the changelog.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@007xf
007xf merged commit aaa4b26 into main Nov 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant