Skip to content

fix(storage): preserve concurrent Windows portable destinations - #1197

Merged
DecisionNerd merged 1 commit into
mainfrom
fix/1190-windows-no-replace
Sep 9, 2026
Merged

DecisionNerd merged 1 commit into
mainfrom
fix/1190-windows-no-replace

Conversation

@DecisionNerd

@DecisionNerd DecisionNerd commented Sep 9, 2026 •

Copy link
Copy Markdown
Contributor

Windows portable publication used std::fs::rename, which can replace a destination created after export staging begins. Route publication through a Rust-owned atomic no-replace operation using MoveFileExW with zero flags; preserve the existing Unix primitive and typed export failures.

Closes #1190.

File and directory sentinel tests verify that existing bytes survive refusal. A synchronized two-writer test proves exactly one publisher wins. The Windows lane also runs the export race regression; the mapped expanded/bundle export, verify, import, and reopen coverage inherited from #1188 checks successful publication.

Validation on the refreshed branch:

  • cargo test -p graphforge-filesystem --lib: 33 passed.
  • cargo test -p graphforge-storage --lib project_portable_v2_export::tests::: 25 passed, including destination replacement and successful expanded/bundle round trips. Durable fixtures used TMPDIR on the host root ext4 filesystem.
  • cargo clippy -p graphforge-filesystem --all-targets -- -D warnings: passed.
  • cargo fmt --all -- --check, make pre-push-fast, and make gate-registry-check: passed.
  • Independent review found no blocking issue; rebase range-diff confirms the patch is unchanged atop merged fix(storage): encode semantic routes into portable components #1188.

Exact-head hosted CI, including Windows and macOS, remains the merge gate. Full local make pre-push is not claimed green; the existing host tmpfs fixture limitation is tracked by #1192.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 8521453f-4d07-46cc-b766-0713f4a5830d

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions github-actions Bot added core Core source code changes documentation Improvements or additions to documentation ci-cd CI/CD configuration changes labels Sep 9, 2026
@DecisionNerd
DecisionNerd merged commit cd8f871 into main Sep 9, 2026
23 checks passed
@DecisionNerd
DecisionNerd deleted the fix/1190-windows-no-replace branch September 9, 2026 21:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-cd CI/CD configuration changes core Core source code changes documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(storage): prevent Windows portable publication from replacing destinations

2 participants