Skip to content

Bugfix: The client can lose its identity token (and hence, access to user data) during first use. - #5761

Merged
aasoni merged 1 commit into
clockworklabs:masterfrom
krisajenkins:fix-reconnect-session-identity
Aug 25, 2026
Merged

Bugfix: The client can lose its identity token (and hence, access to user data) during first use.#5761
aasoni merged 1 commit into
clockworklabs:masterfrom
krisajenkins:fix-reconnect-session-identity

Conversation

@krisajenkins

Copy link
Copy Markdown
Contributor

Imagine this session:

  1. User connects to Spacetime for the first time, through a webapp.
  2. They get issued an anonymous identity.
  3. They do some work.
  4. They lose their connection temporarily - from a network glitch, from the
    tab being put to sleep in the background, anything that doesn't involve
    a page-refresh - then we auto-reconnect.

After reconnecting, they should have access to their work again, right? They
won't, and it's due to an implicit lifecycle problem between connection
builders and connections.

Every shipped template builds the connection once, at module scope, and hands
it to the provider:

const connectionBuilder = DbConnection.builder()
  .withUri(HOST)
  .withDatabaseName(DB_NAME)
  .withToken(localStorage.getItem(TOKEN_KEY) || undefined)
  .onConnect(onConnect)  // writes the issued token to localStorage
  .onDisconnect(onDisconnect)
  .onConnectError(onConnectError);

createRoot(document.getElementById('root')!).render(
  <SpacetimeDBProvider connectionBuilder={connectionBuilder}>
    <App />
  </SpacetimeDBProvider>
);

For a first-time visitor that withToken(...) reads an empty localStorage,
and the empty token is baked into the builder for good. ConnectionManager
retains that builder and rebuilds from it on every automatic reconnect. The
reconnect therefore goes out anonymously, the server mints a fresh Identity,
and the user silently becomes a stranger to their own data: rows keyed on
ctx.sender are still attached to an Identity the client can no longer reach,
and whatever the app does to set a user up runs again from scratch under the
new one.

Nothing errors on either side, and a reload re-runs the module, re-reads the
token and appears to fix it - so this presents as unreproducible flakiness
rather than a bug. It cannot bite a returning user, whose token is already in
storage when the builder is made, which is exactly why it survives ordinary
testing.

The manager already holds the right token in managed.state.token, so
#buildManagedConnection now re-applies it to the builder before building.
rebuild() opts out via resumeSession: false: it exists precisely to change
identity, so the replacement builder's token must still win.

  • Fix all four rebuild paths at once: the reconnect timer, the resume
    listeners, zombie-socket revival, and retain() after a drop.
  • Cover the fix with reconnect and liveness regression tests, including
    guards that rebuild() and never-connected entries are left alone.

API and ABI breaking changes

None. resumeSession is an option on a private method.

One behaviour change worth calling out: handing retain() a different
builder carrying a different token no longer changes identity. It previously
did, but only when the swap landed while no connection was live - retain()
already ignores a replacement builder outright whenever a connection is live,
so identity depended on socket timing. rebuild() remains the supported way
to change identity deliberately.

Expected complexity level and risk

  1. The diff is small and confined to one private method, but it decides which
    identity every automatic reconnect presents, so the risk is in the
    interactions rather than the code: the reconnect, resume, revive and retain
    paths all share that method, and getting the rebuild() opt-out wrong would
    strand a signed-in user back on their anonymous session.

Testing

  • pnpm test in crates/bindings-typescript: 300 passed / 29 files.
  • pnpm lint and pnpm build:types clean.
  • Reverting only connection_manager.ts fails 8 of the 11 new tests; the
    other 3 are guards asserting behaviour the fix must not disturb, and pass
    either way.
  • Reviewer: on any shipped template with site data cleared, connect,
    create state keyed on ctx.sender, then force a reconnect - toggle the network
    off and on, or leave the tab backgrounded long enough for the socket to drop -
    and confirm ctx.sender is unchanged. A quick tab switch will not reproduce
    it; the connection has to actually go down.

Description of Changes

API and ABI breaking changes

Expected complexity level and risk

Testing

@aasoni

