Skip to content

Add SQLite snapshot artifacts under backup#94805

Closed
giodl73-repo wants to merge 17 commits into
mainfrom
giodl/snapshot-restore-proof-pr4
Closed

Add SQLite snapshot artifacts under backup#94805
giodl73-repo wants to merge 17 commits into
mainfrom
giodl/snapshot-restore-proof-pr4

Conversation

@giodl73-repo

@giodl73-repo giodl73-repo commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR adds a SQLite-safe snapshot artifact path under the existing backup command surface.

It includes:

  • shared SQLite snapshot provider and local artifact repository
  • openclaw backup sqlite snapshot create|verify|restore|list
  • named OpenClaw database targets: --target global and --agent <id>
  • explicit --db <path> support for advanced/manual SQLite files
  • realpath resolution for named targets and explicit --db paths before snapshotting
  • global-state artifact sanitization for transient delivery_queue_entries, matching the backup recovery invariant
  • restore cleanup for stale -wal, -shm, and -journal sidecars
  • docs for which files are safe to sync, which live SQLite sidecars should be ignored, and why snapshot artifacts must still be protected as sensitive state
  • docs that distinguish full backup archives from SQLite snapshot artifacts

The important surface decision is that this is no longer a top-level openclaw snapshot command. It is now a smaller SQLite-specific backup primitive: openclaw backup sqlite snapshot. openclaw backup create remains the broad .tar.gz recovery archive for state, config, credentials, sessions, and optional workspaces.

Why

The goal from #94675 is not to make hosts copy live SQLite files more carefully. The goal is for OpenClaw to produce a SQLite-safe sync artifact.

This PR establishes that boundary:

  • live .sqlite, -wal, -shm, and -journal files remain hot local runtime state
  • openclaw backup sqlite snapshot create materializes a portable artifact directory containing manifest.json and database.sqlite
  • hosts, containers, object-store sync jobs, and backup systems should sync the completed snapshot directory, not the live SQLite file family
  • restore hydrates a fresh local SQLite file from the verified artifact before OpenClaw opens it

The Lobster-shaped host case is covered by this contract: hosts ask OpenClaw for named database targets and sync completed artifacts. This PR intentionally does not add a memory-search target, because memory-search currently shares the per-agent database and a memory-only export needs a separate design.

Scout Pilot Checkpoint

Before asking maintainers to land this core path, we are exercising the same SQLite-safe artifact boundary in Microsoft Scout/Lobster through the Lobster-owned snapshot plugin path.

That pilot is the operational evidence checkpoint for this PR. It should tell us whether Scout can reliably sync only completed manifest.json and database.sqlite snapshot artifacts while ignoring live SQLite files, temp files, and sidecars; how often snapshots are needed; what artifact size and creation time look like in real hosted use; and whether the long-term surface should be core openclaw backup sqlite snapshot, a host-owned plugin command, or both.

If the pilot shows full snapshots are too large, too slow, or too frequent for the hosted path, that is the data we should use before greenlighting WAL bundles or other Phase 2 work.

Stack

This PR combines the previous core implementation slices:

Follow-up validation PR: #94967
RFC: openclaw/rfcs#20
Related: #94675, #94646

Scope

This does not add memory-search-only export, WAL bundle deltas, object storage upload, scheduling, leases, failover automation, restore-on-boot behavior, production orchestration, or a new memory-search path config. Those remain future phases or separate maintainer decisions. This PR ships the local SQLite artifact contract under the backup command surface.

Real Behavior Proof

Behavior addressed:
OpenClaw can convert OpenClaw-owned SQLite state into syncable artifact directories for global and per-agent databases, verify them, copy them independently from live SQLite files, and restore them into verified fresh SQLite databases. Global snapshot artifacts also scrub transient delivery queue rows, and restore removes stale SQLite sidecars before opening the restored database.

Real environment tested:
Windows checkout at C:\src\openclaw-snapshot-sqlite-command, PR head 409d54170f, Node v22.22.3, source Vitest harnesses with WAL-mode SQLite databases, named OpenClaw database targets, realpath coverage, global transient queue scrubbing, rollback journal cleanup, config schema validation, and CLI registration coverage for openclaw backup sqlite snapshot.

Exact steps or command run after this patch:

  1. node scripts/run-vitest.mjs run src/cli/program/register.backup.test.ts src/cli/program/command-registry.test.ts src/commands/snapshot.test.ts src/snapshot/snapshot-provider.test.ts
  2. git diff --check
  3. node scripts/format-docs.mjs --check
  4. pnpm exec oxfmt --check src/cli/program/register.backup.ts src/cli/program/register.backup.test.ts src/cli/program/command-registry-core.ts src/cli/program/core-command-descriptors.ts docs/cli/backup.md docs/cli/index.md docs/docs.json
  5. pnpm docs:check-links

Evidence after fix:

Focused validation passed 3 Vitest shards:

  • src/cli/program/register.backup.test.ts: backup archive commands plus nested backup sqlite snapshot create|verify|restore|list wiring
  • src/cli/program/command-registry.test.ts: top-level command registry behavior after removing standalone snapshot
  • src/commands/snapshot.test.ts and src/snapshot/snapshot-provider.test.ts: SQLite snapshot create/list/verify/restore behavior and provider invariants

git diff --check origin/main...HEAD passed at 409d54170f after rebasing on current origin/main.

node scripts/format-docs.mjs --check reports no formatting issue in touched docs after formatting docs/cli/index.md; the only remaining reported file is pre-existing unrelated docs/reference/templates/CLAUDE.md.

pnpm exec oxfmt --check ... was blocked before formatting by dependency installation timeout while fetching large optional/native packages. No formatter findings were produced.

pnpm docs:check-links timed out locally after dependency/tool startup; no broken-link finding was produced before timeout. A repo search confirms no remaining cli/snapshot or openclaw snapshot references for this feature; remaining snapshot matches are browser snapshot docs or unrelated runtime/test wording.

Observed result after fix:
The public CLI surface is now openclaw backup sqlite snapshot create|verify|restore|list. The standalone top-level snapshot command registration, docs page, and docs-nav entry were removed. Existing SQLite artifact behavior remains covered by the provider and command tests, while backup registration tests prove the new nested command path forwards options to the same implementation.

What was not tested:
No live gateway runtime, Azure Blob upload, scheduled backup loop, restore-on-boot path, lease/failover path, cross-platform stress, memory-search-only export, or WAL bundle/delta behavior was tested in this PR. Microsoft Scout/Lobster plugin-path evidence is being collected separately before the core command is treated as the accepted path. Stress validation is tracked separately in #94967.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation commands Command implementations size: S maintainer Maintainer-authored PR labels Jun 19, 2026
@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed July 6, 2026, 11:59 PM ET / 03:59 UTC.

Summary
The branch adds a local SQLite snapshot provider plus openclaw backup sqlite snapshot create|verify|restore|list CLI/docs/tests, sharing the existing backup SQLite VACUUM INTO path.

PR surface: Source +767, Tests +885, Docs +95, Other +27. Total +1774 across 16 files.

Reproducibility: not applicable. this is a new CLI/artifact feature rather than a current-main bug. The review used source inspection plus the PR body's after-fix Windows source-harness proof instead of a failing reproduction.

Review metrics: 2 noteworthy metrics.

  • New backup CLI surface: 4 subcommands added under backup sqlite snapshot. Public backup commands are operator-facing and compatibility-sensitive because scripts and hosted workflows can copy them.
  • Unrelated lockfile churn: 533 lockfile lines changed without package manifest changes. The PR changes transitive install inputs outside the snapshot feature, which needs security review before merge.

Stored data model
Persistent data-model change detected: database schema: packages/memory-host-sdk/src/host/sqlite-snapshot.ts, database schema: src/commands/snapshot.test.ts, database schema: src/snapshot/manifest.ts, database schema: src/snapshot/snapshot-provider.test.ts, database schema: src/snapshot/snapshot-provider.ts, serialized state: src/snapshot/manifest.ts, and 2 more. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: canonical
Canonical: #94805
Summary: This PR is the central implementation candidate for the SQLite snapshot artifact stack; broader backup/database issues and the stress harness overlap but do not supersede it.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦞 diamond lobster
Patch quality: 🦪 silver shellfish
Result: blocked by patch quality or review findings.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Restore pnpm-lock.yaml to the current base unless a deliberate manifest change requires it.
  • Remove the top-level snapshot startup catalog entry or intentionally restore and document that root command.
  • Get maintainer direction on whether the cleaned core command should land before or after the Scout/Lobster pilot.

