From 80e28968ad4dadf5d03fe3c508e6b5b5ac582b33 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 3 Aug 2026 08:26:47 +0000 Subject: [PATCH] =?UTF-8?q?docs(protocol):=20retire=20runtime-capabilities?= =?UTF-8?q?=20page=20=E2=80=94=20it=20taught=20the=20removed=20ObjectStack?= =?UTF-8?q?Capabilities=20schema=20(#4781)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `content/docs/protocol/kernel/runtime-capabilities.mdx` documented `ObjectStackCapabilities` (data/ui/system subsystem descriptors) end to end, including two full `const capabilities: ObjectStackCapabilities = {...}` examples and a `hasCapability()` helper. That schema was removed in #3605: `import type { ObjectStackCapabilities } from '@objectstack/spec'` is TS2305, and none of the tabled keys (`queryDistinct`, `queryHaving`, `queryJoins`, `geoSpatial`, …) exist in any live schema. The page named "AI Agents: Understanding platform constraints for code generation" as an audience, so it was teaching a non-existent capability-negotiation surface to code generators. Delete the page. The live mechanisms are the REST discovery endpoint and the driver-side `DriverCapabilities` (post-#4634). The page's trailing "Discovery Endpoint" section was NOT accurate either and is deliberately not moved verbatim. Checked against the implementation: - `ObjectStackProtocolImplementation.getDiscovery()` (packages/metadata-protocol/src/protocol.ts) returns `{ version, apiName, routes, services, capabilities }` — no `name`, no `environment`, no `locale`. The page showed all three on `GET /api/v1/discovery`; those fields belong to the *dispatcher*-served `/.well-known/objectstack` payload (packages/runtime/src/http-dispatcher.ts `getDiscoveryInfo`), which `content/docs/api/index.mdx` already documents correctly and separately. - The page's sample carried `routes.graphql: "/graphql"`. `ApiRoutesSchema` (packages/spec/src/api/discovery.zod.ts) has no `graphql` key and `serviceToRouteKey` never maps one — flatly wrong. - `version: "1.0.0"` — the REST handler overrides it with `config.api.version` (`v1`). Folded into content/docs/api/index.mdx only the parts that verify: - `GET /api/v1` and `GET /api/v1/discovery` are one handler registered at two paths (`registerDiscoveryEndpoints`, packages/rest/src/rest-server.ts), and the dispatcher cedes `/discovery` to REST when mounted (ADR-0076 D11) — it owns the route only in REST-less compositions. - The `capabilities` map and `transactionalBatch` (#3298 / ADR-0034): true iff `POST {basePath}/batch` is mounted AND the engine can honour a transaction (protocol derives it from `engine.transaction`, rest-server ANDs it with `api.enableBatch`). Also: meta.json nav entry removed; the two inbound links (automation/index.mdx, kernel/index.mdx) repointed; scripts/role-word-baseline.json ratcheted down for the removed file (check-role-word fails on a vanished baselined file). Docs-only, releases nothing — empty changeset. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018iARDqtrhQgz6fVHDeDkbQ --- .../retire-runtime-capabilities-doc-page.md | 4 + content/docs/api/index.mdx | 21 +- content/docs/automation/index.mdx | 2 +- content/docs/kernel/index.mdx | 2 +- content/docs/protocol/kernel/meta.json | 1 - .../protocol/kernel/runtime-capabilities.mdx | 536 ------------------ scripts/role-word-baseline.json | 1 - 7 files changed, 24 insertions(+), 543 deletions(-) create mode 100644 .changeset/retire-runtime-capabilities-doc-page.md delete mode 100644 content/docs/protocol/kernel/runtime-capabilities.mdx diff --git a/.changeset/retire-runtime-capabilities-doc-page.md b/.changeset/retire-runtime-capabilities-doc-page.md new file mode 100644 index 0000000000..56d5fa459b --- /dev/null +++ b/.changeset/retire-runtime-capabilities-doc-page.md @@ -0,0 +1,4 @@ +--- +--- + +docs(protocol): retire `protocol/kernel/runtime-capabilities` — the page taught `ObjectStackCapabilities`, a schema removed in #3605. Docs-only; releases nothing. diff --git a/content/docs/api/index.mdx b/content/docs/api/index.mdx index 91b9e79bdd..13a54b5098 100644 --- a/content/docs/api/index.mdx +++ b/content/docs/api/index.mdx @@ -98,9 +98,14 @@ Schema reference: [API](/docs/references/api) The discovery endpoint is the entry point for all clients. It returns the API version, available routes, service capabilities, and per-service status. -### `GET /api/v1` +### `GET /api/v1` (and `GET /api/v1/discovery`) -Returns the full discovery manifest. +Returns the full discovery manifest. `@objectstack/rest` registers **one handler at both +paths** — the API base path and `/discovery` — so the two are the same document, +not a redirect and not two shapes. In a REST-less composition the runtime dispatcher +registers `/discovery` as the fallback owner instead, and then serves its own +`/.well-known/objectstack` payload there (see below); when `@objectstack/rest` is mounted +the dispatcher cedes the route to it, so a single owner answers it (ADR-0076 D11). **Response**: ```json @@ -125,7 +130,8 @@ Returns the full discovery manifest. "capabilities": { "cron": { "enabled": false }, "automation": { "enabled": false }, - "search": { "enabled": false } + "search": { "enabled": false }, + "transactionalBatch": { "enabled": true, "description": "Atomic cross-object batch endpoint (POST {basePath}/batch)…" } } } ``` @@ -134,6 +140,15 @@ Disabled/uninstalled route keys (e.g. `auth`, `analytics`, `workflow`) are omitt `metadata` is reported from whatever implementation fills its slot, so the sample's `available` is the `MetadataPlugin` case (a persisted `sys_metadata` registry). A stack running the kernel's in-memory fallback instead reports `status: "degraded"` with a `message` naming what is missing and what to install. `handlerReady` is `true` either way: `/api/v1/meta` is served by the protocol, so the route is mounted whichever registry sits behind it. +`capabilities` is a flat map of platform feature flags, one entry per well-known +capability (`comments`, `automation`, `cron`, `search`, `export`, `chunkedUpload`, +`transactionalBatch`), each derived from what is actually registered — never hardcoded. +`transactionalBatch` (#3298, ADR-0034) is the one worth negotiating at connect time: it is +`true` **iff** the atomic cross-object batch route (`POST {basePath}/batch`) is mounted +*and* the runtime engine can honour a transaction, so a client can decide once whether to +send an atomic batch or fall back to client-side sequencing, instead of probing for +`404`/`405`/`501`. See [Data API → batch](/docs/api/data-api). + ### `GET /.well-known/objectstack` Served by the runtime dispatcher (`@objectstack/runtime`), not `@objectstack/rest` — its body is wrapped as `{ "data": { ... } }` and includes fields (`name`, `environment`, `features`, `locale`) that the `@objectstack/rest`-served `/api/v1` response above does not. The client SDK's `connect()` tries `/api/v1/discovery` first and falls back to this endpoint, unwrapping either `body.data` or the bare `body`. diff --git a/content/docs/automation/index.mdx b/content/docs/automation/index.mdx index b67ed9df86..b9a087df20 100644 --- a/content/docs/automation/index.mdx +++ b/content/docs/automation/index.mdx @@ -52,6 +52,6 @@ Rule of thumb: model *state* with workflows, model *steps* with flows, use hooks ## Related -- **Spec:** [State Machine (Lifecycle)](/docs/protocol/objectql/state-machine), [Runtime Capabilities](/docs/protocol/kernel/runtime-capabilities) +- **Spec:** [State Machine (Lifecycle)](/docs/protocol/objectql/state-machine), [HTTP API](/docs/protocol/kernel/http-protocol) - **Schema reference:** [Automation](/docs/references/automation) - **Neighbors:** validation rules that block bad data live in [Data Modeling](/docs/data-modeling/validation); who may trigger an automation is governed by [Permissions & Identity](/docs/permissions); the services hooks call (email, queue, storage…) are documented in [Kernel & Services](/docs/kernel/runtime-services). diff --git a/content/docs/kernel/index.mdx b/content/docs/kernel/index.mdx index e09436934f..c014dba580 100644 --- a/content/docs/kernel/index.mdx +++ b/content/docs/kernel/index.mdx @@ -40,6 +40,6 @@ The kernel is ObjectStack's runtime: it loads your metadata artifact, hosts plug ## Related -- **Spec:** [System Lifecycle](/docs/protocol/kernel/lifecycle), [Runtime Capabilities](/docs/protocol/kernel/runtime-capabilities), [Metadata Service](/docs/protocol/kernel/metadata-service) +- **Spec:** [System Lifecycle](/docs/protocol/kernel/lifecycle), [Metadata Service](/docs/protocol/kernel/metadata-service) - **Schema reference:** [Kernel](/docs/references/kernel), [System](/docs/references/system), [Contracts](/docs/references/contracts) - **Neighbors:** building and packaging plugins is covered in [Plugins & Packages](/docs/plugins); running the kernel in production is covered in [Deployment & Operations](/docs/deployment). diff --git a/content/docs/protocol/kernel/meta.json b/content/docs/protocol/kernel/meta.json index 9a4c36503f..57005a45bf 100644 --- a/content/docs/protocol/kernel/meta.json +++ b/content/docs/protocol/kernel/meta.json @@ -3,7 +3,6 @@ "pages": [ "index", "lifecycle", - "runtime-capabilities", "http-protocol", "realtime-protocol", "error-handling", diff --git a/content/docs/protocol/kernel/runtime-capabilities.mdx b/content/docs/protocol/kernel/runtime-capabilities.mdx deleted file mode 100644 index 5595888e90..0000000000 --- a/content/docs/protocol/kernel/runtime-capabilities.mdx +++ /dev/null @@ -1,536 +0,0 @@ ---- -title: Runtime Capabilities -description: Understanding ObjectStack's subsystem capabilities (ObjectQL, ObjectUI, ObjectStack) ---- - -# Runtime Capabilities - -The **ObjectStack Capabilities Schema** describes what features and functionalities are available in a running ObjectStack instance. This information is critical for: - -- **Frontends**: Knowing which UI components to render -- **AI Agents**: Understanding platform constraints for code generation -- **API Clients**: Discovering available endpoints and features -- **Development Tools**: IDE support and validation - -## Architecture Overview - -ObjectStack capabilities are organized into three subsystems that correspond to the three-layer architecture: - -``` -┌─────────────────────────────────────────────────────────┐ -│ ObjectUI Capabilities (User Interface Layer) │ -│ • View types (List, Form, Kanban, Calendar, Gantt) │ -│ • Dashboards, Reports, Charts │ -│ • Customization (Pages, Themes, Components) │ -│ • Mobile optimization & Accessibility │ -└─────────────────────────────────────────────────────────┘ - ▲ - │ -┌─────────────────────────────────────────────────────────┐ -│ ObjectStack Capabilities (System/Runtime Layer) │ -│ • API protocols (REST, GraphQL, OData) │ -│ • Real-time (WebSockets, SSE, Event Bus) │ -│ • Security (Authentication, RBAC, RLS, FLS) │ -│ • Platform services (Jobs, Audit, Storage, i18n) │ -└─────────────────────────────────────────────────────────┘ - ▲ - │ -┌─────────────────────────────────────────────────────────┐ -│ ObjectQL Capabilities (Data Layer) │ -│ • Query operations (Filters, Joins, Aggregations) │ -│ • Advanced SQL features (Window Functions, Subqueries)│ -│ • Data types (JSON, Arrays, Vectors, Geospatial) │ -│ • Business logic (Workflows, Triggers, Formulas) │ -└─────────────────────────────────────────────────────────┘ -``` - -## Schema Structure - -```typescript -import type { ObjectStackCapabilities } from '@objectstack/spec'; - -const capabilities: ObjectStackCapabilities = { - data: { /* ObjectQL capabilities */ }, - ui: { /* ObjectUI capabilities */ }, - system: { /* ObjectStack capabilities */ }, -}; -``` - ---- - -## ObjectQL Capabilities - -The **Data Layer** capabilities define what query operations, data types, and business logic features are supported. - -### Query Operations - -| Capability | Default | Description | -|-----------|---------|-------------| -| `queryFilters` | `true` | WHERE clause filtering | -| `queryAggregations` | `true` | GROUP BY and aggregation functions (COUNT, SUM, AVG) | -| `querySorting` | `true` | ORDER BY sorting | -| `queryPagination` | `true` | LIMIT/OFFSET pagination | -| `queryWindowFunctions` | `false` | Window functions (ROW_NUMBER, RANK, LAG, LEAD) | -| `querySubqueries` | `false` | Nested SELECT statements | -| `queryDistinct` | `true` | SELECT DISTINCT | -| `queryHaving` | `false` | HAVING clause for aggregations | -| `queryJoins` | `false` | SQL-style joins | - -### Advanced Data Features - -| Capability | Default | Description | -|-----------|---------|-------------| -| `fullTextSearch` | `false` | Full-text search capabilities | -| `vectorSearch` | `false` | Vector embeddings and similarity search (RAG/AI) | -| `geoSpatial` | `false` | Geospatial queries and location fields | - -### Field Type Support - -| Capability | Default | Description | -|-----------|---------|-------------| -| `jsonFields` | `true` | JSON field types | -| `arrayFields` | `false` | Array field types | - -### Data Validation & Logic - -| Capability | Default | Description | -|-----------|---------|-------------| -| `validationRules` | `true` | Validation rule engine | -| `workflows` | `true` | Workflow automation | -| `triggers` | `true` | Database triggers | -| `formulas` | `true` | Formula fields | - -### Transaction & Performance - -| Capability | Default | Description | -|-----------|---------|-------------| -| `transactions` | `true` | Database transaction support | -| `bulkOperations` | `true` | Bulk create/update/delete | -| `transactionalBatch` | — | Surfaced in **discovery** (`client.capabilities.transactionalBatch`, #3298): `true` iff the atomic cross-object batch route (`POST {basePath}/batch`, ADR-0034) is mounted **and** the engine can honour a transaction. Lets clients negotiate `client.data.batchTransaction(...)` at connect time instead of probing `404`/`405`/`501`. | - -### Driver Support - -| Capability | Description | -|-----------|-------------| -| `supportedDrivers` | Array of available database drivers (e.g., `['postgresql', 'mongodb', 'sqlite']`) | - ---- - -## ObjectUI Capabilities - -The **User Interface Layer** capabilities define what UI components and views are available. - -### View Types - -| Capability | Default | Description | -|-----------|---------|-------------| -| `listView` | `true` | List/grid views | -| `formView` | `true` | Form views | -| `kanbanView` | `false` | Kanban board views | -| `calendarView` | `false` | Calendar views | -| `ganttView` | `false` | Gantt chart views | - -### Analytics & Reporting - -| Capability | Default | Description | -|-----------|---------|-------------| -| `dashboards` | `true` | Dashboard creation | -| `reports` | `true` | Report generation | -| `charts` | `true` | Chart widgets | - -### Customization - -| Capability | Default | Description | -|-----------|---------|-------------| -| `customPages` | `true` | Custom page creation | -| `customThemes` | `false` | Custom theme creation | -| `customComponents` | `false` | Custom UI components/widgets | - -### Actions & Interactions - -| Capability | Default | Description | -|-----------|---------|-------------| -| `customActions` | `true` | Custom button actions | -| `screenFlows` | `false` | Interactive screen flows | - -### Responsive & Accessibility - -| Capability | Default | Description | -|-----------|---------|-------------| -| `mobileOptimized` | `false` | Mobile-optimized UI | -| `accessibility` | `false` | WCAG accessibility support | - ---- - -## ObjectStack Capabilities - -The **System Layer** capabilities define runtime, API, security, and platform service features. - -### System Identity - -| Field | Required | Description | -|-------|----------|-------------| -| `version` | ✅ | ObjectStack kernel version (e.g., `"1.0.0"`) | -| `environment` | ✅ | Runtime environment (`development`, `test`, `staging`, `production`) | - -### API Surface - -| Capability | Default | Description | -|-----------|---------|-------------| -| `restApi` | `true` | REST API available | -| `graphqlApi` | `false` | GraphQL API available | -| `odataApi` | `false` | OData API available | - -### Real-time & Events - -| Capability | Default | Description | -|-----------|---------|-------------| -| `websockets` | `false` | WebSocket support | -| `serverSentEvents` | `false` | Server-Sent Events support | -| `eventBus` | `false` | Internal pub/sub event bus | - -### Integration - -| Capability | Default | Description | -|-----------|---------|-------------| -| `webhooks` | `true` | Outbound webhook support | -| `apiContracts` | `false` | API contract definitions | - -### Security & Access Control - -| Capability | Default | Description | -|-----------|---------|-------------| -| `authentication` | `true` | Authentication system | -| `rbac` | `true` | Role-Based Access Control | -| `fieldLevelSecurity` | `false` | Field-level permissions | -| `rowLevelSecurity` | `false` | Row-level security/sharing rules | - -### Multi-tenancy - -| Capability | Default | Description | -|-----------|---------|-------------| -| `multiTenant` | `false` | Multi-tenant architecture support | - -### Platform Services - -| Capability | Default | Description | -|-----------|---------|-------------| -| `backgroundJobs` | `false` | Background job scheduling | -| `auditLogging` | `false` | Audit trail logging | -| `fileStorage` | `true` | File upload and storage | - -### Internationalization - -| Capability | Default | Description | -|-----------|---------|-------------| -| `i18n` | `true` | Internationalization support | - -### Plugin System - -| Capability | Default | Description | -|-----------|---------|-------------| -| `pluginSystem` | `false` | Plugin/extension system | - -### Additional Fields - -| Field | Description | -|-------|-------------| -| `features` | Array of active feature flags | -| `apis` | Array of available API endpoints | -| `systemObjects` | List of globally available system objects (e.g., `['user', 'role', 'permission']`) | -| `limits` | Platform constraints (max objects, API rate limits, file upload size, etc.) | - ---- - -## Usage Examples - -### Example 1: Production Configuration - -```typescript -import type { ObjectStackCapabilities } from '@objectstack/spec'; - -const productionCapabilities: ObjectStackCapabilities = { - data: { - queryFilters: true, - queryAggregations: true, - querySorting: true, - queryPagination: true, - queryWindowFunctions: true, - querySubqueries: true, - queryDistinct: true, - queryHaving: true, - queryJoins: true, - fullTextSearch: true, - vectorSearch: true, - geoSpatial: true, - jsonFields: true, - arrayFields: true, - validationRules: true, - workflows: true, - triggers: true, - formulas: true, - transactions: true, - bulkOperations: true, - supportedDrivers: ['postgresql', 'mongodb', 'mysql'], - }, - ui: { - listView: true, - formView: true, - kanbanView: true, - calendarView: true, - ganttView: true, - dashboards: true, - reports: true, - charts: true, - customPages: true, - customThemes: true, - customComponents: true, - customActions: true, - screenFlows: true, - mobileOptimized: true, - accessibility: true, - }, - system: { - version: '1.0.0', - environment: 'production', - restApi: true, - graphqlApi: true, - odataApi: true, - websockets: true, - serverSentEvents: true, - eventBus: true, - webhooks: true, - apiContracts: true, - authentication: true, - rbac: true, - fieldLevelSecurity: true, - rowLevelSecurity: true, - multiTenant: true, - backgroundJobs: true, - auditLogging: true, - fileStorage: true, - i18n: true, - pluginSystem: true, - systemObjects: ['user', 'role', 'permission', 'object', 'field'], - limits: { - maxObjects: 1000, - maxFieldsPerObject: 500, - maxRecordsPerQuery: 10000, - apiRateLimit: 1000, - fileUploadSizeLimit: 10485760, // 10 MB - }, - }, -}; -``` - -### Example 2: Development Configuration - -```typescript -const developmentCapabilities: ObjectStackCapabilities = { - data: { - // Basic query operations - queryFilters: true, - queryAggregations: true, - querySorting: true, - queryPagination: true, - queryWindowFunctions: false, - querySubqueries: false, - queryDistinct: true, - queryHaving: false, - queryJoins: false, - fullTextSearch: false, - vectorSearch: false, - geoSpatial: false, - jsonFields: true, - arrayFields: false, - validationRules: true, - workflows: false, - triggers: false, - formulas: true, - transactions: true, - bulkOperations: true, - supportedDrivers: ['memory', 'sqlite'], - }, - ui: { - listView: true, - formView: true, - kanbanView: false, - calendarView: false, - ganttView: false, - dashboards: true, - reports: true, - charts: true, - customPages: true, - customThemes: false, - customComponents: false, - customActions: true, - screenFlows: false, - mobileOptimized: false, - accessibility: false, - }, - system: { - version: '0.1.0', - environment: 'development', - restApi: true, - graphqlApi: false, - odataApi: false, - websockets: false, - serverSentEvents: false, - eventBus: false, - webhooks: true, - apiContracts: false, - authentication: true, - rbac: true, - fieldLevelSecurity: false, - rowLevelSecurity: false, - multiTenant: false, - backgroundJobs: false, - auditLogging: false, - fileStorage: true, - i18n: true, - pluginSystem: false, - systemObjects: ['user', 'role', 'object'], - limits: { - maxObjects: 100, - maxFieldsPerObject: 200, - maxRecordsPerQuery: 1000, - apiRateLimit: 100, - fileUploadSizeLimit: 5242880, // 5 MB - }, - }, -}; -``` - -### Example 3: Capability Checking - -```typescript -// Helper: Check if a capability is enabled -function hasCapability( - capabilities: ObjectStackCapabilities, - subsystem: 'data' | 'ui' | 'system', - capability: string -): boolean { - const subsystemCaps = capabilities[subsystem] as any; - return subsystemCaps?.[capability] === true; -} - -// Check if vector search is available -if (hasCapability(capabilities, 'data', 'vectorSearch')) { - console.log('✅ Vector search is available for RAG workflows'); -} - -// Check if GraphQL API is enabled -if (hasCapability(capabilities, 'system', 'graphqlApi')) { - console.log('✅ GraphQL endpoint is available'); -} - -// Check if Kanban view is supported -if (hasCapability(capabilities, 'ui', 'kanbanView')) { - console.log('✅ Kanban boards are available'); -} -``` - ---- - -## Discovery Endpoint - -The REST server exposes a discovery document at the API base path (`/api/v1`) and -at `/api/v1/discovery`. The response follows the `DiscoverySchema` -(`@objectstack/spec`), where `routes` is a flat map of service-name → route-path and -`services` is the single source of truth for per-service availability: - -```typescript -// GET /api/v1/discovery -{ - "name": "ObjectStack Instance", - "version": "1.0.0", - "environment": "production", - "routes": { - "data": "/api/v1/data", - "metadata": "/api/v1/meta", - "ui": "/api/v1/ui", - "auth": "/api/v1/auth", - "graphql": "/graphql" - }, - "locale": { - "default": "en", - "supported": ["en", "zh-CN"], - "timezone": "UTC" - }, - "services": { - /* per-service { enabled, status, route, provider } entries */ - } -} -``` - -This allows clients to: -1. Discover which services are available (via `services`) -2. Resolve endpoint paths without hardcoding URLs (via `routes`) -3. Adapt UI based on availability -4. Validate API requests - ---- - -## Best Practices - -### 1. Progressive Enhancement - -Design your application to gracefully handle missing capabilities: - -```typescript -// Good: Check before using advanced features -if (capabilities.data.vectorSearch) { - await performSemanticSearch(query); -} else { - await performTextSearch(query); // Fallback -} -``` - -### 2. AI Agent Guidance - -When generating code, AI agents should respect capability constraints: - -```typescript -// AI Agent checks capabilities before generating code -if (!capabilities.data.queryWindowFunctions) { - // Don't generate ROW_NUMBER queries - // Use alternative implementation -} -``` - -### 3. Environment-Specific Configuration - -Use different capability sets for different environments: - -```typescript -const capabilities = - process.env.NODE_ENV === 'production' - ? productionCapabilities - : developmentCapabilities; -``` - -### 4. Documentation - -Always document which capabilities your feature requires: - -{/* os:check */} -```typescript -/** - * Semantic Search Component - * - * **Required Capabilities:** - * - objectql.vectorSearch: true - * - objectql.fullTextSearch: true - */ -export function SemanticSearch() { /* ... */ } -``` - ---- - -## See Also - -- [ObjectQL Reference](/docs/protocol/objectql) -- [ObjectUI Reference](/docs/protocol/objectui) -- [ObjectStack Reference](/docs/protocol/kernel) -- [API Discovery](/docs/references/api/discovery) -- [Driver Capabilities](/docs/references/data/driver) diff --git a/scripts/role-word-baseline.json b/scripts/role-word-baseline.json index d507524505..d440d015d5 100644 --- a/scripts/role-word-baseline.json +++ b/scripts/role-word-baseline.json @@ -25,7 +25,6 @@ "content/docs/protocol/diagram.mdx": 4, "content/docs/protocol/kernel/error-handling.mdx": 1, "content/docs/protocol/kernel/index.mdx": 1, - "content/docs/protocol/kernel/runtime-capabilities.mdx": 4, "content/docs/protocol/objectql/security.mdx": 1, "content/docs/protocol/objectui/record-alert.mdx": 1, "content/docs/protocol/objectui/widget-contract.mdx": 3,