Skip to content

bug(web): copied session IDs alias the active session file #583

Description

@ooiuuii

Problem

Several Web session paths identify the live SessionManager by session ID alone, although copying a Pi JSONL file preserves its ID. Two distinct files can therefore be treated as the same active session.

At main f6b49ae59605b1276b8267f2886d22c03f01533c:

  • Reading a selected copy can return the active original's transcript.
  • Renaming the copy can write the original instead.
  • Selecting the copy can skip the runtime switch.
  • When a newer copy precedes the original, the UI's ID-only current lookup can change the requested path on the next refresh.

The repository already tests duplicate IDs as distinct archive entries. The missing boundary is the active runtime/file identity, not a proposal to rewrite session IDs.

Reproduction

Create and persist a session through native SessionManager, copy its actual JSONL file into the same session directory, open the copy and append different content. The adapter's selected-file read and rename tests fail on the baseline. An authenticated loopback /api/sessions/select test proves the runtime switch is wrongly skipped.

Separate actual store-action regressions show the same-ID copy being selected across two refreshes and an invalid copied transcript passing the canonical-retry gate.

All fixtures use isolated temporary files and synthetic session content, not user data.

Expected

Use ID plus the actual session file when reusing the live manager or short-circuiting selection. Preserve the existing synthetic path for an in-memory current session. The UI should consume the already-provided controller/path identity rather than derive ownership from ID equality.

No new protocol fields, identity storage, ID rewriting or permissions are required. Backend/HTTP regressions fail 3/3 before the correction; store regressions fail 2/2 before the corresponding consumer fix.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions