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
{{ message }}
Repository navigation
Commit 9605808
Browse filesBrowse the repository at this point in the historyBrowse files
docs(spec): drop the internal issue id from the four epoch-instant tombstone prescriptions (#15676)
`check:doc-authoring` rule 3 forbids an internal issue id in customer-facing
spec text (maintainer ruling 2026-08-12). The four `retiredKey()` prescriptions
this stack card added each opened with a `(#14478 ruling B)` parenthetical — a
citation-shaped token that resolves to nothing for the author who meets it the
moment their key is refused, and which the generated reference pages publish
verbatim.
The parenthetical goes; the sentence keeps everything actionable it carried —
the FROM to TO rename, that the value is unchanged, and the
`SimplePresenceState.lastSeen` neighbour caveat — matching the shape the
campaign's already-compliant tombstones use (`hook.timeout`, `job.timeout`,
`DriverOptions.timeout`). The internal anchor is untouched in the adjacent `//`
and `/** */` comments, which are not customer-facing and were never findings.
`content/docs/references/**` regenerated with `pnpm --filter @objectstack/spec
gen:docs` — no generated artifact was hand-edited.
check:doc-authoring: 4 findings before, exit 0 after.
check:duration-unit-keys: unmoved — 48 offender(s) among 215 duration-shaped
numeric key(s), (6 declared `EpochMs` instant(s), 11 declared
`externalVocabulary` mirror(s)).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G4138K1EG7kQ81FNba5Kp4
Copy file name to clipboardExpand all lines: content/docs/references/api/websocket.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
@@ -363,7 +363,7 @@ Event pattern (supports wildcards like "record.*" or "*.created")
363
363
|**userName**|`string`| ✅ | User display name |
364
364
|**status**|`Enum<'online' \| 'away' \| 'offline'>`| ✅ | User presence status |
365
365
|**lastSeenAt**|`integer`| ✅ | Unix timestamp of last activity in milliseconds |
366
-
|**lastSeen**|`never`| optional |[REMOVED]`SimplePresenceState.lastSeen` was renamed to `lastSeenAt` in @objectstack/spec 17 (#14478 ruling B) — the last-activity INSTANT now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit. Rename the key to `lastSeenAt`; the value is unchanged (`Date.now()`). Note the neighbouring `PresenceState.lastSeen` (api/realtime-shared.zod.ts) is a different key with a different type — an ISO-8601 datetime STRING — and is untouched. |
366
+
|**lastSeen**|`never`| optional |[REMOVED]`SimplePresenceState.lastSeen` was renamed to `lastSeenAt` in @objectstack/spec 17 — the last-activity INSTANT now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit. Rename the key to `lastSeenAt`; the value is unchanged (`Date.now()`). Note the neighbouring `PresenceState.lastSeen` (api/realtime-shared.zod.ts) is a different key with a different type — an ISO-8601 datetime STRING — and is untouched. |
|**occurredAt**|`integer`| ✅ | Unix timestamp in milliseconds when the event occurred |
455
-
|**timestamp**|`never`| optional |[REMOVED]`WebSocketEvent.timestamp` was renamed to `occurredAt` in @objectstack/spec 17 (#14478 ruling B) — the event INSTANT now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the bare key name left to the describe prose. Rename the key to `occurredAt`; the value is unchanged (`Date.now()`). |
455
+
|**timestamp**|`never`| optional |[REMOVED]`WebSocketEvent.timestamp` was renamed to `occurredAt` in @objectstack/spec 17 — the event INSTANT now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the bare key name left to the describe prose. Rename the key to `occurredAt`; the value is unchanged (`Date.now()`). |
|**features**|`Record<string, boolean>`| optional (default: `{}`) | Global feature toggles |
38
38
|**previewMode**|`never`| optional |[REMOVED]`context.previewMode` was removed in @objectstack/spec 17 (ADR-0049 enforce-or-remove) — nothing ever read the block: none of its six keys (`autoLogin`, `simulatedRole`, `simulatedUserName`, `readOnly`, `expiresInSeconds`, `bannerMessage`) had a consumer in any repo, so an authored block parsed cleanly and configured NOTHING, while its own docstring promised an auth bypass ("skips authentication screens", "simulates an admin identity") and named a production guard no runtime ever received. Delete the key. Preview/demo deployments belong to the deployment layer, which owns auth per-project (`ArtifactKernelFactory` in the cloud distribution); `OS_PREVIEW_MODE` stays there as a routing-only switch. If a preview experience becomes a product capability it re-declares fresh, with the production-posture hard-refusal as the first-landed half (ruling record). |
39
-
|**startTime**|`never`| optional |[REMOVED]`context.startTime` was renamed to `context.startedAt` in @objectstack/spec 17 (#14478 ruling B) — the boot INSTANT now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the key name used to leave to the describe prose. Rename the key to `startedAt`; the value is unchanged (`Date.now()`). `*At` rather than `startTimeMs` deliberately: every `*Ms` key in this package is a DURATION, so spelling an instant that way would move it into the family the rule exists to separate it from. |
39
+
|**startTime**|`never`| optional |[REMOVED]`context.startTime` was renamed to `context.startedAt` in @objectstack/spec 17 — the boot INSTANT now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the key name used to leave to the describe prose. Rename the key to `startedAt`; the value is unchanged (`Date.now()`). `*At` rather than `startTimeMs` deliberately: every `*Ms` key in this package is a DURATION, so spelling an instant that way would move it into the family the rule exists to separate it from. |
|**features**|`Record<string, boolean>`| optional (default: `{}`) | Global feature toggles |
74
74
|**previewMode**|`never`| optional |[REMOVED]`context.previewMode` was removed in @objectstack/spec 17 (ADR-0049 enforce-or-remove) — nothing ever read the block: none of its six keys (`autoLogin`, `simulatedRole`, `simulatedUserName`, `readOnly`, `expiresInSeconds`, `bannerMessage`) had a consumer in any repo, so an authored block parsed cleanly and configured NOTHING, while its own docstring promised an auth bypass ("skips authentication screens", "simulates an admin identity") and named a production guard no runtime ever received. Delete the key. Preview/demo deployments belong to the deployment layer, which owns auth per-project (`ArtifactKernelFactory` in the cloud distribution); `OS_PREVIEW_MODE` stays there as a routing-only switch. If a preview experience becomes a product capability it re-declares fresh, with the production-posture hard-refusal as the first-landed half (ruling record). |
75
-
|**startTime**|`never`| optional |[REMOVED]`context.startTime` was renamed to `context.startedAt` in @objectstack/spec 17 (#14478 ruling B) — the boot INSTANT now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the key name used to leave to the describe prose. Rename the key to `startedAt`; the value is unchanged (`Date.now()`). `*At` rather than `startTimeMs` deliberately: every `*Ms` key in this package is a DURATION, so spelling an instant that way would move it into the family the rule exists to separate it from. |
75
+
|**startTime**|`never`| optional |[REMOVED]`context.startTime` was renamed to `context.startedAt` in @objectstack/spec 17 — the boot INSTANT now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the key name used to leave to the describe prose. Rename the key to `startedAt`; the value is unchanged (`Date.now()`). `*At` rather than `startTimeMs` deliberately: every `*Ms` key in this package is a DURATION, so spelling an instant that way would move it into the family the rule exists to separate it from. |
Copy file name to clipboardExpand all lines: content/docs/references/kernel/startup-orchestrator.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
@@ -37,7 +37,7 @@ const result = HealthStatusSchema.parse(data);
37
37
| :--- | :--- | :--- | :--- |
38
38
|**healthy**|`boolean`| ✅ | Whether the plugin is healthy |
39
39
|**checkedAt**|`integer`| ✅ | Unix timestamp in milliseconds when health check was performed |
40
-
|**timestamp**|`never`| optional |[REMOVED]`HealthStatus.timestamp` was renamed to `checkedAt` in @objectstack/spec 17 (#14478 ruling B) — the instant the check RAN now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the bare key name left to the describe prose. Rename the key to `checkedAt`; the value is unchanged (`Date.now()`). |
40
+
|**timestamp**|`never`| optional |[REMOVED]`HealthStatus.timestamp` was renamed to `checkedAt` in @objectstack/spec 17 — the instant the check RAN now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the bare key name left to the describe prose. Rename the key to `checkedAt`; the value is unchanged (`Date.now()`). |
41
41
|**details**|`Record<string, any>`| optional | Optional plugin-specific health details |
42
42
|**message**|`string`| optional | Error message if plugin is unhealthy |
43
43
@@ -71,7 +71,7 @@ const result = HealthStatusSchema.parse(data);
71
71
| :--- | :--- | :--- | :--- |
72
72
|**healthy**|`boolean`| ✅ | Whether the plugin is healthy |
73
73
|**checkedAt**|`integer`| ✅ | Unix timestamp in milliseconds when health check was performed |
74
-
|**timestamp**|`never`| optional |[REMOVED]`HealthStatus.timestamp` was renamed to `checkedAt` in @objectstack/spec 17 (#14478 ruling B) — the instant the check RAN now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the bare key name left to the describe prose. Rename the key to `checkedAt`; the value is unchanged (`Date.now()`). |
74
+
|**timestamp**|`never`| optional |[REMOVED]`HealthStatus.timestamp` was renamed to `checkedAt` in @objectstack/spec 17 — the instant the check RAN now carries the shared `EpochMs` schema, which declares the epoch-millisecond unit the bare key name left to the describe prose. Rename the key to `checkedAt`; the value is unchanged (`Date.now()`). |
75
75
|**details**|`Record<string, any>`| optional | Optional plugin-specific health details |
76
76
|**message**|`string`| optional | Error message if plugin is unhealthy |
0 commit comments