fix: 0.15.0-RC polish round two — error details & lookback default#500
Conversation
UnifiedHistoryTab was defaulting to "All time" instead of using the defaultLookbackDays from Encore Features settings. Adds daysToLookbackHours helper that maps the days setting to the closest LOOKBACK_OPTIONS entry.
The "Details" button on error messages in chat history was non-functional because it only worked with live agent errors. Now passes the specific AgentError from the log entry through the callback chain, allowing historical errors to be displayed in a read-only error modal without recovery actions.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review infoConfiguration used: Organization UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThis PR introduces support for displaying historical agent errors in the modal system while preserving functionality for live errors. It propagates effectiveAgentError through the modal infrastructure and updates error callback signatures across UI components. Additionally, it integrates director notes lookback settings with the history tab. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant TerminalOutput
participant MainPanel
participant useModalHandlers
participant modalStore
participant AppModals
rect rgba(100, 150, 200, 0.5)
Note over User,AppModals: Agent Error Modal Flow
User->>TerminalOutput: Click error details button
TerminalOutput->>useModalHandlers: onShowErrorDetails(agentError)
useModalHandlers->>useModalHandlers: Compute effectiveAgentError
useModalHandlers->>modalStore: Dispatch showAgentErrorModal<br/>(with optional historicalError)
modalStore->>AppModals: Update agentErrorModalData
AppModals->>AppModals: Receive effectiveAgentError prop
AppModals->>User: Render AgentErrorModal<br/>(live or historical)
end
rect rgba(150, 100, 150, 0.5)
Note over MainPanel,useModalHandlers: Error Banner Alternative Flow
User->>MainPanel: Click error banner
MainPanel->>useModalHandlers: onShowAgentErrorModal()
useModalHandlers->>useModalHandlers: Use live agentError<br/>as effectiveAgentError
useModalHandlers->>modalStore: Open modal
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsx (1)
249-260: Add a regression test fordefaultLookbackDays: 0(“All time”).Given the all-time encoding uses
lookbackDays: 0, add one case with settings mocked to0and assert initial fetch useslookbackDays: 0and graph receiveslookbackHours: null.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsx` around lines 249 - 260, Add a regression test in UnifiedHistoryTab.test.tsx that mocks settings.defaultLookbackDays to 0 and mounts <UnifiedHistoryTab theme={mockTheme} />; assert mockGetUnifiedHistory was called with lookbackDays: 0 (and same filter/limit/offset) and also assert the rendered graph/component received props with lookbackHours: null to verify the "All time" encoding is passed through; locate references to mockGetUnifiedHistory, defaultLookbackDays, and the graph component used in UnifiedHistoryTab to implement the mock and assertions.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@src/renderer/components/DirectorNotes/UnifiedHistoryTab.tsx`:
- Around line 54-59: The function daysToLookbackHours currently maps days=0 to
the first preset (24h) because it computes targetHours and matches the first
option >= targetHours; update daysToLookbackHours to treat the special boundary
days===0 as “All time” by returning null immediately (so lookbackDays: 0 maps to
null hours), then preserve the existing loop using LOOKBACK_OPTIONS for other
positive day values; reference daysToLookbackHours and LOOKBACK_OPTIONS when
making the change.
In `@src/renderer/hooks/modal/useModalHandlers.ts`:
- Around line 405-419: The modal currently prefers errorSession?.agentError over
historicalAgentError causing a live error to be shown (and recovery actions
enabled) when the user intends to view a historical entry; update the logic so
when the view is a historical entry (isHistorical true) the code uses
historicalAgentError as the effective error and passes the historical
agent/session identifiers into useAgentErrorRecovery so recovery actions remain
disabled. Adjust effectiveError to select historicalAgentError when
isHistorical, and ensure the agentId and sessionId arguments to
useAgentErrorRecovery use the historical values when isHistorical (reference
symbols: effectiveError, isHistorical, useAgentErrorRecovery, errorSession,
historicalAgentError).
---
Nitpick comments:
In `@src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsx`:
- Around line 249-260: Add a regression test in UnifiedHistoryTab.test.tsx that
mocks settings.defaultLookbackDays to 0 and mounts <UnifiedHistoryTab
theme={mockTheme} />; assert mockGetUnifiedHistory was called with lookbackDays:
0 (and same filter/limit/offset) and also assert the rendered graph/component
received props with lookbackHours: null to verify the "All time" encoding is
passed through; locate references to mockGetUnifiedHistory, defaultLookbackDays,
and the graph component used in UnifiedHistoryTab to implement the mock and
assertions.
ℹ️ Review info
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsxsrc/__tests__/renderer/hooks/useModalHandlers.test.tssrc/renderer/App.tsxsrc/renderer/components/AppModals.tsxsrc/renderer/components/DirectorNotes/UnifiedHistoryTab.tsxsrc/renderer/components/MainPanel.tsxsrc/renderer/components/TerminalOutput.tsxsrc/renderer/hooks/modal/useModalHandlers.tssrc/renderer/hooks/props/useMainPanelProps.tssrc/renderer/stores/modalStore.ts
| // Determine the effective error: prefer live session error, fall back to historical | ||
| const effectiveError = errorSession?.agentError ?? historicalAgentError ?? undefined; | ||
| const isHistorical = !errorSession?.agentError && !!historicalAgentError; | ||
|
|
||
| // Use the agent error recovery hook to get recovery actions | ||
| // Historical errors get no recovery actions (they're read-only) | ||
| const { recoveryActions } = useAgentErrorRecovery({ | ||
| error: errorSession?.agentError, | ||
| error: effectiveError, | ||
| agentId: errorSession?.toolType || 'claude-code', | ||
| sessionId: errorSession?.id || '', | ||
| onNewSession: errorSession ? () => handleStartNewSessionAfterError(errorSession.id) : undefined, | ||
| onRetry: errorSession ? () => handleRetryAfterError(errorSession.id) : undefined, | ||
| onClearError: errorSession ? () => handleClearAgentError(errorSession.id) : undefined, | ||
| onRestartAgent: errorSession ? () => handleRestartAgentAfterError(errorSession.id) : undefined, | ||
| onAuthenticate: errorSession ? () => handleAuthenticateAfterError(errorSession.id) : undefined, | ||
| onNewSession: !isHistorical && errorSession ? () => handleStartNewSessionAfterError(errorSession.id) : undefined, | ||
| onRetry: !isHistorical && errorSession ? () => handleRetryAfterError(errorSession.id) : undefined, | ||
| onClearError: !isHistorical && errorSession ? () => handleClearAgentError(errorSession.id) : undefined, | ||
| onRestartAgent: !isHistorical && errorSession ? () => handleRestartAgentAfterError(errorSession.id) : undefined, | ||
| onAuthenticate: !isHistorical && errorSession ? () => handleAuthenticateAfterError(errorSession.id) : undefined, |
There was a problem hiding this comment.
Historical error can be overridden by live error in the same session.
At Line 406, effectiveError prefers errorSession?.agentError over historicalAgentError. If a live error exists and the user clicks a historical log entry, the modal can show the live error and enable recovery actions (Line 407-419) instead of showing the selected historical error read-only.
💡 Proposed fix
- // Determine the effective error: prefer live session error, fall back to historical
- const effectiveError = errorSession?.agentError ?? historicalAgentError ?? undefined;
- const isHistorical = !errorSession?.agentError && !!historicalAgentError;
+ // Determine the effective error: when a historical entry is selected, it must take precedence
+ const effectiveError = historicalAgentError ?? errorSession?.agentError ?? undefined;
+ const isHistorical = !!historicalAgentError;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // Determine the effective error: prefer live session error, fall back to historical | |
| const effectiveError = errorSession?.agentError ?? historicalAgentError ?? undefined; | |
| const isHistorical = !errorSession?.agentError && !!historicalAgentError; | |
| // Use the agent error recovery hook to get recovery actions | |
| // Historical errors get no recovery actions (they're read-only) | |
| const { recoveryActions } = useAgentErrorRecovery({ | |
| error: errorSession?.agentError, | |
| error: effectiveError, | |
| agentId: errorSession?.toolType || 'claude-code', | |
| sessionId: errorSession?.id || '', | |
| onNewSession: errorSession ? () => handleStartNewSessionAfterError(errorSession.id) : undefined, | |
| onRetry: errorSession ? () => handleRetryAfterError(errorSession.id) : undefined, | |
| onClearError: errorSession ? () => handleClearAgentError(errorSession.id) : undefined, | |
| onRestartAgent: errorSession ? () => handleRestartAgentAfterError(errorSession.id) : undefined, | |
| onAuthenticate: errorSession ? () => handleAuthenticateAfterError(errorSession.id) : undefined, | |
| onNewSession: !isHistorical && errorSession ? () => handleStartNewSessionAfterError(errorSession.id) : undefined, | |
| onRetry: !isHistorical && errorSession ? () => handleRetryAfterError(errorSession.id) : undefined, | |
| onClearError: !isHistorical && errorSession ? () => handleClearAgentError(errorSession.id) : undefined, | |
| onRestartAgent: !isHistorical && errorSession ? () => handleRestartAgentAfterError(errorSession.id) : undefined, | |
| onAuthenticate: !isHistorical && errorSession ? () => handleAuthenticateAfterError(errorSession.id) : undefined, | |
| // Determine the effective error: when a historical entry is selected, it must take precedence | |
| const effectiveError = historicalAgentError ?? errorSession?.agentError ?? undefined; | |
| const isHistorical = !!historicalAgentError; | |
| // Use the agent error recovery hook to get recovery actions | |
| // Historical errors get no recovery actions (they're read-only) | |
| const { recoveryActions } = useAgentErrorRecovery({ | |
| error: effectiveError, | |
| agentId: errorSession?.toolType || 'claude-code', | |
| sessionId: errorSession?.id || '', | |
| onNewSession: !isHistorical && errorSession ? () => handleStartNewSessionAfterError(errorSession.id) : undefined, | |
| onRetry: !isHistorical && errorSession ? () => handleRetryAfterError(errorSession.id) : undefined, | |
| onClearError: !isHistorical && errorSession ? () => handleClearAgentError(errorSession.id) : undefined, | |
| onRestartAgent: !isHistorical && errorSession ? () => handleRestartAgentAfterError(errorSession.id) : undefined, | |
| onAuthenticate: !isHistorical && errorSession ? () => handleAuthenticateAfterError(errorSession.id) : undefined, |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@src/renderer/hooks/modal/useModalHandlers.ts` around lines 405 - 419, The
modal currently prefers errorSession?.agentError over historicalAgentError
causing a live error to be shown (and recovery actions enabled) when the user
intends to view a historical entry; update the logic so when the view is a
historical entry (isHistorical true) the code uses historicalAgentError as the
effective error and passes the historical agent/session identifiers into
useAgentErrorRecovery so recovery actions remain disabled. Adjust effectiveError
to select historicalAgentError when isHistorical, and ensure the agentId and
sessionId arguments to useAgentErrorRecovery use the historical values when
isHistorical (reference symbols: effectiveError, isHistorical,
useAgentErrorRecovery, errorSession, historicalAgentError).
Greptile SummaryThis PR implements two focused bug fixes for the 0.15.0-RC release: Historical error Details button
Director's Notes lookback default
Both changes include comprehensive test coverage and maintain backwards compatibility. The implementation is type-safe throughout and properly handles edge cases. Confidence Score: 5/5
Important Files Changed
Last reviewed commit: c5b0d8b |
- daysToLookbackHours(0) now returns null (All time) instead of incorrectly matching the first preset (24h) - effectiveAgentError now prefers historical error when explicitly requested via Details button, preventing live errors from shadowing it
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsx (1)
265-278:⚠️ Potential issue | 🟡 MinorMove the lookback-hours assertion into
waitForto avoid async test flakiness.
activity-lookback-hoursis checked immediately after an async path; this can race render timing in CI.Suggested test-stability patch
await waitFor(() => { expect(mockGetUnifiedHistory).toHaveBeenCalledWith({ lookbackDays: 0, filter: null, limit: 100, offset: 0, }); }); - expect(screen.getByTestId('activity-lookback-hours')).toHaveTextContent('null'); + await waitFor(() => { + expect(screen.getByTestId('activity-lookback-hours')).toHaveTextContent('null'); + }); });🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsx` around lines 265 - 278, The assertion that the DOM element with test id 'activity-lookback-hours' contains 'null' is currently outside the async wait and can race; inside the test 'fetches all-time history when defaultLookbackDays is 0' (where mockDirNotesSettings.defaultLookbackDays = 0 and mockGetUnifiedHistory is expected to be called for UnifiedHistoryTab), move the expect(screen.getByTestId('activity-lookback-hours')).toHaveTextContent('null') into the existing waitFor block so both the mockGetUnifiedHistory call assertion and the DOM text assertion run after the component's async render completes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsx`:
- Around line 265-278: The assertion that the DOM element with test id
'activity-lookback-hours' contains 'null' is currently outside the async wait
and can race; inside the test 'fetches all-time history when defaultLookbackDays
is 0' (where mockDirNotesSettings.defaultLookbackDays = 0 and
mockGetUnifiedHistory is expected to be called for UnifiedHistoryTab), move the
expect(screen.getByTestId('activity-lookback-hours')).toHaveTextContent('null')
into the existing waitFor block so both the mockGetUnifiedHistory call assertion
and the DOM text assertion run after the component's async render completes.
ℹ️ Review info
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsxsrc/__tests__/renderer/hooks/useModalHandlers.test.tssrc/renderer/components/DirectorNotes/UnifiedHistoryTab.tsxsrc/renderer/hooks/modal/useModalHandlers.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- src/tests/renderer/hooks/useModalHandlers.test.ts
- src/renderer/components/DirectorNotes/UnifiedHistoryTab.tsx
Clarifies the purpose of the profile section by showing both terms.
- Unified History empty-state now reflects selected time range messaging 🕒 - Lookback “All Time” selection correctly maps to `lookbackDays: 0` 🌐 - Unified History tests updated for default 7-day lookback behavior 📅 - TerminalOutput alignment logic clarified: user messages no longer reversed ➡️ - TerminalOutput tests tightened to assert correct container class usage 🧪
Both branches fixed the same user message alignment test; kept main's version using data-log-index selector for positive assertion.
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsx (1)
252-278: Add one non-exact mapping test for lookback default.Current tests cover exact values (
7) and sentinel all-time (0), but not a non-exact default (e.g.,defaultLookbackDays = 10) mapping to the nearestLOOKBACK_OPTIONSbucket. Adding this would lock in the helper’s intended behavior and prevent regressions.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsx` around lines 252 - 278, Add a third test that sets mockDirNotesSettings.defaultLookbackDays = 10, renders <UnifiedHistoryTab theme={mockTheme} />, computes the expected bucket by picking the nearest value from LOOKBACK_OPTIONS (import LOOKBACK_OPTIONS in the test and pick the closest numeric value to 10), then await waitFor and assert mockGetUnifiedHistory was called with { lookbackDays: expectedBucket, filter: null, limit: 100, offset: 0 }; optionally also assert screen.getByTestId('activity-lookback-hours') displays the mapped value. This uses UnifiedHistoryTab, mockDirNotesSettings, mockGetUnifiedHistory and LOOKBACK_OPTIONS to lock in the non-exact mapping behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsx`:
- Around line 252-278: Add a third test that sets
mockDirNotesSettings.defaultLookbackDays = 10, renders <UnifiedHistoryTab
theme={mockTheme} />, computes the expected bucket by picking the nearest value
from LOOKBACK_OPTIONS (import LOOKBACK_OPTIONS in the test and pick the closest
numeric value to 10), then await waitFor and assert mockGetUnifiedHistory was
called with { lookbackDays: expectedBucket, filter: null, limit: 100, offset: 0
}; optionally also assert screen.getByTestId('activity-lookback-hours') displays
the mapped value. This uses UnifiedHistoryTab, mockDirNotesSettings,
mockGetUnifiedHistory and LOOKBACK_OPTIONS to lock in the non-exact mapping
behavior.
ℹ️ Review info
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
src/__tests__/renderer/components/DirectorNotes/UnifiedHistoryTab.test.tsxsrc/__tests__/renderer/components/TerminalOutput.test.tsxsrc/renderer/components/SettingsModal.tsx
* fix: initialize Director's Notes lookback from settings default UnifiedHistoryTab was defaulting to "All time" instead of using the defaultLookbackDays from Encore Features settings. Adds daysToLookbackHours helper that maps the days setting to the closest LOOKBACK_OPTIONS entry. * fix: enable Details button for historical error messages in chat history The "Details" button on error messages in chat history was non-functional because it only worked with live agent errors. Now passes the specific AgentError from the log entry through the callback chain, allowing historical errors to be displayed in a read-only error modal without recovery actions. * fix: address CodeRabbit review findings on PR #500 - daysToLookbackHours(0) now returns null (All time) instead of incorrectly matching the first preset (24h) - effectiveAgentError now prefers historical error when explicitly requested via Details button, preventing live errors from shadowing it * fix: rename About Me heading to Conductor Profile in Settings Clarifies the purpose of the profile section by showing both terms. * ## CHANGES - Unified History empty-state now reflects selected time range messaging 🕒 - Lookback “All Time” selection correctly maps to `lookbackDays: 0` 🌐 - Unified History tests updated for default 7-day lookback behavior 📅 - TerminalOutput alignment logic clarified: user messages no longer reversed ➡️ - TerminalOutput tests tightened to assert correct container class usage 🧪 * fix: clear activeFileTabId when resuming session from history pill When a file preview tab was active, clicking a session ID pill in the History panel would set inputMode to 'ai' but leave activeFileTabId set, causing MainPanel to continue showing the file preview instead of switching to the AI tab.
Resolves conflict in SettingsModal.tsx: kept decomposed <GeneralTab> component (from our refactoring) and ported the "Conductor Profile" heading rename from PR #500 into GeneralTab.tsx. Auto-merged changes from main (PRs #499, #500, #503): - Historical agent error modal support (effectiveAgentError) - OpenCode parser improvements (filePath tool detail) - TerminalOutput error details callback signature update - Director's Notes lookback default initialization
) * fix: initialize Director's Notes lookback from settings default UnifiedHistoryTab was defaulting to "All time" instead of using the defaultLookbackDays from Encore Features settings. Adds daysToLookbackHours helper that maps the days setting to the closest LOOKBACK_OPTIONS entry. * fix: enable Details button for historical error messages in chat history The "Details" button on error messages in chat history was non-functional because it only worked with live agent errors. Now passes the specific AgentError from the log entry through the callback chain, allowing historical errors to be displayed in a read-only error modal without recovery actions. * fix: address CodeRabbit review findings on PR #500 - daysToLookbackHours(0) now returns null (All time) instead of incorrectly matching the first preset (24h) - effectiveAgentError now prefers historical error when explicitly requested via Details button, preventing live errors from shadowing it * fix: rename About Me heading to Conductor Profile in Settings Clarifies the purpose of the profile section by showing both terms. * ## CHANGES - Unified History empty-state now reflects selected time range messaging 🕒 - Lookback “All Time” selection correctly maps to `lookbackDays: 0` 🌐 - Unified History tests updated for default 7-day lookback behavior 📅 - TerminalOutput alignment logic clarified: user messages no longer reversed ➡️ - TerminalOutput tests tightened to assert correct container class usage 🧪
* fix: initialize Director's Notes lookback from settings default UnifiedHistoryTab was defaulting to "All time" instead of using the defaultLookbackDays from Encore Features settings. Adds daysToLookbackHours helper that maps the days setting to the closest LOOKBACK_OPTIONS entry. * fix: enable Details button for historical error messages in chat history The "Details" button on error messages in chat history was non-functional because it only worked with live agent errors. Now passes the specific AgentError from the log entry through the callback chain, allowing historical errors to be displayed in a read-only error modal without recovery actions. * fix: address CodeRabbit review findings on PR #500 - daysToLookbackHours(0) now returns null (All time) instead of incorrectly matching the first preset (24h) - effectiveAgentError now prefers historical error when explicitly requested via Details button, preventing live errors from shadowing it * fix: rename About Me heading to Conductor Profile in Settings Clarifies the purpose of the profile section by showing both terms. * ## CHANGES - Unified History empty-state now reflects selected time range messaging 🕒 - Lookback “All Time” selection correctly maps to `lookbackDays: 0` 🌐 - Unified History tests updated for default 7-day lookback behavior 📅 - TerminalOutput alignment logic clarified: user messages no longer reversed ➡️ - TerminalOutput tests tightened to assert correct container class usage 🧪 * fix: clear activeFileTabId when resuming session from history pill When a file preview tab was active, clicking a session ID pill in the History panel would set inputMode to 'ai' but leave activeFileTabId set, causing MainPanel to continue showing the file preview instead of switching to the AI tab.
) * fix: initialize Director's Notes lookback from settings default UnifiedHistoryTab was defaulting to "All time" instead of using the defaultLookbackDays from Encore Features settings. Adds daysToLookbackHours helper that maps the days setting to the closest LOOKBACK_OPTIONS entry. * fix: enable Details button for historical error messages in chat history The "Details" button on error messages in chat history was non-functional because it only worked with live agent errors. Now passes the specific AgentError from the log entry through the callback chain, allowing historical errors to be displayed in a read-only error modal without recovery actions. * fix: address CodeRabbit review findings on PR #500 - daysToLookbackHours(0) now returns null (All time) instead of incorrectly matching the first preset (24h) - effectiveAgentError now prefers historical error when explicitly requested via Details button, preventing live errors from shadowing it * fix: rename About Me heading to Conductor Profile in Settings Clarifies the purpose of the profile section by showing both terms. * ## CHANGES - Unified History empty-state now reflects selected time range messaging 🕒 - Lookback “All Time” selection correctly maps to `lookbackDays: 0` 🌐 - Unified History tests updated for default 7-day lookback behavior 📅 - TerminalOutput alignment logic clarified: user messages no longer reversed ➡️ - TerminalOutput tests tightened to assert correct container class usage 🧪
) * fix: initialize Director's Notes lookback from settings default UnifiedHistoryTab was defaulting to "All time" instead of using the defaultLookbackDays from Encore Features settings. Adds daysToLookbackHours helper that maps the days setting to the closest LOOKBACK_OPTIONS entry. * fix: enable Details button for historical error messages in chat history The "Details" button on error messages in chat history was non-functional because it only worked with live agent errors. Now passes the specific AgentError from the log entry through the callback chain, allowing historical errors to be displayed in a read-only error modal without recovery actions. * fix: address CodeRabbit review findings on PR #500 - daysToLookbackHours(0) now returns null (All time) instead of incorrectly matching the first preset (24h) - effectiveAgentError now prefers historical error when explicitly requested via Details button, preventing live errors from shadowing it * fix: rename About Me heading to Conductor Profile in Settings Clarifies the purpose of the profile section by showing both terms. * ## CHANGES - Unified History empty-state now reflects selected time range messaging 🕒 - Lookback “All Time” selection correctly maps to `lookbackDays: 0` 🌐 - Unified History tests updated for default 7-day lookback behavior 📅 - TerminalOutput alignment logic clarified: user messages no longer reversed ➡️ - TerminalOutput tests tightened to assert correct container class usage 🧪
) * fix: initialize Director's Notes lookback from settings default UnifiedHistoryTab was defaulting to "All time" instead of using the defaultLookbackDays from Encore Features settings. Adds daysToLookbackHours helper that maps the days setting to the closest LOOKBACK_OPTIONS entry. * fix: enable Details button for historical error messages in chat history The "Details" button on error messages in chat history was non-functional because it only worked with live agent errors. Now passes the specific AgentError from the log entry through the callback chain, allowing historical errors to be displayed in a read-only error modal without recovery actions. * fix: address CodeRabbit review findings on PR #500 - daysToLookbackHours(0) now returns null (All time) instead of incorrectly matching the first preset (24h) - effectiveAgentError now prefers historical error when explicitly requested via Details button, preventing live errors from shadowing it * fix: rename About Me heading to Conductor Profile in Settings Clarifies the purpose of the profile section by showing both terms. * ## CHANGES - Unified History empty-state now reflects selected time range messaging 🕒 - Lookback “All Time” selection correctly maps to `lookbackDays: 0` 🌐 - Unified History tests updated for default 7-day lookback behavior 📅 - TerminalOutput alignment logic clarified: user messages no longer reversed ➡️ - TerminalOutput tests tightened to assert correct container class usage 🧪
) * fix: initialize Director's Notes lookback from settings default UnifiedHistoryTab was defaulting to "All time" instead of using the defaultLookbackDays from Encore Features settings. Adds daysToLookbackHours helper that maps the days setting to the closest LOOKBACK_OPTIONS entry. * fix: enable Details button for historical error messages in chat history The "Details" button on error messages in chat history was non-functional because it only worked with live agent errors. Now passes the specific AgentError from the log entry through the callback chain, allowing historical errors to be displayed in a read-only error modal without recovery actions. * fix: address CodeRabbit review findings on PR #500 - daysToLookbackHours(0) now returns null (All time) instead of incorrectly matching the first preset (24h) - effectiveAgentError now prefers historical error when explicitly requested via Details button, preventing live errors from shadowing it * fix: rename About Me heading to Conductor Profile in Settings Clarifies the purpose of the profile section by showing both terms. * ## CHANGES - Unified History empty-state now reflects selected time range messaging 🕒 - Lookback “All Time” selection correctly maps to `lookbackDays: 0` 🌐 - Unified History tests updated for default 7-day lookback behavior 📅 - TerminalOutput alignment logic clarified: user messages no longer reversed ➡️ - TerminalOutput tests tightened to assert correct container class usage 🧪
) * fix: initialize Director's Notes lookback from settings default UnifiedHistoryTab was defaulting to "All time" instead of using the defaultLookbackDays from Encore Features settings. Adds daysToLookbackHours helper that maps the days setting to the closest LOOKBACK_OPTIONS entry. * fix: enable Details button for historical error messages in chat history The "Details" button on error messages in chat history was non-functional because it only worked with live agent errors. Now passes the specific AgentError from the log entry through the callback chain, allowing historical errors to be displayed in a read-only error modal without recovery actions. * fix: address CodeRabbit review findings on PR #500 - daysToLookbackHours(0) now returns null (All time) instead of incorrectly matching the first preset (24h) - effectiveAgentError now prefers historical error when explicitly requested via Details button, preventing live errors from shadowing it * fix: rename About Me heading to Conductor Profile in Settings Clarifies the purpose of the profile section by showing both terms. * ## CHANGES - Unified History empty-state now reflects selected time range messaging 🕒 - Lookback “All Time” selection correctly maps to `lookbackDays: 0` 🌐 - Unified History tests updated for default 7-day lookback behavior 📅 - TerminalOutput alignment logic clarified: user messages no longer reversed ➡️ - TerminalOutput tests tightened to assert correct container class usage 🧪
Summary
AgentErrorfrom the log entry through the callback chain, displaying historical errors in a read-only modal (no recovery actions).Test plan
useModalHandlersUnifiedHistoryTabtests for settings-based defaultSummary by CodeRabbit
New Features
Improvements
UI Updates