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
5 changes: 5 additions & 0 deletions .changeset/docs-v17-plugin-retirement-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
---

docs-only: record the #4212-family plugin-API retirements (#4241/#4242) in the
v17 release notes and the implementation-status matrix. Releases nothing.
6 changes: 3 additions & 3 deletions content/docs/releases/implementation-status.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ description: Detailed status of protocol implementations across ObjectStack pack
This document provides a comprehensive overview of which protocols from `@objectstack/spec` have been implemented in the ObjectStack packages.

<Callout type="info">
**Last Updated**: June 2026
**Last Updated**: July 2026

This matrix is generated from actual codebase analysis and represents the current implementation status.
</Callout>
Expand Down Expand Up @@ -42,8 +42,8 @@ This matrix is generated from actual codebase analysis and represents the curren

**Notes:**
- Core package provides complete microkernel implementation
- Plugin system supports lifecycle hooks, dependency resolution, and service injection
- Event bus enables inter-plugin communication
- Plugin system supports the `init`/`start`/`destroy` lifecycle, dependency resolution, and service injection — the `onInstall`/`onEnable`-style hook family was retired in v17 as never-implemented (#4212)
- Event bus enables inter-plugin communication; `IPluginLifecycleEvents` registers the 14 lifecycle events that actually fire, and `LifecycleEventName` soft-types `hook`/`trigger` (#4241)
- ObjectQL serves as the **example kernel** — a reference implementation that will be modularized into plugins

### Data Infrastructure
Expand Down
13 changes: 13 additions & 0 deletions content/docs/releases/v17.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -904,6 +904,7 @@ import or the authored key.
| `dashboard.aria` / `.performance` / widget `performance` (+ `PerformanceConfigSchema`) | no renderer applied them; virtual scrolling is the live top-level `virtualScroll` (#3896 close-out) |
| `agent.knowledge` (+ `AIKnowledgeSchema`) | declaring sources/indexes never scoped retrieval — `search_knowledge` takes `sourceIds` from the LLM's tool-call arguments (#3896 close-out) |
| `PluginLifecycleSchema` (`onInstall`/`onEnable`/`onDisable`/`onUninstall`/`onUpgrade`) + `UpgradeContextSchema` + the `ObjectStackPlugin` interface family (`@objectstack/spec/system`) | a plugin lifecycle the kernel never implemented — the real contract is `init`/`start`/`destroy`; code written against the hooks silently never ran (#4212) |
| The typed-event cluster (`kernel` plugin-lifecycle-events.zod — ten payload schemas (`PluginRegisteredEvent`, `HookTriggeredEvent`, `KernelReadyEvent`, …), the 21-name `PluginLifecycleEventType` enum, `ITypedEventEmitter`) | a typed-event system that was never built: zero consumers, and the enum was wrong in both directions — 17 names nothing fires, 10 real events missing. `IPluginLifecycleEvents` is now the registry of the 14 events with a real emitter, and the new `LifecycleEventName` union soft-types `PluginContext.hook`/`trigger` (#4212 follow-up, #4241) |
| `skill.triggerPhrases` | phrases were never matched; activation is `triggerConditions` + the agent's `skills[]` allowlist (#3896 close-out) |
| `DEFAULT_DISPATCHER_ROUTES` | dead route table |
| Aspirational config on Theme / Translation / Webhook | still-dead after #3494 |
Expand Down Expand Up @@ -941,6 +942,18 @@ from `@objectstack/spec` directly.
Fix: write `{ strategy: 'retry', maxRetries: 3 }`, or `strategy: 'fail'` if no
retry was intended. `maxRetries: 0` stays legal under `'fail'` / `'continue'`,
which never read it.
- **`ObjectQLEngine.use()` and `ObjectQLHostContext` are removed** (#4212
follow-up, #4242). The engine's own plugin loader — register a manifest
part, then dispatch the runtime part's `onEnable` over an
`ObjectQLHostContext` — had zero callers repo-wide, and its `onEnable` was
the engine-level twin of the #4212 disease: a lifecycle entry point that
reads as a contract and never runs. Fix: `engine.use(manifest)` →
`engine.registerApp(manifest)`; `engine.use(_, { onEnable })` → a kernel
plugin (`kernel.use({ name, init(ctx) { … } })`, engine via
`ctx.getService('objectql')`, drivers via `engine.registerDriver()`).
`new ObjectQL({ logger })` and `ObjectQLPlugin`'s `hostContext` option keep
working, and the *app-bundle* `onEnable` module export (dispatched by
AppPlugin at boot) is a different, real contract — unchanged.

## New capabilities in 17.0.0

Expand Down
Loading