Skip to content

feat: add managed replacement and configurable idle waits (0.8.0) - #28

Merged
NamelsKing merged 3 commits into
mainfrom
codex/replace-artifacts-timeouts-20261103
Nov 4, 2026
Merged

NamelsKing merged 3 commits into
mainfrom
codex/replace-artifacts-timeouts-20261103

Conversation

@NamelsKing

@NamelsKing NamelsKing commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Re-uploading a changed release directory currently fails with FILE_EXISTS, and a short client response wait can report failure while the server is still committing. This adds configurable 10-minute client idle waits and opt-in replacement of managed artifacts.

  • Add --allow-replace [selector] / ServerOptions.allowReplace for files and whole directories: global, exact name or existing release-template syntax. Off by default; unmanaged, modified, symlink and case-alias destinations remain protected. Legacy --replace-name remains compatible.
  • Exchange directories atomically on Linux/macOS, retain history and recover interrupted transactions, including returning A→B→A content. Protect artifacts while response or detached hooks use them; replacement permission adds no permanent retention pin.
  • Default client idle wait to 600000 ms and accept the actual JavaScript timer range; keep connection and server I/O limits unchanged.
  • Bump to 0.8.0, update API/CLI/operations/spec documentation and add one verified Holepunch dependency, fs-native-extensions, for native exchange. It loads only when directory replacement is needed.

The first directory replacement durably marks private state so 0.7.x refuses it before recovery can remove newer records. Downgrading then requires a matching pre-replacement backup of state and public files. For file-only state, recover pending 0.8 transactions and stop cleanly before downgrading.

Validation at signed head cd3a67e2a6cc0729def989c4cd145a5b7773645a: all 10 PR checks pass, including Node 22/24 and Bare on Linux/macOS, quality/package, and CodeQL. Parent-run full suites each pass 722 tests on macOS Node 22/24 and Bare, plus isolated Linux ARM64 Bare. Node runs exercise real 0.3.0/0.6.3 clients and actual 0.7 startup refusal. Hard-process SIGKILL recovery passes on Node 22/24. Package installation, globally installed Node/Bare CLI and release-tag guards pass; runtime dependency audit reports zero vulnerabilities. Independent Harness review and both correction reviews are clean at the current head. The retention regression was reproduced failing before its fix.

Extra ARM64 validation exposed two pre-existing Bare safeguards with incorrect native flag fallbacks: Linux ARM no-follow and macOS exclusive creation. Both now use one shared lookup with real-filesystem regression tests. No additional runtime dependency or wire change is involved.

QVAC rollout drafts: https://github.com/tetherto/qvac-app/pull/2826 and https://github.com/tetherto/qvac-app/pull/2827. They remain drafts until 0.8.0 is published. The longer client wait alone needs no server restart; directory replacement needs server 0.8.0 and the explicit operator setting.

@NamelsKing
NamelsKing marked this pull request as ready for review November 3, 2026 21:05
@NamelsKing
NamelsKing requested a review from a team November 3, 2026 21:05
@NamelsKing
NamelsKing merged commit 1793045 into main Nov 4, 2026
10 checks passed
@NamelsKing
NamelsKing deleted the codex/replace-artifacts-timeouts-20261103 branch November 4, 2026 12:11
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