Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 21 additions & 19 deletions docs/plugins/compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,25 +88,27 @@ October 1 annotation families are `removal-pending`, with their original dates
and removal conditions preserved in the review queue. This does not claim
completed migration of published readers.

| Compatibility code | Removal condition | `removeAfter` |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------- |
| `plugin-sdk-channel-setup-input-fields` | Repeat the published-plugin artifact sweep and remove only fields with no reader. | 2026-10-01 |
| `plugin-sdk-broad-runtime-barrels` | Move bundled and indexed external consumers to focused SDK subpaths. | 2026-10-01 |
| `plugin-sdk-provider-owned-helper-shims` | Move each deprecated provider helper to its provider-local API and prove no published reader remains. | 2026-10-01 |
| `message-presentation-legacy-bridges` | Move reply producers and official channel packages to `MessagePresentation`. | 2026-10-01 |
| `plugin-sdk-focused-compat-aliases` | Prove every enumerated alias has no bundled or published reader. | 2026-10-01 |
| `agent-harness-terminal-result-aliases` | Move harnesses to `terminal` and `visibleReplies`, then prove the legacy result fields are unread. | 2026-10-01 |
| `official-plugin-export-aliases` | Move users of Google Meet testing, channel presentation, and Discord timeout exports to canonical APIs. | 2026-10-01 |
| `memory-host-compatibility-aliases` | Use canonical memory tables while preserving existing custom-table data during migration. | 2026-10-01 |
| `plugin-runtime-api-compat-aliases` | Move flat plugin registration/runtime calls to their namespaced or focused replacements. | 2026-10-01 |
| `plugin-provider-manifest-compat-aliases` | Move kind/setup/catalog ownership to manifests and model-catalog registration. | 2026-10-01 |
| `deprecated-session-store-beta5-api` | End the v2026.7.x whole-store upgrade window, including package-root aliases. | 2026-10-12 |

The beta.5 session-store record is `removal-pending` with its original October 12
review date. Removal still requires verified published-reader migration, a minimum
supported plugin version that excludes beta.5, closure of the legacy doctor upgrade
window, and explicit breaking-release approval. The elapsed date does not establish
that these conditions are satisfied.
| Compatibility code | Removal condition | `removeAfter` |
| ------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------- |
| `plugin-sdk-channel-setup-input-fields` | Repeat the published-plugin artifact sweep and remove only fields with no reader. | 2026-10-01 |
| `plugin-sdk-broad-runtime-barrels` | Move bundled and indexed external consumers to focused SDK subpaths. | 2026-10-01 |
| `plugin-sdk-provider-owned-helper-shims` | Move each deprecated provider helper to its provider-local API and prove no published reader remains. | 2026-10-01 |
| `message-presentation-legacy-bridges` | Move reply producers and official channel packages to `MessagePresentation`. | 2026-10-01 |
| `plugin-sdk-focused-compat-aliases` | Prove every enumerated alias has no bundled or published reader. | 2026-10-01 |
| `agent-harness-terminal-result-aliases` | Move harnesses to `terminal` and `visibleReplies`, then prove the legacy result fields are unread. | 2026-10-01 |
| `official-plugin-export-aliases` | Move users of Google Meet testing, channel presentation, and Discord timeout exports to canonical APIs. | 2026-10-01 |
| `memory-host-compatibility-aliases` | Use canonical memory tables while preserving existing custom-table data during migration. | 2026-10-01 |
| `plugin-runtime-api-compat-aliases` | Move flat plugin registration/runtime calls to their namespaced or focused replacements. | 2026-10-01 |
| `plugin-provider-manifest-compat-aliases` | Move kind/setup/catalog ownership to manifests and model-catalog registration. | 2026-10-01 |
| `deprecated-session-store-beta5-api` | Exclude v2026.7.1-beta.5 from the minimum supported plugin version before removing its four SDK helpers. | 2026-10-12 |
| `deprecated-package-root-session-store-api` | End the v2026.7.x upgrade window that requires the legacy doctor importer before removing package-root aliases. | 2026-10-12 |

The two session-store records are `removal-pending`, with the original review
date preserved. Both require verified published-reader migration and explicit
breaking-release approval. The SDK bridge additionally requires a minimum
supported plugin version that excludes beta.5; package-root aliases require
closure of the v2026.7.x legacy doctor upgrade window. The elapsed date does not
establish that these conditions are satisfied.

Discord and Slack retain their published legacy renderer exports as conversion
adapters to the canonical presentation renderers. Bundled channel callers use
Expand Down
13 changes: 9 additions & 4 deletions docs/plugins/sdk-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -863,10 +863,15 @@ timeline for current status.

Official plugins released with `v2026.7.1-beta.5` imported the four
deprecated helpers above. `openclaw/plugin-sdk/session-store-runtime` keeps
that exact bridge pending its existing published-reader and legacy doctor
upgrade conditions, with 2026-10-12 preserved as the review date. Removal
requires verified exclusion of beta.5 from supported plugins and explicit
breaking-release approval; new plugins must use the replacements.
that exact bridge pending verified published-reader migration and exclusion
of that release from the minimum supported plugin version, with 2026-10-12
preserved as the review date. Removal also requires explicit breaking-release
approval; new plugins must use the replacements.
Package-root `loadSessionStore(...)` and `saveSessionStore(...)`
retain their separate condition: the v2026.7.x upgrade window must no longer
require the legacy doctor importer before those aliases are removed.
Published-reader migration must also be verified and explicit breaking-release
approval granted for those aliases.
`resolveStorePath(...)` remains a supported SDK helper and is not part of
this deprecation.

Expand Down
32 changes: 24 additions & 8 deletions src/plugins/compat/registry-records.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,31 +91,47 @@ export const PLUGIN_COMPAT_RECORDS = [
},
{
code: "deprecated-session-store-beta5-api",
// The SDK bridge has a published-reader gate; the package-root aliases below
// have a separate doctor upgrade gate. Elapsed dates alone retire neither.
status: "removal-pending",
owner: "sdk",
introduced: "2026-05-21",
deprecated: "2026-07-12",
warningStarts: "2026-07-12",
removeAfter: "2026-10-12",
replacement:
"`getSessionEntry(...)`, `listSessionEntries(...)`, and row-level session mutations; retain the beta.5 bridge and package-root aliases until published-reader migration and minimum supported plugin exclusion are verified, the v2026.7.x legacy doctor upgrade window closes, and explicit breaking-release approval is granted",
"`getSessionEntry(...)`, `listSessionEntries(...)`, and row-level session mutations; retain the four SDK helpers until published-reader migration and minimum supported plugin exclusion of v2026.7.1-beta.5 are verified and explicit breaking-release approval is granted",
docsPath: "/plugins/sdk-migration#removed-session-and-transcript-file-apis",
surfaces: [
"openclaw/plugin-sdk/session-store-runtime loadSessionStore",
"openclaw/plugin-sdk/session-store-runtime updateSessionStore",
"openclaw/plugin-sdk/session-store-runtime resolveSessionFilePath",
"openclaw/plugin-sdk/session-store-runtime resolveSessionStoreEntry",
"openclaw package root loadSessionStore",
"openclaw package root saveSessionStore",
],
diagnostics: ["plugin SDK deprecation"],
tests: [
"src/plugin-sdk/session-store-runtime.test.ts",
"src/index.test.ts",
"src/plugins/compat/registry.test.ts",
tests: ["src/plugin-sdk/session-store-runtime.test.ts", "src/plugins/compat/registry.test.ts"],
releaseNote:
"The beta.5 session-store import set remains available until the supported plugin floor excludes that release; the original review date is unchanged.",
},
{
code: "deprecated-package-root-session-store-api",
status: "removal-pending",
owner: "core",
introduced: "2026-05-21",
deprecated: "2026-07-12",
warningStarts: "2026-07-12",
removeAfter: "2026-10-12",
replacement:
"SQLite-backed session APIs; retain the package-root aliases until published-reader migration is verified, the v2026.7.x upgrade window no longer requires the legacy doctor importer, and explicit breaking-release approval is granted",
docsPath: "/plugins/sdk-migration#removed-session-and-transcript-file-apis",
surfaces: [
"openclaw package root `loadSessionStore`",
"openclaw package root `saveSessionStore`",
],
diagnostics: ["package-root session-store deprecation"],
tests: ["src/index.test.ts", "src/plugins/compat/registry.test.ts"],
releaseNote:
"The beta.5 session-store import set and package-root whole-store aliases remain available while official plugins and package consumers migrate to row-level session access.",
"Package-root whole-store aliases retain their separate doctor upgrade condition and original review date.",
},
{
code: "removed-session-transcript-file-api",
Expand Down
47 changes: 34 additions & 13 deletions src/plugins/compat/registry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,20 +183,41 @@ describe("plugin compatibility registry", () => {
"openclaw/plugin-sdk/security-runtime",
]),
);
expect(records.get("deprecated-session-store-beta5-api")?.surfaces).toEqual(
expect.arrayContaining([
"openclaw package root loadSessionStore",
"openclaw package root saveSessionStore",
]),
);
expect(records.get("deprecated-session-store-beta5-api")).toMatchObject({
status: "removal-pending",
removeAfter: "2026-10-12",
replacement: expect.stringContaining("minimum supported plugin exclusion"),
});
expect(records.get("deprecated-session-store-beta5-api")?.replacement).toContain(
"legacy doctor upgrade window",
});

it("keeps session-store removals pending their distinct support conditions", () => {
const records = new Map(listPluginCompatRecords().map((record) => [record.code, record]));
const sdk = records.get("deprecated-session-store-beta5-api");
const packageRoot = records.get("deprecated-package-root-session-store-api");

for (const record of [sdk, packageRoot]) {
expect(record).toMatchObject({
status: "removal-pending",
deprecated: "2026-07-12",
warningStarts: "2026-07-12",
removeAfter: "2026-10-12",
});
}
for (const record of [sdk, packageRoot]) {
expect(record?.replacement).toContain("published-reader migration");
expect(record?.replacement).toContain("explicit breaking-release approval");
}
expect(sdk?.owner).toBe("sdk");
expect(sdk?.replacement).toContain("minimum supported plugin exclusion of v2026.7.1-beta.5");
expect(sdk?.surfaces).toEqual([
"openclaw/plugin-sdk/session-store-runtime loadSessionStore",
"openclaw/plugin-sdk/session-store-runtime updateSessionStore",
"openclaw/plugin-sdk/session-store-runtime resolveSessionFilePath",
"openclaw/plugin-sdk/session-store-runtime resolveSessionStoreEntry",
]);
expect(packageRoot?.owner).toBe("core");
expect(packageRoot?.replacement).toContain(
"the v2026.7.x upgrade window no longer requires the legacy doctor importer",
);
expect(packageRoot?.surfaces).toEqual([
"openclaw package root `loadSessionStore`",
"openclaw package root `saveSessionStore`",
]);
});

it("keeps the removed embedded Pi aliases as a migration tombstone", () => {
Expand Down
Loading