{
  "title": "Optional: ship dSYM alongside the release",
  "content": "ditto -c -k --keepParent apps/macos/.build/release/OpenClaw.app.dSYM dist/OpenClaw-2026.2.3.dSYM.zip\nbash theme={null}\nSPARKLE_PRIVATE_KEY_FILE=/path/to/ed25519-private-key scripts/make_appcast.sh dist/OpenClaw-2026.2.3.zip https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml\n```\n\nGenerates HTML release notes from `CHANGELOG.md` (via [`scripts/changelog-to-html.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/changelog-to-html.sh)) and embeds them in the appcast entry.\nCommit the updated `appcast.xml` alongside the release assets (zip + dSYM) when publishing.\n\n* Upload `OpenClaw-2026.2.3.zip` (and `OpenClaw-2026.2.3.dSYM.zip`) to the GitHub release for tag `v2026.2.3`.\n* Ensure the raw appcast URL matches the baked feed: `https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml`.\n* Sanity checks:\n  * `curl -I https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml` returns 200.\n  * `curl -I <enclosure url>` returns 200 after assets upload.\n  * On a previous public build, run “Check for Updates…” from the About tab and verify Sparkle installs the new build cleanly.\n\nDefinition of done: signed app + appcast are published, update flow works from an older installed version, and release assets are attached to the GitHub release.",
  "code_samples": [
    {
      "code": "## Appcast entry\n\nUse the release note generator so Sparkle renders formatted HTML notes:",
      "language": "unknown"
    }
  ],
  "headings": [
    {
      "level": "h2",
      "text": "Appcast entry",
      "id": "appcast-entry"
    },
    {
      "level": "h2",
      "text": "Publish & verify",
      "id": "publish-&-verify"
    }
  ],
  "url": "llms-txt#optional:-ship-dsym-alongside-the-release",
  "links": []
}