Rolling document tracking session-by-session progress with git context.
Fixed critical backend relationship bugs and enhanced UI styling, but discovered severe performance issues with high-degree nodes. System is functional but not production-ready due to missing pagination.
5567256- fix: Add error handling for relationship type deserialization4d5c8c9- fix: Handle correct API response format in ConnectionsList
1. Relationship Type Deserialization Bug
- Problem: 11,871 CALLS relationships created but not loaded from Redis cache
- Root Cause:
RelationshipTypeenum deserialization failing silently in_dict_to_relationship() - Fix: Added try-catch with fallback to
RelationshipType.CALLS - Result:
find_function_callersnow returns 21+ results (was 0 before)
2. API Response Format Mismatch
- Problem: Frontend
ConnectionsListlooking forresultsfield, backend returnscallers/callees - Fix: Updated field mapping in
ConnectionsList.vueto convert backend format to node structure - Result: Callers, callees, and siblings now display correctly in UI
- Browse tab now uses
NodeTilecomponents instead of plain divs (consistent styling) - Details pane enhanced with card layout and proper visual hierarchy
- All components follow same DaisyUI design language
Performance Crisis: 1,600+ Connections
- Common import nodes (e.g., Python's
remodule) have 1,123 callers + 495 callees = 1,618 total - All rendered to DOM at once (no pagination or virtualization)
- Browser timeout on screenshot (5000ms exceeded)
- Tiny vertical scrollbar indicates massive list
- Impact: App unusable for high-degree nodes
Desktop Layout Problems
- Horizontal scroll bar always present (slim edge of page cut off)
- Mobile-first responsive design not suitable for desktop workflow app
- Missing: multi-column layout, pinned panels, code preview
- User feedback: "seems to be designed primarily for mobile"
- Core Codebase: 489 nodes, 4,475 relationships (src/codenav only)
- With Workspace: 974 nodes, 12,767 relationships (includes tests, frontend)
- Relationship Types: contains (703), imports (193), calls (11,871)
- Languages Supported: 25 (Python, TypeScript, JavaScript, C#, Go, Rust, etc.)
- Circular Dependencies: 121 detected
- Strongly Connected Components: 477
- ✅ Backend HTTP server healthy (port 8000)
- ✅ Frontend Vite dev server running (port 5173)
- ✅ Redis cache operational (port 6379)
- ✅ All query endpoints returning correct data
- ✅ Frontend-backend communication working
⚠️ Frontend healthcheck failing (cosmetic - Vite doesn't bind to localhost in-container)
- Codegraph MCP: Successfully analyzed codebase, identified architecture issues
- Cortexgraph MCP: 9 memories saved for session continuity and debugging
- Playwright: Used for E2E UX validation, discovered the 1,600+ connections issue
src/codenav/universal_parser.py- Fixed relationship deserializationfrontend/src/components/ConnectionsList.vue- Fixed API format mappingfrontend/src/App.vue- Enhanced styling with NodeTile and card layouts
- Add pagination to backend query endpoints (limit=50 default)
- Implement "Load More" or virtual scrolling in ConnectionsList
- Fix horizontal scroll layout bug
- Filter stdlib imports from "Entry Points" category
Fixed Vite proxy configuration and GraphClient URL construction. Frontend can now communicate with backend properly.
GraphClientnow uses directhttp://localhost:8000/apifrom browser (not Docker service name)- Vite proxy configured for cross-container communication (
code-graph-http:8000) - Backend API format fixed (changed
type→node_typein categories endpoint)
- Vite HMR doesn't always hot-reload code changes reliably
- Requires container restart or hard browser refresh when debugging
- This caused confusion during testing iterations
Fixed backend API response format to match frontend TypeScript interfaces. Full navigation loop now works end-to-end.
df26cf7- Fix backend API response format for categories endpointad6a7c8- Fix Vite dev server proxy configuration for Dockeraec2e22- Fix API client to detect localhost and connect directly
- Browse categories → Load 20 nodes per category
- Click node → Details pane shows complete information
- Switch to Connections tab → See siblings in same file
- Click sibling → Navigate to new node seamlessly
Complete UX redesign with "Code Geography" signpost metaphor. Created foundational navigation components.
0cb6fe2- feat: Add force-graph visualization and redesigned UX
- NodeTile.vue (107 lines) - Reusable signpost tile with distance indicators, direction arrows
- ConnectionsList.vue (218 lines) - "You are here" navigation view with callers/callees/siblings
- App.vue - Completely redesigned with tabbed layout
- 📍 "You are here" → Current node card with stats
- Distance indicators → Hop counts like road signs (🟢 nearby, 🔴 far)
- Direction arrows → Upstream/downstream flow (🔵 callers, 🟢 callees, 🟡 siblings)
- No graph theory knowledge required
Fixed critical Redis serialization bug that was causing graph to show 0 nodes despite parsing working in tests.
- Redis cache had stale/empty data from previous runs
asdict()doesn't convert Enum objects to strings for msgpack- Serialization failing with "can not serialize 'builtin_function_or_method' object"
- Created
serialize_node()andserialize_relationship()helper functions - Convert
NodeTypeandRelationshipTypeenums to.valuestrings before caching - Added Redis FLUSHALL to workflow when changing code/workspace mounts
- Graph now stable: 483 nodes, 4,469 relationships (was 0)
- Redis caching works correctly with enum serialization
- All query tools functional (find_callers, find_callees, find_references)
See docs/sessions/current/ and docs/archive/ for detailed notes.
- Docker Compose multi-service stack
- Health checks and service dependencies
- Production deployment ready
- DaisyUI styling framework integration
- Category browsing (Entry Points, Hubs, Leaves)
- Pagination on category endpoints
- Interactive Cytoscape graph (replaced in Session 9)
- Backend query endpoints (callers, callees, references)
- ToolPanel component for symbol queries
- 8 comprehensive tests (all passing)
- Test infrastructure fixes (AsyncIO deprecation)
- Graph query testing (9/9 passing)
- Redis persistence validation
- Cross-language seam detection (C# → Node, Python → SQL, etc.)
- IgnorePatternsManager with .graphignore support
- 22/22 tests passing
- Vue 3 + Vite + Pinia scaffolding
- GraphClient API wrapper (7 endpoints)
- 6 functional components
- Docker support (dev + prod)
- FastAPI HTTP server with 7 endpoints
- 8 Pydantic response models
- 3 traversal algorithms (DFS, BFS, call chain)
- 6/6 tests passing
- Parser: AST-grep with multi-language support (25 languages)
- Graph Library: Rustworkx (high-performance Rust-based)
- Cache: Redis with msgpack serialization
- Web Framework: FastAPI with async/await
- Package Manager: uv (fast Python package manager)
- Framework: Vue 3 + Composition API + TypeScript
- Build Tool: Vite 7.1.12
- State: Pinia stores (graphStore, filterStore, entryPointStore)
- UI Framework: DaisyUI + Tailwind CSS
- HTTP Client: Axios with type-safe wrappers
- Docker Compose: Multi-service stack
code-graph-http- FastAPI backend (port 8000)code-graph-sse- MCP SSE server (port 10101)frontend- Vite dev server (port 5173)redis- Cache backend (port 6379)redis-insight- Redis GUI (port 5540)
- Networking: Frontend → localhost:8000 → Backend → redis:6379
- Volumes:
repo-mountfor workspace, Redis persistence
Backend:
UniversalParser- Multi-language AST parsingUniversalGraph- Graph data structure with relationship indexingUniversalAnalysisEngine- High-level analysis coordinatorRedisCacheBackend- Persistent cache with serializationGraphAPIRouter- FastAPI router with query endpoints
Frontend:
GraphStore- Pinia store for graph state, node selection, API callsNodeTile- Reusable node display component (signpost design)ConnectionsList- Relationship browser (callers, callees, siblings)CategoryCard- Browse category cardsGraphClient- Type-safe API client wrapper
- CONTAINS: File contains function/class/method
- CALLS: Function calls another function
- IMPORTS: File imports module/library
- INHERITS: Class inheritance
- IMPLEMENTS: Interface implementation
- SEAM: Cross-language boundary call
- REFERENCES: Symbol reference (not yet fully implemented)
- ❌ No pagination on relationship queries (causes browser crash with 1,000+ results)
- ❌ Horizontal scroll on desktop layout (responsive grid overflow)
- ❌ Import nodes dominate Entry Points category (stdlib noise)
- ❌ Mobile-first design not suitable for desktop workflow app
⚠️ No code preview or syntax highlighting⚠️ No keyboard navigation⚠️ No virtual scrolling for large lists⚠️ Unknown graph completeness/accuracy per language⚠️ No validation suite for relationship correctness
⚠️ No saved searches or bookmarking⚠️ No export/share functionality⚠️ No comparison mode (side-by-side nodes)⚠️ No LLM integration for summaries⚠️ Frontend healthcheck fails (cosmetic)
- Limited mobile responsiveness (not primary target)
- No analytics/usage tracking
- No user authentication (out of scope)
- No CI/CD pipeline (manual Docker builds)
- Parser patterns for all 25 languages
- Relationship generation (CALLS, CONTAINS, IMPORTS)
- Category detection (entry points, hubs, leaves)
- Redis cache persistence and serialization
- Query endpoint logic
- Seam detection (11/11)
- Ignore patterns (11/11)
- Backend query endpoint tests (8/8 passing)
- Frontend component tests (none yet)
- E2E Playwright tests (manual, not automated)
- No benchmarks for large graphs
- No memory profiling
- No load testing
# Start full stack
compose.sh up
# View logs
compose.sh logs code-graph-http
compose.sh logs frontend
# Restart after code changes
compose.sh restart
# Clear Redis cache
docker exec codenav-redis-1 redis-cli FLUSHALL# Backend tests
pytest tests/
# Specific test file
pytest tests/test_graph_queries.py -v
# In Docker
docker exec codenav-code-graph-http-1 uv run pytest tests/# Backend HTTP server
docker build -t ajacobm/codenav:http -f Dockerfile --target http .
# Frontend dev
docker build -t codenav-frontend -f frontend/Dockerfile frontend/
# Frontend production
docker build -t codenav-frontend:prod -f frontend/Dockerfile.prod frontend/- Base:
main - Commits Ahead: 5 (unpushed)
- Status: Ready for merge after P0 fixes
- Contains: Sessions 9-12 work (UI redesign, bug fixes)
4d5c8c9 - fix: Handle correct API response format in ConnectionsList
5567256 - fix: Add error handling for relationship type deserialization
4eaf803 - feat: Enable sibling navigation in ConnectionsList
e2105c7 - feat: Connect ConnectionsList component to Connections tab
45881ec - fix: Add loaded nodes to store so selectNode can find them
- Will branch from
feature/sigma-graph-spike - Contains Session 13 work (pagination, desktop panels, code preview)
GET /api/graph/stats- Graph statisticsGET /api/graph/categories/{category}- Browse entry points/hubs/leaves (with pagination ✅)GET /api/graph/query/callers?symbol=X- Find function callers (⚠️ no pagination)GET /api/graph/query/callees?symbol=X- Find function callees (⚠️ no pagination)GET /api/graph/query/references?symbol=X- Find symbol references (⚠️ no pagination)POST /api/graph/traverse- DFS/BFS graph traversalPOST /api/graph/subgraph- Focused subgraph extractionGET /api/graph/nodes/search?q=X- Search nodes by nameGET /health- Health check
- Browse tab - Category cards and node grid
- Connections tab - Relationship browser (callers, callees, siblings)
code-graph-http:8000- Backend APIfrontend:5173- Vue dev serverredis:6379- Cache backendredis-insight:5540- Redis GUIcode-graph-sse:10101- MCP SSE server
Not an IDE - This is a knowledge mining and codebase-wide event-action-result flow analyzer.
- Hidden Business Logic Discovery - Find use cases buried in boilerplate
- Iterative LLM Workflows - Feed code structure to Claude for analysis
- Stack Trace & Data-State Analysis - Trace bugs through call chains
- Graph-Based Observability - Visualize node highlighting during traversal
- Diagnostics & Root Cause - Analyze runtime traces against code graph
- Real-time LLM integration for code summaries
- Force-graph with WebSocket events for live analysis
- Neo4j migration for sophisticated Cypher queries
- Observability: Watch nodes highlight as analysis engine traverses them
- Code review mode with architectural context
Next: See SESSION_13_PLAN.md for detailed implementation plan.