• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

agentic-dev-library / thumbcode / 22048622467

16 Feb 2026 03:00AM UTC coverage: 55.51%. First build
22048622467

Pull #145

github

claude
fix: resolve all test failures, lint errors, and formatting issues

- Fix biometric auth: authenticateWithBiometrics now returns
  'Biometric authentication failed' instead of raw error codes
  like 'user_cancel' (fixes KeyStorage + auth-flow integration tests)
- Fix DiffViewer perf test: extract parseDiff to separate module
  so vi.spyOn can intercept cross-module calls (fixes memoization test)
- Fix 3 lint errors: replace role="status" spans with <output> elements
  in AgentDetail and chat.tsx; remove unused catch binding in api-keys
- Apply biome formatting fixes across onboarding and home pages

All 893 tests pass. Typecheck clean. Lint: 0 errors (exit 0).

https://claude.ai/code/session_01PQd4hGQQpmGTgpHc7kGjAE
Pull Request #145: fix: resolve all test failures, lint errors, and formatting issues

1543 of 3156 branches covered (48.89%)

Branch coverage included in aggregate %.

93 of 144 new or added lines in 7 files covered. (64.58%)

2497 of 4122 relevant lines covered (60.58%)

40.28 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

89.66
/src/components/code/parse-diff.ts
1
export interface DiffLine {
2
  type: 'add' | 'remove' | 'context';
3
  content: string;
4
  oldLineNumber?: number;
5
  newLineNumber?: number;
6
}
7

8
export function parseDiff(oldContent: string, newContent: string): DiffLine[] {
9
  // Simple line-by-line diff (in production, use a proper diff library)
10
  const oldLines = oldContent.split('\n');
4✔
11
  const newLines = newContent.split('\n');
4✔
12
  const result: DiffLine[] = [];
4✔
13

14
  let oldIndex = 0;
4✔
15
  let newIndex = 0;
4✔
16

17
  while (oldIndex < oldLines.length || newIndex < newLines.length) {
4✔
18
    if (oldIndex >= oldLines.length) {
5,108✔
19
      result.push({
2✔
20
        type: 'add',
21
        content: newLines[newIndex],
22
        newLineNumber: newIndex + 1,
23
      });
24
      newIndex++;
2✔
25
    } else if (newIndex >= newLines.length) {
5,106!
NEW
26
      result.push({
×
27
        type: 'remove',
28
        content: oldLines[oldIndex],
29
        oldLineNumber: oldIndex + 1,
30
      });
NEW
31
      oldIndex++;
×
32
    } else if (oldLines[oldIndex] === newLines[newIndex]) {
5,106✔
33
      result.push({
4✔
34
        type: 'context',
35
        content: oldLines[oldIndex],
36
        oldLineNumber: oldIndex + 1,
37
        newLineNumber: newIndex + 1,
38
      });
39
      oldIndex++;
4✔
40
      newIndex++;
4✔
41
    } else {
42
      // Lines differ - emit both remove and add
43
      result.push({
5,102✔
44
        type: 'remove',
45
        content: oldLines[oldIndex],
46
        oldLineNumber: oldIndex + 1,
47
      });
48
      result.push({
5,102✔
49
        type: 'add',
50
        content: newLines[newIndex],
51
        newLineNumber: newIndex + 1,
52
      });
53
      oldIndex++;
5,102✔
54
      newIndex++;
5,102✔
55
    }
56
  }
57

58
  return result;
4✔
59
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc