nvoken
DocumentationBreaking changes

Reference

Breaking changes

The 0.32.0 identifier change and the intentional 0.30.0 hard cut.

0.32.0 changes every resource ID

Resource IDs are canonical UUIDs. The turn_, conv_, agent_, and mspc_ prefixes are gone, and so is the validation that required them.

before  turn_01h455vb4pex5vsknk084sn02q
after   01890a5d-ac96-774b-bcce-b302099a8057
  1. Upgrade every client and the CLI to 0.32.0 together. The 0.31 clients validated the prefixed form and raise on every ID this API now returns.
  2. Store IDs in a column wide enough for 36 characters, and re-fetch any ID you persisted before the change — the old values name nothing.
  3. Drop default_tenant from calls to /v1/credits, /v1/credits/allocations, and /v1/turns, and send a real tenant_key. tenant_key is no longer nullable in any response.
  4. Set max_iterations on any Turn that needs a cap. There is no longer a service default, only a runaway ceiling.

IDs are opaque, and now stay that way

nvoken mints UUIDv7, but the contract declares no pattern for a record ID and the API asserts nothing about the shape of one you supply. A tool_call_id your application chooses is stored, compared, and returned as written.

This is deliberate. 0.31 briefly compiled an ID pattern into every generated client, which is what made 0.32 a breaking change for all of them at once. Nothing constrains record ID shape now, so a future change to what nvoken mints will not break a client that treats IDs as opaque strings. Trace and span IDs are the exception and keep their W3C formats.

0.30.0 is a clean contract boundary

There is no compatibility mode, alias resource, translation layer, or data backfill for the pre-0.30 runtime model. Upgrade the service and every SDK/CLI consumer together, start from the new schema epoch, and recreate development data through the current APIs.

Update application code

  1. Create one owner-namespaced Agent instead of a template plus customer instance. Publish immutable revisions to change stored behavior.
  2. Start a Turn with agent.start, agent.run, or agent.text. Use client.inline for one-off behavior.
  3. State tenant and optional actor user on every machine Turn. They are not inferred from resource ownership.
  4. Add a Conversation only when ordered transcript continuity is needed.
  5. Select a MemorySpace independently with user scope or an explicit tenant namespace; use none when memory is disabled.
  6. Persist Turn IDs and stable idempotency keys. Reconstruct work with client.turn(id, { tenant, user }) after uncertain admission or disconnect.
  7. Replace CLI scripts with the agent, turn, conversation, and memory-space command groups.

Do not recreate the removed coupling

An Agent does not own a Conversation or MemorySpace. A Conversation does not select an Agent or actor. An actor user does not silently select memory. A tenant MemorySpace namespace is a host sharing decision, not evidence of group membership.

The current quickstart and TypeScript SDK guide show the supported 0.32 client surface. The resource model is still the 0.30 contract; 0.32 changes what an identifier looks like, not what the resources are.