feat: Implement dynamic test-fix execution phase with adaptive task generation

- Added Phase 2: Test-Cycle Execution documentation outlining the process for dynamic test-fix execution, including agent roles, core responsibilities, intelligent strategy engine, and progressive testing.
- Introduced new PowerShell scripts for analyzing TypeScript errors, focusing on error categorization and reporting.
- Created end-to-end tests for the Help Page, ensuring content visibility, documentation navigation, internationalization support, and accessibility compliance.
This commit is contained in:
catlog22
2026-02-07 17:01:30 +08:00
parent 4ce4419ea6
commit ba5f4eba84
70 changed files with 7288 additions and 488 deletions

View File

@@ -54,15 +54,12 @@ export function AppShell({
const urlPath = searchParams.get('path');
const persistedPath = projectPath; // Path from rehydrated store
let pathFound = false;
// Priority 1: URL parameter.
if (urlPath) {
console.log('[AppShell] Initializing workspace from URL parameter:', urlPath);
switchWorkspace(urlPath).catch((error) => {
console.error('[AppShell] Failed to initialize from URL:', error);
});
pathFound = true;
}
// Priority 2: Rehydrated path from localStorage.
else if (persistedPath) {
@@ -71,7 +68,6 @@ export function AppShell({
switchWorkspace(persistedPath).catch((error) => {
console.error('[AppShell] Failed to re-initialize from persisted state:', error);
});
pathFound = true;
}
// Mark as initialized regardless of whether a path was found.

View File

@@ -151,7 +151,7 @@ describe('Header Component - i18n Tests', () => {
describe('translated project path display', () => {
it('should display translated fallback when no project path', () => {
render(<Header projectPath="" />);
render(<Header />);
// Header should render correctly even without project path
const header = screen.getByRole('banner');
@@ -162,21 +162,13 @@ describe('Header Component - i18n Tests', () => {
expect(brandLink).toBeInTheDocument();
});
it('should render workspace selector when project path is provided', () => {
render(<Header projectPath="/test/path" />);
it('should render workspace selector', () => {
render(<Header />);
// Should render the workspace selector button with aria-label
const workspaceButton = screen.getByRole('button', { name: /workspace selector/i });
expect(workspaceButton).toBeInTheDocument();
});
it('should not render workspace selector when project path is empty', () => {
render(<Header projectPath="" />);
// Should NOT render the workspace selector button
const workspaceButton = screen.queryByRole('button', { name: /workspace selector/i });
expect(workspaceButton).not.toBeInTheDocument();
});
});
describe('accessibility with i18n', () => {