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
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ version with its date and start a fresh empty `[Unreleased]` above it.
- Startup session restore no longer fails silently: when the tab
layout, an individual tab, session metadata, or conversation history
cannot be read, Qoderian now shows a single notice with the issue
count and logs per-stage details to the developer console.
count and logs per-stage details to the developer console, including
the underlying file error (such as a permission denial) for each
session history file that fails to load.

## [1.0.4] - 2026-08-12

Expand Down
5 changes: 4 additions & 1 deletion src/qoder/history/qoder-conversation-history-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,7 @@ export class QoderConversationHistoryService {
let missingSessionCount = 0;
let errorCount = 0;
let successCount = 0;
const loadErrors: string[] = [];

const currentSessionId = isPendingFork
? state.forkSource!.sessionId
Expand All @@ -404,6 +405,7 @@ export class QoderConversationHistoryService {

if (result.error) {
errorCount++;
loadErrors.push(`${sessionId}: ${result.error}`);
continue;
}

Expand All @@ -415,7 +417,8 @@ export class QoderConversationHistoryService {
if (errorCount > 0) {
reportRestoreIssue(
'history',
`Conversation "${conversation.id}": ${errorCount} of ${allSessionIds.length} session file(s) failed to load.`,
`Conversation "${conversation.id}": ${errorCount} of ${allSessionIds.length} session file(s) failed to load. `
+ `Errors: ${loadErrors.join('; ')}`,
);
} else if (allSessionsMissing) {
reportRestoreIssue(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ describe('QoderConversationHistoryService restore diagnostics', () => {
stage: 'history',
detail: expect.stringContaining('conv-1'),
});
// The underlying error and session id must surface for diagnostics.
expect(issues[0].detail).toContain('sess-1: read failed');
});

it('reports a history issue when session files are missing on disk', async () => {
Expand Down
Loading