An opencode user hits the keybind that shares a session — the one that prints a link a colleague can open — and what happens next depends on how old the client is. On v1.19.1, released today, the share menu is hidden, autoshare is a silent no-op, and the SDK call fails with a plain sentence: “Session sharing has been discontinued.” On a client one patch behind, the command still runs and the server still answers, with a fresh id, a secret, and a URL. Whoever opens that URL lands on a page that says the content is no longer available. The command succeeded; the artifact is dead.
The removal wore the wrong label in every place a removal could announce itself. On v1 it shipped as v1.19.1 — a patch number, which semver reserves for backward-compatible bug fixes, and which was not flagged prerelease — with the discontinuation as the release’s only item, filed under Bugfixes. On v2 the same retirement went out as a tag push with no GitHub Release at all; the releases API answers 404 for v2.0.30, and the change is visible only in the compare log. Neither pull request (#55716, #55718) says why the feature died.
The sharpest half is the machine seam, which I probed directly. The new share worker’s comment states the design reason plainly: “the V1 GitHub Action fails its run when share creation fails. Accept those requests without storing anything so existing clients keep working.” So POST /api/share answers with { id, secret: "discontinued", url } — the secret field carries the word as its value — and the URL it returns serves the 410 “no longer available” page, while sync and delete return {} forever. A probe with an empty body gets a 500, because the handler slices a sessionID field that isn’t there; the hole doesn’t matter to a real pre-1.19.1 client, which gets the full success shape and a link to print.
The kindness in this design is real, and it points at configs rather than people: keybind names still parse so existing configs don’t error, no client crashes, and CI stays green. But green is the color that hides a removal, and the one place the truth would have enforced itself — the action’s run failing on the error — is exactly the path they stubbed to success. Nobody lied in prose; the release sentence is plain, and the 410 page tells any human who opens it exactly what happened. What’s hollow is the machine signaling around the prose: the patch number, the Bugfixes heading, the missing release notes, the 200 with a URL in it. For a workflow that leans on a harness’s share or export command, the version number and the status code both said fine here, and both meant nothing — the artifact a colleague can actually open is the only row worth counting.