Skip to content

fix(deps): adopt fs-safe 0.8.5 - #141165

Merged
steipete merged 4 commits into
mainfrom
codex/deps-fs-safe-085-01a0750a
Sep 7, 2026
Merged

steipete merged 4 commits into
mainfrom
codex/deps-fs-safe-085-01a0750a

Conversation

@steipete

@steipete steipete commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

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.

@clawsweeper

clawsweeper Bot commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@steipete
steipete marked this pull request as ready for review September 7, 2026 10:57
@steipete
steipete requested a review from a team as a code owner September 7, 2026 10:57
@steipete steipete self-assigned this Sep 7, 2026
@github-actions github-actions Bot added the dependencies-changed PR changes dependency-related files label Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Dependency Guard

This PR changes dependency-related files. Maintainers should confirm these changes are intentional.

Changed files:

  • extensions/onepassword/package.json
  • extensions/openshell/package.json
  • package.json
  • pnpm-lock.yaml
  • pnpm-workspace.yaml

Maintainer follow-up:

  • Review whether the dependency changes are intentional.
  • Inspect resolved package deltas when lockfiles or workspace dependency policy changes are present.
  • Treat pnpm-lock.yaml and package-lock.json diffs as dependency security-review surfaces.
  • Run pnpm deps:changes:report -- --base-ref origin/main --markdown /tmp/dependency-changes.md --json /tmp/dependency-changes.json locally for detailed release-style evidence.

@github-actions

github-actions Bot commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

Dependency graph changes noted

This PR includes dependency graph changes. The dependency guard is informational because the PR author is a repository admin, a member of @openclaw/openclaw-secops, or an OpenClaw organization member with Maintain or Admin repository access.

  • Current SHA: 080fade80af022f17fe1b3f4bd4bd186672c254a
  • Trusted actor: @steipete
  • Trusted role: pull request author; openclaw-secops

Security review is still recommended before merge when the dependency graph change is intentional.

@clawsweeper clawsweeper Bot added P2 Normal backlog priority with limited blast radius. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Sep 7, 2026
@clawsweeper

clawsweeper Bot commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

Codex review: blocked before merge. Reviewed September 7, 2026, 9:41 AM ET / 13:41 UTC.

ClawSweeper review

What this changes

Updates 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
Reviewed head: 080fade80af022f17fe1b3f4bd4bd186672c254a

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused dependency update with preserved safety assertions and substantial recorded validation; no actionable patch defect was identified.
Proof confidence 🌊 off-meta tidepool Not applicable: The ordinary external-contributor proof gate does not apply to this maintainer-authored PR. Its captured body records installed-package consumer probes and release verification covering the changed fs-safe boundary; no concrete unresolved authority violation was established that would trigger an additional proof requirement.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Verification

Check Result Evidence
Real behavior Not applicable Not applicable: The ordinary external-contributor proof gate does not apply to this maintainer-authored PR. Its captured body records installed-package consumer probes and release verification covering the changed fs-safe boundary; no concrete unresolved authority violation was established that would trigger an additional proof requirement.
Evidence reviewed 8 items Current-main necessity: Fetched main still declares @openclaw/fs-safe 0.8.3. The supplied context identifies no merged same-repository replacement. Inspection of the latest release's package blob failed because the blob was unavailable locally and the remote could not be resolved; release inclusion is not claimed.
Introduced dependency scope: The complete merge-base-to-head diff consistently updates the three direct consumers, root package and seven optional native packages to 0.8.5. The cooldown exemptions remain exact-version entries with a removal date; no new package source, lifecycle script, platform constraint, or broad exemption is introduced.
Dependency contract applies: The production facade directly imports fs-safe root, advanced, and output APIs. Secure-file documentation identifies that library as the filesystem implementation and preserves the native-off default and explicit operator overrides. These are affirmative fs-safe dependency signals; no Codex dependency signal applies to this patch.
Findings None None.
Security None None.

How this fits together

OpenClaw 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]
Loading

Before merge

  • Resolve merge risk (P1) - Independent verification of the upstream implementation and release artifacts was unavailable; dependency conclusions rely partly on the maintainer's recorded source, regression, and integrity checks.
Agent review details

Security

None.

PR surface

Tests +47, Config 0, Other 0. Total +47 across 12 files.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 7 84 37 +47
Docs 0 0 0 0
Config 4 12 12 0
Generated 0 0 0 0
Other 1 37 37 0
Total 12 133 86 +47

Review metrics

Metric Value Why it matters
Dependency cooldown scope 8 exact-version exemptions; 0 new wildcard exemptions The early-adoption exception remains confined to the reviewed fs-safe release and its platform packages.

Merge-risk options

Maintainer options:

  1. Decide the mitigation before merge
    Keep filesystem policy enforcement in fs-safe and adopt its corrected release consistently, preserving existing consumer contracts and effective fault injection.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Technical review

Best 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.

Labels

Label justifications:

  • P2: This is a bounded dependency correctness update with matching consumer fixture repairs and no demonstrated urgent user-facing outage.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The ordinary external-contributor proof gate does not apply to this maintainer-authored PR. Its captured body records installed-package consumer probes and release verification covering the changed fs-safe boundary; no concrete unresolved authority violation was established that would trigger an additional proof requirement.

Evidence

What I checked:

  • Current-main necessity: Fetched main still declares @openclaw/fs-safe 0.8.3. The supplied context identifies no merged same-repository replacement. Inspection of the latest release's package blob failed because the blob was unavailable locally and the remote could not be resolved; release inclusion is not claimed. (package.json:2144, dcc733dc20e8)
  • Introduced dependency scope: The complete merge-base-to-head diff consistently updates the three direct consumers, root package and seven optional native packages to 0.8.5. The cooldown exemptions remain exact-version entries with a removal date; no new package source, lifecycle script, platform constraint, or broad exemption is introduced. (pnpm-workspace.yaml:37, 080fade80af0)
  • Dependency contract applies: The production facade directly imports fs-safe root, advanced, and output APIs. Secure-file documentation identifies that library as the filesystem implementation and preserves the native-off default and explicit operator overrides. These are affirmative fs-safe dependency signals; no Codex dependency signal applies to this patch. (src/infra/fs-safe.ts:5, 080fade80af0)
  • Latest fixture change preserves owner boundaries: The memory reader still admits configured roots through asynchronous lstat. The new spy targets only the blocked leaf through synchronous lstat, retaining the asynchronous root fault and every existing success, rejection, and error-propagation assertion. (packages/memory-host-sdk/src/host/read-file.test.ts:84, 080fade80af0)
  • Safety assertions retained: Race fixtures select native-sync realpath for affected fs-safe operations while archive and the separate apply-patch mkdir fixture retain their asynchronous hook. Backup publication now opens real handles and injects only sync failures; its assertions still require the complete final archive to survive. (src/infra/backup-archive-publication.test.ts:204, 080fade80af0)
  • Captured maintainer evidence and review continuity: The supplied body snapshot, sourceRevision bd2336671deb4aad80ae3d94efd78ac2895d54fa9924b3d36e2d4661390de535, records upstream source/regression inspection, eight published-artifact integrity checks, consumer suites, installer E2E, and before/after public-owner probes. It attributes the upstream fix to fix(move): retain admitted hardlink policy for 0.8.5 fs-safe#240. These are maintainer-reported results, not executions by this reviewer. The previous completed review retained no findings; the newest commit adds the memory-reader fixture adjustment. (080fade80af0)

Likely related people:

  • steipete: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)
  • Sebastien Tardif: Suggested for follow-up; no historical authorship or introduction is verified. (role: unverified routing candidate; confidence: low)

Rating scale

Score Internal tier Crab rank Meaning
6/6 S 🦀 challenger crab Exceptional readiness
5/6 A 🦞 diamond lobster Very strong readiness
4/6 B 🐚 platinum hermit Good normal PR; ordinary maintainer review
3/6 C 🦐 gold shrimp Useful, but confidence is limited
2/6 D 🦪 silver shellfish Proof or implementation needs work
1/6 F 🧂 unranked krab Not merge-ready
N/A NA 🌊 off-meta tidepool Rating does not apply

Overall follows the weaker of proof and patch quality.
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Workflow

  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

History

Review history (4 earlier review cycles)
  • reviewed 2026-09-07T11:03:50.008Z sha 921ee81 :: blocked before merge. :: none
  • reviewed 2026-09-07T12:27:46.101Z sha f309cae :: blocked before merge. :: none
  • reviewed 2026-09-07T13:07:00.125Z sha cbf64a2 :: blocked before merge. :: none
  • reviewed 2026-09-07T13:12:38.579Z sha cbf64a2 :: needs maintainer review before merge. :: none

@openclaw-barnacle openclaw-barnacle Bot added channel: whatsapp-web Channel integration: whatsapp-web agents Agent runtime and tooling size: S and removed size: XS labels Sep 7, 2026
@steipete steipete closed this Sep 7, 2026
@steipete steipete reopened this Sep 7, 2026
@steipete

steipete commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Maintainer dependency review is complete for 080fade80af022f17fe1b3f4bd4bd186672c254a. The remaining automated review item concerns unavailable upstream access in that review environment. The tagged implementation and published artifacts were inspected during the upstream release and downstream adoption; that evidence resolves the source-access gap for this landing.

The owning fix is openclaw/fs-safe#240, published as v0.8.5 from eb2294eeb6af5ab73bba8cf12d44d5b6091f6a95. The release passed protected-tag CI, including the native package builds. All eight downloaded registry tarballs were checked against SHA-512 integrity and release provenance; the root artifact contains the reviewed fix and finalized changelog. The upstream regression fails before the repair and passes afterward; the complete upstream check passed 5,358 tests, with 2,598 platform/conditional skips.

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.

@steipete
steipete merged commit 870195a into main Sep 7, 2026
189 checks passed
@steipete
steipete deleted the codex/deps-fs-safe-085-01a0750a branch September 7, 2026 14:06
@steipete

steipete commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Sep 8, 2026
* 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling channel: whatsapp-web Channel integration: whatsapp-web dependencies-changed PR changes dependency-related files extensions: onepassword 1Password plugin extensions: openshell maintainer Maintainer-authored PR P2 Normal backlog priority with limited blast radius. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant