Repository navigation
fix(deps): adopt fs-safe 0.8.5 - #141165
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
Dependency GuardThis PR changes dependency-related files. Maintainers should confirm these changes are intentional. Changed files:
Maintainer follow-up:
|
Dependency graph changes notedThis PR includes dependency graph changes. The dependency guard is informational because the PR author is a repository admin, a member of
Security review is still recommended before merge when the dependency graph change is intentional. |
|
Codex review: blocked before merge. Reviewed September 7, 2026, 9:41 AM ET / 13:41 UTC. ClawSweeper reviewWhat this changesUpdates OpenClaw, 1Password, and OpenShell to fs-safe 0.8.5 and adjusts filesystem fault-injection tests while preserving their existing safety assertions. Merge readiness⛔ Blocked before merge - 1 item remains The update remains useful: fetched main still pins fs-safe 0.8.3. No actionable defect was found in the introduced dependency or fixture changes, and the maintainer-authored PR is protected from automatic closure. Priority: P2 Review scores
Verification
How this fits togetherOpenClaw delegates guarded local file operations to fs-safe. Workspace, memory, media, and plugin callers supply paths and policies; the library checks containment and file identity before filesystem operations. flowchart LR
A[Workspace and memory requests] --> C[OpenClaw file helpers]
B[Media and plugin requests] --> C
C --> D[fs-safe policy and identity checks]
D --> E{Path permitted?}
E -->|Yes| F[Guarded filesystem operation]
E -->|No| G[Reported rejection]
Before merge
Agent review detailsSecurityNone. PR surfaceTests +47, Config 0, Other 0. Total +47 across 12 files. View PR surface stats
Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Keep filesystem policy enforcement in fs-safe and adopt its corrected release consistently, preserving existing consumer contracts and effective fault injection. Do we have a high-confidence way to reproduce the issue? No independent current-main reproduction was established in this read-only review; the body records upstream regression and before/after consumer probes, but the dependency source was unavailable. Is this the best way to solve the issue? Yes: updating the owning library and retargeting existing fault injection is narrower than adding local filesystem workarounds; the reviewed assertions and runtime defaults remain intact. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against dcc733dc20e8. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (4 earlier review cycles)
|
|
Maintainer dependency review is complete for The owning fix is openclaw/fs-safe#240, published as v0.8.5 from The complete twelve-file adoption also has independent P2-clean review. Its existing fixture assertions are preserved, and full-owner comparisons against installed 0.8.3/0.8.5 confirm the intended memory, workspace and media outcomes. The PR body records the consumer suites, build, installer proof and their limits. Landing remains gated on successful required CI for this exact head. |
|
Merged via squash.
|
* fix(deps): adopt fs-safe 0.8.5 * test(fs): align fault injection with fs-safe metadata * test: align workspace and backup fixtures with fs-safe metadata * test(memory): align extra-path errors with fs-safe metadata
What Problem This Solves
OpenClaw, 1Password and OpenShell still pin fs-safe 0.8.3. The published upstream patch fixes an in-flight strict move rereading a caller-mutated hardlink policy. The intervening metadata optimization also means existing async-only test hooks no longer inject some filesystem failures.
Why This Change Was Made
Adopt fs-safe 0.8.5 across all three direct consumers, regenerate the lockfile and update the eight exact-version release-age exceptions. The production fix lives in openclaw/fs-safe#240; existing mutation-authority checks and publication receipts remain upstream-owned.
Align seven existing test/support files with each owner's actual metadata API. WhatsApp injects unknown identity through synchronous lstat. The shared symlink-race helper explicitly selects native-sync realpath for fs-safe mutations and apply-patch delete, while archive and the existing mkdir scenario retain their async boundaries. Workspace retry injection now targets synchronous lstat. Backup publication tests use real file handles and inject only directory-sync failures. Memory-reader fixtures retain direct async root faults and add a narrowly targeted synchronous leaf fault, matching both owners. This preserves original assertions and avoids consuming a race at an unrelated earlier canonicalization step.
User Impact
All consumers receive the upstream strict-move policy fix and compatible filesystem improvements. There is no local dependency patch, runtime-source change, configuration migration or platform constraint change. Cooldown exceptions remain specific to the eight 0.8.5 packages.
Evidence
The protected-tag release passed all seven native builds and package checks. All eight registry versions, dist-tags, publication times and downloaded tarball SHA-512 values were independently verified against release provenance; the root tarball contains the reviewed fix and finalized changelog. All installed consumer versions and lockfile integrities match. Direct upstream source inspection, the upstream regression run, and the published artifact checks were completed during the maintainer-owned release in openclaw/fs-safe#240; this evidence supplies the dependency inspection that the automated reviewer could not repeat because its upstream clone failed.
Local proof includes 278 consumer tests (one Windows-only resolver skip on macOS), 18 real npm installer E2E cases, and the full build. After aligning fault injection, all 227 affected WhatsApp, web-media, fs-safe, archive and apply-patch tests and the selected test/support gates passed. The additional workspace, bootstrap-cache/diagnostics, backup-publication and directory-durability suites pass all 112 tests after locally reproducing the four stale-fixture failures. The additional memory-reader, internal and manager-compat suites pass all 51 tests. Six controls across the exact installed 0.8.3 and 0.8.5 packages exercised 84 full reader calls and confirmed that both fault surfaces preserve every original outcome; async-only and sync-only controls explain why both spies are needed. A bounded audit of remaining metadata mocks retained direct async owner calls unchanged. Before/after public-owner probes confirmed identical unknown-identity retry/rejection and symlink-containment behavior in 0.8.3 and 0.8.5. The unchanged mkdir scenario's existing injection gap was separately confirmed on 0.8.3; its meaning and assertions were not broadened.
All TypeScript lanes, 95 npm lock validations and non-lint changed guards passed; full lint and the import-cycle check passed after an independently landed Telegram lint repair. Those dependency-file hashes remained unchanged through the main refresh. The complete twelve-file candidate has a fresh independent P2-clean review. Exact-head hosted CI owns final landing gates; no single all-green local changed-command invocation or live account/native Windows consumer run is claimed. The npm E2E uses generated packages and a loopback registry under its existing fixture-owned skip-build contract.