Risk before merge

  • [P1] Unrelated lockfile churn changes transitive install inputs and deprecation metadata on a security-owned file, so supply-chain review cannot be limited to the SQLite snapshot feature.
  • [P1] The new snapshot artifacts can contain auth profiles, credentials-adjacent plugin state, sessions, and per-agent state, so merge needs explicit security and upgrade review around storage, restore, retention, and operator handling.
  • [P1] The PR body says the Scout/Lobster pilot should decide whether the long-term surface is core, host-owned plugin, or both; landing the core command before that decision is a product-direction risk.
  • [P1] The stacked stress harness remains a separate open/conflicting PR, so concurrent-write stress and broader operational proof are not part of this PR head.

Maintainer options:

  1. Clean supply-chain and stale policy first (recommended)
    Restore pnpm-lock.yaml to the current base unless a matching manifest change is intentional, and remove the unused top-level snapshot startup catalog entry before another merge-readiness review.
  2. Accept core artifact risk after review
    Maintainers may intentionally accept the new sensitive artifact contract once the lockfile is clean and they are satisfied with docs, restore behavior, and follow-up stress validation.
  3. Pause until pilot resolves surface
    Keep the PR draft or close it if Scout/Lobster evidence shows the host-owned plugin path should remain the canonical implementation.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Restore pnpm-lock.yaml to the current base unless an intentional package manifest change requires it, remove the retired top-level `snapshot` entry from `src/cli/command-catalog.ts`, and keep the nested `backup sqlite snapshot` command surface and focused tests intact.

Next step before merge

  • [P2] A repair worker can address the two concrete blockers, but maintainer product/security review is still required before merge.

Maintainer decision needed

  • Question: Should OpenClaw core ship openclaw backup sqlite snapshot now, or wait for the Scout/Lobster pilot and RFC to settle whether the long-term surface belongs in core, a host-owned plugin, or both?
  • Rationale: The PR adds a new sensitive backup artifact contract, and the PR body explicitly names the external pilot as the operational evidence checkpoint before greenlighting the core path.
  • Likely owner: galiniliev — galiniliev is the current assignee and already reviewed the snapshot invariant on this PR, making them the best visible owner for the next product-direction call.
  • Options:
    • Keep draft pending pilot (recommended): Hold the core command after mechanical cleanup until the pilot/RFC confirms that a built-in CLI artifact is the right durable surface.
    • Sponsor core command after cleanup: Accept the core command as the Phase 1 local artifact contract once lockfile and startup-policy blockers are fixed and security review is satisfied.
    • Move the surface to a host plugin: Close or redirect the core PR if the pilot shows the host-owned plugin path is sufficient without new core CLI surface.

Security
Needs attention: The snapshot code/docs handle sensitive state intentionally, but the unexplained root lockfile dependency churn is a concrete supply-chain blocker.

Review findings

  • [P1] Remove the unrelated lockfile dependency churn — pnpm-lock.yaml:162
  • [P3] Drop the retired snapshot startup policy — src/cli/command-catalog.ts:269
Review details

Best possible solution:

Land only after removing the lockfile churn and stale root snapshot startup policy, then let maintainers confirm the core backup CLI artifact contract while keeping stress, object storage, scheduling, failover, and WAL/delta work in follow-ups.

Do we have a high-confidence way to reproduce the issue?

Not applicable: this is a new CLI/artifact feature rather than a current-main bug. The review used source inspection plus the PR body's after-fix Windows source-harness proof instead of a failing reproduction.

Is this the best way to solve the issue?

Unclear until maintainer product direction is set: the nested backup command shape is plausible and reuses the existing SQLite backup primitive, but the PR is not the best merge candidate while lockfile churn, stale startup policy, and the core-vs-plugin decision remain unresolved.

Full review comments:

  • [P1] Remove the unrelated lockfile dependency churn — pnpm-lock.yaml:162
    pnpm-lock.yaml still changes AWS/Smithy/OpenAI/React/Shiki/import-in-the-middle and other transitive resolutions even though this PR does not include a matching package manifest change. The root lockfile is a CODEOWNERS security surface, so this unrelated supply-chain churn makes the backup feature unsafe to review or merge as-is; please restore the lockfile to the current base unless an intentional manifest change and security review are included.
    Confidence: 0.93
  • [P3] Drop the retired snapshot startup policy — src/cli/command-catalog.ts:269
    The public command surface moved to openclaw backup sqlite snapshot, and the root command descriptor catalog no longer registers a top-level snapshot command, but this line still reserves startup policy for snapshot. That leaves missing-command startup behavior out of sync with the documented CLI; please remove this catalog entry or intentionally restore/document the root command.
    Confidence: 0.86

Overall correctness: patch is incorrect
Overall confidence: 0.9

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against dc5d4138f9ae.

Label changes

Label justifications:

  • P2: This is a normal-priority feature/compatibility review for backup SQLite artifacts, with limited blast radius but security-sensitive state handling.
  • merge-risk: 🚨 compatibility: The PR adds a new public backup CLI artifact contract and leaves a stale top-level startup policy for a command it no longer registers.
  • merge-risk: 🚨 session-state: Snapshot create/restore targets global and per-agent SQLite databases that contain session, plugin, and agent state.
  • merge-risk: 🚨 security-boundary: Snapshot artifacts may contain sensitive auth/session/plugin state, and the PR also changes a security-owned lockfile without a matching manifest change.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦞 diamond lobster and patch quality is 🦪 silver shellfish.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (terminal): The PR body includes after-fix Windows source-harness proof for snapshot create/list/verify/restore, global and per-agent targets, queue scrubbing, sidecar cleanup, and focused validation commands.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix Windows source-harness proof for snapshot create/list/verify/restore, global and per-agent targets, queue scrubbing, sidecar cleanup, and focused validation commands.
Evidence reviewed

PR surface:

Source +767, Tests +885, Docs +95, Other +27. Total +1774 across 16 files.

View PR surface stats
Area Files Added Removed Net
Source 10 785 18 +767
Tests 3 885 0 +885
Docs 2 96 1 +95
Config 0 0 0 0
Generated 0 0 0 0
Other 1 280 253 +27
Total 16 2046 272 +1774

Security concerns:

  • [medium] Unexplained root lockfile dependency changes — pnpm-lock.yaml:162
    The PR changes a security-owned root lockfile across many transitive packages without a matching manifest change, widening the supply-chain review beyond the SQLite snapshot feature.
    Confidence: 0.93

Acceptance criteria:

  • [P1] git diff --check.
  • [P1] node scripts/run-vitest.mjs run src/cli/program/register.backup.test.ts src/cli/program/command-registry.test.ts src/commands/snapshot.test.ts src/snapshot/snapshot-provider.test.ts.
  • [P1] pnpm exec oxfmt --check src/cli/command-catalog.ts src/cli/program/register.backup.ts src/cli/program/register.backup.test.ts src/cli/program/command-registry-core.ts src/cli/program/core-command-descriptors.ts docs/cli/backup.md docs/cli/index.md docs/docs.json.

What I checked:

  • Repository policy read: Read the full root policy; it treats persisted preferences, state, config, setup/startup behavior, lockfiles, and backup/security surfaces as compatibility or security-sensitive review areas. (AGENTS.md:26, dc5d4138f9ae)
  • Scoped docs policy read: Read the docs guide for touched docs; it requires Mintlify-compatible root-relative links and generic docs content. Public docs: docs/AGENTS.md. (docs/AGENTS.md:1, dc5d4138f9ae)
  • Live PR state: Live GitHub metadata shows the PR is open, draft, contributor-authored, assigned to galiniliev, and carries maintainer/proof/merge-risk/waiting-on-author labels at head 409d541. (409d54170fe4)
  • Lockfile blocker still present: The PR still changes pnpm-lock.yaml transitive AWS/Smithy/OpenAI/React/Shiki/import-in-the-middle resolutions and metadata without any package manifest in the changed-file list. (pnpm-lock.yaml:162, 409d54170fe4)
  • Lockfile is security-owned: CODEOWNERS explicitly marks the root lockfile as security-sensitive and owned by the security team. (.github/CODEOWNERS:27, dc5d4138f9ae)
  • Retired root snapshot policy still present: The PR still adds a startup catalog policy for top-level snapshot even though the public command moved under backup sqlite snapshot and the descriptor catalog does not register a root snapshot command. (src/cli/command-catalog.ts:269, 409d54170fe4)

Likely related people:

  • vincentkoc: Recent and foundational history ties Vincent Koc to the database-first SQLite landing, state SQLite path hardening, sqlite-vec loading, and backup SQLite snapshot behavior this PR builds on. (role: feature owner; confidence: high; commits: 65eb2ccd4ae2, 386b0e6c7457, b470316fc0af; files: src/infra/backup-create.ts, src/state/openclaw-agent-db.paths.ts, packages/memory-host-sdk/src/host/sqlite.ts)
  • galiniliev: Live PR metadata shows galiniliev assigned, and the discussion includes a prior maintainer-style review of the snapshot manifest/user_version invariant on this exact PR. (role: reviewer and current assignee; confidence: medium; files: packages/memory-host-sdk/src/host/sqlite-snapshot.ts, src/snapshot/local-repository.ts, src/snapshot/snapshot-provider.test.ts)
  • steipete: Recent main history shows repeated backup, docs, lockfile/CODEOWNERS, and security-sensitive repository maintenance adjacent to this PR's backup docs and lockfile surfaces. (role: recent adjacent owner; confidence: medium; commits: be95bb72d459, f7d7148cf047, e16ac0433092; files: src/infra/backup-create.ts, docs/cli/backup.md, .github/CODEOWNERS)
  • shichangs: GitHub history attributes the original local backup CLI feature to shichangs, which is the command surface this PR extends. (role: introduced behavior; confidence: medium; commits: 0ecfd37b4465; files: docs/cli/backup.md, src/cli/program/register.backup.ts, src/infra/backup-create.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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.

How this review workflow works
  • 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.
Review history (2 earlier review cycles)
  • reviewed 2026-06-23T15:32:03.109Z sha 86f92a1 :: needs maintainer review before merge. :: none
  • reviewed 2026-07-07T01:23:10.235Z sha 409d541 :: found issues before merge. :: [P1] Remove the unrelated lockfile dependency churn | [P3] Drop the retired snapshot startup policy

@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jun 19, 2026
@clawsweeper clawsweeper Bot mentioned this pull request Jun 19, 2026
@giodl73-repo giodl73-repo changed the title Document snapshot restore proof Add core SQLite snapshot command Jun 19, 2026
@giodl73-repo
giodl73-repo changed the base branch from giodl/snapshot-named-targets-pr3 to main June 19, 2026 14:32
@openclaw-barnacle openclaw-barnacle Bot added cli CLI command changes and removed size: S labels Jun 19, 2026
@clawsweeper clawsweeper Bot added merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. feature: ✨ showcase ClawSweeper spotlight: unusually compelling feature idea for maintainer attention. labels Jun 19, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

I updated the PR body with packaged CLI proof for node openclaw.mjs snapshot create, snapshot verify, and snapshot restore, including redacted JSON output, restored DB readback, and the final artifact file list.

@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 19, 2026
@galiniliev

Copy link
Copy Markdown
Contributor

Codex maintainer review: one blocker remains before this snapshot artifact contract should ship.

Findings:

  • [P2] Record database.userVersion from the generated artifact, not the live source before VACUUM INTOpackages/memory-host-sdk/src/host/sqlite-snapshot.ts:23

    createVacuumedSqliteSnapshot() currently reads PRAGMA user_version from the source connection before loading sqlite-vec and before running VACUUM INTO at packages/memory-host-sdk/src/host/sqlite-snapshot.ts:23-27. The manifest is then written from that value in src/snapshot/local-repository.ts:55-69, while database.sqlite is the actual sync/restore artifact. Without wrapping those operations in a single read transaction or reading the metadata back from params.targetPath after VACUUM INTO, a migration or operator write that commits between the PRAGMA read and the snapshot statement can leave manifest.json describing a different schema version than the restored database. Please derive userVersion from the generated artifact, or otherwise tie the metadata read to the same SQLite snapshot used for database.sqlite, and add a regression that proves the manifest value matches the restored artifact.

Notes from independent review:

  • I did not carry forward the earlier symlinked-global finding. An isolated Node/SQLite probe with a symlinked canonical path, active target -wal/-shm, and WAL-only rows preserved all rows when VACUUM INTO opened the symlink path, so I do not have reproduction-quality proof for that blocker.
  • The overall feature boundary looks right for a draft MVP: core owns the local SQLite artifact command, docs distinguish snapshot from backup, and stress/object-store/failover work remains out of scope or stacked separately.

@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. 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. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. 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 Jun 19, 2026
@vincentkoc

Copy link
Copy Markdown
Member

Superseded by the hardened canonical implementation in #105718, landed as 2f25e9c.

Thank you, @giodl73-repo, for establishing the SQLite-safe artifact direction and the original backup-surface design. This PR could not be updated because maintainerCanModify=false, and the landed diff needed to differ materially: strict OpenClaw database roles, canonical schema/index/owner validation, fresh-only restore, content-pinned verification, durable publication, POSIX/macOS ownership and ACL checks, protected Windows DACL creation, path-race defenses, and native Windows/macOS/Linux proof.

The concurrent stress concept remains open in #94967 and will be adapted onto the landed API with author credit rather than closing that validation work here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes commands Command implementations docs Improvements or additions to documentation feature: ✨ showcase ClawSweeper spotlight: unusually compelling feature idea for maintainer attention. maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: XL status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants