Skip to content

feat: session occupancy lock, default workspace, and shared session rating rules - #390

Merged
elkaix merged 15 commits into
mainfrom
fix/reconcile-2026-10-20
Oct 20, 2026
Merged

elkaix merged 15 commits into
mainfrom
fix/reconcile-2026-10-20

Conversation

@elkaix

@elkaix elkaix commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Requirement or Bug

Lock a session to one writer, add a default workspace, share the session rating rules, and fix three session bugs.

Bug Reproduction Steps

  1. Archived session events: archive a session, restore it, then send a prompt from a web client. No more session events arrive for that session.
  2. Wedged turn: interrupt a turn so it never ends (kill the process mid-turn), then restart and open the session. The conversation view stops at an old point, and the interrupted turn shows as completed.
  3. Two writers: open one session in two clients (TUI and web, or two TUIs) and send from both. Both write to the same session journal, and each client works from a stale copy of the other's turns.

Root Cause

  1. The gateway kept per-session event state after close and archive. A restored session reused the stale state, so new events were not sent.
  2. When the transcript is rebuilt, turn ordinals were renumbered locally instead of taken from the wire ids, so later turns landed at the wrong position. A turn that never ended was rebuilt as completed.
  3. Nothing stopped a second process from writing to a session another process was writing to.

All three are fixes at the root, not workarounds.

Code Changes

Session lock. A session can have one writing process at a time. Before a turn, a manual compaction, or a print-mode run, the session run gate takes the lock and checks the session files for changes made by another process.

  begin turn / manual compaction / print run
+   sessionRunGate.begin()
+     hold lock          -> another process holds it: "session occupied"
+     wire changed on disk -> release, "session stale"
    run
+ idle 3 s -> release lock
  • TUI: "Session in use" dialog with retry and cancel. A stale session is reloaded, then the message is sent again.
  • Print mode: reloads a stale session once; an occupied session ends with exit code 4 (and an error line in stream-json).
  • SDK, ACP, web: get the same two errors from the engine.
  • PYTHINKER_CODE_SESSION_LOCK=0 (also false / off) turns the lock and the stale checks off. Documented in docs/configuration/env-vars.md.

Default workspace. The gateway now accepts a new session without a workspace or cwd. It creates and uses ~/PythinkerCode/Default; [default_workspace] path in config.toml chooses another folder.

  packages/agent-core-v2/src/app/
+   defaultWorkspace/   config section, path rules, ensure()
  packages/agent-gateway/src/routes/sessions.ts
+   workDir ??= defaultWorkspace.ensure()

Shared session rating rules. The survey rules move from the CLI into a new private workspace package, so the TUI and the server use the same rules.

+ packages/product/          @pymodel/pythinker-code-product (private)
+   src/client-configs/     config fetch + disk cache
+   src/session-rating/     eligibility rules, server host
  apps/pythinker-code/src/utils/
-   survey-popup-config.ts  moved into packages/product
  packages/agent-gateway/src/routes/
+   sessionRating.ts        POST /api/v1/sessions/{session_id}/rating
  • Client configs are fetched only when CUSTOM_API_BASE_URL is set. Without it, no request and no cache read.
  • The opt-out moves from tui.toml to disable_feedback_survey in config.toml. An existing tui.toml value is moved over on the next start.
  • packages/product is in both flake.nix workspace lists.

Session events. The broadcaster drops a session's event state on close and archive.

Transcript. Rebuilt turns take their ordinals from the wire ids, and a turn without an end record is marked failed.

Other fixes found on the way.

  • klient config.changed / config.sectionChanged dropped every event whose value or previousValue was undefined; both are now optional.
  • The engine test harness flushLog() did nothing; it now flushes persistence.
  • Remote Control HTTP tunnel limits can be injected, so tests cover chunking and request limits without large payloads. Defaults do not change.
  • AGENTS.md: review scope rules.
  • Two gateway errors shared code 40420; "Expert Talk run not found" moves to 40422. The new codes are 40939 (default workspace unavailable), 40940 (session occupied) and 40941 (session stale).

Behavior Changes and Affected Users

Behavior Before After Who relies on the old behavior Escape hatch
Two processes write to one session (TUI, print mode, web, desktop, SDK, ACP, VS Code) Both write Second writer gets "session occupied"; TUI shows retry/cancel, print mode exits 4 Users who keep one session open in two clients and send from both PYTHINKER_CODE_SESSION_LOCK=0
Send after another process changed the session Sent on a stale copy TUI and print mode reload and resend; other clients get "session stale" Same as above PYTHINKER_CODE_SESSION_LOCK=0
New session with no workspace and no cwd (gateway REST) Refused Created in ~/PythinkerCode/Default (folder created on first use) Scripts that expect the request to fail [default_workspace] path sets the folder
Session rating opt-out disable_feedback_survey in tui.toml disable_feedback_survey in config.toml; old value moved on next start Users who edit tui.toml by hand The old key is still read once and migrated
Session rating config fetch Fetched from the configured region host Fetched only when CUSTOM_API_BASE_URL is set Nobody (no hosted endpoint) n/a
Events after archive + restore Stop Continue Nobody n/a
Interrupted turn after restart Shown as completed; view stops at an old point Shown as failed; view current Nobody n/a
POST /api/v1/sessions/{session_id}/rating 404 Rating action n/a (additive) n/a
klient config-change events with an undefined value Dropped Delivered Nobody n/a
Gateway error code for "Expert Talk run not found" 40420 (shared with RUNTIME_NOT_FOUND) 40422 (gateway and packages/protocol) External scripts or clients that match 40420 to detect a missing Expert Talk run; no consumer in this repository Match the error code string, or 40422

Contract files touched (consumers: desktop and web apps, the inspector, the VS Code extension, ACP clients, SDK users, headless-output parsers):

  • packages/agent-core-v2/docs/config-manifest.toml: new [default_workspace] section. Additive.
  • apiSurface.snapshot.test.ts.snap: new rating route. Additive.
  • packages/node-sdk/src/index.ts: exports ConfigSectionChange. Additive.
  • packages/acp-server/src/session.ts: maps "session occupied" and "session stale" to invalidRequest with a client-action message.
  • apps/pythinker-code/src/cli/v2/run-v2-print.ts: new exit code 4 for an occupied session; the reload notice goes to stderr.

Test coverage

Row Tests
Session lock, off switch sessionLockService.test.ts, sessionRunGate.test.ts (off switch tests fail without the source change), TUI and print-mode tests
Default workspace defaultWorkspace.test.ts, gateway sessions.test.ts, workspaces.test.ts
Session rating, opt-out move, no fetch without custom base packages/product (275), gateway rating tests, pythinker-tui-startup.test.ts
Archived session events sessionEventBroadcaster.test.ts (fails without the fix)
Wedged turns packages/transcript (128), gateway transcript tests
klient events SDK onConfigSectionChanged test
Tunnel limits remote-control.test.ts (29)

Local gates: build, typecheck, lint (0 errors), sherif, VS Code typecheck, flake workspace check, and nix build .#pythinker-code pass. pnpm test (two full runs): 18619 passed, 1 timed out under full-suite load each time (fullCompaction.test.ts "names truncated compaction responses when retries are exhausted"); that file passes 96/96 alone and the full engine suite passes 6902/6902.

Checklist

  • I have read the CONTRIBUTING document.
  • I have linked a related issue (external PRs: issue must have a maintainer's /approve).
  • I have added tests that prove my feature works.
  • The behavior-change table above is complete, and every removed behavior or flipped default is named in the changeset and either has an escape hatch or was explicitly approved by a maintainer in this PR.
  • Ran gen-changesets skill, or this PR needs no changeset.
  • Ran gen-docs skill, or this PR needs no doc update.

Two Pythinker Code processes could open the same session and corrupt each other's wire journal and metadata. A cross-process lock under <home>/locks/sessions is now held while a session writes; a second writer reports session.occupied, and a client that sees another process's writes reloads before continuing. PYTHINKER_CODE_SESSION_LOCK=0 turns the lock off.

Also gives EXPERT_TALK_RUN_NOT_FOUND its own wire code (40422); it shared 40420 with RUNTIME_NOT_FOUND.
…edged turns

A rebuilt transcript numbered turns 0..N while live clients used wire turn ids, and a turn whose loop died without a terminal event came back as a fake completed turn. Rebuilt turns now keep their wire ids and start times, and an unterminated turn followed by a later prompt is marked failed and wedged. The engine also logs stalled flushes, latched storage failures, stuck dispatch, and turns with no progress for ten minutes.
@coderabbitai

coderabbitai Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 228 files, which is 128 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Check out review usage here.

⚙️ Run configuration
  • Configuration used: Repository: PyModel/pythinker-code/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: baa6f5b5-e5eb-4f14-a98f-aba8f4e77f47
📥 Commits

Reviewing files that changed from the base of the PR and between e291918 and cbe8e75.

⛔ Files ignored due to path filters: 3
  • apps/pythinker-code/dist-web/assets/index-Ud6NtwuQ.js is excluded by !**/assets/index-[0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-][0-9a-z_-].js
  • packages/agent-gateway/test/__snapshots__/apiSurface.snapshot.test.ts.snap is excluded by !**/*.snap, !**/*.snap
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml, !**/pnpm-lock.yaml
📒 Files selected for processing: 228
  • .changeset/archived-session-events.md
  • .changeset/default-workspace.md
  • .changeset/session-occupancy-lock.md
  • .changeset/session-rating-opt-out-config.md
  • .changeset/wedged-turn-transcript.md
  • AGENTS.md
  • apps/pythinker-code/dist-web/.web-bundle-manifest.json
  • apps/pythinker-code/dist-web/assets/CodeBlockNode-D0W6r4O4.js
  • apps/pythinker-code/dist-web/assets/DesignSystemView-DWx8o64m.js
  • apps/pythinker-code/dist-web/assets/Tooltip-Bj1LyJqp.js
  • apps/pythinker-code/dist-web/assets/index10-CgiEr33-.js
  • apps/pythinker-code/dist-web/assets/index11-Cc6dLv_C.js
  • apps/pythinker-code/dist-web/assets/index3-CB2yWI7V.js
  • apps/pythinker-code/dist-web/assets/index3-tO9M8mPT.js
  • apps/pythinker-code/dist-web/assets/index4-H86NcwRu.js
  • apps/pythinker-code/dist-web/assets/index4-a1ugmBbs.js
  • apps/pythinker-code/dist-web/assets/index5-zhInUTZK.js
  • apps/pythinker-code/dist-web/assets/index6-DWSH8E97.js
  • apps/pythinker-code/dist-web/assets/index7-DVxpAUAg.js
  • apps/pythinker-code/dist-web/assets/index8-BogL88_S.js
  • apps/pythinker-code/dist-web/assets/index9-DrhwA7rQ.js
  • apps/pythinker-code/dist-web/index.html
  • apps/pythinker-code/package.json
  • apps/pythinker-code/src/cli/v2/run-v2-print.ts
  • apps/pythinker-code/src/constant/app.ts
  • apps/pythinker-code/src/tui/banner/banner-config.ts
  • apps/pythinker-code/src/tui/commands/config.ts
  • apps/pythinker-code/src/tui/commands/reload.ts
  • apps/pythinker-code/src/tui/commands/undo.ts
  • apps/pythinker-code/src/tui/components/panes/survey-panel.ts
  • apps/pythinker-code/src/tui/config.ts
  • apps/pythinker-code/src/tui/constant/survey.ts
  • apps/pythinker-code/src/tui/controllers/survey-controller.ts
  • apps/pythinker-code/src/tui/pythinker-tui.ts
  • apps/pythinker-code/src/tui/utils/session-lock-errors.ts
  • apps/pythinker-code/src/tui/utils/survey-policy.ts
  • apps/pythinker-code/src/utils/cache-hint-config.ts
  • apps/pythinker-code/src/utils/client-configs.ts
  • apps/pythinker-code/src/utils/paths.ts
  • apps/pythinker-code/src/utils/recommended-effort-config.ts
  • apps/pythinker-code/src/utils/survey-setting.ts
  • apps/pythinker-code/src/utils/survey-state-store.ts
  • apps/pythinker-code/test/cli/v2-run-print.test.ts
  • apps/pythinker-code/test/tui/activity-pane.test.ts
  • apps/pythinker-code/test/tui/commands/survey-preferences.test.ts
  • apps/pythinker-code/test/tui/commands/update-preferences.test.ts
  • apps/pythinker-code/test/tui/config.test.ts
  • apps/pythinker-code/test/tui/controllers/survey-controller.test.ts
  • apps/pythinker-code/test/tui/message-replay.test.ts
  • apps/pythinker-code/test/tui/pythinker-tui-message-flow.test.ts
  • apps/pythinker-code/test/tui/pythinker-tui-startup.test.ts
  • apps/pythinker-code/test/tui/signal-handlers.test.ts
  • apps/pythinker-code/test/tui/utils/survey-policy.test.ts
  • apps/pythinker-code/test/utils/survey-state-store.test.ts
  • apps/vscode/shared/errors.ts
  • apps/vscode/test/event-adapter.test.ts
  • docs/configuration/config-files.md
  • docs/configuration/data-locations.md
  • docs/configuration/env-vars.md
  • docs/reference/server-api.md
  • flake.nix
  • packages/acp-server/src/session.ts
  • packages/agent-core-v2/docs/config-manifest.toml
  • packages/agent-core-v2/src/agent/fullCompaction/fullCompactionService.ts
  • packages/agent-core-v2/src/agent/loop/loopService.ts
  • packages/agent-core-v2/src/agent/task/taskService.ts
  • packages/agent-core-v2/src/agent/undo/undoService.ts
  • packages/agent-core-v2/src/app/defaultWorkspace/configSection.ts
  • packages/agent-core-v2/src/app/defaultWorkspace/defaultWorkspace.ts
  • packages/agent-core-v2/src/app/defaultWorkspace/defaultWorkspacePaths.ts
  • packages/agent-core-v2/src/app/defaultWorkspace/defaultWorkspaceService.ts
  • packages/agent-core-v2/src/app/defaultWorkspace/errors.ts
  • packages/agent-core-v2/src/app/sessionManager/sessionLookup.ts
  • packages/agent-core-v2/src/app/telemetry/telemetry.ts
  • packages/agent-core-v2/src/app/telemetry/telemetryService.ts
  • packages/agent-core-v2/src/app/workspace/workspaceProtocol.ts
  • packages/agent-core-v2/src/errors.ts
  • packages/agent-core-v2/src/features/btw/btw.ts
  • packages/agent-core-v2/src/features/btw/btwService.ts
  • packages/agent-core-v2/src/index.ts
  • packages/agent-core-v2/src/os/backends/node-local/hostProcessService.ts
  • packages/agent-core-v2/src/persistence/backends/memory/inMemoryStorageService.ts
  • packages/agent-core-v2/src/persistence/backends/memory/sessionLockService.ts
  • packages/agent-core-v2/src/persistence/backends/node-fs/appendLogStore.ts
  • packages/agent-core-v2/src/persistence/backends/node-fs/fileStorageService.ts
  • packages/agent-core-v2/src/persistence/backends/node-fs/sessionLockService.ts
  • packages/agent-core-v2/src/persistence/interface/appendLogStore.ts
  • packages/agent-core-v2/src/persistence/interface/sessionLock.ts
  • packages/agent-core-v2/src/persistence/interface/storage.ts
  • packages/agent-core-v2/src/session/agentLifecycle/agentLifecycle.ts
  • packages/agent-core-v2/src/session/agentLifecycle/agentLifecycleService.ts
  • packages/agent-core-v2/src/session/agentLifecycle/getOrRestoreAgent.ts
  • packages/agent-core-v2/src/session/errors.ts
  • packages/agent-core-v2/src/session/sessionActivity/sessionRunGate.ts
  • packages/agent-core-v2/src/session/sessionActivity/sessionRunGateService.ts
  • packages/agent-core-v2/src/session/sessionMetadata/promptMetadata.ts
  • packages/agent-core-v2/src/session/sessionMetadata/sessionMetadata.ts
  • packages/agent-core-v2/src/session/sessionMetadata/sessionMetadataService.ts
  • packages/agent-core-v2/src/state/eventDispatcherService.ts
  • packages/agent-core-v2/src/wire/wire.ts
  • packages/agent-core-v2/src/wire/wireService.ts
  • packages/agent-core-v2/src/workspace/sessionLifecycle/coldSessionArchive.ts
  • packages/agent-core-v2/src/workspace/sessionLifecycle/sessionLifecycle.ts
  • packages/agent-core-v2/src/workspace/sessionLifecycle/sessionLifecycleService.ts
  • packages/agent-core-v2/src/workspace/workspaceInstance/workspaceInstanceManagerService.ts
  • packages/agent-core-v2/test/agent/contextMemory/context.test.ts
  • packages/agent-core-v2/test/agent/mcp/output.test.ts
  • packages/agent-core-v2/test/agent/media/tools/read-media.test.ts
  • packages/agent-core-v2/test/agent/prompt/promptMetadataText.test.ts
  • packages/agent-core-v2/test/agent/task/taskManager.test.ts
  • packages/agent-core-v2/test/agent/task/taskService.test.ts
  • packages/agent-core-v2/test/app/defaultWorkspace/defaultWorkspace.test.ts
  • packages/agent-core-v2/test/app/sessionManager/sessionManagerService.test.ts
  • packages/agent-core-v2/test/app/telemetry/stubs.ts
  • packages/agent-core-v2/test/app/telemetry/telemetryService.test.ts
  • packages/agent-core-v2/test/app/workspace/workspaceService.test.ts
  • packages/agent-core-v2/test/app/workspaceAliases/workspaceAliasesService.test.ts
  • packages/agent-core-v2/test/features/btw/btw.test.ts
  • packages/agent-core-v2/test/features/plan/tools/exit-plan-mode.test.ts
  • packages/agent-core-v2/test/features/plan/tools/plan-tools-telemetry.test.ts
  • packages/agent-core-v2/test/harness/agent.ts
  • packages/agent-core-v2/test/os/backends/node-local/hostProcessService.test.ts
  • packages/agent-core-v2/test/os/backends/node-local/tools/glob.test.ts
  • packages/agent-core-v2/test/persistence/backends/node-fs/appendLogStore.test.ts
  • packages/agent-core-v2/test/persistence/backends/node-fs/sessionLockService.test.ts
  • packages/agent-core-v2/test/session/agentLifecycle/agentLifecycle.test.ts
  • packages/agent-core-v2/test/session/sessionActivity/sessionRunGate.test.ts
  • packages/agent-core-v2/test/session/sessionMetadata/sessionMetadata.test.ts
  • packages/agent-core-v2/test/session/subagent/forkParity.test.ts
  • packages/agent-core-v2/test/session/subagent/subagentScopeCache.test.ts
  • packages/agent-core-v2/test/state/eventDispatcher.test.ts
  • packages/agent-core-v2/test/stubs.ts
  • packages/agent-core-v2/test/wire/persistence.test.ts
  • packages/agent-core-v2/test/wire/stubs.ts
  • packages/agent-core-v2/test/wire/wireService.test.ts
  • packages/agent-core-v2/test/workspace/sessionLifecycle/coldSessionArchive.test.ts
  • packages/agent-core-v2/test/workspace/workspaceFs/fsService.test.ts
  • packages/agent-core-v2/test/workspace/workspaceInstance/workspaceInstanceManager.test.ts
  • packages/agent-core-v2/test/workspace/workspaceMcp/workspaceMcp.test.ts
  • packages/agent-gateway/package.json
  • packages/agent-gateway/src/protocol/default-workspace.ts
  • packages/agent-gateway/src/protocol/envelope.ts
  • packages/agent-gateway/src/protocol/error-codes.ts
  • packages/agent-gateway/src/protocol/events-zod.ts
  • packages/agent-gateway/src/protocol/rest-config.ts
  • packages/agent-gateway/src/protocol/rest-session-rating.ts
  • packages/agent-gateway/src/protocol/session.ts
  • packages/agent-gateway/src/protocol/workspace.ts
  • packages/agent-gateway/src/routes/config.ts
  • packages/agent-gateway/src/routes/prompts.ts
  • packages/agent-gateway/src/routes/registerApiV1Routes.ts
  • packages/agent-gateway/src/routes/sessionErrors.ts
  • packages/agent-gateway/src/routes/sessionRating.ts
  • packages/agent-gateway/src/routes/sessions.ts
  • packages/agent-gateway/src/routes/skills.ts
  • packages/agent-gateway/src/routes/workspaces.ts
  • packages/agent-gateway/src/services/sessionRating.ts
  • packages/agent-gateway/src/services/telemetry.ts
  • packages/agent-gateway/src/services/transcript/coreEventMap.ts
  • packages/agent-gateway/src/services/transcript/transcriptService.ts
  • packages/agent-gateway/src/start.ts
  • packages/agent-gateway/src/transport/dispatcher.ts
  • packages/agent-gateway/src/transport/errors.ts
  • packages/agent-gateway/src/transport/ws/v1/sessionEventBroadcaster.ts
  • packages/agent-gateway/test/config.test.ts
  • packages/agent-gateway/test/openapi.test.ts
  • packages/agent-gateway/test/prompts.test.ts
  • packages/agent-gateway/test/rpc.test.ts
  • packages/agent-gateway/test/services/transcript.test.ts
  • packages/agent-gateway/test/sessionEventBroadcaster.test.ts
  • packages/agent-gateway/test/sessionRating.test.ts
  • packages/agent-gateway/test/sessions.test.ts
  • packages/agent-gateway/test/skills.test.ts
  • packages/agent-gateway/test/transport-errors.test.ts
  • packages/agent-gateway/test/workspaces.test.ts
  • packages/klient/src/contract/global/events.ts
  • packages/klient/src/transports/memory/dispatcher.ts
  • packages/node-sdk/package.json
  • packages/node-sdk/src/config/schema.ts
  • packages/node-sdk/src/config/toml.ts
  • packages/node-sdk/src/errors.ts
  • packages/node-sdk/src/events.ts
  • packages/node-sdk/src/index.ts
  • packages/node-sdk/src/pythinker-harness.ts
  • packages/node-sdk/src/rpc.ts
  • packages/node-sdk/src/sdk-rpc-client-v2.ts
  • packages/node-sdk/src/session.ts
  • packages/node-sdk/src/v2/config-mapper.ts
  • packages/node-sdk/src/v2/resume-replay.ts
  • packages/node-sdk/test/sdk-rpc-client-v2.test.ts
  • packages/product/package.json
  • packages/product/src/client-configs/node/client-configs.ts
  • packages/product/src/client-configs/node/index.ts
  • packages/product/src/env.d.ts
  • packages/product/src/session-rating/common/gates.ts
  • packages/product/src/session-rating/common/index.ts
  • packages/product/src/session-rating/common/survey-popup-config.ts
  • packages/product/src/session-rating/common/types.ts
  • packages/product/src/session-rating/node/cooldown-store.ts
  • packages/product/src/session-rating/node/engine.ts
  • packages/product/src/session-rating/node/event-properties.ts
  • packages/product/src/session-rating/node/index.ts
  • packages/product/src/session-rating/node/kfc.ts
  • packages/product/src/session-rating/node/ledger.ts
  • packages/product/src/session-rating/node/session-rating-host.ts
  • packages/product/src/session-rating/node/survey-popup-config-feed.ts
  • packages/product/src/session-rating/node/survey-turns.ts
  • packages/product/src/shared/node/json-file.ts
  • packages/product/test/client-configs.test.ts
  • packages/product/test/cooldown-store.test.ts
  • packages/product/test/entry-points.test.ts
  • packages/product/test/rating-reports.test.ts
  • packages/product/test/session-rating-host.test.ts
  • packages/product/test/session-rating.test.ts
  • packages/product/test/survey-policy.test.ts
  • packages/product/test/survey-popup-config.test.ts
  • packages/product/test/survey-turns.test.ts
  • packages/product/tsconfig.json
  • packages/product/tsdown.config.ts
  • packages/product/vitest.config.ts
  • packages/protocol/src/error-codes.ts
  • packages/remote-control/src/remote-control.ts
  • packages/remote-control/test/remote-control.test.ts
  • packages/transcript/src/contract/schema.ts
  • packages/transcript/src/history/foldFacts.ts
  • packages/transcript/src/model/turn.ts
  • packages/transcript/src/ops/apply.ts
  • packages/transcript/test/layers.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@pkg-pr-new

pkg-pr-new Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
pnpm dlx https://pkg.pr.new/@pymodel/pythinker-code@cbe8e75
npx https://pkg.pr.new/@pymodel/pythinker-code@cbe8e75

commit: cbe8e75

Clears the follow-redirects credential-header advisories and the hono and vite advisories that fail the security audit.
A minimum of 8.1.6 keeps the advisory fix and lets normal upgrades move past 8.1. The lockfile still resolves 8.1.6.
# Conflicts:
#	apps/pythinker-code/dist-web/.web-bundle-manifest.json
#	apps/pythinker-code/dist-web/assets/DesignSystemView-BAgPEsSe.js
#	apps/pythinker-code/dist-web/assets/DesignSystemView-Bu-pya6S.js
#	apps/pythinker-code/dist-web/assets/DesignSystemView-DWx8o64m.js
#	apps/pythinker-code/dist-web/index.html
# Conflicts:
#	apps/pythinker-code/dist-web/.web-bundle-manifest.json
Comment thread packages/product/test/survey-turns.test.ts Fixed
Comment thread packages/product/test/session-rating.test.ts Fixed
@elkaix
elkaix merged commit 21e9d44 into main Oct 20, 2026
25 checks passed
@elkaix
elkaix deleted the fix/reconcile-2026-10-20 branch October 20, 2026 22:45
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.

1 participant