<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Compatibility on Margrop Blog</title>
    <link>https://blog.margrop.net/en/tag/compatibility/</link>
    <description>Recent content in Compatibility on Margrop Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Mon, 18 May 2026 10:05:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/en/tag/compatibility/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>New Chrome Could Not Log In to Bitwarden, but Old Machines Still Worked: A Vaultwarden Compatibility Trap</title>
      <link>https://blog.margrop.net/en/post/chrome-bitwarden-vaultwarden-login-failure-prelogin/</link>
      <pubDate>Mon, 18 May 2026 10:05:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/chrome-bitwarden-vaultwarden-login-failure-prelogin/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The failure looked like a Chrome or Bitwarden extension problem: newly installed computers could not log in to a self-hosted Vaultwarden instance, while existing computers continued to work with the same Bitwarden &lt;code&gt;2026.4.1&lt;/code&gt; browser extension. The actual root cause was server-side compatibility: the clients were using a newer prelogin endpoint, while the Vaultwarden server was still running &lt;code&gt;vaultwarden/server:1.35.4-alpine&lt;/code&gt;, which did not provide &lt;code&gt;/identity/accounts/prelogin/password&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Existing machines were likely protected by an already established login state and local cache. They did not prove that the full first-login API path was still compatible. The correct fix was to back up the Vaultwarden data, upgrade the server image to &lt;code&gt;1.36.0&lt;/code&gt; or newer, and confirm from logs that the prelogin endpoint no longer returned 404.&lt;/p&gt;&#xA;&lt;p&gt;All domains, paths, usernames, and deployment details in this article are sanitized. Examples use placeholders such as &lt;code&gt;vault.example.com&lt;/code&gt; and &lt;code&gt;/opt/vaultwarden&lt;/code&gt;; no internal network or private information is included.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Upgrading OpenClaw to 2026.3.23-2: A Real Compatibility Upgrade Playbook</title>
      <link>https://blog.margrop.net/en/post/openclaw-upgrade-to-2026-3-23-compatibility-playbook/</link>
      <pubDate>Tue, 24 Mar 2026 21:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/openclaw-upgrade-to-2026-3-23-compatibility-playbook/</guid>
      <description>&lt;p&gt;This post documents a real OpenClaw upgrade, not a laboratory demo. The goal was not simply to change a version string. The real goal was to move a small multi-node environment from &lt;code&gt;2026.3.8 / 2026.3.13&lt;/code&gt; to &lt;code&gt;2026.3.23-2&lt;/code&gt; while keeping message channels, external plugins, service startup behavior, and rollback paths under control.&lt;/p&gt;&#xA;&lt;p&gt;In practice, the most difficult part was not the OpenClaw core package. The hardest part was everything around it: plugin SDK compatibility, JIT cache reuse, mixed installation layouts, restricted outbound access on an edge node, and differences in bind mode that changed what health probes actually meant. If you do not identify those variables first, an upgrade can easily look successful while one or more production channels are already broken.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
