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
fix(spec): regenerate drifted reference docs and gate them in CI (#3134)
content/docs/references/** is generated from packages/spec and committed, but no CI
job ever regenerated and diffed it, so the public reference docs drifted silently
while main stayed green. #3076 added RowCrudActionOverride to the spec and the docs
never learned the type existed.
Regenerate: 7 files, every change traced to a spec change that shipped without
re-running the generator — RowCrudActionOverride and ServiceSelfInfo missing outright,
dashboard filterBindings/name missing, readonly (#2948/#3003) and allowTransfer (#3004)
stale, and connector ADR-0096 → ADR-0097 (both ADRs exist and are distinct, so the
published docs were pointing readers at the wrong one). Verified deterministic: two
consecutive runs produce byte-identical output.
Gate: build-docs.ts --check, following the sibling convention. Every write goes through
emit() and every wiped folder through manageDir(), so check and write run identical
generation logic and differ only in the final disposition — it cannot pass on output a
real run would not produce. Verified output-identical to the previous generator across
all 258 files, and proven to fail on stale content, a missing page, a stale leftover
page, and a vacuous no-schema run. Not `git diff --exit-code`: that misses untracked
files.
Placement: lint.yml's "TypeScript Type Check" — no paths filter and a required status
check, so the gate can neither go dormant nor be merged past. ci.yml's "Build Docs" is
gated on a `docs` filter excluding packages/spec/**, so it skips exactly the spec-only
PRs that cause this drift.
Also un-dormants the sibling gates: check:spec-changes / check:upgrade-guide read the
ADR-0087 registries but ran under a filter listing only skills/**, and that filter
watched content/docs/guides/skills.mdx, a path #2584 moved. Job renamed
check-skill-docs → check-generated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@@ -132,6 +132,19 @@ const result = ApiRoutes.parse(data);
132
132
|**rateLimit**|`Object`| optional | Rate limit and quota info for this service |
133
133
134
134
135
+
---
136
+
137
+
## ServiceSelfInfo
138
+
139
+
### Properties
140
+
141
+
| Property | Type | Required | Description |
142
+
| :--- | :--- | :--- | :--- |
143
+
|**status**|`Enum<'stub' \| 'degraded'>`| ✅ | stub = placeholder or dev fake (do not use for real work); degraded = functional fallback with reduced capability |
144
+
|**handlerReady**|`boolean`| optional | Whether the HTTP handler genuinely serves requests. Defaults: false for stub, true for degraded. |
145
+
|**message**|`string`| optional | Human-readable explanation, e.g. what to install for the full implementation |
Copy file name to clipboardExpand all lines: content/docs/references/data/field.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
@@ -150,7 +150,7 @@ const result = Address.parse(data);
150
150
|**conditionalRequired**|`string \| Object`| optional | Predicate (CEL) — field is required when TRUE. Alias of `requiredWhen`. |
151
151
|**widget**|`string`| optional | Form widget override — names a registered field component (resolved as `field:<widget>`) to render this field instead of the `type` default. Degrades to the `type` renderer when unregistered. e.g. "object-ref", "filter-condition", "recipient-picker". |
152
152
|**hidden**|`boolean`| optional | Hidden from default UI |
153
-
|**readonly**|`boolean`| optional | Read-only in UI|
153
+
|**readonly**|`boolean`| optional | Read-only — never editable in forms, AND server-enforced on UPDATE: a non-system write to this field is silently dropped from the payload (#2948/#3003; symmetric with `readonlyWhen`). INSERT may still seed it (defaultValue, import).|
154
154
|**requiredPermissions**|`string[]`| optional |[ADR-0066 D3] Capabilities required to read/edit this field (mask on read, deny on write; AND-gate). |
155
155
|**system**|`boolean`| optional | Auto-injected system/audit field (e.g. created_at, updated_by, organization_id). Tools that surface system fields separately from author-declared business fields should branch on this flag. |
156
156
|**sortable**|`boolean`| optional | Whether field is sortable in list views |
|**delete**|`string[]`| optional | Capabilities required to delete (delete/purge). |
283
283
284
284
285
+
---
286
+
287
+
## RowCrudActionOverride
288
+
289
+
Boolean-or-predicates override for a built-in row CRUD affordance.
290
+
291
+
### Properties
292
+
293
+
| Property | Type | Required | Description |
294
+
| :--- | :--- | :--- | :--- |
295
+
|**enabled**|`boolean`| optional | Object-level on/off for the generic affordance; same meaning as the bare boolean form. Omitted → managedBy bucket default. |
296
+
|**visibleWhen**|`string \| Object`| optional | Per-record CEL predicate; false → hide the row button for that record. Fail-closed. |
297
+
|**disabledWhen**|`string \| Object`| optional | Per-record CEL predicate; true → render the row button disabled for that record. Fail-soft. |
|**provider**|`string`| optional | Generic-executor key that materializes this declarative entry at boot (e.g. openapi/mcp/rest). Omit for a catalog-only descriptor. Unknown provider ⇒ hard boot error (ADR-0096). |
181
-
|**providerConfig**|`Record<string, any>`| optional | Provider-specific config validated by the provider factory at boot (e.g. `{ spec, baseUrl }` for openapi). Requires `provider`. |
182
-
|**auth**|`Object \| Object \| Object \| Object`| optional | Declarative instance auth — references credentials via `credentialRef` (resolved at boot), never inline secrets. Requires `provider` (ADR-0096). |
180
+
|**provider**|`string`| optional | Generic-executor key that materializes this declarative entry at boot (e.g. openapi/mcp/rest). Omit for a catalog-only descriptor. Unknown provider ⇒ hard boot error (ADR-0097). |
181
+
|**providerConfig**|`Record<string, any>`| optional | Provider-specific config validated by the provider factory at boot (e.g. `{ spec, baseUrl }` for openapi, where spec is an inline document, a package-relative file path like './billing-openapi.json', or an http(s) URL). Requires `provider`. |
182
+
|**auth**|`Object \| Object \| Object \| Object`| optional | Declarative instance auth — references credentials via `credentialRef` (resolved at boot), never inline secrets. Requires `provider` (ADR-0097). |
183
183
|**actions**|`Object[]`| optional ||
184
184
|**triggers**|`Object[]`| optional ||
185
185
|**syncConfig**|`Object`| optional | Data sync configuration |
|**provider**|`string`| optional | Generic-executor key that materializes this declarative entry at boot (e.g. openapi/mcp/rest). Omit for a catalog-only descriptor. Unknown provider ⇒ hard boot error (ADR-0096). |
307
-
|**providerConfig**|`Record<string, any>`| optional | Provider-specific config validated by the provider factory at boot (e.g. `{ spec, baseUrl }` for openapi). Requires `provider`. |
308
-
|**auth**|`Object \| Object \| Object \| Object`| optional | Declarative instance auth — references credentials via `credentialRef` (resolved at boot), never inline secrets. Requires `provider` (ADR-0096). |
306
+
|**provider**|`string`| optional | Generic-executor key that materializes this declarative entry at boot (e.g. openapi/mcp/rest). Omit for a catalog-only descriptor. Unknown provider ⇒ hard boot error (ADR-0097). |
307
+
|**providerConfig**|`Record<string, any>`| optional | Provider-specific config validated by the provider factory at boot (e.g. `{ spec, baseUrl }` for openapi, where spec is an inline document, a package-relative file path like './billing-openapi.json', or an http(s) URL). Requires `provider`. |
308
+
|**auth**|`Object \| Object \| Object \| Object`| optional | Declarative instance auth — references credentials via `credentialRef` (resolved at boot), never inline secrets. Requires `provider` (ADR-0097). |
309
309
|**actions**|`Object[]`| optional ||
310
310
|**triggers**|`Object[]`| optional ||
311
311
|**syncConfig**|`Object`| optional | Data sync configuration |
0 commit comments