Joseph, I’ve graded 374 files and over half a million lines of code across this project and, frankly, it feels like you handed in a novel instead of homework. The test coverage and security look surprisingly sharp, so you did some reading — but the sprawling 2000-line files and nine levels of nesting in skia-canvas.tsx read like a cry for help. You need to break down this monster before it breaks you (or the build). Show me you can organize your thoughts as well as you cover your tests next time.
Error Handling:Three issues isn’t perfect, but at least you’re catching some flames instead of letting them roast the whole kitchen.
Code Structure:Zero points and 75 issues — this isn't a codebase, it's a spaghetti sculpture. Please see me after class.
Test Coverage:A solid 94 and just one issue; well, well, someone actually bothered to do their homework.
Security:Perfect score and zero issues — consider this your shining halo in an otherwise dim report.
Dependencies:Two issues mean you’ve got room to clean up your imports before they clutter the hallways.
Documentation:Flawless at 100; your README might actually be readable, which is a rare treat.
Areas for Improvement
(81)
high·electron/main.ts
Large file (769 lines) — this is a real problem
769 LOC, threshold is 400
electron/main.ts is 769 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·server/agents/analysis-agent.ts
Large file (969 lines) — this is a real problem
969 LOC, threshold is 400
server/agents/analysis-agent.ts is 969 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·server/api/ai/chat.ts
Large file (1230 lines) — this is a real problem
1230 LOC, threshold is 400
server/api/ai/chat.ts is 1230 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·server/services/ai/claude-adapter.ts
Large file (825 lines) — this is a real problem
825 LOC, threshold is 400
server/services/ai/claude-adapter.ts is 825 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·server/services/ai/codex-adapter.ts
Large file (1229 lines) — this is a real problem
1229 LOC, threshold is 400
server/services/ai/codex-adapter.ts is 1229 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·server/services/analysis-service.ts
Large file (2030 lines) — this is a real problem
2030 LOC, threshold is 400
server/services/analysis-service.ts is 2030 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·src/canvas/skia/skia-canvas.tsx
Large file (1037 lines) — this is a real problem
1037 LOC, threshold is 400
src/canvas/skia/skia-canvas.tsx is 1037 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·src/canvas/skia/skia-canvas.tsx
Deep nesting detected (9 levels) — refactor this
Max nesting depth: 9
src/canvas/skia/skia-canvas.tsx has 9 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/canvas/skia/skia-engine.ts
Large file (1289 lines) — this is a real problem
1289 LOC, threshold is 400
src/canvas/skia/skia-engine.ts is 1289 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·src/canvas/skia/skia-renderer.ts
Large file (1631 lines) — this is a real problem
1631 LOC, threshold is 400
src/canvas/skia/skia-renderer.ts is 1631 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·src/canvas/skia/skia-renderer.ts
Deep nesting detected (9 levels) — refactor this
Max nesting depth: 9
src/canvas/skia/skia-renderer.ts has 9 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/components/panels/ai-chat-panel.tsx
Large file (785 lines) — this is a real problem
785 LOC, threshold is 400
src/components/panels/ai-chat-panel.tsx is 785 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
src/components/panels/entity-overlay-card.tsx is 1386 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
src/components/shared/agent-settings-dialog.tsx is 922 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·src/mcp/server.ts
Large file (1675 lines) — this is a real problem
1675 LOC, threshold is 400
src/mcp/server.ts is 1675 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·src/mcp/tools/design-skeleton.ts
Deep nesting detected (9 levels) — refactor this
Max nesting depth: 9
src/mcp/tools/design-skeleton.ts has 9 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/services/ai/design-canvas-ops.ts
Deep nesting detected (8 levels) — refactor this
Max nesting depth: 8
src/services/ai/design-canvas-ops.ts has 8 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/services/ai/design-parser.ts
Deep nesting detected (11 levels) — refactor this
Max nesting depth: 11
src/services/ai/design-parser.ts has 11 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/services/ai/design-validation-fixes.ts
Deep nesting detected (15 levels) — refactor this
Max nesting depth: 15
src/services/ai/design-validation-fixes.ts has 15 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/services/ai/design-validation.ts
Deep nesting detected (19 levels) — refactor this
Max nesting depth: 19
src/services/ai/design-validation.ts has 19 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/services/ai/icon-resolver.ts
Large file (1059 lines) — this is a real problem
1059 LOC, threshold is 400
src/services/ai/icon-resolver.ts is 1059 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·src/services/ai/icon-resolver.ts
Deep nesting detected (10 levels) — refactor this
Max nesting depth: 10
src/services/ai/icon-resolver.ts has 10 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/stores/ai-store.ts
Deep nesting detected (8 levels) — refactor this
Max nesting depth: 8
src/stores/ai-store.ts has 8 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/stores/document-store.ts
Large file (767 lines) — this is a real problem
767 LOC, threshold is 400
src/stores/document-store.ts is 767 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·src/types/entity.ts
Large file (841 lines) — this is a real problem
841 LOC, threshold is 400
src/types/entity.ts is 841 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high·src/uikit/kit-utils.ts
Deep nesting detected (9 levels) — refactor this
Max nesting depth: 9
src/uikit/kit-utils.ts has 9 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
high·src/uikit/kits/shadcn-kit.ts
Large file (765 lines) — this is a real problem
765 LOC, threshold is 400
src/uikit/kits/shadcn-kit.ts is 765 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
high
No lock file found (package-lock.json, yarn.lock, or pnpm-lock.yaml)
Missing lock file
Add a lock file to ensure reproducible installs. Run `npm install`, `yarn install`, or `pnpm install` to generate one.
medium·scripts/electron-dev.ts
High console.log density (7 instances) — likely debug code left in production
7 console.log calls in 138 lines
In scripts/electron-dev.ts, there are 7 console.log statements. Replace with a proper logging library or remove debug logs before shipping.
medium·src/services/ai/design-validation-fixes.ts
High console.log density (8 instances) — likely debug code left in production
8 console.log calls in 393 lines
In src/services/ai/design-validation-fixes.ts, there are 8 console.log statements. Replace with a proper logging library or remove debug logs before shipping.
medium·src/services/ai/design-validation.ts
High console.log density (8 instances) — likely debug code left in production
8 console.log calls in 584 lines
In src/services/ai/design-validation.ts, there are 8 console.log statements. Replace with a proper logging library or remove debug logs before shipping.
medium
Low test-to-source ratio (22.1%)
58 test files, 276 source files
Test coverage is below average (22.1%). Consider adding more test coverage, especially for edge cases.
medium·server/agents/analysis-agent.ts
Deep nesting detected (7 levels) — getting hard to follow
Max nesting depth: 7
server/agents/analysis-agent.ts has 7 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·server/services/ai/claude-adapter.ts
Deep nesting detected (6 levels) — getting hard to follow
Max nesting depth: 6
server/services/ai/claude-adapter.ts has 6 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·server/services/entity-graph-service.ts
Large file (534 lines) — should probably split this
534 LOC, threshold is 400
server/services/entity-graph-service.ts is 534 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·server/services/revalidation-service.ts
Large file (505 lines) — should probably split this
505 LOC, threshold is 400
server/services/revalidation-service.ts is 505 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/canvas/canvas-layout-engine.ts
Large file (510 lines) — should probably split this
510 LOC, threshold is 400
src/canvas/canvas-layout-engine.ts is 510 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/canvas/canvas-text-measure.ts
Deep nesting detected (6 levels) — getting hard to follow
Max nesting depth: 6
src/canvas/canvas-text-measure.ts has 6 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·src/canvas/skia/skia-engine.ts
Deep nesting detected (6 levels) — getting hard to follow
Max nesting depth: 6
src/canvas/skia/skia-engine.ts has 6 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·src/canvas/skia/skia-overlays.ts
Large file (645 lines) — should probably split this
645 LOC, threshold is 400
src/canvas/skia/skia-overlays.ts is 645 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/canvas/skia/skia-path-utils.ts
Deep nesting detected (6 levels) — getting hard to follow
Max nesting depth: 6
src/canvas/skia/skia-path-utils.ts has 6 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·src/components/panels/chat-message.tsx
Large file (707 lines) — should probably split this
707 LOC, threshold is 400
src/components/panels/chat-message.tsx is 707 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/components/panels/layout-section.tsx
Large file (540 lines) — should probably split this
540 LOC, threshold is 400
src/components/panels/layout-section.tsx is 540 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/components/panels/node-preview-svg.tsx
Large file (511 lines) — should probably split this
511 LOC, threshold is 400
src/components/panels/node-preview-svg.tsx is 511 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/components/panels/node-preview-svg.tsx
Deep nesting detected (6 levels) — getting hard to follow
Max nesting depth: 6
src/components/panels/node-preview-svg.tsx has 6 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·src/mcp/tools/batch-design.ts
Large file (535 lines) — should probably split this
535 LOC, threshold is 400
src/mcp/tools/batch-design.ts is 535 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/mcp/tools/batch-design.ts
Deep nesting detected (7 levels) — getting hard to follow
Max nesting depth: 7
src/mcp/tools/batch-design.ts has 7 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·src/mcp/utils/node-operations.ts
Deep nesting detected (6 levels) — getting hard to follow
Max nesting depth: 6
src/mcp/utils/node-operations.ts has 6 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·src/mcp/utils/svg-node-parser.ts
Large file (561 lines) — should probably split this
561 LOC, threshold is 400
src/mcp/utils/svg-node-parser.ts is 561 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/mcp/utils/svg-node-parser.ts
Deep nesting detected (6 levels) — getting hard to follow
Max nesting depth: 6
src/mcp/utils/svg-node-parser.ts has 6 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·src/services/ai/ai-service.ts
Deep nesting detected (7 levels) — getting hard to follow
Max nesting depth: 7
src/services/ai/ai-service.ts has 7 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·src/services/ai/design-canvas-ops.ts
Large file (713 lines) — should probably split this
713 LOC, threshold is 400
src/services/ai/design-canvas-ops.ts is 713 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/services/ai/design-validation.ts
Large file (584 lines) — should probably split this
584 LOC, threshold is 400
src/services/ai/design-validation.ts is 584 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/services/ai/orchestrator-sub-agent.ts
Large file (548 lines) — should probably split this
548 LOC, threshold is 400
src/services/ai/orchestrator-sub-agent.ts is 548 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/services/ai/orchestrator-sub-agent.ts
Deep nesting detected (6 levels) — getting hard to follow
Max nesting depth: 6
src/services/ai/orchestrator-sub-agent.ts has 6 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
medium·src/services/ai/orchestrator.ts
Large file (549 lines) — should probably split this
549 LOC, threshold is 400
src/services/ai/orchestrator.ts is 549 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/stores/entity-graph-store.ts
Large file (566 lines) — should probably split this
566 LOC, threshold is 400
src/stores/entity-graph-store.ts is 566 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·src/uikit/kits/shadcn-kit-extra.ts
Large file (676 lines) — should probably split this
676 LOC, threshold is 400
src/uikit/kits/shadcn-kit-extra.ts is 676 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
medium·package.json
High dependency count (58)
58 production dependencies
Review your 58 dependencies. Some may be unused or replaceable with built-in alternatives.
low·server/api/ai/chat.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
server/api/ai/chat.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·server/api/ai/connect-agent.ts
Large file (485 lines) — barely over threshold
485 LOC, threshold is 400
server/api/ai/connect-agent.ts is 485 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
low·server/evals/code-graders.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
server/evals/code-graders.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·server/evals/eval-runner.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
server/evals/eval-runner.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·server/services/entity-graph-service.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
server/services/entity-graph-service.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·server/services/revalidation-service.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
server/services/revalidation-service.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·server/services/revision-diff.ts
Large file (430 lines) — barely over threshold
430 LOC, threshold is 400
server/services/revision-diff.ts is 430 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
low·src/canvas/skia/skia-font-manager.ts
Large file (420 lines) — barely over threshold
420 LOC, threshold is 400
src/canvas/skia/skia-font-manager.ts is 420 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
low·src/components/panels/ai-chat-handlers.ts
Large file (431 lines) — barely over threshold
431 LOC, threshold is 400
src/components/panels/ai-chat-handlers.ts is 431 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
low·src/mcp/server.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
src/mcp/server.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·src/mcp/tools/node-crud.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
src/mcp/tools/node-crud.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·src/mcp/tools/open-document.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
src/mcp/tools/open-document.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·src/services/ai/ai-service.ts
Large file (478 lines) — barely over threshold
478 LOC, threshold is 400
src/services/ai/ai-service.ts is 478 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
low·src/services/ai/analysis-client.ts
Large file (455 lines) — barely over threshold
455 LOC, threshold is 400
src/services/ai/analysis-client.ts is 455 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
low·src/services/ai/analysis-client.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
src/services/ai/analysis-client.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·src/services/ai/orchestrator.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
src/services/ai/orchestrator.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·src/services/ai/role-resolver.ts
Large file (426 lines) — barely over threshold
426 LOC, threshold is 400
src/services/ai/role-resolver.ts is 426 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
low·src/services/analysis/analysis-persistence.ts
Large file (479 lines) — barely over threshold
479 LOC, threshold is 400
src/services/analysis/analysis-persistence.ts is 479 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.
low·src/services/entity/entity-to-pennode.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
src/services/entity/entity-to-pennode.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·src/stores/agent-settings-store.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
src/stores/agent-settings-store.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·src/stores/canvas-store.ts
Deep nesting detected (5 levels) — common in real code
Max nesting depth: 5
src/stores/canvas-store.ts has 5 levels of nesting. Use early returns, extract helper functions, or restructure conditionals to flatten the code.
low·src/utils/svg-parser.ts
Large file (448 lines) — barely over threshold
448 LOC, threshold is 400
src/utils/svg-parser.ts is 448 lines long. Break it into smaller, focused modules. Each file should have one clear responsibility.