- Removed obsolete feature from feature_list.json related to context file deletion. - Added new features for keyboard shortcuts in Kanban and context management. - Introduced project initialization utilities to create necessary .automaker directory structure and files when opening a new project. - Updated the AgentOutputModal and other components to reference the new agents-context directory. - Enhanced Playwright tests for context file management and project initialization. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.2 KiB
Agent Memory - Lessons Learned
This file documents issues encountered by previous agents and their solutions. Read this before starting work to avoid repeating mistakes.
Testing Issues
Issue: Mock project setup not navigating to board view
Problem: Setting currentProject in localStorage didn't automatically show the board view - app stayed on welcome view.
Fix: The currentView state is not persisted in localStorage. Instead of trying to set it, have tests click on the recent project from the welcome view to trigger setCurrentProject() which handles the view transition properly.
// Don't do this:
await setupMockProject(page); // Sets localStorage
await page.goto("/");
await waitForElement(page, "board-view"); // ❌ Fails - still on welcome view
// Do this instead:
await setupMockProject(page);
await page.goto("/");
await waitForElement(page, "welcome-view");
const recentProject = page.locator('[data-testid="recent-project-test-project-1"]');
await recentProject.click(); // ✅ Triggers proper view transition
await waitForElement(page, "board-view");
Issue: View output button test IDs are conditional
Problem: Tests failed looking for view-output-inprogress-${featureId} when the actual button had view-output-${featureId}.
Fix: The button test ID depends on whether the feature is actively running:
view-output-${featureId}- shown when feature is inrunningAutoTasks(actively running)view-output-inprogress-${featureId}- shown when status is "in_progress" but NOT actively running
After dragging a feature to in_progress, wait for the auto_mode_feature_start event to fire before looking for the button:
// Wait for feature to start running
const viewOutputButton = page.locator(
`[data-testid="view-output-${featureId}"], [data-testid="view-output-inprogress-${featureId}"]`
).first();
await expect(viewOutputButton).toBeVisible({ timeout: 8000 });
Issue: Elements not appearing due to async event timing
Problem: Tests checked for UI elements before async events (like auto_mode_feature_start) had fired and updated the UI.
Fix: Add appropriate timeouts when waiting for elements that depend on async events. The mock auto mode takes ~2.4 seconds to complete, so allow sufficient time:
// Mock auto mode timing: ~2.4s + 1.5s delay = ~4s total
await waitForAgentOutputModalHidden(page, { timeout: 10000 });
Issue: Slider interaction testing
Problem: Clicking on slider track didn't reliably set specific values. Fix: Use the slider's keyboard interaction or calculate the exact click position on the track. For max value, click on the rightmost edge of the track.
Issue: Port binding blocked in sandbox mode
Problem: Playwright tests couldn't bind to port in sandbox mode. Fix: Tests don't need sandbox disabled - the issue was TEST_REUSE_SERVER environment variable. Make sure to start the dev server separately or let Playwright's webServer config handle it.
Code Architecture
Issue: Understanding store state persistence
Problem: Not all store state is persisted to localStorage.
Fix: Check the partialize function in app-store.ts to see which state is persisted:
partialize: (state) => ({
projects: state.projects,
currentProject: state.currentProject,
theme: state.theme,
sidebarOpen: state.sidebarOpen,
apiKeys: state.apiKeys,
chatSessions: state.chatSessions,
chatHistoryOpen: state.chatHistoryOpen,
maxConcurrency: state.maxConcurrency, // Added for concurrency feature
})
Note: currentView is NOT persisted - it's managed through actions.
Issue: Auto mode task lifecycle
Problem: Confusion about when features are considered "running" vs "in_progress". Fix: Understand the task lifecycle:
- Feature dragged to "in_progress" column → status becomes "in_progress"
auto_mode_feature_startevent fires → feature added torunningAutoTasks- Agent works on feature → periodic events sent
auto_mode_feature_completeevent fires → feature removed fromrunningAutoTasks- If
passes: true→ status becomes "verified", ifpasses: false→ stays "in_progress"
Best Practices Discovered
Testing utilities are critical
Create comprehensive testing utilities in tests/utils.ts to avoid repeating selector logic:
waitForElement- waits for elements to appearwaitForElementHidden- waits for elements to disappearsetupMockProject- sets up mock localStorage statenavigateToBoard- handles navigation from welcome to board view
Always add data-testid attributes
When implementing features, immediately add data-testid attributes to key UI elements. This makes tests more reliable and easier to write.
Test timeouts should be generous but not excessive
- Default timeout: 30s (set in playwright.config.ts)
- Element waits: 5-15s for critical elements
- Auto mode completion: 10s (accounts for ~4s mock duration)
- Don't increase timeouts past 10s for individual operations
Mock auto mode timing
The mock auto mode in electron.ts has predictable timing:
- Total duration: ~2.4 seconds (300+500+300+300+500+500ms)
- Plus 1.5s delay before auto-closing modals
- Total: ~4 seconds from start to completion