# Upgrade Playbook

> Migration strategy for upgrading OpenClaw core while maintaining protocol compatibility.
> Part of COMPATIBILITY-STRATEGY.md §F.

---

## §1 Pre-Upgrade Checklist

Before any upgrade:

```markdown
- [ ] Run `node scripts/upgrade-test.mjs` — record baseline PASS count
- [ ] Run `node scripts/audit-all.mjs` — record baseline WARN/FAIL counts
- [ ] Commit all outstanding changes (`git status` should be clean)
- [ ] Read OpenClaw changelog for the target version
- [ ] Check version-contract.md §3 Required Interfaces for changes
```

---

## §2 Patch Upgrade (v0.9.1 → v0.9.2)

**Definition:** Bugfix release. No breaking changes.

### Procedure

```
1. Upgrade OpenClaw          ← per OpenClaw install instructions
2. Run upgrade-test          ← node scripts/upgrade-test.mjs
3. Run full audit            ← node scripts/audit-all.mjs
4. Verify                    ← all PASS, no regressions
```

**Expected changes:** 0 files modified.

**Rollback:** `openclaw restart` with previous version.

---

## §3 Minor Upgrade (v0.9.x → v0.10.x)

**Definition:** Feature release. Possible tool name additions, config format changes.

### Procedure

```text
PRE-CHECK
├─ Read OpenClaw changelog for:
│   ├─ Tool name changes
│   ├─ Cron format changes
│   └─ Config format changes
├─ Run baseline tests (upgrade-test + audit-all)
└─ git stash or commit

MIGRATION
├─ [IF tool names changed]  Update AGENTS.md §3b, §6, §CPB
│   ├─ s/old_name/new_name/  in ctx_search references
│   └─ s/old_name/new_name/  in memory_search references
├─ [IF cron format changed]  Re-register Dream Cycle job:
│   cron(action="remove", ...) → cron(action="add", ...)
├─ [IF config format changed] Update `.openclaw/` config files
└─ git commit -m "chore: adapt to OpenClaw v0.10.x"

VERIFICATION
├─ node scripts/upgrade-test.mjs   ← all PASS
├─ node scripts/audit-all.mjs      ← baseline match
└─ Manual: verify Dream Cycle runs at next scheduled time

ROLLBACK
├─ git revert the migration commit
├─ Re-register old cron job format
└─ openclaw restart
```

### Common Minor Upgrade Actions

| Change | Affects | Action |
|--------|---------|--------|
| Tool API signature change | AGENTS.md §3b | Update search parameter format |
| New tool addition | — | Optional: add to protocol if relevant |
| Cron syntax change | .openclaw/cron/ | Re-register all jobs |
| Memory format change | None (protocol uses abstract) | No action |

---

## §4 Major Upgrade (v0.x → v1.0)

**Definition:** Breaking change release. Requires full compatibility review.

### Procedure

```text
PRE-CHECK
├─ Same as minor upgrade, PLUS:
├─ Read full migration guide from OpenClaw
├─ Review COMPATIBILITY-STRATEGY.md §A (Surface Map)
├─ Review version-contract.md §3 (Required Interfaces)
├─ Review version-contract.md §4 (Forbidden Interfaces)
└─ Create recovery branch: git checkout -b upgrade/v1.0-prep

MIGRATION
├─ Phase 1: Update tool references
│   ├─ Update all tool name references in AGENTS.md
│   ├─ Update guard-memory-backend.mjs string comparisons
│   └─ Run: node scripts/upgrade-test.mjs
│
├─ Phase 2: Update cron integration
│   ├─ List current cron jobs: cron(action="list")
│   ├─ Remove all: cron(action="remove", ...)
│   ├─ Re-register with new format
│   └─ Verify: cron(action="list")
│
├─ Phase 3: Update runtime if needed
│   ├─ Check if runtime.mjs still compiles
│   ├─ Check src/agent-runtime/* imports
│   └─ Update import paths if needed
│
├─ Phase 4: Run full verification
│   ├─ node scripts/upgrade-test.mjs   ← must PASS all
│   ├─ node scripts/audit-all.mjs      ← 0 FAIL, baseline WARN
│   └─ Manual walkthrough of one complex task
│
└─ git commit -m "chore: migrate to OpenClaw v1.0"

VERIFICATION
├─ Same as minor, PLUS:
├─ Verify all 3 protocol layers are self-consistent
├─ Verify audit-report.md generates correctly
└─ Mark tested version in version-contract.md §1

ROLLBACK
├─ git checkout main (pre-upgrade branch)
├─ Restore .openclaw/cron/ from git backup
├─ openclaw restart
└─ Note: Any data created during v1.0 may be incompatible
```

### Major Upgrade Risk Areas

| Area | Breakage Likelihood | Recovery Difficulty |
|------|---------------------|---------------------|
| Tool names | MEDIUM (known to be stable) | LOW (5 refs to update) |
| Cron format | LOW | LOW (re-register) |
| Session context | LOW (not relied upon) | NONE |
| runtime.mjs imports | MEDIUM | MEDIUM (port to new API) |
| LLM behavior changes | MEDIUM (prompt sensitivity) | LOW (adjust prompts) |

---

## §5 OpenClaw Deprecation / Self-Host Mode

**Definition:** OpenClaw core is no longer available or maintained.

### Procedure

```text
PRE-CHECK
├─ Read SELF-HOSTING READINESS in COMPATIBILITY-STRATEGY.md §G
├─ Score is 80/100 — protocol layer is portable
└─ Identify which features to maintain vs drop

MIGRATION OPTIONS
├─ Option A: Replace with basic CLI
│   ├─ Audit scripts run via: node scripts/audit-all.mjs (STILL WORKS)
│   ├─ Protocol docs are static markdown (readable anywhere)
│   └─ Lost: memory_search, ctx_search, cron-Triggered Dream Cycle
│
├─ Option B: Replace with custom agent runtime
│   ├─ Build minimal tool executor (5-10 tools)
│   ├─ Use system cron or launchd for Dream Cycle
│   ├─ Use grep/ripgrep + sqlite for memory search (reduced capability)
│   └─ Keep: all protocol docs, audit scripts, templates
│
└─ Option C: Hybrid
    ├─ Keep protocol docs and audit scripts
    ├─ Replace only cron + memory with POSIX equivalents
    └─ Import protocol docs into new toolchain

SELF-HOSTED VERIFICATION
├─ node scripts/upgrade-test.mjs   ← all PASS (no OpenClaw dep!)
├─ node scripts/audit-all.mjs      ← all PASS
└─ Manual: verify cron/launchd triggers Dream Cycle
```

---

## §6 Upgrade History Log

| Date | From | To | Type | Changed Files | Duration | Issues |
|------|------|----|------|---------------|----------|--------|
| — | — | — | — | — | — | — |

*(Populate on each upgrade)*
