csuite-cli
Minor Changes
-
#311
20cd8c1Thanks @andrew-jon-p7a! - Breaking.process_documentis renamedteam_processacross the agent-facing surface, the wire, the SDK and storage. "Document" named the storage shape, not the concept: it framed the team's process as a static artifact to fetch rather than operational context to consult, and neither the permission leaf (process.manage) nor the store's own description had ever used the word. Bareprocesswas not an option — it shadows Node's global and reads as the runtime process at every call site — andteam_processrules that reading out on sight.What moves:
- MCP tools.
process_document_get,process_document_historyandprocess_document_writebecometeam_process_get,team_process_historyandteam_process_write. Only the new names are advertised intools/list. The old names still dispatch for this one release, because tool names are quoted in prose that does not auto-update (team instructions, the team process text itself) and a hard rename would strand a caller reading them out of it; each such call logs awarnrecord naming the alias and its replacement so stale references can be found. The aliases are removed in the next minor. - REST.
GET/PUT /process-documentandGET /process-document/historybecome/team-processand/team-process/history. TheGET /instructionsfieldprocessDocumentbecomesteamProcess, and the instruction-block kindprocess_document— inblocks, in instruction events and in the context watchdog'scontext.block.kindattribute — becomesteam_process. - SDK. The
ProcessDocument*types and schemas becomeTeamProcess*(TeamProcess,TeamProcessEdit,EditTeamProcessRequest,TEAM_PROCESS_MAX,TEAM_PROCESS_PATHS, …), andClient.getProcessDocument,processDocumentHistoryandwriteProcessDocumentbecomegetTeamProcess,teamProcessHistoryandwriteTeamProcess.csuite-corenow exportscreateSqliteTeamProcessStore,TeamProcessStoreandTeamProcessError. - Permission.
process.managebecomesteam_process.manage. There is no permissions migration:raw_permissionsis stored verbatim and resolved on every read, and the resolver maps the old name to the new one, so a member or template saved underprocess.managekeeps the capability with no row rewritten. Both names are accepted on write. - Database. The tables
process_documentandprocess_document_editsbecometeam_processandteam_process_edits. The store renames them in place on first open, deciding fromsqlite_masterrather than from a caught error: a fresh database gets the new names directly, a pre-rename database is renamed with every row — including the append-only edit history — preserved, and an already-migrated database is left untouched, so opening twice is the same as opening once.
Upgrade brokers and runners together. A runner built before this change validates the
GET /instructionspacket against a block-kind enum that has noteam_processin it and rejects the whole response, so a new broker leaves an older runner unable to fetch its instructions at all — the same lockstep 0.9.0 asked for.The instruction-version hash is computed from the same inputs as before, so upgrading does not mark any runner restart-pending.
- MCP tools.
Patch Changes
- #311
20cd8c1Thanks @andrew-jon-p7a! - Instruction and environment restarts now start the agent cold instead of resuming the prior conversation. The successor gets the refreshed instructions and the runner'scontext_refreshre-brief on its open objectives, and itssession_startsays why (resumed: falsewithresumeReason: 'instructions changed','environment changed', or'environment reloaded'); a fresh MCP session is always re-briefed, even inside the cooldown that folds an attach and a compaction. Resuming there was the source of a capture defect measured in production: a restarted runner re-read the whole resumed transcript as new activity — 1000+ rows spanning 15 hours in one second — saturating the uploader and dropping 40–88% of events. Two fixes close that regardless of how a session restarts: the transcript reader follows a changedtranscript_path(a new file after any agent swap) while keeping its line-uuid dedup, and every transcript-derivedActivityEventcarries an optionalsourceIdthat the broker dedups on (member_activity.source_id, a partial unique index added lazily; id-less events from older runners are stored as before). The runner no longer predicts resume from the filesystem: bare--resumeoncsuite claudehands the decision to Claude Code (continue, which starts fresh when nothing exists), and oncsuite codexstarts a new thread loudly, since codex resumes by id only; explicit--resume <id>stays strict on both.
csuite-server
Minor Changes
-
#311
20cd8c1Thanks @andrew-jon-p7a! - Breaking.process_documentis renamedteam_processacross the agent-facing surface, the wire, the SDK and storage. "Document" named the storage shape, not the concept: it framed the team's process as a static artifact to fetch rather than operational context to consult, and neither the permission leaf (process.manage) nor the store's own description had ever used the word. Bareprocesswas not an option — it shadows Node's global and reads as the runtime process at every call site — andteam_processrules that reading out on sight.What moves:
- MCP tools.
process_document_get,process_document_historyandprocess_document_writebecometeam_process_get,team_process_historyandteam_process_write. Only the new names are advertised intools/list. The old names still dispatch for this one release, because tool names are quoted in prose that does not auto-update (team instructions, the team process text itself) and a hard rename would strand a caller reading them out of it; each such call logs awarnrecord naming the alias and its replacement so stale references can be found. The aliases are removed in the next minor. - REST.
GET/PUT /process-documentandGET /process-document/historybecome/team-processand/team-process/history. TheGET /instructionsfieldprocessDocumentbecomesteamProcess, and the instruction-block kindprocess_document— inblocks, in instruction events and in the context watchdog'scontext.block.kindattribute — becomesteam_process. - SDK. The
ProcessDocument*types and schemas becomeTeamProcess*(TeamProcess,TeamProcessEdit,EditTeamProcessRequest,TEAM_PROCESS_MAX,TEAM_PROCESS_PATHS, …), andClient.getProcessDocument,processDocumentHistoryandwriteProcessDocumentbecomegetTeamProcess,teamProcessHistoryandwriteTeamProcess.csuite-corenow exportscreateSqliteTeamProcessStore,TeamProcessStoreandTeamProcessError. - Permission.
process.managebecomesteam_process.manage. There is no permissions migration:raw_permissionsis stored verbatim and resolved on every read, and the resolver maps the old name to the new one, so a member or template saved underprocess.managekeeps the capability with no row rewritten. Both names are accepted on write. - Database. The tables
process_documentandprocess_document_editsbecometeam_processandteam_process_edits. The store renames them in place on first open, deciding fromsqlite_masterrather than from a caught error: a fresh database gets the new names directly, a pre-rename database is renamed with every row — including the append-only edit history — preserved, and an already-migrated database is left untouched, so opening twice is the same as opening once.
Upgrade brokers and runners together. A runner built before this change validates the
GET /instructionspacket against a block-kind enum that has noteam_processin it and rejects the whole response, so a new broker leaves an older runner unable to fetch its instructions at all — the same lockstep 0.9.0 asked for.The instruction-version hash is computed from the same inputs as before, so upgrading does not mark any runner restart-pending.
- MCP tools.
Patch Changes
- #311
20cd8c1Thanks @andrew-jon-p7a! - Instruction and environment restarts now start the agent cold instead of resuming the prior conversation. The successor gets the refreshed instructions and the runner'scontext_refreshre-brief on its open objectives, and itssession_startsays why (resumed: falsewithresumeReason: 'instructions changed','environment changed', or'environment reloaded'); a fresh MCP session is always re-briefed, even inside the cooldown that folds an attach and a compaction. Resuming there was the source of a capture defect measured in production: a restarted runner re-read the whole resumed transcript as new activity — 1000+ rows spanning 15 hours in one second — saturating the uploader and dropping 40–88% of events. Two fixes close that regardless of how a session restarts: the transcript reader follows a changedtranscript_path(a new file after any agent swap) while keeping its line-uuid dedup, and every transcript-derivedActivityEventcarries an optionalsourceIdthat the broker dedups on (member_activity.source_id, a partial unique index added lazily; id-less events from older runners are stored as before). The runner no longer predicts resume from the filesystem: bare--resumeoncsuite claudehands the decision to Claude Code (continue, which starts fresh when nothing exists), and oncsuite codexstarts a new thread loudly, since codex resumes by id only; explicit--resume <id>stays strict on both.
csuite-core
Minor Changes
-
#311
20cd8c1Thanks @andrew-jon-p7a! - Breaking.process_documentis renamedteam_processacross the agent-facing surface, the wire, the SDK and storage. "Document" named the storage shape, not the concept: it framed the team's process as a static artifact to fetch rather than operational context to consult, and neither the permission leaf (process.manage) nor the store's own description had ever used the word. Bareprocesswas not an option — it shadows Node's global and reads as the runtime process at every call site — andteam_processrules that reading out on sight.What moves:
- MCP tools.
process_document_get,process_document_historyandprocess_document_writebecometeam_process_get,team_process_historyandteam_process_write. Only the new names are advertised intools/list. The old names still dispatch for this one release, because tool names are quoted in prose that does not auto-update (team instructions, the team process text itself) and a hard rename would strand a caller reading them out of it; each such call logs awarnrecord naming the alias and its replacement so stale references can be found. The aliases are removed in the next minor. - REST.
GET/PUT /process-documentandGET /process-document/historybecome/team-processand/team-process/history. TheGET /instructionsfieldprocessDocumentbecomesteamProcess, and the instruction-block kindprocess_document— inblocks, in instruction events and in the context watchdog'scontext.block.kindattribute — becomesteam_process. - SDK. The
ProcessDocument*types and schemas becomeTeamProcess*(TeamProcess,TeamProcessEdit,EditTeamProcessRequest,TEAM_PROCESS_MAX,TEAM_PROCESS_PATHS, …), andClient.getProcessDocument,processDocumentHistoryandwriteProcessDocumentbecomegetTeamProcess,teamProcessHistoryandwriteTeamProcess.csuite-corenow exportscreateSqliteTeamProcessStore,TeamProcessStoreandTeamProcessError. - Permission.
process.managebecomesteam_process.manage. There is no permissions migration:raw_permissionsis stored verbatim and resolved on every read, and the resolver maps the old name to the new one, so a member or template saved underprocess.managekeeps the capability with no row rewritten. Both names are accepted on write. - Database. The tables
process_documentandprocess_document_editsbecometeam_processandteam_process_edits. The store renames them in place on first open, deciding fromsqlite_masterrather than from a caught error: a fresh database gets the new names directly, a pre-rename database is renamed with every row — including the append-only edit history — preserved, and an already-migrated database is left untouched, so opening twice is the same as opening once.
Upgrade brokers and runners together. A runner built before this change validates the
GET /instructionspacket against a block-kind enum that has noteam_processin it and rejects the whole response, so a new broker leaves an older runner unable to fetch its instructions at all — the same lockstep 0.9.0 asked for.The instruction-version hash is computed from the same inputs as before, so upgrading does not mark any runner restart-pending.
- MCP tools.
Patch Changes
- #311
20cd8c1Thanks @andrew-jon-p7a! - Instruction and environment restarts now start the agent cold instead of resuming the prior conversation. The successor gets the refreshed instructions and the runner'scontext_refreshre-brief on its open objectives, and itssession_startsays why (resumed: falsewithresumeReason: 'instructions changed','environment changed', or'environment reloaded'); a fresh MCP session is always re-briefed, even inside the cooldown that folds an attach and a compaction. Resuming there was the source of a capture defect measured in production: a restarted runner re-read the whole resumed transcript as new activity — 1000+ rows spanning 15 hours in one second — saturating the uploader and dropping 40–88% of events. Two fixes close that regardless of how a session restarts: the transcript reader follows a changedtranscript_path(a new file after any agent swap) while keeping its line-uuid dedup, and every transcript-derivedActivityEventcarries an optionalsourceIdthat the broker dedups on (member_activity.source_id, a partial unique index added lazily; id-less events from older runners are stored as before). The runner no longer predicts resume from the filesystem: bare--resumeoncsuite claudehands the decision to Claude Code (continue, which starts fresh when nothing exists), and oncsuite codexstarts a new thread loudly, since codex resumes by id only; explicit--resume <id>stays strict on both.
csuite-sdk
Minor Changes
-
#311
20cd8c1Thanks @andrew-jon-p7a! - Breaking.process_documentis renamedteam_processacross the agent-facing surface, the wire, the SDK and storage. "Document" named the storage shape, not the concept: it framed the team's process as a static artifact to fetch rather than operational context to consult, and neither the permission leaf (process.manage) nor the store's own description had ever used the word. Bareprocesswas not an option — it shadows Node's global and reads as the runtime process at every call site — andteam_processrules that reading out on sight.What moves:
- MCP tools.
process_document_get,process_document_historyandprocess_document_writebecometeam_process_get,team_process_historyandteam_process_write. Only the new names are advertised intools/list. The old names still dispatch for this one release, because tool names are quoted in prose that does not auto-update (team instructions, the team process text itself) and a hard rename would strand a caller reading them out of it; each such call logs awarnrecord naming the alias and its replacement so stale references can be found. The aliases are removed in the next minor. - REST.
GET/PUT /process-documentandGET /process-document/historybecome/team-processand/team-process/history. TheGET /instructionsfieldprocessDocumentbecomesteamProcess, and the instruction-block kindprocess_document— inblocks, in instruction events and in the context watchdog'scontext.block.kindattribute — becomesteam_process. - SDK. The
ProcessDocument*types and schemas becomeTeamProcess*(TeamProcess,TeamProcessEdit,EditTeamProcessRequest,TEAM_PROCESS_MAX,TEAM_PROCESS_PATHS, …), andClient.getProcessDocument,processDocumentHistoryandwriteProcessDocumentbecomegetTeamProcess,teamProcessHistoryandwriteTeamProcess.csuite-corenow exportscreateSqliteTeamProcessStore,TeamProcessStoreandTeamProcessError. - Permission.
process.managebecomesteam_process.manage. There is no permissions migration:raw_permissionsis stored verbatim and resolved on every read, and the resolver maps the old name to the new one, so a member or template saved underprocess.managekeeps the capability with no row rewritten. Both names are accepted on write. - Database. The tables
process_documentandprocess_document_editsbecometeam_processandteam_process_edits. The store renames them in place on first open, deciding fromsqlite_masterrather than from a caught error: a fresh database gets the new names directly, a pre-rename database is renamed with every row — including the append-only edit history — preserved, and an already-migrated database is left untouched, so opening twice is the same as opening once.
Upgrade brokers and runners together. A runner built before this change validates the
GET /instructionspacket against a block-kind enum that has noteam_processin it and rejects the whole response, so a new broker leaves an older runner unable to fetch its instructions at all — the same lockstep 0.9.0 asked for.The instruction-version hash is computed from the same inputs as before, so upgrading does not mark any runner restart-pending.
- MCP tools.
Patch Changes
- #311
20cd8c1Thanks @andrew-jon-p7a! - Instruction and environment restarts now start the agent cold instead of resuming the prior conversation. The successor gets the refreshed instructions and the runner'scontext_refreshre-brief on its open objectives, and itssession_startsays why (resumed: falsewithresumeReason: 'instructions changed','environment changed', or'environment reloaded'); a fresh MCP session is always re-briefed, even inside the cooldown that folds an attach and a compaction. Resuming there was the source of a capture defect measured in production: a restarted runner re-read the whole resumed transcript as new activity — 1000+ rows spanning 15 hours in one second — saturating the uploader and dropping 40–88% of events. Two fixes close that regardless of how a session restarts: the transcript reader follows a changedtranscript_path(a new file after any agent swap) while keeping its line-uuid dedup, and every transcript-derivedActivityEventcarries an optionalsourceIdthat the broker dedups on (member_activity.source_id, a partial unique index added lazily; id-less events from older runners are stored as before). The runner no longer predicts resume from the filesystem: bare--resumeoncsuite claudehands the decision to Claude Code (continue, which starts fresh when nothing exists), and oncsuite codexstarts a new thread loudly, since codex resumes by id only; explicit--resume <id>stays strict on both.
csuite-web-ui
Minor Changes
-
#311
20cd8c1Thanks @andrew-jon-p7a! - Breaking.process_documentis renamedteam_processacross the agent-facing surface, the wire, the SDK and storage. "Document" named the storage shape, not the concept: it framed the team's process as a static artifact to fetch rather than operational context to consult, and neither the permission leaf (process.manage) nor the store's own description had ever used the word. Bareprocesswas not an option — it shadows Node's global and reads as the runtime process at every call site — andteam_processrules that reading out on sight.What moves:
- MCP tools.
process_document_get,process_document_historyandprocess_document_writebecometeam_process_get,team_process_historyandteam_process_write. Only the new names are advertised intools/list. The old names still dispatch for this one release, because tool names are quoted in prose that does not auto-update (team instructions, the team process text itself) and a hard rename would strand a caller reading them out of it; each such call logs awarnrecord naming the alias and its replacement so stale references can be found. The aliases are removed in the next minor. - REST.
GET/PUT /process-documentandGET /process-document/historybecome/team-processand/team-process/history. TheGET /instructionsfieldprocessDocumentbecomesteamProcess, and the instruction-block kindprocess_document— inblocks, in instruction events and in the context watchdog'scontext.block.kindattribute — becomesteam_process. - SDK. The
ProcessDocument*types and schemas becomeTeamProcess*(TeamProcess,TeamProcessEdit,EditTeamProcessRequest,TEAM_PROCESS_MAX,TEAM_PROCESS_PATHS, …), andClient.getProcessDocument,processDocumentHistoryandwriteProcessDocumentbecomegetTeamProcess,teamProcessHistoryandwriteTeamProcess.csuite-corenow exportscreateSqliteTeamProcessStore,TeamProcessStoreandTeamProcessError. - Permission.
process.managebecomesteam_process.manage. There is no permissions migration:raw_permissionsis stored verbatim and resolved on every read, and the resolver maps the old name to the new one, so a member or template saved underprocess.managekeeps the capability with no row rewritten. Both names are accepted on write. - Database. The tables
process_documentandprocess_document_editsbecometeam_processandteam_process_edits. The store renames them in place on first open, deciding fromsqlite_masterrather than from a caught error: a fresh database gets the new names directly, a pre-rename database is renamed with every row — including the append-only edit history — preserved, and an already-migrated database is left untouched, so opening twice is the same as opening once.
Upgrade brokers and runners together. A runner built before this change validates the
GET /instructionspacket against a block-kind enum that has noteam_processin it and rejects the whole response, so a new broker leaves an older runner unable to fetch its instructions at all — the same lockstep 0.9.0 asked for.The instruction-version hash is computed from the same inputs as before, so upgrading does not mark any runner restart-pending.
- MCP tools.