An AI agent built to do Ralph loops - plan mode for planning and ralph mode for implementing.

fix(web): add readonly to ApiError.status, replace as any with specific type casts in tests

+5 -5
+1 -1
web/src/api/client.ts
··· 29 29 */ 30 30 export class ApiError extends Error { 31 31 constructor( 32 - public status: number, 32 + public readonly status: number, 33 33 message: string 34 34 ) { 35 35 super(message);
+4 -4
web/src/lib/decision-graph.test.ts
··· 5 5 6 6 import { describe, it, expect } from 'vitest'; 7 7 import { decisionsToElements, filterNowMode, decisionStylesheet } from './decision-graph'; 8 - import type { GraphNode, GraphEdge } from '../types'; 8 + import type { GraphNode, GraphEdge, NodeType, NodeStatus, EdgeType } from '../types'; 9 9 10 10 /** 11 11 * Create a test GraphNode. ··· 19 19 return { 20 20 id, 21 21 project_id: 'proj-1', 22 - node_type: nodeType as any, 22 + node_type: nodeType as NodeType, 23 23 title, 24 24 description: 'Test description', 25 - status: status as any, 25 + status: status as NodeStatus, 26 26 priority: 'medium', 27 27 assigned_to: null, 28 28 created_by: null, ··· 47 47 ): GraphEdge { 48 48 return { 49 49 id, 50 - edge_type: edgeType as any, 50 + edge_type: edgeType as EdgeType, 51 51 from_node: fromNode, 52 52 to_node: toNode, 53 53 label,