1.0.0-rc.9

Pre-release

cloudflare/artifact-fs1.0.0-rc.9Jul 27, 2026by elithrar

AI Summary

Improves Git worktree compatibility and expands porcelain support across ArtifactFS mounts.

Key Highlights

  • Git config semantics now record ArtifactFS semantics
  • Daemon no longer runs conflicting background index updates
  • Git commands preserve mounted content and index state

New Features

  • Git config support for filemode, ignorecase, and symlinks
  • Daemon background index update fixes
  • Coverage for git reset, clean, stash, merge, rebase, pull, and push
  • Executable mode and symlink preservation
  • Gitlink representation fixes

Full Release Notes

This release improves Git worktree compatibility and expands tested porcelain support across ArtifactFS mounts.

### Improved git protocol support

- `git config --local core.filemode true`, `git config --local core.ignorecase false`, and `git config --local core.symlinks true` now record ArtifactFS semantics instead of inheriting temporary clone filesystem probes. Git now detects executable-bit changes, treats paths as case-sensitive, and handles symlinks correctly.
- The daemon no longer runs `git update-index --fsmonitor` or `git update-index --fsmonitor-valid -z --stdin`. Previously, these background index writes could race Git porcelain for `index.lock`; now ArtifactFS configures `core.fsmonitor` and lets Git own index updates.
- `git reset --hard`, `git clean -fd`, `git stash push --include-untracked` / `git stash pop`, `git merge --no-ff`, `git rebase`, and `git pull --ff-only` now preserve and reconcile mounted content, modes, index state, and writable overlays.
- `git push origin HEAD:<ref>` is now covered against a disposable upstream, including verification that the advertised remote ref matches the pushed commit.

### Bug fixes

- Preserve executable modes and symlink targets through `git add`, `git commit`, and `git mv`; keep an unstaged mode change intact when committing staged content.
- Represent gitlinks as empty directory placeholders so `git status --porcelain` no longer reports uninitialized submodules as deleted.
- Prevent `git status --short` and `git diff --quiet` from treating untouched blobs as modified when their size was not known during directory enumeration.
- Preserve inode identity when `git mv` renames an open file, and correctly stale an overwritten destination inode.
- Backfill source modes in existing overlays so the first reconciliation after upgrade does not discard metadata-only changes.