Risky behavior now covered
- Provider catalog loads drop a stale revision, including a stale failure, and overlay the live session model onto the newest snapshot.
- Concurrent provider-status refreshes publish only the newest result. An in-flight failure stays silent while a newer refresh is pending, and Bedrock discovery stays requested if any coalesced call asked for it.
- Manual backup restore/delete is rejected immediately while a turn is running, even if the turn ends before the call is awaited.
- Overlapping automatic checkpoints produce one checkpoint inside the 30s interval, and the next immediate call is skipped.
- Disabled backups report that backups are disabled, create nothing, and clear the auto-checkpoint throttle.
- A failed backup initialization stays failed for later manual checkpoints until availability sync retries it.
- Skill and plugin mutations invalidate the plugin catalog, refresh workspace skills, emit local catalogs, then queue the remote refresh. A selected installation detail is emitted only after those surfaces, and an earlier failure does not queue a remote catalog.
- Shared skill refresh includes other workspaces, dedupes a session bound twice, skips a null runtime, and treats every session as external when no source session is named.
- Workspace kind classification keeps an explicit or path-sourced project under the one-off chats root, and reclassifies a default project label from that path.
Test files added/updated
test/session/providerCatalogManager.test.ts
test/session/sessionBackupController.test.ts
test/session/extensionMutationCoordinator.test.ts
test/skillMutationRefresh.test.ts
test/jsonrpc.workspace-kind.test.ts
Why these tests materially reduce regression risk
These paths decide which provider snapshot clients see, whether a backup mutation runs during a turn, whether a failed backup can recover, and which sessions reload skills after a mutation. The existing session suites cover the happy paths, but not the revision race, the auto-checkpoint interval, sticky init failure, or the mutation refresh order. A regression here would surface as a stale catalog, an extra checkpoint, a backup that never retries, or a skill install that refreshes the wrong workspace.
Validation
bun test on the five new files plus test/platform-boundary.test.ts: 18 pass
bunx tsc --noEmit: clean
bunx biome check on the touched files: clean
- No production behavior changes