You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(site): full-corpus persona review — fix what real readers would hit
Seven reader-persona passes (first-time developer, schema modeler, logic
author + API integrator, security admin, UI builder + AI admin, plugin
developer, production SRE) read every hand-written page and verified
claims against source before fixing. Highlights:
- hooks: ctx.input is flat (installFlatInput) — the documented
ctx.input.doc pattern never worked; fixed across hooks, events,
error-handling-server, and the plugin tutorial
- plugin tutorial: manifest example was missing required id (threw at
parse) and registered a kernel hook name that never fires — a reader
shipped a silently dead plugin; rewritten against engine.registerHook
- permissions: removed the false implicit manager-visibility claim
(role hierarchy grants nothing by itself); owner-type sharing rules
and group/guest recipients marked declared-but-unenforced; FLS
semantics corrected to default-visible for undeclared fields;
no-sharingModel = no record filter warning added
- data modeling: removed invented cdc/partitioning/recordTypes object
config (schema hard-rejects), phantom field props (pruned 2026-06),
wrong autonumber key; new expand (related records) query section
- api: removed ADR-0019-deleted workflow approve/reject endpoints,
invented webhook rate-limiting; realtime status stated honestly
(in-process pub/sub; WS/SSE transport plugin-provided); error
handling documents the two real wire formats
- protocol: maskingRule/encryptionConfig sections re-scoped to their
real status (System schemas exist; field wiring pruned, channel is
type:'secret' + FLS)
- deployment: env-var table repaired and completed (OS_SECRET_KEY,
cluster vars), stale CLI paths and ten dead links fixed
- onboarding: REST route /api/v1/data/:object, send_email→notify node,
npx os pointers, nine dead ADR links
- runtime-services: binding note — services.* is the contract surface;
open-framework hooks use ctx.api / ctx.getService
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018r9mjpF7jr9BKdzEmUE4uZ
Copy file name to clipboardExpand all lines: content/docs/api/error-catalog.mdx
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@ description: Complete reference for all ObjectStack error codes with causes, fix
5
5
6
6
# Error Code Catalog
7
7
8
-
ObjectStack uses a structured error system with **9 error categories** and **41+ standardized error codes**. Every error includes a machine-readable code, HTTP status mapping, and retry guidance.
8
+
ObjectStack uses a structured error system with **9 error categories** and **51 standardized error codes**. Every error includes a machine-readable code, HTTP status mapping, and retry guidance.
9
9
10
10
<Callouttype="info">
11
11
**Source:**`packages/spec/src/api/errors.zod.ts`
@@ -391,7 +391,7 @@ import type { EnhancedApiError } from '@objectstack/spec/api';
391
391
392
392
asyncfunction handleApiCall() {
393
393
try {
394
-
const result =awaitclient.records.create('task', { title: 'New Task' });
394
+
const result =awaitclient.data.create('task', { title: 'New Task' });
Copy file name to clipboardExpand all lines: content/docs/api/error-handling-client.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ description: Best practices for handling ObjectStack errors in client applicatio
8
8
This guide covers best practices for handling ObjectStack API errors in client applications — from parsing error responses to displaying validation errors in forms and implementing retry strategies.
9
9
10
10
<Callouttype="info">
11
-
**Error Format:**All ObjectStack API errors follow the `ErrorResponseSchema` structure. See [Wire Format](/docs/api/wire-format#7-error-response-format) for the full JSON shape.
11
+
**Error Format:**The patterns in this guide target the spec error envelope (`ErrorResponseSchema`). Note that today's kernel REST data routes emit a flatter `{ error, code }` shape — see the [API Overview](/docs/api#error-handling) for the two wire formats in use and [Wire Format](/docs/api/wire-format#7-error-response-format) for full JSON examples; adapt the parser accordingly.
Copy file name to clipboardExpand all lines: content/docs/api/index.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,7 @@ ObjectStack exposes a fully typed REST API. All endpoints use JSON request/respo
14
14
| Surface | Status in this repo |
15
15
| :--- | :--- |
16
16
|**REST**| ✅ Auto-generated from the protocol (`@objectstack/rest`) — CRUD, query, batch, metadata, packages |
17
-
|**Realtime**|✅ WebSocket subscriptions plus SSE streaming (`@objectstack/service-realtime`)|
17
+
|**Realtime**|⚠️ In-process pub/sub service (`@objectstack/service-realtime`, single-instance); the `/realtime/*` REST routes and WebSocket/SSE transport are plugin-provided — none ships in the open framework|
18
18
|**MCP**| ✅ Objects and opted-in actions exposed as Model Context Protocol tools ([AI module](/docs/ai)) |
19
19
|**GraphQL**| ⚠️ Route is wired but **bring-your-own service**: `/graphql` returns 501 unless an implementation of the `IGraphQLService` contract is registered — none ships in the open framework |
20
20
|**OData**| ⚠️ Vocabulary only: REST list endpoints accept OData-style operators (e.g. `$top`), but there is no standalone OData endpoint |
Copy file name to clipboardExpand all lines: content/docs/api/plugin-endpoints.mdx
+6-4Lines changed: 6 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -33,14 +33,16 @@ The following endpoints become available when the corresponding plugin is instal
33
33
| GET |`/workflow/:object/config`| Get workflow configuration |
34
34
| GET |`/workflow/:object/:recordId/state`| Get record's workflow state |
35
35
| POST |`/workflow/:object/:recordId/transition`| Execute state transition |
36
-
| POST |`/workflow/:object/:recordId/approve`| Approve workflow step |
37
-
| POST |`/workflow/:object/:recordId/reject`| Reject workflow step |
36
+
37
+
Approve/reject are **not** workflow routes (ADR-0019): approval is a flow node, and decisions are recorded on the approvals runtime via `POST /approvals/requests/:id/approve` and `POST /approvals/requests/:id/reject`.
38
38
39
39
### Automation (`/automation`) — Plugin Required
40
40
41
41
| Method | Endpoint | Description |
42
42
|:-------|:---------|:------------|
43
-
| POST |`/automation/trigger/:name`| Trigger an automation flow by name |
43
+
| POST |`/automation/:name/trigger`| Trigger an automation flow by name (legacy alias: `/automation/trigger/:name`) |
44
+
45
+
The automation dispatcher also exposes flow CRUD (`GET`/`POST /automation`, `GET`/`PUT`/`DELETE /automation/:name`) and run observability/resume routes — see [Durable pause & resume](/docs/automation/flows#durable-pause--resume-adr-0019).
44
46
45
47
### Views (`/ui`) — Plugin Required
46
48
@@ -60,7 +62,7 @@ The following endpoints become available when the corresponding plugin is instal
60
62
| POST |`/realtime/disconnect`| Close connection |
61
63
| POST |`/realtime/subscribe`| Subscribe to channel |
62
64
| POST |`/realtime/unsubscribe`| Unsubscribe |
63
-
|POST|`/realtime/presence`| Set presence |
65
+
|PUT|`/realtime/presence/:channel`| Set presence |
64
66
| GET |`/realtime/presence/:channel`| Get channel presence |
- Guide: [Business Logic](/docs/automation/hooks)(Flows, Approval Nodes); [Who can see data / automation / interface](/docs/permissions/access-recipes).
133
+
- Guide: [Hooks](/docs/automation/hooks)and [Flows](/docs/automation/flows); [Who can see data / automation / interface](/docs/permissions/access-recipes).
0 commit comments