aasoni commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Hey @krisajenkins! Thanks for the patch, coincidentally I am finalizing a design for built-in automatic reconnection for all client SDKs (TypeScript, Rust, C#, and Unreal), moving it out of the framework-binding layer and into the core DbConnection in TypeScript and building it for the other SDKs.
Preserving the identity across reconnections is a hard requirement of this design. Your patch would get overwritten by this change and I am hoping to start implementation next week. I am going to see if it makes sense to have this as an interim fix, but most likely we'll just wait for the auto reconnect work to go through.

@krisajenkins

Copy link
Copy Markdown
Contributor Author

Ah, I see. No worries then. Feel free to use the patch or abandon it, and I look forward to seeing the new design. 😎

@cloutiertyler
cloutiertyler requested a review from aasoni August 24, 2026 18:53

@aasoni aasoni left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can get this in as an interim fix until the auto reconnect is ready which may still take a couple of weeks. Changes look sensible to me.

@aasoni

aasoni commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

@krisajenkins we can merge this changes in as an interim fix. Note that as of last week we require commits to have verified signatures so you'll need to force push a new commit that is verified. thanks!

…user data) during first use.

Imagine this session:

  1. User connects to Spacetime for the first time, through a webapp.
  2. They get issued an anonymous identity.
  3. They do some work.
  4. They lose their connection temporarily - from a network glitch, from the
       tab being put to sleep in the background, anything that doesn't involve
       a page-refresh - then we auto-reconnect.

After reconnecting, they should have access to their work again, right? They
won't, and it's due to an implicit lifecycle problem between connection
builders and connections.

Every shipped template builds the connection once, at module scope, and hands
it to the provider:

```tsx
const connectionBuilder = DbConnection.builder()
  .withUri(HOST)
  .withDatabaseName(DB_NAME)
  .withToken(localStorage.getItem(TOKEN_KEY) || undefined)
  .onConnect(onConnect)  // writes the issued token to localStorage
  .onDisconnect(onDisconnect)
  .onConnectError(onConnectError);

createRoot(document.getElementById('root')!).render(
  <SpacetimeDBProvider connectionBuilder={connectionBuilder}>
    <App />
  </SpacetimeDBProvider>
);
```

For a first-time visitor that `withToken(...)` reads an empty `localStorage`,
and the empty token is baked into the builder for good. ConnectionManager
retains that builder and rebuilds from it on every automatic reconnect. The
reconnect therefore goes out anonymously, the server mints a fresh Identity,
and the user silently becomes a stranger to their own data: rows keyed on
`ctx.sender` are still attached to an Identity the client can no longer reach,
and whatever the app does to set a user up runs again from scratch under the
new one.

Nothing errors on either side, and a reload re-runs the module, re-reads the
token and appears to fix it - so this presents as unreproducible flakiness
rather than a bug. It cannot bite a returning user, whose token is already in
storage when the builder is made, which is exactly why it survives ordinary
testing.

The manager already holds the right token in `managed.state.token`, so
`#buildManagedConnection` now re-applies it to the builder before building.
`rebuild()` opts out via `resumeSession: false`: it exists precisely to change
identity, so the replacement builder's token must still win.

- Fix all four rebuild paths at once: the reconnect timer, the resume
  listeners, zombie-socket revival, and retain() after a drop.
- Cover the fix with reconnect and liveness regression tests, including
  guards that rebuild() and never-connected entries are left alone.

# API and ABI breaking changes

None. `resumeSession` is an option on a private method.

One behaviour change worth calling out: handing `retain()` a *different*
builder carrying a different token no longer changes identity. It previously
did, but only when the swap landed while no connection was live - `retain()`
already ignores a replacement builder outright whenever a connection is live,
so identity depended on socket timing. `rebuild()` remains the supported way
to change identity deliberately.

# Expected complexity level and risk

2. The diff is small and confined to one private method, but it decides which
identity every automatic reconnect presents, so the risk is in the
interactions rather than the code: the reconnect, resume, revive and retain
paths all share that method, and getting the `rebuild()` opt-out wrong would
strand a signed-in user back on their anonymous session.

# Testing

- [x] `pnpm test` in `crates/bindings-typescript`: 300 passed / 29 files.
- [x] `pnpm lint` and `pnpm build:types` clean.
- [x] Reverting only `connection_manager.ts` fails 8 of the 11 new tests; the
other 3 are guards asserting behaviour the fix must not disturb, and pass
either way.
- [ ] Reviewer: on any shipped template with site data cleared, connect,
create state keyed on `ctx.sender`, then force a reconnect - toggle the network
off and on, or leave the tab backgrounded long enough for the socket to drop -
and confirm `ctx.sender` is unchanged. A quick tab switch will not reproduce
it; the connection has to actually go down.
@krisajenkins
krisajenkins force-pushed the fix-reconnect-session-identity branch from e27de33 to edc412b Compare August 25, 2026 07:21
@krisajenkins

Copy link
Copy Markdown
Contributor Author

Thanks @aasoni - just pushed a new, signed version. (I'll wait to check if I've done the signing correctly, then I'll repush my other open PRs. 🙂)

@aasoni
aasoni added this pull request to the merge queue Aug 25, 2026
Merged via the queue into clockworklabs:master with commit c0c1936 Aug 25, 2026
35 checks passed
pull Bot pushed a commit to Abaso007/SpacetimeDB that referenced this pull request Sep 9, 2026
)

## Summary
- Update automatic migration docs to reflect empty-table removal
behavior.
- Document accessor/source-name metadata changes and index accessor
rename limits.
- Add a public MCP reference covering `spacetime mcp`, host-wide vs
database-scoped tool shapes, permissions, and common errors.
- Align the TypeScript server skill and bundled plugin copy so scheduled
procedures point to `onSchedule`.
- Fix the TypeScript procedures reference so it no longer claims
`spacetimedb.procedure` takes a procedure name argument.
- Clarify scheduled interval timing and connection ID availability in
reducer context docs.

# API and ABI breaking changes

n/a

# Rollback safety impact

n/a

# Expected complexity level and risk

1 - docs-only audit updates.

## Audit notes
- Baseline: existing open `bot/docs-audit` PR clockworklabs#5723; merged current
`origin/master` into `bot/docs-audit` before today's audit pass.
- 2026-08-15 commit-impact pass checked new master commits `b1291ee11` /
clockworklabs#5751 (C# HTTP timeout clamp), `0948a1b3b` / clockworklabs#5752 (2.8.2 version bump),
and `524b4487d` / clockworklabs#5583 (LLM benchmark evals and server skill updates).
- Checked the changed server skill guidance from clockworklabs#5583 against public
docs for procedures, HTTP, scheduled procedures, views/query-builder
views, view primary keys, client visibility filters, schedule tables,
defaults, lifecycle connection IDs, and deterministic context guidance.
- Checked clockworklabs#5751 against public procedure HTTP docs; the 30-second
default and 180-second maximum timeout are already documented.
- 2026-08-16 skills/docs consistency pass compared `skills/*/SKILL.md`
against public docs for CLI flows, SDK APIs, server module APIs, auth,
onboarding, deployment, MCP, scheduling, and cross-language examples.
- Source PR for the 2026-08-16 correction:
clockworklabs#5728 documented
TypeScript `onSchedule` registration for scheduled reducers/procedures;
the TypeScript server skill still had one stale scheduled-procedure
sentence and the plugin skill copy had not been synced.
- 2026-08-17 commit-impact pass found no new `origin/master` commits
after the 2026-08-16 audit baseline.
- 2026-08-17 skills/docs consistency pass compared `skills/*/SKILL.md`
against public docs for CLI flows, SDK APIs, server module APIs, auth,
onboarding, deployment, MCP, scheduling, and cross-language examples.
- The 2026-08-17 correction is not from a new master PR; it aligns the
TypeScript procedures reference with current TypeScript module
examples/tests and the TypeScript server skill. Procedure names come
from exported values, not a name argument to `spacetimedb.procedure`.
- 2026-08-18 commit-impact pass checked new master commits `053742688` /
clockworklabs#5735 (scheduled functions reschedule from intended execution time and
skip missed interval ticks) and `e1da590b7` / clockworklabs#5732 (submodule function
call separators docs fix).
- Source PR for the 2026-08-18 scheduler correction:
clockworklabs#5735 changed interval
rescheduling semantics; schedule table docs now state that missed
interval ticks are skipped and future ticks stay anchored to intended
run times.
- 2026-08-18 skills/docs consistency pass compared `skills/*/SKILL.md`
against public docs for CLI flows, SDK APIs, server module APIs, auth,
onboarding, deployment, scheduling, lifecycle contexts, and
cross-language consistency.
- The reducer context reference previously said lifecycle reducers may
lack `connectionId`; it now distinguishes `init`/scheduled/no-connection
calls from client-connected and client-disconnected reducers.
- Unrelated untracked local files were present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.

## Validation
- `pnpm --dir docs typecheck`
- `pnpm --dir docs build` (passed; emitted existing llms-txt warning for
`/docs/ask-ai/ask-ai` empty-content conversion)
- Previous validations on this PR: `pnpm build`, `node
codex-plugin/scripts/check-skills-sync.ts`, `git diff --check --
docs/docs/00200-core-concepts/00200-functions/00400-procedures.md`
- 2026-08-22 commit-impact pass checked new master commits `7c888afe8` /
clockworklabs#5576 (.NET 10 support and C# LLM benchmark cleanup), `6dee26c6e` /
clockworklabs#5764 (2.8.3 version bump), `8e410d284` / clockworklabs#5758 (unused dependency
cleanup), `8cb9d652d` / clockworklabs#5716 (standalone-supported smoketests in public
CI), `6bbe5f2eb` / clockworklabs#5774 (standalone module HTTP config), `e9f37a173` /
clockworklabs#5753 (public CI build-time reduction), and `fb7282411` / clockworklabs#5770 (absent
table pages in snapshots).
- Checked clockworklabs#5774 against public standalone configuration docs; the new
`[module-http]` setting is already documented on `master` and did not
need an audit-branch correction.
- 2026-08-22 skills/docs consistency pass compared `skills/*/SKILL.md`
against public docs for CLI flows, TypeScript/C#/Rust/C++ server APIs,
client SDK APIs, auth/onboarding, deployment, procedures/HTTP, schedule
tables, views, table accessors, MCP, and cross-language naming
consistency.
- The 2026-08-22 correction is not from a new master PR; it aligns
TypeScript public docs examples with the TypeScript server skill and
tables reference: `schema({...})` keys become server `ctx.db` accessors
verbatim, so examples now use snake_case keys matching table names
instead of camelCase accessors.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-08-22 validation: `pnpm --dir docs typecheck`; `pnpm --dir docs
build` (passed; emitted existing Docusaurus/browserslist freshness
notices and existing llms-txt warning for `/docs/ask-ai/ask-ai`
empty-content conversion).

- 2026-08-24 commit-impact pass checked new master commit `310d2e660` /
clockworklabs#5517 (websocket liveness checks and idle timeout close behavior).
Standalone websocket configuration docs already describe
`ping-interval`, `idle-timeout`, `close-handshake-timeout`, and
`incoming-queue-length`; no new docs correction was needed.
- 2026-08-24 skills/docs consistency pass compared `skills/*/SKILL.md`
against public docs for CLI flows, TypeScript/C#/Rust/C++ server APIs,
client SDK APIs, auth/onboarding, deployment, MCP, scheduling, views,
table accessors, websocket config, and cross-language naming
consistency. No additional high-confidence mismatch was found.
- Updated the existing open `bot/docs-audit` PR by merging current
`origin/master`; no new docs edits were added in this run.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-08-24 validation: `pnpm --dir docs typecheck`; `pnpm --dir docs
build` (passed; emitted existing Docusaurus update/browserslist
freshness notices and existing llms-txt warning for
`/docs/ask-ai/ask-ai` empty-content conversion).


- 2026-08-25 commit-impact pass checked new master commits `1740adf6e` /
clockworklabs#5640 (log level audit), `cfa9636a6` / clockworklabs#5775 (MCP route egress
tracking), `ee0892a8d` / clockworklabs#5785 (commitlog rotation/compression
durability fix), `36ad4bafa` / clockworklabs#5571 (.NET version and host OS
handling), and `2432a84b6` / clockworklabs#5780 (remove Emscripten from linux
smoketests).
- Source PR for the 2026-08-25 correction:
clockworklabs#5571 changed NativeAOT
host/version support checks; the CLI reference and CLI help now say
NativeAOT is supported on Windows and on Linux with .NET 10, instead of
Windows only.
- 2026-08-25 skills/docs consistency pass compared `skills/*/SKILL.md`
against public docs for CLI flows, C#/Rust/TypeScript/C++ server APIs,
client SDK APIs, auth/onboarding, deployment, MCP, scheduling, views,
table/index accessors, and cross-language consistency.
- Updated the existing open `bot/docs-audit` PR by merging current
`origin/master` and adding the NativeAOT support wording correction.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-08-25 validation: `git diff --check`; `cargo test -p
spacetimedb-cli dotnet --lib`.

- 2026-08-26 commit-impact pass checked new master commits `c0c19366a` /
clockworklabs#5761 (TypeScript provider reconnect token retention), `dd804c939` /
clockworklabs#5738 (Unity static state reset for generic table handles), `74167cc4e`
/ clockworklabs#5765 (module host init failure metric cause label), `ea1f39f13` /
clockworklabs#5792 (Unity WebGL IEnumerator import), `dca219155` / clockworklabs#5817 (codegen git
hash build-script move), and `2f268a89f` / clockworklabs#5819 (docs logo update).
- Checked clockworklabs#5761 against TypeScript client/provider connection docs and
token persistence examples; provider reconnect behavior and lower-level
`DbConnection` responsibilities are already documented.
- Checked clockworklabs#5738/clockworklabs#5792 against Unity setup/client docs; the Unity
tutorial already notes SDK static state reset with Domain Reloading
disabled, and the WebGL IEnumerator fix is an internal import correction
with no public docs change needed.
- Checked clockworklabs#5765 against public docs/skills; no public metrics reference
documents `spacetime_module_host_init_failures_total`, so no docs
correction was needed.
- 2026-08-26 skills/docs consistency pass compared `skills/*/SKILL.md`
against public docs for CLI flows, TypeScript/C#/Rust/C++ server APIs,
client SDK APIs, auth/onboarding, deployment, MCP, scheduling,
Unity/WebGL, table/index accessors, and cross-language consistency. No
additional high-confidence mismatch was found.
- Updated the existing open `bot/docs-audit` PR by merging current
`origin/master`; no new docs edits were added in this run.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-08-26 validation: `node
codex-plugin/scripts/check-skills-sync.ts`; `pnpm --dir docs typecheck`;
`pnpm --dir docs build` (passed; emitted existing Docusaurus
update/browserslist freshness notices and existing llms-txt warning for
`/docs/ask-ai/ask-ai` empty-content conversion).


- 2026-08-27 commit-impact pass checked new master commits `79b79e94d` /
clockworklabs#5794 (C# connection cleanup/leak fixes), `0a1b68d78` / clockworklabs#5797 (CI
build/test-suite cleanup), `6c3572e25` / clockworklabs#5565 (C++ multi-column support
for 3+ column queries), `0bc1b0d73` / clockworklabs#5824 (unexpected module host exit
metric), and `c1118efbb` / clockworklabs#5809 (commitlog decode error offsets).
- Source PR for the 2026-08-27 correction:
clockworklabs#5565 added C++ compile
coverage for 3+ column multi-column index filters and trailing range
filters; the indexes docs now state the generalized prefix/range rule
and the C++ range helper include behavior.
- Checked clockworklabs#5794 against C# client/Unity docs and skills for connection
callbacks, `FrameTick`, token persistence, and disconnect behavior; no
public docs correction was needed beyond existing guidance.
- Checked clockworklabs#5824 against public docs/skills; no public metrics reference
documents the new unexpected module host exit metric, so no docs
correction was needed.
- 2026-08-27 skills/docs consistency pass compared `skills/*/SKILL.md`
against public docs for CLI flows, TypeScript/C#/Rust/C++ server APIs,
client SDK APIs, auth/onboarding, deployment, MCP, scheduling,
Unity/Unreal ticking, table/index accessors, and cross-language
consistency.
- Updated the existing open `bot/docs-audit` PR by merging current
`origin/master` and adding the C++ multi-column range query wording
correction.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-08-27 validation: `git diff --check`; `node
codex-plugin/scripts/check-skills-sync.ts`; `pnpm --dir docs typecheck`;
`pnpm --dir docs build` (passed; emitted existing Docusaurus
update/browserslist freshness notices and existing llms-txt warning for
`/docs/ask-ai/ask-ai` empty-content conversion).



- 2026-08-30 commit-impact pass checked current master commits
`9e0d92412` / clockworklabs#5815 (merge-queue workflow reuse), `436b3e57a` / clockworklabs#5825
(procedure metrics attribution), and `69cd1ca3b` / clockworklabs#5833 (2.9.0 version
bump).
- Checked clockworklabs#5825 against public procedure/docs skill coverage; the change
is internal metrics attribution and no public metrics reference
documents the affected procedure metric behavior, so no docs correction
was needed.
- Checked clockworklabs#5833 against public docs and skills for version-specific
installation snippets, TypeScript package metadata, C# package
references, and tutorial version claims; no high-confidence public docs
drift was found.
- 2026-08-30 skills/docs consistency pass compared `skills/*/SKILL.md`
against public docs for CLI flows, TypeScript/C#/Rust/C++ server APIs,
client SDK APIs, auth/onboarding, deployment, MCP, scheduling, views,
event tables, table/index accessors, procedure/HTTP APIs,
Unity/Godot/Unreal ticking, and cross-language naming consistency. No
additional high-confidence mismatch was found.
- Updated the existing open `bot/docs-audit` PR description only; no new
docs edits or commits were added in this run.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-08-30 validation: `node
codex-plugin/scripts/check-skills-sync.ts`; `git diff --check`; `pnpm
--dir docs typecheck`.



- 2026-09-01 commit-impact pass checked new master commits `ffc2e4820` /
clockworklabs#5768 (snapshot worker now publishes `Option<TxOffset>`) and `b0661c3cc`
/ clockworklabs#5850 (public release workflow rejects direct manual invocations).
- Checked clockworklabs#5768 against public docs and skills; the changed snapshot
worker watch API is internal engine plumbing and no public docs
correction was needed.
- Checked clockworklabs#5850 against public docs and skills; the direct public
release workflow guard is internal release automation behavior and no
public docs correction was needed.
- 2026-09-01 skills/docs consistency pass compared all 11
`skills/*/SKILL.md` files against public docs for CLI flows,
TypeScript/C#/Rust/C++ server APIs, client SDK APIs, Unity/Unreal
ticking, auth/onboarding, deployment, MCP, scheduling, procedures/HTTP,
views, indexes, and cross-language naming consistency. No additional
high-confidence mismatch was found.
- Updated the existing open `bot/docs-audit` PR by merging current
`origin/master`; no new docs edits were added in this run.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-09-01 validation: `node
codex-plugin/scripts/check-skills-sync.ts`; `git diff --check`; `pnpm
--dir docs typecheck`.

- 2026-09-02 commit-impact pass checked new master commits `f49ceae3a` /
clockworklabs#5830 (commitlog fdatasync on segment open), `5f3e26bf2` / clockworklabs#5829
(commitlog write-failure regression test), `c97256c88` / clockworklabs#5857 (CI
ubuntu version pinning), `a272e1919` / clockworklabs#5852 (Unity WebGL build
coverage), `7c462bb47` / clockworklabs#5731 (rollback safety PR checks), `549489e97`
/ clockworklabs#5707 (TypeScript SDK routes established websocket errors to
`onDisconnect`), and `f08dc302a` / clockworklabs#5836 (C++ auto-increment macro
symbol collision fix).
- Checked clockworklabs#5707 against TypeScript client reference and troubleshooting
docs; `onDisconnect` already documents disconnects due to errors, and
troubleshooting already tells users to register
`onConnectError`/`onDisconnect` callbacks.
- Checked clockworklabs#5836 against C++ server skill/docs for auto-increment macros
and range-query include guidance; no public docs correction was needed.
- Checked clockworklabs#5852 against Unity client docs and skill guidance for
WebGL/ticking; the change adds CI coverage and no public docs correction
was needed.
- 2026-09-02 skills/docs consistency pass compared all 11
`skills/*/SKILL.md` files against public docs for CLI flows,
TypeScript/C#/Rust/C++ server APIs, client SDK APIs, Unity/Unreal
ticking, auth/onboarding, deployment, MCP, scheduling, procedures/HTTP,
views, indexes, and cross-language naming consistency. No additional
high-confidence mismatch was found.
- Updated the existing open `bot/docs-audit` PR by merging current
`origin/master`; no new docs edits were added in this run.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-09-02 validation: `node
codex-plugin/scripts/check-skills-sync.ts`; `git diff --check`; `pnpm
--dir docs typecheck`; `pnpm --dir docs build` (passed; emitted existing
Docusaurus update/browserslist freshness notices and existing llms-txt
warning for `/docs/ask-ai/ask-ai` empty-content conversion).


- 2026-09-03 commit-impact pass checked new master commits `2fc8f8221` /
clockworklabs#5849 (RootRoutes for `/v1/mcp`) and `2fe329243` / clockworklabs#5861 (CI runner
label update).
- Source PR for the 2026-09-03 MCP endpoint correction:
clockworklabs#5849 added root-route
support for `/v1/mcp`; the public MCP reference now documents direct
HTTP MCP endpoints alongside `spacetime mcp`.
- Checked clockworklabs#5861 against public docs and skills; the CI runner label
change is internal workflow plumbing and no public docs correction was
needed.
- 2026-09-03 skills/docs consistency pass compared all 11
`skills/*/SKILL.md` files against public docs for CLI flows,
TypeScript/C#/Rust/C++ server APIs, client SDK APIs, Unity/Unreal
ticking, auth/onboarding, deployment, MCP, scheduling, procedures/HTTP,
views, indexes, and cross-language naming consistency.
- Also corrected the TypeScript lifecycle docs to guard nullable
`ctx.connectionId`, matching the TypeScript server skill and reducer
context reference.
- Updated the existing open `bot/docs-audit` PR by merging current
`origin/master` and adding the MCP/lifecycle docs corrections.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-09-03 validation: `pnpm --dir docs build` (passed; emitted
existing Docusaurus update/browserslist freshness notices and existing
llms-txt warning for `/docs/ask-ai/ask-ai` empty-content conversion).


- 2026-09-04 commit-impact pass checked new master commits `28071acff` /
clockworklabs#5610 (C# generated direct dispatch for reducers, procedures, HTTP
handlers, views, and anonymous views), `53772f867` / clockworklabs#5866 (jsonwebtoken
11 upgrade and custom header-field regression coverage), `3663fa112` /
clockworklabs#5867 (`spacetime dev` no longer forwards C#-only .NET options to non-C#
templates), `0c0365406` / clockworklabs#5868 (2.10.0 version bump), and `baca5cdf7` /
clockworklabs#5848 (CI runner caching with sccache).
- Source PR for the 2026-09-04 C# snippet correction:
clockworklabs#5610 reinforced
generated C# module entrypoint dispatch through public static module
members; public docs now consistently show `public static partial class
Module` in C# module examples.
- Checked clockworklabs#5866 against public auth/key-architecture docs and skills;
the JWT library upgrade and custom header handling are implementation
hardening and no public docs correction was needed.
- Checked clockworklabs#5867 against CLI docs and the CLI skill; `spacetime
dev`/`init` .NET option wording already describes C# targeting without
telling non-C# users to pass C#-only options.
- Checked clockworklabs#5868 against install/package snippets and versioned
references; no high-confidence public docs drift was found beyond
current examples using wildcard or unpinned package versions where
appropriate.
- 2026-09-04 skills/docs consistency pass compared all 11
`skills/*/SKILL.md` files against public docs for CLI flows,
TypeScript/C#/Rust/C++ server APIs, client SDK APIs, Unity/Unreal
ticking, auth/onboarding, deployment, MCP, scheduling, procedures/HTTP,
views, indexes, and cross-language consistency.
- Also corrected access-permissions view wording so it no longer says
views can iterate full tables, and fixed a duplicate C# RLS filter
constant in the recursive-rules example.
- Updated the existing open `bot/docs-audit` PR by merging current
`origin/master` and adding the C# module snippet/view-access
corrections.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-09-04 validation: `node
codex-plugin/scripts/check-skills-sync.ts`; `git diff --check`; `pnpm
--dir docs typecheck`; `pnpm --dir docs build` (passed; emitted existing
Docusaurus update/browserslist freshness notices and existing llms-txt
warning for `/docs/ask-ai/ask-ai` empty-content conversion).


- 2026-09-05 commit-impact pass checked new master commits `9cfb2b7e9` /
clockworklabs#5871 (npm release workflow uses GitHub-provided runner) and `3653d2ed4`
/ clockworklabs#5872 (`update-mirror-latest-version` release workflow uses
`ubuntu-latest`). Both are internal release automation changes and no
public docs correction was needed.
- 2026-09-05 skills/docs consistency pass compared all 11
`skills/*/SKILL.md` files against public docs for CLI flows,
TypeScript/C#/Rust/C++ server APIs, client SDK APIs, Unity/Unreal
ticking, auth/onboarding, deployment, MCP, scheduling, procedures/HTTP,
views, indexes, and cross-language consistency. No additional
high-confidence mismatch was found.
- Updated the existing open `bot/docs-audit` PR by merging current
`origin/master`; no new docs edits were added in this run.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-09-05 validation: `node
codex-plugin/scripts/check-skills-sync.ts`; `git diff --check`; `pnpm
--dir docs typecheck`.



- 2026-09-06 commit-impact pass found no new `origin/master` commits
after the 2026-09-05 audit baseline; `bot/docs-audit` was already up to
date with current `origin/master` after fetch.
- 2026-09-06 skills/docs consistency pass compared all 11
`skills/*/SKILL.md` files against public docs for CLI flows,
TypeScript/C#/Rust/C++ server APIs, client SDK APIs, Unity/Unreal
ticking, auth/onboarding, deployment, MCP, scheduling, lifecycle
contexts, procedures/HTTP, views, indexes, and cross-language
consistency.
- The 2026-09-06 correction is not from a new master PR; it aligns
lifecycle reducer examples with the nullable/optional connection ID API
shape used by the language SDKs and server skills.
- Updated the existing open `bot/docs-audit` PR with the lifecycle
connection ID example correction.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-09-06 validation: `node
codex-plugin/scripts/check-skills-sync.ts`; `git diff --check --
docs/docs/00200-core-concepts/00200-functions/00300-reducers/00500-lifecycle.md`;
`pnpm --dir docs typecheck`.


- 2026-09-08 commit-impact pass found no new `origin/master` commits
after the current `bot/docs-audit` branch's merged `origin/master`
baseline; `git log HEAD..origin/master` was empty after fetch and merge
preflight reported the branch already up to date.
- 2026-09-08 skills/docs consistency pass compared all 11
`skills/*/SKILL.md` files against public docs for CLI flows,
TypeScript/C#/Rust/C++ server APIs, client SDK APIs, Unity/Unreal
ticking, auth/onboarding, deployment, MCP, scheduling, lifecycle
contexts, procedures/HTTP, views, indexes, and cross-language
consistency.
- The 2026-09-08 correction is not from a new master PR; it aligns
current TypeScript docs snippets with the TypeScript server/client skill
casing guidance by using camelCase for TypeScript exports, schema
keys/accessors, reducer/procedure arguments, and row fields while
preserving explicit `name: 'snake_case'` canonical database names where
shown.
- Updated the existing open `bot/docs-audit` PR with the TypeScript
casing correction.
- Unrelated untracked local files remained present at repo root
(`.openclaw/`, `AGENTS.md`, `HEARTBEAT.md`, `IDENTITY.md`, `SOUL.md`,
`TOOLS.md`, `USER.md`) and were left untouched.
- 2026-09-08 validation: `node
codex-plugin/scripts/check-skills-sync.ts`; `git diff --check --
docs/docs`; TypeScript docs casing scanner for current TypeScript/TSX
docs blocks (only external OIDC field names remain snake_case); `pnpm
--dir docs typecheck`; `pnpm --dir docs build` (passed; emitted existing
Docusaurus update/Browserslist freshness notices and existing llms-txt
warning for `/docs/ask-ai/ask-ai` empty-content conversion).

---------

Co-authored-by: clockwork-labs-bot <clockwork-labs-bot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants