Skip to content

Commit 1773c29

Browse files
committed
docs(references): regenerate five pages on the merged tree
The merge of origin/main deferred automation/schemaless-node-config, data/analytics, index, integration/connector and system/auth-config. Regenerated with gen:schema + gen:docs on the merged sources: main's body changes plus this branch's unchanged title/navTitle lines. Claude-Session: https://claude.ai/code/session_01ARcDurZ5j34RdqsGgc4jgH Co-authored-by: Claude <noreply@anthropic.com>
1 parent a0e8590 commit 1773c29

5 files changed

Lines changed: 52 additions & 265 deletions

File tree

‎content/docs/references/automation/schemaless-node-config.mdx‎

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,18 @@ The two halves reach different audiences, which is why they shipped together:
6767
nothing read — and then refuses, naming the `function` it does not have,
6868
instead of logging a line and reporting success as it used to.
6969

70-
`decision` stays export-only: nothing parses it at run time. It may carry no
71-
`conditions` at all when it branches purely on edge predicates, its executor
72-
reads `conditions` and nothing else, and its one other key — `mode` — is
73-
declared AHEAD of the engine change that reads it (#15429; see
74-
`DecisionConfigSchema`). Its enforcement remains the objectui
75-
reconciliation test, which is what #4278 was actually about (a form
76-
authoring keys nothing reads).
70+
`decision` is parsed at **registration**, for one key (#15429): the
71+
automation engine's `registerFlow` runs every decision node's config through
72+
`DecisionConfigSchema` and refuses the flow on any issue rooted at
73+
`mode` — a value outside the closed pair, or a `mode` beside a non-empty
74+
`conditions` list — with this schema's own sentence, and `os validate`
75+
reports the same issues as `flow-decision-mode-invalid`, so the two doors
76+
cannot disagree. A decision may carry no `conditions` at all when it
77+
branches purely on edge predicates; its executor reads `conditions` and
78+
nothing else, and the engine's traversal reads `mode`. Its strictness
79+
(unknown keys) still binds at authoring, in the published JSON Schema and in
80+
the objectui reconciliation test, which is what #4278 was actually about (a
81+
form authoring keys nothing reads).
7782

7883
Undeclared aliases are NOT part of these contracts: `subflow`'s historical
7984
`flow` spelling graduated into the ADR-0087 D2 conversion
@@ -97,9 +102,10 @@ door in front of its author, and the class it structurally could not cover is
97102
precisely the class with no second door. Closing these shapes is therefore
98103
not a duplicate check for `script` and `subflow`; it is their first one.
99104

100-
`decision` is still export-only, so its strictness binds at authoring
101-
(`tsc`), in the published JSON Schema, and in objectui's reconciliation —
102-
not at run time. It is closed anyway, because the campaign's whole finding
105+
`decision`'s strictness binds at authoring (`tsc`), in the published JSON
106+
Schema, and in objectui's reconciliation — not at run time, where the
107+
registration reader judges `mode` alone (#15429). It is closed anyway,
108+
because the campaign's whole finding
103109
is that a shape left open accretes a test, a form and a fixture that assert
104110
the openness, and then closing it is a migration instead of an edit.
105111

@@ -138,7 +144,7 @@ const result = DecisionConditionSchema.parse(data);
138144
| Property | Type | Required | Description |
139145
| :--- | :--- | :--- | :--- |
140146
| **conditions** | `{ label: string; expression: string }[]` | optional | Ordered decision branches (first true expression wins; omit to branch purely on edge conditions) |
141-
| **mode** | `Enum<'exclusive' \| 'inclusive'>` | optional | Declares how many out-edges an edge-branched decision takes when more than one out-edge condition holds: 'exclusive' = only the first, in the order the edges are declared (what an omitted mode means); 'inclusive' = every one that holds. Declared ahead of the engine change that reads it: until that lands, an edge-branched decision takes every out-edge whose condition holds, whatever this says. Refused beside a non-empty conditions list, which is first-match on its own: delete mode there, or move the branches onto the out-edges, delete conditions, and keep mode. |
147+
| **mode** | `Enum<'exclusive' \| 'inclusive'>` | optional | Declares how many out-edges an edge-branched decision takes when more than one out-edge condition holds: 'exclusive' = only the first, in the order the edges are declared (what an omitted mode means; the siblings after it are not evaluated and record a skipped step); 'inclusive' = every one that holds, one after another. When none holds the isDefault edge runs either way. Refused beside a non-empty conditions list, which is first-match on its own: delete mode there, or move the branches onto the out-edges, delete conditions, and keep mode. Authored sources written while every true branch ran keep that behaviour through the os migrate meta --from 17 conversion, which writes mode: inclusive onto every edge-branched decision with two or more conditioned out-edges; a flow stored in sys_metadata is not rewritten and takes the first-match reading on upgrade (os migrate meta --stored lists those decisions). |
142148

143149
### Nested Shape: `DecisionConfig.conditions[number]`
144150

‎content/docs/references/data/analytics.mdx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ Type: `[string, string]`
130130
| **dimensions** | `Record<string, { name: string; label: string; description?: string; type: Enum<'string' \| 'number' \| 'boolean' \| 'time' \| 'geo'>; … }>` | ✅ | Qualitative attributes |
131131
| **joins** | `Record<string, { name: string }>` | optional | |
132132
| **refreshKey** | `{ every?: string; sql?: string }` | optional | |
133-
| **public** | `boolean` | optional (default: `false`) | |
133+
| **public** | `boolean` | optional (default: `true`) | Whether the analytics API exposes this cube. Default true (visible). false hides it from GET /analytics/meta and refuses POST /analytics/query and /analytics/sql for it (CUBE_NOT_FOUND). Visibility only: the underlying object's permissions and row-level security still govern its records on every door. |
134134
| **_lock** | `Enum<'none' \| 'no-overlay' \| 'no-delete' \| 'full'>` | optional | Item-level lock — controls overlay & delete (ADR-0010). |
135135
| **_lockReason** | `string` | optional | Human-readable reason shown when a write is refused by _lock. |
136136
| **_lockSource** | `Enum<'artifact' \| 'package' \| 'env-forced'>` | optional | Layer that set _lock (artifact \| package \| env-forced). |

‎content/docs/references/index.mdx‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Protocol reference — every schema by module
33
navTitle: Protocol Reference
4-
description: Every schema published by @objectstack/spec — 1523 schemas across 14 protocol modules
4+
description: Every schema published by @objectstack/spec — 1516 schemas across 14 protocol modules
55
---
66

77
{/* ⚠️ AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs live in the module folders under content/docs/. */}
@@ -25,7 +25,7 @@ counts are sums of the rows they head. Regenerate with
2525
| [Automation Protocol](/docs/references/automation) | 14 | 75 | Flows and their nodes, approvals, ETL pipelines, webhooks, state machines, execution records. |
2626
| [Data Protocol](/docs/references/data) | 29 | 175 | Objects, fields, queries, filters, datasources and drivers — the ObjectQL layer. |
2727
| [Identity Protocol](/docs/references/identity) | 5 | 27 | Users and accounts, organizations, positions, SCIM provisioning. |
28-
| [Integration Protocol](/docs/references/integration) | 1 | 24 | The single connector protocol (ADR-0097) — catalog descriptors and provider-bound instances. |
28+
| [Integration Protocol](/docs/references/integration) | 1 | 17 | The single connector protocol (ADR-0097) — catalog descriptors and provider-bound instances. |
2929
| [Kernel Protocol](/docs/references/kernel) | 30 | 157 | Plugin lifecycle and manifests, capabilities and security, metadata loading, service registry. |
3030
| [Marketplace Protocol](/docs/references/marketplace) | 4 | 30 | The package & marketplace format — package identity and versions, listing, publish, review, search, install, template manifests. |
3131
| [QA Protocol](/docs/references/qa) | 1 | 8 | Declarative test suites — scenarios, steps, actions and assertions. |
@@ -34,7 +34,7 @@ counts are sums of the rows they head. Regenerate with
3434
| [Studio Protocol](/docs/references/studio) | 3 | 35 | Studio designer metadata — the authoring surfaces for the protocols above. |
3535
| [System Protocol](/docs/references/system) | 34 | 275 | The runtime environment — logging, jobs, cache, metrics, notifications, i18n and compliance. |
3636
| [UI Protocol](/docs/references/ui) | 16 | 159 | Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer. |
37-
| **Total** | **196** | **1523** | 14 protocol modules |
37+
| **Total** | **196** | **1516** | 14 protocol modules |
3838

3939
---
4040

@@ -187,13 +187,13 @@ Users and accounts, organizations, positions, SCIM provisioning.
187187

188188
## Integration Protocol
189189

190-
**Source:** `packages/spec/src/integration/` · **Import:** `@objectstack/spec/integration` · **1 page, 24 schemas**
190+
**Source:** `packages/spec/src/integration/` · **Import:** `@objectstack/spec/integration` · **1 page, 17 schemas**
191191

192192
The single connector protocol (ADR-0097) — catalog descriptors and provider-bound instances.
193193

194194
| File | Schemas |
195195
| :--- | :--- |
196-
| [`connector.zod.ts`](/docs/references/integration/connector) | `CircuitBreakerConfig`, `Connector`, `ConnectorAction`, `ConnectorActionEffect`, `ConnectorConflictResolution`, `ConnectorFieldMapping`, `ConnectorHealth`, `ConnectorInstanceAPIKeyAuth`, `ConnectorInstanceAuth`, `ConnectorInstanceBasicAuth`, `ConnectorInstanceBearerAuth`, `ConnectorInstanceNoAuth`, `ConnectorRetryStrategy`, `ConnectorStatus`, `ConnectorTrigger`, `ConnectorType`, `DataSyncConfig`, `DeclarativeConnectorEntry`, `HealthCheckConfig`, `RetryConfig`, `SyncStrategy`, `WebhookConfig`, `WebhookEvent`, `WebhookSignatureAlgorithm` |
196+
| [`connector.zod.ts`](/docs/references/integration/connector) | `Connector`, `ConnectorAction`, `ConnectorActionEffect`, `ConnectorConflictResolution`, `ConnectorFieldMapping`, `ConnectorInstanceAPIKeyAuth`, `ConnectorInstanceAuth`, `ConnectorInstanceBasicAuth`, `ConnectorInstanceBearerAuth`, `ConnectorInstanceNoAuth`, `ConnectorRetryStrategy`, `ConnectorTrigger`, `ConnectorType`, `DataSyncConfig`, `DeclarativeConnectorEntry`, `RetryConfig`, `SyncStrategy` |
197197

198198
---
199199

0 commit comments

Comments
 (0)