Ayaan Zaidi
055a7302c4
docs(hooks): clarify command logger storage ( #128478 )
...
Correct the command-logger documentation to match runtime behavior: emitted command events are written only to logs/commands.log. Keep schema v9 and its compatibility surface unchanged.
2026-08-24 09:50:28 +05:30
Peter Steinberger
ae55a4090c
refactor(canvas): make the panel a widget presenter ( #126030 )
...
* refactor(canvas): retire legacy host and commands
* refactor(apple): narrow shared Canvas contracts
* refactor(macos): keep Canvas as widget presenter
* refactor(ios): remove Canvas client
* refactor(android): remove Canvas client
* refactor(linux): remove Canvas client
* fix(ci): isolate native locale artifacts
* fix(linux): regenerate companion lockfile
* fix(canvas): refresh native tool display metadata
* test(canvas): align coverage with presenter surface
* test(canvas): remove obsolete asset root seam
* test(canvas): stabilize retirement CI coverage
* refactor(swift): remove orphaned resource wrapper
* test(ios): remove retired canvas layout assertion
* fix(macos): reserve retired canvas command namespace
* refactor(macos): isolate canvas command policy
* fix(canvas): select only eligible macOS panels
* fix(canvas): keep panel selection plugin-owned
2026-08-19 08:21:07 -07:00
Peter Steinberger
5f65ef8138
feat: add A2UI widgets to session boards ( #125803 )
...
* feat: add A2UI board widgets
* fix: harden A2UI board widget integration
* fix: repair A2UI CI contracts
* fix(canvas): keep native A2UI pushes on v0.8
* fix(canvas): support board-only widgets without file host
2026-08-18 09:08:45 -07:00
Josh Lehman
eeed2c92cf
fix(upgrade): repair stable state before gateway startup ( #125483 )
2026-08-18 07:40:01 -07:00
Ayaan Zaidi
d2afbd05ad
refactor(plugin-sdk): replace API baselines with diffs ( #123036 )
...
* refactor(plugin-sdk): replace API baselines with diffs
* perf(plugin-sdk): bound API diff resources
* fix(plugin-sdk): isolate API diff dependencies
* fix(release): forward Plugin SDK acknowledgement
* fix(release): enforce SDK acknowledgement on publish
* chore: preserve generated-doc ignore policy
* fix(release): freeze SDK API evidence before publish
* fix(ci): satisfy SDK evidence guards
* fix(release): bind complete SDK evidence
* fix(release): authenticate plugin SDK evidence
* fix(plugin-sdk): abort interrupted API diffs
* test(ui): freeze page clock in background-tasks rail e2e
The rail transcript is compared byte-for-byte across the detail-panel
round-trip while it renders live relative ages; on slow CI runners the
second boundary ticks between the two reads (11s -> 12s) and fails the
equality assertion. Fix the page Date with Playwright setFixedTime while
keeping timers running so the tasks.list polling assertions still hold.
Repro: a 1.5s stall between the reads fails pre-fix with the exact CI
diff and passes post-fix.
* fix(scripts): drop unused export on dependency-evidence CLI main
Knip's workflow scan re-roots script references after an actions/checkout
step that sets path:, so the new trusted-tooling checkout in
openclaw-npm-release.yml stops marking this CLI as a workflow entry and
its exported main() surfaces as an unused export in check-dependencies.
Nothing imports main; the module invokes it through its own entry guard,
so the export keyword was dead surface either way.
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-13 03:45:36 -07:00
Peter Steinberger
b6548e509a
refactor(state): retire commitments schema ( #122176 )
...
* refactor(state): retire commitments schema
* fix(state): complete commitments retirement safeguards
* test(state): expect doctor retirement report
* test(state): prove doctor v7 markers atomically
* fix(state): align schema support metadata
* fix(state): report actual commitments retirement
* fix(state): validate retired commitments schema
* fix(state): preserve early commitments upgrades
* fix(state): require exact commitments index set
* fix(state): reject non-exact retired schemas
* fix(state): recognize supported retirement layouts
* fix(state): expose commitments retirement to doctor
* fix(voice-call): describe commitments retirement
* test(state): align v7 rebase proof
* fix(state): protect commitments retirement dependencies
* fix(state): accept partial commitments layouts
* chore(docs): refresh v7 api baselines
2026-08-12 14:21:34 -07:00
Peter Steinberger
48253cde46
docs: correct database-first current-state claims ( #122085 )
...
Schema versions are global v6 and agent v17 (src/state/openclaw-state-db-contract.ts:6; src/state/openclaw-agent-db-contract.ts:22). State v5/v6 provenance comes from 7a7d6bb and 509a5f0 , matching the current contract comments at src/state/openclaw-state-db-contract.ts:4.
QMD is retired and Doctor migrates its paths to builtin memory (src/commands/doctor/shared/legacy-config-migrations.runtime.retired-memory-qmd.ts:94). Device auth is SQLite-backed in TypeScript and Swift while Android remains SecurePrefs-backed (src/infra/device-auth-store.ts:115; apps/shared/OpenClawKit/Sources/OpenClawKit/DeviceAuthStore.swift:26; apps/android/app/src/main/java/ai/openclaw/app/gateway/DeviceAuthStore.kt:55).
Opt-in cache, payload, raw-stream, timeline, and macOS diagnostics remain JSONL artifacts (src/agents/cache-trace.ts:93; src/agents/anthropic-payload-log.ts:46; src/agents/embedded-agent-subscribe.raw-stream.ts:16; src/infra/diagnostics-timeline.ts:96; apps/macos/Sources/OpenClaw/DiagnosticsFileLog.swift:3).
The canonical agent schema currently has cache_entries but no VFS/tool/run artifact tables, and subagent attachments materialize in child workspaces (src/state/openclaw-agent-schema.sql:398; src/agents/subagents/spawn/subagent-attachments.ts:308). Current Doctor/session owners replace deleted prototype paths (src/infra/state-migrations.doctor.ts:66; src/config/sessions/session-accessor.sqlite-entry.ts:165; src/config/sessions/paths.ts:320).
2026-08-11 08:03:10 -07:00
Peter Steinberger
38fabc4e03
refactor(state): retire tenant-free agent lease schema ( #121943 )
...
* refactor(state): retire agent lease schema
* chore(plugin-sdk): refresh schema version closure
* test(state): preserve v17 migration fixtures
* docs(state): align lease schema inventory
2026-08-11 02:42:56 -07:00
Peter Steinberger
e581acbf81
refactor(state): remove the dead agent lease scope ( #121615 )
...
* refactor(state): remove dead agent lease scope
* docs(refactor): remove stale QMD lease claim
2026-08-10 17:01:53 -07:00
Peter Steinberger
1ced7441eb
refactor(agents): move announce, completion, recovery, and registry families into concept directories ( #121553 )
...
* refactor(agents): move announce family into subagents/announce/
* refactor(agents): move completion and main-session recovery families
* refactor(agents): move registry family into subagents/registry
* refactor(agents): update registry state type imports
* style(agents): format moved subagent imports
* test(agents): preserve isolated registry test routing
* fix(scripts): recognize relocated subagent announce seams
2026-08-10 16:06:39 -07:00
Ayaan Zaidi
4b0151682e
refactor(commitments): remove inferred follow-up subsystem
...
Remove hidden follow-up extraction, heartbeat delivery, CLI, docs, and supporting tests/tooling. Existing commitment records remain inert pending separately approved cleanup.
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-08-10 13:48:32 +05:30
Peter Steinberger
a9d3980ed1
refactor(acpx): complete lease ownership and remove legacy reaper heuristics ( #121016 )
...
* refactor(acpx): harden pending process leases
* fix(acpx): bound retained probe leases
2026-08-09 03:15:39 -07:00
Peter Steinberger
e7950d968b
refactor(state): inline canonical database schemas at build ( #117433 )
2026-08-01 08:39:42 -07:00
Peter Steinberger
938749180e
refactor(nodes)!: retire arming leases for durable capability enablement ( #114892 )
...
* refactor(nodes): retire phone control leases
* fix(doctor): clean retired phone control state
* docs(nodes): document durable capability enablement
* docs(changelog): defer node enablement note
* fix(doctor): harden retired phone control cleanup
* fix(doctor): fail closed on unreadable lease state
* fix(doctor): validate retired lease journals
* fix(doctor): preserve deny-shadowed consent
* docs: refresh node authorization map
* fix(doctor): keep retirement helpers private
2026-07-27 23:51:30 -04:00
Peter Steinberger
9eae43bd37
refactor(infra): move exec approvals into the shared SQLite state DB ( #114063 )
...
* refactor(infra): move exec approvals into the shared SQLite state DB
Delete the file-runtime exec-approvals store (exec-approvals.json + .lock
sidecar machinery) on both runtimes and make the reserved
exec_approvals_config singleton row canonical. Doctor owns the one-time
import with claim/verify/receipt discipline; runtime fails closed with a
doctor instruction while un-migrated legacy state exists. The wire CAS
contract, socket semantics, and gateway auth-token derivations are
unchanged. Kills the #113929 lock-contention bug class structurally and
nets around -2.9k lines.
* fix(infra): green CI gates and retire file-era exec approvals tests
Break the migration-type import cycle with a leaf contract, regenerate the
plugin-SDK API and native i18n baselines for the intentional surface change,
drop unused exports, and replace the macOS file-era approvals test suite with
SQLite-backed behavior coverage per the obsolete-internals test policy.
* chore: green max-lines ratchet, native i18n baseline, and unused-export scan
2026-07-26 06:39:23 -04:00
Vincent Koc
f1afaa3d0e
fix(sqlite): snapshot through online backup ( #113385 )
2026-07-25 03:03:33 +08:00
Peter Steinberger
c440ae3e86
refactor(sessions): collapse legacy JSON store ( #113075 )
...
* refactor(sessions): collapse legacy JSON store
* chore(sessions): ratchet legacy importer boundary
* fix(sessions): align cleanup checks
2026-07-23 09:36:48 -07:00
Peter Steinberger
df3ff35277
refactor(state): move device auth tokens to SQLite ( #112663 )
...
* refactor(state): store device auth tokens in sqlite
* fix(state): keep device auth migration types acyclic
* fix(state): keep migration detection type private
2026-07-22 06:13:03 -07:00
Peter Steinberger
edecdbd05e
refactor(config): config-surface reduction tranche 3 — product consolidations (review request) ( #111527 )
...
* refactor(config): consolidate media model lists
* refactor(config): unify memory configuration
* refactor(config): consolidate TTS ownership
* refactor(config): move typing policy to agents
* refactor(config): retire product-level config surfaces
* refactor(config): share scoped tool policy type
* chore(config): refresh generated baselines
* fix(config): honor agent typing overrides
* fix(config): migrate sibling config consumers
* refactor(infra): keep base64url decoder private
* fix(config): strip invalid legacy TTS values
* chore(config): refresh rebased baseline hash
* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move
* refactor(config): polish final layout names
* refactor(config): freeze retired tuning defaults
* feat(config): add fast mode default symmetry
* refactor(config): key agent entries by id
* docs(config): update final layout reference
* test(config): cover final layout migrations
* chore(config): refresh final layout baselines
* fix(config): align final layout runtime readers
* fix(config): align remaining readers
* fix(config): stabilize final layout migrations
* fix(config): finalize config projection proof
* fix(config): address final layout review
* docs(release): preserve historical config names
* fix(config): complete keyed agent migration
* fix(config): close final migration gaps
* fix(config): finish full-branch review
* fix(config): complete runtime secret detection
* fix(config): close final review findings
* fix(config): finish canonical docs and heartbeat migration
* fix(config): integrate latest main after rebase
* refactor(env): isolate test-only controls
* refactor(env): isolate build and development controls
* refactor(env): collapse process identity indirection
* refactor(env): remove duplicate config and temp aliases
* docs(env): define the operator-facing allowlist
* ci(env): ratchet production variable count
* fix(env): remove stale provider helper import
* fix(env): make ratchet sorting explicit
* test(env): keep test seam in dead-code audit
* test(env): cover ratchet growth and boundary; document surface budgets
* docs(config): document tier-eval consolidations
* docs(config): clarify speech preference ownership
* test(memory): align retired tuning fixtures
* refactor(memory): freeze engine heuristics
* refactor(config): apply tier-eval tranche
* refactor(tts): move persona shaping to providers
* refactor(compaction): move prompt policy to providers
* test(config): align hookified prompt fixtures
* chore(deadcode): classify test-only exports
* chore(github): remove unused spawn helper
* chore(deadcode): classify queue diagnostics
* chore(deadcode): remove unused lane snapshot export
* chore(plugin-sdk): ratchet consolidated surface
* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00
Peter Steinberger
783a5d21cf
refactor(config): purge numeric tuning knobs behind built-in defaults ( #111382 )
2026-07-19 07:35:45 -07:00
Peter Steinberger
58452de711
refactor(config): config-surface reduction tranche 1 — retire dead keys, dedupe channel schemas, add growth ratchet ( #111142 )
...
* refactor(config): retire dead and aliased config keys via doctor migrations
* refactor(config): dedupe bundled channel config schemas into shared builders
* feat(config): add config-surface count ratchet to doc-baseline check
* test(config): drop stale fixtures for retired config keys
* fix(doctor): migrate only positive finite MCP timeout aliases
* fix(migrate-hermes): emit canonical MCP timeouts only
* fix(config): satisfy lint and contract gates
2026-07-19 00:52:37 -07:00
Peter Steinberger
4d27b5b67e
refactor(macos): move PortGuardian state to SQLite ( #110527 )
...
* refactor: compose native SQLite bootstrap tables
* refactor: share native SQLite state bootstrap
* refactor(macos): move PortGuardian state to SQLite
* test: align PortGuardian future-schema fixture
* fix(macos): reserve PortGuardian ledger across tunnel spawn
* fix(ci): align PortGuardian migration gates
* fix(macos): tolerate vanished SQLite sidecars
* fix(macos): revalidate PortGuardian writes
* test(macos): use sqlite identity bootstrap
2026-07-18 18:15:17 +01:00
Peter Steinberger
98410d986e
refactor(state): move device identity into canonical SQLite state ( #110392 )
...
* refactor: store device identities in SQLite
* style: satisfy Swift identity lint limits
* test: harden device identity migration fixtures
* fix: harden SQLite device identity recovery
* chore: remove stale identity helper
* refactor: isolate device identity repair
* chore: remove stale migration import
* test: validate migrated identity key types
* fix: harden device identity repair
* style: format device identity assertion
* fix: derive repaired identity key from PEM
* style: remove redundant PEM conversions
* fix: align native identity store with schema v4
* fix(state): satisfy SQLite identity CI gates
* fix(state): coordinate native identity migration
* test(doctor): include native identity claim path
* fix(infra): preserve coordinator release error
* fix(state): clear identity validation gates
* refactor(apple): remove identity test-only APIs
* refactor(apple): remove dead identity error type
* test(apple): use canonical identity test seam
* test(macos): isolate gateway readiness identity
2026-07-18 17:43:56 +01:00
Peter Steinberger
d8f2645c2c
refactor(memory-wiki): move compiled cache to plugin state ( #110167 )
...
* feat(plugin-sdk): prepare memory prompts asynchronously
* refactor(memory-wiki): move compiled cache to plugin state
* fix(plugin-sdk): export memory prompt preparer type
* refactor(plugin-sdk): keep prompt preparer type private
* test(memory-wiki): isolate compiled cache state
* chore(memory-wiki): satisfy changed gates
* fix(memory): preserve prepared prompts across context engines
* docs(plugin-sdk): refresh API baseline
* fix(memory): revalidate prepared prompt ownership
* fix(codex): propagate sandboxed memory context
* test(memory-wiki): seed durable vault identity
* refactor(memory-wiki): keep cache lifecycle internal
* fix(memory-wiki): harden compiled cache publication
* style(memory-wiki): format cache lifecycle changes
* test(memory-wiki): support extension test lib target
* style(memory-wiki): remove redundant catch
* refactor(memory-wiki): keep vault generation helper private
2026-07-18 03:05:03 +01:00
Peter Steinberger
b0a2d02427
fix(ci): make plugin SDK API manifest mergeable ( #110228 )
2026-07-18 00:16:39 +01:00
Peter Steinberger
5366b6de81
refactor: store gateway restart recovery in SQLite ( #110014 )
...
* refactor: move restart sentinel state to sqlite
* fix: satisfy restart sentinel architecture gates
* test: avoid cold startup migration timeout
* fix: bound durable restart notice retries
* test: type restart notice contention mock
* fix: detect legacy restart sentinel before reads
* fix: keep delivery attempt result internal
* fix: narrow restart sentinel preflight guard
2026-07-17 17:43:22 +01:00
Peter Steinberger
f3d1f02dc1
refactor: move MCP OAuth state to SQLite ( #109844 )
...
* refactor(mcp): move OAuth state to SQLite
* refactor(mcp): tighten OAuth module boundaries
* chore: refresh PR merge ref
* fix(mcp): align storage docs and merge checks
* fix(mcp): surface OAuth reauthorization status
2026-07-17 12:15:16 +01:00
Peter Steinberger
e873a7f955
refactor(memory): move QMD coordination to SQLite ( #109636 )
...
* refactor(memory): move QMD coordination to SQLite
* chore: keep release notes in PR body
* chore: annotate lease SQLite primitive
2026-07-16 22:01:34 -07:00
Peter Steinberger
83d82c9302
refactor(channels): persist runtime state in plugin SQLite ( #109380 )
...
* refactor(channels): move reef, msteams, matrix, zalouser file state to SQLite with doctor imports
* fix(channels): harden SQLite state migrations
* test(reef): use SQLite flow stores in receipt suites
* fix(reef): validate restored request policy
* fix(reef): retain replay state through relay window
* docs(reef): describe durable state import
* fix(reef): honor configured legacy state path
* chore: leave changelog to release flow
* fix(reef): use managed temp root in flow tests
* fix(matrix): omit undefined device id from state
2026-07-16 17:05:28 -07:00
Peter Steinberger
334c182c27
refactor(diffs): move ephemeral artifacts to SQLite ( #109328 )
...
* refactor(diffs): move ephemeral artifacts to SQLite
* fix(plugin-state): satisfy SDK validation gates
* test(diffs): satisfy lint contracts
* fix(plugin-state): count expired blobs toward quotas
* fix(plugin-state): harden blob storage boundaries
* fix(plugins): replace stale install provenance
2026-07-16 16:47:19 -07:00
Peter Steinberger
58f43c703e
test(auto-reply): consolidate command suites ( #109342 )
2026-07-16 14:23:11 -07:00
Peter Steinberger
6c39e713d4
refactor: move native hook relay registry to SQLite ( #109289 )
...
* refactor: store native hook relays in SQLite
* chore: satisfy relay store CI checks
2026-07-16 12:14:06 -07:00
Peter Steinberger
2cd3ee43ee
refactor: store workspace setup state in SQLite ( #109147 )
...
* refactor(state): move workspace setup state to SQLite
* test(state): track workspace cleanup temp dirs
* fix(state): satisfy workspace migration gates
* docs(state): fix migration list indentation
* fix(state): verify sibling migration claims
* fix(state): remove obsolete claim probe
2026-07-16 10:28:36 -07:00
Peter Steinberger
8fe4eeea9e
fix(exec): stop isolated state dirs from moving live approvals ( #108742 )
...
* fix(exec): isolate approval state directories
* chore: drop release-owned changelog entry
* chore: refresh native i18n inventory
* fix(ci): pin XcodeGen for Periphery scans
2026-07-16 08:57:32 -07:00
Peter Steinberger
723d12fd4c
refactor(apns): move registrations to shared SQLite ( #108543 )
...
* refactor(apns): move registrations to SQLite
* fix(apns): satisfy strict migration typing
* chore(apns): remove obsolete lint suppression
* chore: prune APNs max-lines baseline
* refactor(apns): keep store internals private
* fix(apns): preserve stored relay origins
* fix(apns): advance versions across deletion
* fix(apns): harden legacy state import
* fix(apns): redact legacy import errors
* fix(apns): reserve version successor
* fix(apns): bound legacy timestamp imports
* refactor(apns): extract payload builders
2026-07-16 01:52:15 -07:00
morluto
16801bf4f0
fix(agents): prevent subagent registry resurrection ( #105793 )
...
* fix(agents): retire legacy subagent registry JSON
Co-authored-by: morluto <76467478+morluto@users.noreply.github.com >
* fix(agents): keep migration decision internal
Co-authored-by: morluto <76467478+morluto@users.noreply.github.com >
* style(agents): format migration decision type
Co-authored-by: morluto <76467478+morluto@users.noreply.github.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-15 17:01:42 -07:00
Peter Steinberger
766742c674
refactor(node-host): move configuration to shared SQLite ( #108457 )
...
* refactor(node-host): move config to shared SQLite
* test(node-host): satisfy migration gates
2026-07-15 14:02:23 -07:00
xydt-tanshanshan
d201acd6e8
refactor(push-web): move web push store to shared SQLite state DB ( #103294 )
...
* refactor(push-web): move state to shared SQLite
Co-authored-by: hailory <hailory@xydigit.com >
* fix(push-web): harden legacy migration retries
* fix(push-web): format migration lock errors
* fix(push-web): gate runtime during legacy migration
* fix(push-web): keep store internals private
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: hailory <hailory@xydigit.com >
2026-07-15 12:54:22 -07:00
Peter Steinberger
2d7be9e84f
fix(docs-i18n): protect split product links
2026-07-15 13:50:06 -04:00
Peter Steinberger
f3adeb2ac6
fix(discord): move command deploy cache to sqlite ( #108381 )
2026-07-15 10:03:09 -07:00
Peter Steinberger
f41c143345
refactor(state): move skill upload staging to SQLite ( #108346 )
...
* refactor(state): move skill upload staging to sqlite
* test(skills): make archive mode assertion portable
* fix(skills): fence upload finalization by lease owner
* fix(skills): handle nullable lease expiry
* fix(skills): bound upload install leases
2026-07-15 08:40:46 -07:00
Peter Steinberger
e38cd62e0d
refactor(state): move managed image records to SQLite ( #108290 )
...
* refactor(state): move managed image records to sqlite
* refactor(state): narrow managed image store exports
* fix(state): preserve managed image media roots
* test(state): track managed image temp directories
2026-07-15 06:14:10 -07:00
morluto
1a34950d9c
fix(commitments): keep heartbeats responsive with large queues ( #105780 )
...
* fix(commitments): migrate store to sqlite
Replace steady-state JSON persistence with typed shared-state rows and a doctor-only verified import for shipped legacy data.
Co-authored-by: morluto <76467478+morluto@users.noreply.github.com >
* fix(commitments): satisfy migration gates
* fix(commitments): type sqlite counts defensively
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-15 03:58:03 -07:00
Peter Steinberger
75db23f3fc
fix: prevent stale rescue approvals from executing ( #108147 )
...
* fix(system-agent): persist rescue approvals in sqlite
Co-authored-by: Yung-Chen Tang <46495124+yungchentang@users.noreply.github.com >
* fix(system-agent): narrow rescue expiry clock
* test(system-agent): isolate rescue docker inference
* test(system-agent): align rescue docker doctor contract
* test(system-agent): accept canonical model shape
* fix(system-agent): refuse remote doctor repairs
* fix(infra): break rescue migration import cycle
* test(system-agent): lock rescue publish ordering
* test(system-agent): align rescue harness assertions
---------
Co-authored-by: Yung-Chen Tang <46495124+yungchentang@users.noreply.github.com >
2026-07-15 01:53:00 -07:00
Dallin Romney
ad34552473
refactor(qa): migrate Matrix scenarios into QA Lab ( #103589 )
...
* refactor(qa): migrate Matrix scenarios into QA Lab
* fix(qa): build Matrix boundary declarations
* fix(qa): preserve Matrix preview boundaries
* fix(qa): preserve Matrix hot reload semantics
* fix(qa): harden Matrix destructive scenario failures
* fix(qa): harden Matrix scenario isolation
* fix(qa): close Matrix negative scenario blind spots
* fix(qa): isolate Matrix substrate state
* fix(qa): harden Matrix transport substrate
* fix(qa): preserve Matrix profile and event parity
* fix(qa): preserve explicit scenario models
* fix(qa): align Matrix scenario coverage taxonomy
* fix(qa): format Matrix allowlist cleanup
* fix(qa): satisfy migrated Matrix CI contracts
* fix(qa): reconcile Matrix migration with current main
* fix(qa): break scenario flow import cycle
* fix(qa): reconcile Matrix max-lines ownership
* fix(qa): address Matrix review boundaries
* fix(qa): remove stale Matrix lint suppression
* fix(qa): adopt split Matrix E2EE flows
* fix(qa): export Matrix scenario record guard
* fix(qa): align Matrix migration with privatized helpers
* refactor(qa): finish Matrix QA Lab ownership
* fix(qa): preserve Matrix suite defaults
* fix(qa): reconcile Matrix cleanup with current main
* test(qa): follow canonical Matrix profile size
* fix(qa): guard stale Matrix QA package output
* docs(qa): redirect retired Matrix QA pages
* refactor(qa): finish Matrix runner rename
* test(qa): assert Matrix defaults through profile resolver
* docs: refresh QA cleanup map
* fix(qa): privatize Matrix storage discovery
2026-07-15 01:22:20 -07:00
Peter Steinberger
92fc907ffb
fix: preserve TUI restore state without JSON races ( #108058 )
...
* refactor(tui): move last session state to sqlite
* chore: keep release notes in PR body
* test: update doctor migration fixture
* chore: satisfy dead code export gate
2026-07-14 23:46:22 -07:00
Peter Steinberger
a6a0716486
feat(setup): rename Crestodian to OpenClaw system agent
...
User-facing name is now OpenClaw (the system speaks); internal code name is
system-agent. Gateway methods crestodian.* -> openclaw.chat/openclaw.setup.*,
agent tool -> openclaw, reserved agent ids openclaw + retired crestodian.
openclaw setup routes: onboarding flags -> onboard, -m/--yes -> system agent,
bare configured interactive -> OpenClaw chat, unconfigured -> onboarding.
Hidden crestodian CLI and /crestodian TUI aliases kept; docs moved to
docs/cli/openclaw.md with redirect stub. macOS/Android strings in lockstep.
Refs #107237
2026-07-14 11:03:02 -07:00
Peter Steinberger
59003634ad
refactor(cron): retire cron_run_logs; ledger-owned retention and cancellation
...
Stops the legacy run-log dual-write, auto-imports remaining rows and drops
the table at state-DB open (table-presence guard: self-heals downgrade
round-trips), keeps the newest 2000 terminal runs per job in the ledger,
retires cron.runLog config via doctor, and moves live-run cancellation to
src/cron behind the shared task control seam.
Part 2 of 2 for #106041 .
2026-07-13 11:41:27 -07:00
Vincent Koc
f33ab243cf
fix(sqlite): reject runtimes vulnerable to WAL corruption ( #106065 )
...
* fix(sqlite): require WAL-reset-safe Node runtime
* docs(sqlite): document safe Node runtime floor
* fix(sqlite): defer runtime library validation until use
* fix(ci): align startup memory with Node 24.15
2026-07-13 13:59:00 +08:00
Peter Steinberger
024b7d5aa8
refactor(pairing): store channel pairing state in SQLite ( #105802 )
...
* refactor(pairing): move channel state to SQLite
* fix(pairing): preserve doctor and SDK contracts
* fix(pairing): break SQLite storage import cycle
* fix(pairing): keep SQLite types outside SDK graph
2026-07-12 18:53:38 -07:00