mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-27 21:07:01 -06:00
refactor(state): consolidate wide rows, plugin index, workspace attestations, and shared auth singletons at schema v13 (#130466)
* refactor(state): make cron and subagent rows JSON-canonical * refactor(state): make gateway origin device tokens canonical at v13 The lazy ensure predates the table joining the canonical schema; at the v13 bump the schema owns creation, so the feature-local DDL, WeakSet dedupe, and lazy-list entry retire. The legacy-file guard the ensure carried stays at each call site. * test: drop obsolete lazy-ensure coverage for origin device tokens The table is canonical at v13; same-version lazy creation no longer exists to protect. Origin CRUD, isolation, and rotation coverage remains in the surviving cases. * refactor(state): fold installed_plugin_index into config_machine_state The singleton index row becomes one JSON value under plugins.installedIndex with its rollback-fencing revision inside the value; reads, CAS restore, and the lease-held write transactions use direct Kysely on config_machine_state so the state_leases assertion stays in-transaction. The v13 migration imports the row and drops the table; the additive workspace_dir entry folds with it. Doctor guidance, docker staging, and the e2e probes name the machine-state row. * refactor(state): merge workspace_attestations into workspace_setup_state One row per workspace now carries both setup milestones and the attestation clock: nullable setup columns represent attestation-only workspaces (replaceWorkspaceAttestation can precede any setup write) and setupExists derives from a non-null version. The bootstrap-hash FK repoints to the merged table; migration receipts keep the historical workspace_attestations discriminator string. The v13 migration grows and rebuilds the table, merges attestation rows (orphans without a path alias drop — their hashes re-derive at the next bootstrap attestation), and the consolidation kind is renamed state-consolidation-v13 to cover the batch. * test(state): cover the workspace merge and consolidation fallout The v12-to-v13 regression seeds merged, attestation-only, and orphan attestation workspaces; the 13-to-12 downgrade fixture recreates workspace_attestations and installed_plugin_index from the folded data; the fold-in migration gates the additive workspace_dir column for pre-additive rows; the workspace merge now triggers on the setup table's own shape so stable-era databases without an attestations table still reshape; the consolidation applied-message covers the batch. * refactor(state): fold shared auth profile singletons into config_machine_state The shared-state auth_profile_stores/auth_profile_state rows (fixed key 'shared') become authProfiles.store/authProfiles.state machine-state values; the agent-DB tables of the same names are untouched. Git-backup redaction moves from table-drop to the authProfiles. secret prefix with seeded-secret absence proof; migration receipts keep the historical table-name discriminators; the shared-auth relocation and receipt verification project the KV cells back to the receipt-era row shapes so persisted digests stay byte-compatible. mcp_oauth_stores stays a table — its multi-key fold is a named follow-up. * test(state): finish shared-auth fold coverage and annotate boundary casts Auth seeders and assertions across the e2e/scripts/secrets suites target the authProfiles machine-state cells; the v12-to-v13 regression proves payload-byte fidelity, non-shared-row drop, and insert-if-absent precedence; the downgrade fixture recreates and repopulates both v12 tables. Boundary type assertions in the plugin-index store carry SAFETY invariants per the ratchet. * chore: shrink assertion-safety baseline for plugin-index store * refactor(doctor): delete the dead onboarding-recommendations migration Its input — the unscoped 'primary' onboarding row — existed only between9a93a52a8aand473962b7de, a two-day beta window; no shipped stable can produce it and the runtime table folded away at v12. The audit backup list keeps recognizing system-agent.jsonl artifacts because beta installs that ran that import may still carry its backups. * docs: sync the 13-to-12 downgrade example with the executable fixture * style: format the synced downgrade example * style: drop unused import and duplicate union constituent * fix(state): keep orphan attestations across the v13 workspace merge The merged workspace_setup_state required a workspace path, but legacy orphan hashed-key attestations never recorded one. workspace_path is now nullable (setup rows still enforce it via CHECK), the v13 migration and the doctor file import keep orphans with a NULL path that heals on the next live access, and the 13-to-12 downgrade keeps attestation-owned hashes. Doctor test seeds move to the folded KV row. * perf(state): retire unused cron indexes * fix(state): preserve v13 migration recovery * fix(state): preserve v12 lazy-table upgrade * docs(state): document v13 auth relocation --------- Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
This commit is contained in:
committed by
GitHub
parent
dff2d26820
commit
1ea2640f54
+10
-9
@@ -114,13 +114,13 @@ openclaw backup enable --repository ~/Backups/openclaw-git --every 24h --push
|
||||
configured, so a fresh install cannot silently create a schedule whose pushes
|
||||
always fail.
|
||||
|
||||
Pushed schedules redact credential-bearing tables by default: an unattended
|
||||
recurring push would otherwise retain credentials durably in remote Git
|
||||
history. Pass `--include-secrets` to schedule full-fidelity remote backups
|
||||
when you accept that tradeoff and the remote is private; restores from
|
||||
redacted history require re-pairing devices and re-authenticating providers
|
||||
afterward. Local (non-push) schedules keep full fidelity so restores are
|
||||
complete.
|
||||
Pushed schedules redact credential-bearing tables and secret-prefixed
|
||||
machine-state rows by default: an unattended recurring push would otherwise
|
||||
retain credentials durably in remote Git history. Pass `--include-secrets` to
|
||||
schedule full-fidelity remote backups when you accept that tradeoff and the
|
||||
remote is private; restores from redacted history require re-pairing devices
|
||||
and re-authenticating providers afterward. Local (non-push) schedules keep full
|
||||
fidelity so restores are complete.
|
||||
|
||||
Use `--global-only` or `--agent <id>` to narrow the scope. Add
|
||||
`--exclude-secrets` for a redacted Git history. Re-running the command updates
|
||||
@@ -195,8 +195,9 @@ confirm ownership and run `chmod 700 <repository>` to repair unsafe permissions.
|
||||
The repository is ordinary Git and can use any remote, including GitHub. Keep
|
||||
the remote private: the default dump includes auth profiles, tokens, and other
|
||||
credential-bearing state. `--exclude-secrets` omits the documented secret
|
||||
tables when a redacted history is more useful than a credential-complete
|
||||
backup; see [Backup CLI](/cli/backup#versioned-git-backups) for the exact list.
|
||||
tables and machine-state key prefixes when a redacted history is more useful
|
||||
than a credential-complete backup; see
|
||||
[Backup CLI](/cli/backup#versioned-git-backups) for the exact list.
|
||||
|
||||
Verify or restore one database at any commit without overwriting a live file:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user