v0.3.1 — Fix OpenClaw Deployment Crash
Release Notes — open-upsp v0.3.1
Release Date: 2026-05-14
Previous: v0.3.0
🐛 Critical Bug Fixes
OpenClaw Deployment Crash (Fixed)
v0.3.0 deployment could cause the OpenClaw gateway to crash on config hot-reload. Three cascading bugs were identified and fixed:
| Bug | Impact | Fix |
|---|---|---|
| SKILL.md in wrong location | OpenClaw scans skills/<name>/SKILL.md at the skill root; our file was at core/SKILL.md → skill never loaded |
Added skill/SKILL.md with proper YAML frontmatter as the OpenClaw entry point |
| Missing YAML frontmatter | OpenClaw parseFrontmatter() requires name + description in --- block; missing frontmatter caused return null → skill silently skipped |
Added frontmatter: name: open-upsp, description: Zettelkasten knowledge graph... |
Invalid tools.alsoAllow entry |
postinstall.js and install.sh added "open-upsp" (a skill ID) to tools.alsoAllow, which only accepts tool names. OpenClaw tool policy validation rejected the unknown entry during config reload → gateway exit |
Removed alsoAllow manipulation from install scripts. alsoAllow must contain actual tool names (e.g. zk_create_note), not skill IDs |
Verification
- ✅ 3/3 uninstall → install → restart cycles passed with zero failures
- ✅ Gateway starts normally after deployment
- ✅ Skill correctly loaded as
✓ readyinopenclaw skills list - ✅ 207 tests, 0 failures
📁 Files Changed
skill/SKILL.md— new OpenClaw-compatible skill entry with YAML frontmatterscripts/postinstall.js— removed invalidalsoAllowmanipulationscripts/install.sh— removed invalidalsoAllowmanipulationskill/core/SKILL.md— version bumpskill/core/RULES.md— version bumpskill/evolvable/EVOLUTION.md— version bumpskill/manifest.json— version bump
🔄 Upgrade from v0.3.0
Existing deployments (manual fix)
# 1. Fix alsoAllow (remove invalid skill ID)
python3 -c "
import json
with open('\$HOME/.openclaw/openclaw.json') as f:
cfg = json.load(f)
if 'tools' in cfg and 'alsoAllow' in cfg['tools']:
cfg['tools']['alsoAllow'] = [x for x in cfg['tools']['alsoAllow'] if x not in ('open-upsp', 'zettelkasten')]
with open('\$HOME/.openclaw/openclaw.json', 'w') as f:
json.dump(cfg, f, indent=2)
print('Fixed')
"
# 2. Ensure SKILL.md is at skill root
cp ~/.openclaw/skills/open-upsp/core/SKILL.md ~/.openclaw/skills/open-upsp/SKILL.md
# 3. Restart gateway
openclaw gateway stop && openclaw gateway startFresh install
npm install -g open-upsp📊 Quality Gates
| Metric | v0.3.0 | v0.3.1 |
|---|---|---|
| Tests | 207 | 207 |
| Test files | 23 | 23 |
| Failures | 0 | 0 |
| OpenClaw deploy crash | ❌ | ✅ Fixed |
| Skill load on restart | ❌ | ✅ Verified (3/3) |
Full changelog: see v0.3.0 release notes for feature details.