Summary
External session imports can collapse distinct transcript files into the same imported session ID because externalImportedSessionID hashes only providerSessionID and does not include SourcePath
Claude Code subagent transcripts can inherit the parent conversation sessionId, so multiple files are not guaranteed to have unique provider session IDs. The imported identity needs to distinguish those source transcripts while preserving the intended idempotency behavior
Steps to Reproduce
- Use local Claude Code history containing subagent transcripts that inherit a parent sessionId
- Open the external conversation history import wizard and scan the local history
- Inspect the returned session IDs and toggle selection for one affected row
Expected Behavior
Each distinct source transcript should have a stable imported identity, and selecting or deselecting one row should affect only that transcript. React keys and import idempotency should remain deterministic
Actual Behavior
In a real local dataset, 427 transcript files collapsed into 33 imported IDs
- For the 30-day range, the wizard displayed 769 rows but only 375 distinct session identities
- 397 rows were duplicates of another row identity
- Deselecting one row hid 108 rows at once
- React key=session.id therefore received 397 duplicate keys
Environment
- OS: Windows
- Tutti version or commit: e7f2c4c
- Provider/runtime involved, if any: Claude Code local transcript import, including subagent transcripts
Additional Context
The identity derivation logic was not changed by PR #2198 for issue #2060; the behavior was confirmed by comparing the base and PR trees
This should be handled separately because changing imported identity can affect idempotency and already-imported data. The fix should define the compatibility and migration behavior before changing the hash inputs
Related: #2198
Summary
External session imports can collapse distinct transcript files into the same imported session ID because externalImportedSessionID hashes only providerSessionID and does not include SourcePath
Claude Code subagent transcripts can inherit the parent conversation sessionId, so multiple files are not guaranteed to have unique provider session IDs. The imported identity needs to distinguish those source transcripts while preserving the intended idempotency behavior
Steps to Reproduce
Expected Behavior
Each distinct source transcript should have a stable imported identity, and selecting or deselecting one row should affect only that transcript. React keys and import idempotency should remain deterministic
Actual Behavior
In a real local dataset, 427 transcript files collapsed into 33 imported IDs
Environment
Additional Context
The identity derivation logic was not changed by PR #2198 for issue #2060; the behavior was confirmed by comparing the base and PR trees
This should be handled separately because changing imported identity can affect idempotency and already-imported data. The fix should define the compatibility and migration behavior before changing the hash inputs
Related: #2198