Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@ All notable changes to ClaudePortable are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Fixed

- **Discovery no longer shows a permanently-empty `coworkSessions` row.**
The `%USERPROFILE%\.cowork` candidate was an unverified Spec 1.1 guess that
does not exist on the Store-app Claude Desktop, so its read-only EXISTS box
always rendered unchecked and looked like a broken toggle. Removed the
vestigial entry from `WindowsPathDiscovery` and its `cowork/sessions`
archive-prefix mapping. Cowork data is unaffected: session state under
`%APPDATA%\Claude\local-agent-mode-sessions` is already covered by the
Claude Desktop AppData path, and project folders are captured by
`CoworkProjectDiscovery` under `cowork-projects/<hash>`. The Discovery
caption now explains that EXISTS is a status indicator, not a toggle. The
restore-side legacy mapping for `cowork/sessions` is retained so older ZIPs
still restore correctly.

## [0.3.0] - 2026-05-29

### Added
Expand Down
2 changes: 1 addition & 1 deletion src/ClaudePortable.App/Ui/Views/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@
</Grid.RowDefinitions>

<TextBlock Style="{DynamicResource H1}" Text="Discovery" />
<TextBlock Style="{DynamicResource Caption}" Text="What ClaudePortable found on this machine. Paths that do not exist are skipped during backup." Margin="0,0,0,20" Grid.Row="1" TextWrapping="Wrap" />
<TextBlock Style="{DynamicResource Caption}" Margin="0,0,0,20" Grid.Row="1" TextWrapping="Wrap">What ClaudePortable found on this machine. The EXISTS column is a read-only status indicator, not a toggle - paths that do not exist are skipped during backup. Cowork is not listed as its own row: session state lives under <Run FontFamily="{DynamicResource MonoFont}">AppData\Roaming\Claude\local-agent-mode-sessions</Run> (already covered by the Claude Desktop AppData row), and the project folders you opened in Cowork are auto-discovered and backed up separately.</TextBlock>

<TextBlock Style="{DynamicResource H2}" Text="Claude paths" Grid.Row="2" Margin="0,0,0,8" />
<Border Style="{DynamicResource Card}" Padding="0" Grid.Row="3">
Expand Down
1 change: 0 additions & 1 deletion src/ClaudePortable.Core/Backup/BackupEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,6 @@ private static string BuildFilename(DateTimeOffset timestamp, RetentionTier tier
"claudeDesktopAppData" => "claude-desktop/appdata",
"claudeDesktopLocalAppData" => "claude-desktop/localappdata",
"claudeCodeUserProfile" => "claude-code/dotclaude",
"coworkSessions" => "cowork/sessions",
_ => key,
};

Expand Down
17 changes: 12 additions & 5 deletions src/ClaudePortable.Core/Discovery/WindowsPathDiscovery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,18 @@ private static readonly (string Key, string[] Candidates, string Source)[] Known
new[] { @"%USERPROFILE%\.claude" },
"Spec 1.1 + verified 2026-04-22"
),
(
"coworkSessions",
new[] { @"%USERPROFILE%\.cowork" },
"Spec 1.1 (assumed, ProcMon pending)"
),
// NOTE: there is intentionally no "coworkSessions" entry here.
// The original Spec 1.1 guess of %USERPROFILE%\.cowork was never
// verified and does not exist on the Store-app Claude Desktop.
// Phase-0 verification (docs/discovered-paths.md, 2026-04-23)
// established that Cowork session state actually lives under
// %APPDATA%\Claude\local-agent-mode-sessions\<guid>\..., which is a
// subfolder of "claudeDesktopAppData" above and is therefore already
// backed up. The user-selected project roots referenced by those
// sessions are captured separately by CoworkProjectDiscovery under
// the "cowork-projects/<hash>" archive prefix. A standalone .cowork
// row would only ever show EXISTS = false and would duplicate the
// local-agent-mode-sessions subtree in the ZIP if repointed.
(
"claudeDesktopLocalAppData",
new[]
Expand Down
Loading