Skip to content

Commit 03335ab

Browse files
committed
chore(spec): regenerate the deferred artifacts on the merged tree (#14478)
Discharges the os-regen deferral the merge commit recorded. Regenerated in the order the generators require — `gen:migration-registry` writes a source file, so the spec is rebuilt before `gen:api-surface` reads `dist/*.d.ts`: gen:migration-registry, build, gen:api-surface, gen:export-origins, gen:declaration-map, gen:docs `check:generated` then reports all 15 generated artifacts up to date. The ledger keeps every row from both sides and invents none: 356 entry files at the merge base, +27 from main, +80 from this branch, 463 in the result — set equality, not just a matching total. `check:migration-registry` reads the same population back as 186 semantic, 161 retired-key, 116 retired-def. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G4138K1EG7kQ81FNba5Kp4
1 parent e1ac5bd commit 03335ab

17 files changed

Lines changed: 95 additions & 61 deletions

File tree

content/docs/references/api/contract.mdx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,8 @@ const result = ApiErrorSchema.parse(data);
454454
| **batchScheduleFn** | `Enum<'microtask' \| 'timeout' \| 'manual'>` | optional (default: `"microtask"`) | Scheduling strategy for collecting batch keys |
455455
| **cacheEnabled** | `boolean` | optional (default: `true`) | Enable per-request result caching |
456456
| **cacheKeyFn** | `string` | optional | Name or identifier of the cache key function |
457-
| **cacheTtl** | `number` | optional | Cache time-to-live in seconds (0 = no expiration) |
457+
| **cacheTtlSeconds** | `number` | optional | Cache time-to-live in seconds (0 = no expiration) |
458+
| **cacheTtl** | `never` | optional | [REMOVED] `DataLoaderConfig.cacheTtl` was renamed to `cacheTtlSeconds` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Rename the key to `cacheTtlSeconds`; the value (seconds) is unchanged. |
458459
| **coalesceRequests** | `boolean` | optional (default: `true`) | Deduplicate identical requests within a batch window |
459460
| **maxConcurrency** | `integer` | optional | Maximum parallel batch requests |
460461

@@ -667,7 +668,8 @@ const result = ApiErrorSchema.parse(data);
667668
| **batchScheduleFn** | `Enum<'microtask' \| 'timeout' \| 'manual'>` | optional (default: `"microtask"`) | Scheduling strategy for collecting batch keys |
668669
| **cacheEnabled** | `boolean` | optional (default: `true`) | Enable per-request result caching |
669670
| **cacheKeyFn** | `string` | optional | Name or identifier of the cache key function |
670-
| **cacheTtl** | `number` | optional | Cache time-to-live in seconds (0 = no expiration) |
671+
| **cacheTtlSeconds** | `number` | optional | Cache time-to-live in seconds (0 = no expiration) |
672+
| **cacheTtl** | `never` | optional | [REMOVED] `DataLoaderConfig.cacheTtl` was renamed to `cacheTtlSeconds` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Rename the key to `cacheTtlSeconds`; the value (seconds) is unchanged. |
671673
| **coalesceRequests** | `boolean` | optional (default: `true`) | Deduplicate identical requests within a batch window |
672674
| **maxConcurrency** | `integer` | optional | Maximum parallel batch requests |
673675

content/docs/references/api/protocol.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1207,9 +1207,9 @@ Enable package response
12071207
| Property | Type | Required | Description |
12081208
| :--- | :--- | :--- | :--- |
12091209
| **directives** | `Enum<'public' \| 'private' \| 'no-cache' \| 'no-store' \| 'must-revalidate' \| 'max-age'>[]` || Cache control directives |
1210-
| **maxAge** | `number` | optional | Maximum cache age in seconds |
1211-
| **staleWhileRevalidate** | `number` | optional | Allow serving stale content while revalidating (seconds) |
1212-
| **staleIfError** | `number` | optional | Allow serving stale content on error (seconds) |
1210+
| **maxAge** | `number` | optional | Maximum cache age in seconds (unit per HTTP Cache-Control `max-age` (RFC 9111 §5.2.2.1)) |
1211+
| **staleWhileRevalidate** | `number` | optional | Allow serving stale content while revalidating (seconds) (unit per HTTP Cache-Control `stale-while-revalidate` (RFC 5861 §3)) |
1212+
| **staleIfError** | `number` | optional | Allow serving stale content on error (seconds) (unit per HTTP Cache-Control `stale-if-error` (RFC 5861 §4)) |
12131213

12141214

12151215
---

content/docs/references/index.mdx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Protocol Reference
3-
description: Every schema published by @objectstack/spec — 1573 schemas across 14 protocol modules
3+
description: Every schema published by @objectstack/spec — 1574 schemas across 14 protocol modules
44
---
55

66
{/* ⚠️ AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs live in the module folders under content/docs/. */}
@@ -29,11 +29,11 @@ counts are sums of the rows they head. Regenerate with
2929
| [Kernel Protocol](/docs/references/kernel) | 30 | 162 | Plugin lifecycle and manifests, capabilities and security, metadata loading, service registry. |
3030
| [QA Protocol](/docs/references/qa) | 1 | 8 | Declarative test suites — scenarios, steps, actions and assertions. |
3131
| [Security Protocol](/docs/references/security) | 5 | 30 | Permission sets, row-level security, sharing rules, tenancy posture. |
32-
| [Shared Protocol](/docs/references/shared) | 8 | 27 | Primitives used across every protocol — identifiers, HTTP, expressions, error maps, enums. |
32+
| [Shared Protocol](/docs/references/shared) | 9 | 28 | Primitives used across every protocol — identifiers, HTTP, expressions, error maps, enums. |
3333
| [Studio Protocol](/docs/references/studio) | 3 | 35 | Studio designer metadata — the authoring surfaces for the protocols above. |
3434
| [System Protocol](/docs/references/system) | 33 | 272 | The runtime environment — logging, jobs, cache, metrics, notifications, i18n and compliance. |
3535
| [UI Protocol](/docs/references/ui) | 16 | 153 | Apps, pages, views, dashboards, reports, actions and themes — the ObjectUI layer. |
36-
| **Total** | **197** | **1573** | 14 protocol modules |
36+
| **Total** | **198** | **1574** | 14 protocol modules |
3737

3838
---
3939

@@ -286,13 +286,14 @@ Permission sets, row-level security, sharing rules, tenancy posture.
286286

287287
## Shared Protocol
288288

289-
**Source:** `packages/spec/src/shared/` · **Import:** `@objectstack/spec/shared` · **8 pages, 27 schemas**
289+
**Source:** `packages/spec/src/shared/` · **Import:** `@objectstack/spec/shared` · **9 pages, 28 schemas**
290290

291291
Primitives used across every protocol — identifiers, HTTP, expressions, error maps, enums.
292292

293293
| File | Schemas |
294294
| :--- | :--- |
295295
| [`enums.zod.ts`](/docs/references/shared/enums) | `IsolationLevelEnum`, `MutationEventEnum`, `SortDirectionEnum`, `SortItem` |
296+
| [`epoch.zod.ts`](/docs/references/shared/epoch) | `EpochMs` |
296297
| [`expression.zod.ts`](/docs/references/shared/expression) | `CronExpressionInput`, `EvaluatedExpression`, `Expression`, `ExpressionDialect`, `ExpressionInput`, `ExpressionMeta`, `Predicate`, `PredicateInput`, `TemplateExpressionInput` |
297298
| [`http.zod.ts`](/docs/references/shared/http) | `CorsConfig`, `HttpMethod`, `HttpMethodSubset`, `HttpRequest`, `RateLimitConfig`, `StaticMount` |
298299
| [`identifiers.zod.ts`](/docs/references/shared/identifiers) | `MetadataItemName`, `SnakeCaseIdentifier`, `SystemIdentifier` |

content/docs/references/integration/connector.mdx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,8 @@ Circuit breaker configuration
148148
| **failureThreshold** | `number` | optional (default: `5`) | Failures before opening circuit |
149149
| **resetTimeoutMs** | `number` | optional (default: `30000`) | Time in open state before half-open |
150150
| **halfOpenMaxRequests** | `number` | optional (default: `1`) | Requests allowed in half-open state |
151-
| **monitoringWindow** | `number` | optional (default: `60000`) | Rolling window for failure count in ms |
151+
| **monitoringWindowMs** | `number` | optional (default: `60000`) | Rolling window for failure count in ms |
152+
| **monitoringWindow** | `never` | optional | [REMOVED] `CircuitBreakerConfig.monitoringWindow` was renamed to `monitoringWindowMs` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Rename the key to `monitoringWindowMs`; the value (milliseconds) and the 60000 default are unchanged. Run `os migrate meta --from 17` to list the mechanical edits for existing sources; apply them by hand. |
152153
| **fallbackStrategy** | `Enum<'cache' \| 'default_value' \| 'error' \| 'queue'>` | optional | Fallback strategy when circuit is open |
153154

154155

@@ -272,7 +273,8 @@ Circuit breaker configuration
272273
| **label** | `string` || Trigger label |
273274
| **description** | `string` | optional | |
274275
| **type** | `Enum<'polling' \| 'webhook'>` || Trigger type |
275-
| **interval** | `number` | optional | Polling interval in seconds |
276+
| **intervalSeconds** | `number` | optional | Polling interval in seconds |
277+
| **interval** | `never` | optional | [REMOVED] `ConnectorTrigger.interval` was renamed to `intervalSeconds` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Rename the key to `intervalSeconds`; the value (seconds) is unchanged. Run `os migrate meta --from 17` to list the mechanical edits for existing sources; apply them by hand. |
276278

277279
### Nested Shape: `Connector.syncConfig`
278280

@@ -440,7 +442,8 @@ Connector health configuration
440442
| **failureThreshold** | `number` | optional (default: `5`) | Failures before opening circuit |
441443
| **resetTimeoutMs** | `number` | optional (default: `30000`) | Time in open state before half-open |
442444
| **halfOpenMaxRequests** | `number` | optional (default: `1`) | Requests allowed in half-open state |
443-
| **monitoringWindow** | `number` | optional (default: `60000`) | Rolling window for failure count in ms |
445+
| **monitoringWindowMs** | `number` | optional (default: `60000`) | Rolling window for failure count in ms |
446+
| **monitoringWindow** | `never` | optional | [REMOVED] `CircuitBreakerConfig.monitoringWindow` was renamed to `monitoringWindowMs` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Rename the key to `monitoringWindowMs`; the value (milliseconds) and the 60000 default are unchanged. Run `os migrate meta --from 17` to list the mechanical edits for existing sources; apply them by hand. |
444447
| **fallbackStrategy** | `Enum<'cache' \| 'default_value' \| 'error' \| 'queue'>` | optional | Fallback strategy when circuit is open |
445448

446449

@@ -597,7 +600,8 @@ Connector status
597600
| **label** | `string` || Trigger label |
598601
| **description** | `string` | optional | |
599602
| **type** | `Enum<'polling' \| 'webhook'>` || Trigger type |
600-
| **interval** | `number` | optional | Polling interval in seconds |
603+
| **intervalSeconds** | `number` | optional | Polling interval in seconds |
604+
| **interval** | `never` | optional | [REMOVED] `ConnectorTrigger.interval` was renamed to `intervalSeconds` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Rename the key to `intervalSeconds`; the value (seconds) is unchanged. Run `os migrate meta --from 17` to list the mechanical edits for existing sources; apply them by hand. |
601605

602606

603607
---
@@ -755,7 +759,8 @@ Connector type
755759
| **label** | `string` || Trigger label |
756760
| **description** | `string` | optional | |
757761
| **type** | `Enum<'polling' \| 'webhook'>` || Trigger type |
758-
| **interval** | `number` | optional | Polling interval in seconds |
762+
| **intervalSeconds** | `number` | optional | Polling interval in seconds |
763+
| **interval** | `never` | optional | [REMOVED] `ConnectorTrigger.interval` was renamed to `intervalSeconds` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose. Rename the key to `intervalSeconds`; the value (seconds) is unchanged. Run `os migrate meta --from 17` to list the mechanical edits for existing sources; apply them by hand. |
759764

760765
### Nested Shape: `DeclarativeConnectorEntry.syncConfig`
761766

content/docs/references/system/cache.mdx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ Cache avalanche/stampede prevention configuration
5353
| Property | Type | Required | Description |
5454
| :--- | :--- | :--- | :--- |
5555
| **jitterTtl** | `{ enabled: boolean; maxJitterSeconds: number }` | optional | TTL jitter to prevent simultaneous expiration |
56-
| **circuitBreaker** | `{ enabled: boolean; failureThreshold: number; resetTimeout: number }` | optional | Circuit breaker for backend protection |
56+
| **circuitBreaker** | `{ enabled: boolean; failureThreshold: number; resetTimeoutSeconds: number }` | optional | Circuit breaker for backend protection |
5757
| **lockout** | `{ enabled: boolean; lockTimeoutMs: number }` | optional | Lock-based stampede prevention |
5858

5959
### Nested Shape: `CacheAvalanchePrevention.jitterTtl`
@@ -69,7 +69,8 @@ Cache avalanche/stampede prevention configuration
6969
| :--- | :--- | :--- | :--- |
7070
| **enabled** | `boolean` | optional (default: `false`) | Enable circuit breaker for backend protection |
7171
| **failureThreshold** | `number` | optional (default: `5`) | Failures before circuit opens |
72-
| **resetTimeout** | `number` | optional (default: `30`) | Seconds before half-open state |
72+
| **resetTimeoutSeconds** | `number` | optional (default: `30`) | Seconds before half-open state |
73+
| **resetTimeout** | `never` | optional | [REMOVED] `CacheAvalanchePrevention.circuitBreaker.resetTimeout` was renamed to `resetTimeoutSeconds` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose, and the sibling `lockout` block on this same schema already spells `lockTimeoutMs`. Rename the key to `resetTimeoutSeconds`; the value (seconds) and the 30 default are unchanged. Note the two are NOT the same unit: this one is seconds, `lockTimeoutMs` is milliseconds. |
7374

7475
### Nested Shape: `CacheAvalanchePrevention.lockout`
7576

@@ -90,7 +91,7 @@ Top-level application cache configuration
9091
| Property | Type | Required | Description |
9192
| :--- | :--- | :--- | :--- |
9293
| **enabled** | `boolean` | optional (default: `false`) | Enable application-level caching |
93-
| **tiers** | `{ name: string; type: Enum<'memory' \| 'redis' \| 'memcached' \| 'cdn'>; maxSize?: number; ttl: number; … }[]` || Ordered cache tier hierarchy |
94+
| **tiers** | `{ name: string; type: Enum<'memory' \| 'redis' \| 'memcached' \| 'cdn'>; maxSize?: number; ttlSeconds: number; … }[]` || Ordered cache tier hierarchy |
9495
| **invalidation** | `{ trigger: Enum<'create' \| 'update' \| 'delete' \| 'manual'>; scope: Enum<'key' \| 'pattern' \| 'tag' \| 'all'>; pattern?: string; tags?: string[] }[]` || Cache invalidation rules |
9596
| **prefetch** | `boolean` | optional (default: `false`) | Enable cache prefetching |
9697
| **compression** | `boolean` | optional (default: `false`) | Enable data compression in cache |
@@ -105,7 +106,8 @@ Configuration for a single cache tier in the hierarchy
105106
| **name** | `string` || Unique cache tier name |
106107
| **type** | `Enum<'memory' \| 'redis' \| 'memcached' \| 'cdn'>` || Cache backend type |
107108
| **maxSize** | `number` | optional | Max size in MB |
108-
| **ttl** | `number` | optional (default: `300`) | Default TTL in seconds |
109+
| **ttlSeconds** | `number` | optional (default: `300`) | Default TTL in seconds |
110+
| **ttl** | `never` | optional | [REMOVED] `CacheTier.ttl` was renamed to `ttlSeconds` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose, and the sibling `maxSize` on this same tier is a size in MB. Rename the key to `ttlSeconds`; the value (seconds) and the 300 default are unchanged. |
109111
| **strategy** | `Enum<'lru' \| 'lfu' \| 'fifo' \| 'ttl'>` | optional (default: `"lru"`) | Eviction strategy |
110112
| **warmup** | `boolean` | optional (default: `false`) | Pre-populate cache on startup |
111113

@@ -178,7 +180,8 @@ Configuration for a single cache tier in the hierarchy
178180
| **name** | `string` || Unique cache tier name |
179181
| **type** | `Enum<'memory' \| 'redis' \| 'memcached' \| 'cdn'>` || Cache backend type |
180182
| **maxSize** | `number` | optional | Max size in MB |
181-
| **ttl** | `number` | optional (default: `300`) | Default TTL in seconds |
183+
| **ttlSeconds** | `number` | optional (default: `300`) | Default TTL in seconds |
184+
| **ttl** | `never` | optional | [REMOVED] `CacheTier.ttl` was renamed to `ttlSeconds` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose, and the sibling `maxSize` on this same tier is a size in MB. Rename the key to `ttlSeconds`; the value (seconds) and the 300 default are unchanged. |
182185
| **strategy** | `Enum<'lru' \| 'lfu' \| 'fifo' \| 'ttl'>` | optional (default: `"lru"`) | Eviction strategy |
183186
| **warmup** | `boolean` | optional (default: `false`) | Pre-populate cache on startup |
184187

@@ -211,7 +214,7 @@ Distributed cache configuration with consistency and avalanche prevention
211214
| Property | Type | Required | Description |
212215
| :--- | :--- | :--- | :--- |
213216
| **enabled** | `boolean` | optional (default: `false`) | Enable application-level caching |
214-
| **tiers** | `{ name: string; type: Enum<'memory' \| 'redis' \| 'memcached' \| 'cdn'>; maxSize?: number; ttl?: number; … }[]` || Ordered cache tier hierarchy |
217+
| **tiers** | `{ name: string; type: Enum<'memory' \| 'redis' \| 'memcached' \| 'cdn'>; maxSize?: number; ttlSeconds?: number; … }[]` || Ordered cache tier hierarchy |
215218
| **invalidation** | `{ trigger: Enum<'create' \| 'update' \| 'delete' \| 'manual'>; scope: Enum<'key' \| 'pattern' \| 'tag' \| 'all'>; pattern?: string; tags?: string[] }[]` || Cache invalidation rules |
216219
| **prefetch** | `boolean` | optional (default: `false`) | Enable cache prefetching |
217220
| **compression** | `boolean` | optional (default: `false`) | Enable data compression in cache |
@@ -229,7 +232,8 @@ Configuration for a single cache tier in the hierarchy
229232
| **name** | `string` || Unique cache tier name |
230233
| **type** | `Enum<'memory' \| 'redis' \| 'memcached' \| 'cdn'>` || Cache backend type |
231234
| **maxSize** | `number` | optional | Max size in MB |
232-
| **ttl** | `number` | optional (default: `300`) | Default TTL in seconds |
235+
| **ttlSeconds** | `number` | optional (default: `300`) | Default TTL in seconds |
236+
| **ttl** | `never` | optional | [REMOVED] `CacheTier.ttl` was renamed to `ttlSeconds` in @objectstack/spec 17 — the unit of a duration-shaped number lives in the key name, not only in the describe prose, and the sibling `maxSize` on this same tier is a size in MB. Rename the key to `ttlSeconds`; the value (seconds) and the 300 default are unchanged. |
233237
| **strategy** | `Enum<'lru' \| 'lfu' \| 'fifo' \| 'ttl'>` | optional (default: `"lru"`) | Eviction strategy |
234238
| **warmup** | `boolean` | optional (default: `false`) | Pre-populate cache on startup |
235239

@@ -249,7 +253,7 @@ Rule defining when and how cached entries are invalidated
249253
| Property | Type | Required | Description |
250254
| :--- | :--- | :--- | :--- |
251255
| **jitterTtl** | `{ enabled?: boolean; maxJitterSeconds?: number }` | optional | TTL jitter to prevent simultaneous expiration |
252-
| **circuitBreaker** | `{ enabled?: boolean; failureThreshold?: number; resetTimeout?: number }` | optional | Circuit breaker for backend protection |
256+
| **circuitBreaker** | `{ enabled?: boolean; failureThreshold?: number; resetTimeoutSeconds?: number }` | optional | Circuit breaker for backend protection |
253257
| **lockout** | `{ enabled?: boolean; lockTimeoutMs?: number }` | optional | Lock-based stampede prevention |
254258

255259
### Nested Shape: `DistributedCacheConfig.warmup`

0 commit comments

Comments
 (0)