-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcoverage.json
More file actions
1 lines (1 loc) · 63.3 KB
/
coverage.json
File metadata and controls
1 lines (1 loc) · 63.3 KB
1
{"meta": {"format": 3, "version": "7.11.0", "timestamp": "2025-11-02T23:35:02.930244", "branch_coverage": false, "show_contexts": false}, "files": {"backend/src/catsyphon/__init__.py": {"executed_lines": [1, 3, 5, 6], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 3, 5, 6], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 6], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/api/__init__.py": {"executed_lines": [0], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/api/app.py": {"executed_lines": [1, 7, 8, 10, 19, 28, 29, 31, 38, 39, 42], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"root": {"executed_lines": [31], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "health": {"executed_lines": [42], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 7, 8, 10, 19, 28, 29, 38, 39], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 7, 8, 10, 19, 28, 29, 31, 38, 39, 42], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/api/routes/__init__.py": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/cli.py": {"executed_lines": [1, 8, 9, 10, 12, 18, 21, 22, 24, 27, 28, 41, 43, 45, 46, 47, 48, 49, 50, 53, 56, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 75, 78, 79, 81, 82, 83, 86, 88, 95, 96, 97, 99, 100, 101, 108, 109, 117, 119, 120, 121, 122, 125, 126, 127, 128, 130, 131, 134, 135, 145, 147, 148, 149, 150, 151, 153, 161, 162, 164, 167, 168, 171, 172, 174, 177, 178, 179, 181, 182, 183, 184, 186, 187, 190], "summary": {"covered_lines": 85, "num_statements": 91, "percent_covered": 93.4065934065934, "percent_covered_display": "93", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [72, 73, 113, 114, 115, 191], "excluded_lines": [], "functions": {"version": {"executed_lines": [24], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ingest": {"executed_lines": [41, 43, 45, 46, 47, 48, 49, 50, 53, 56, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 75, 78, 79, 81, 82, 83, 86, 88, 95, 96, 97, 99, 100, 101, 108, 109, 117, 119, 120, 121, 122, 125, 126, 127, 128, 130, 131], "summary": {"covered_lines": 48, "num_statements": 53, "percent_covered": 90.56603773584905, "percent_covered_display": "91", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [72, 73, 113, 114, 115], "excluded_lines": []}, "serve": {"executed_lines": [145, 147, 148, 149, 150, 151, 153], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "db_init": {"executed_lines": [164, 167, 168], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "db_status": {"executed_lines": [174, 177, 178, 179, 181, 182, 183, 184, 186, 187], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 18, 21, 22, 27, 28, 134, 135, 161, 162, 171, 172, 190], "summary": {"covered_lines": 16, "num_statements": 17, "percent_covered": 94.11764705882354, "percent_covered_display": "94", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [191], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 9, 10, 12, 18, 21, 22, 24, 27, 28, 41, 43, 45, 46, 47, 48, 49, 50, 53, 56, 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, 70, 75, 78, 79, 81, 82, 83, 86, 88, 95, 96, 97, 99, 100, 101, 108, 109, 117, 119, 120, 121, 122, 125, 126, 127, 128, 130, 131, 134, 135, 145, 147, 148, 149, 150, 151, 153, 161, 162, 164, 167, 168, 171, 172, 174, 177, 178, 179, 181, 182, 183, 184, 186, 187, 190], "summary": {"covered_lines": 85, "num_statements": 91, "percent_covered": 93.4065934065934, "percent_covered_display": "93", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [72, 73, 113, 114, 115, 191], "excluded_lines": []}}}, "backend/src/catsyphon/config.py": {"executed_lines": [1, 8, 11, 12, 14, 22, 23, 24, 25, 26, 28, 29, 31, 37, 38, 39, 42, 43, 44, 47, 48, 52], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"Settings.database_url": {"executed_lines": [31], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 11, 12, 14, 22, 23, 24, 25, 26, 28, 29, 37, 38, 39, 42, 43, 44, 47, 48, 52], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"Settings": {"executed_lines": [31], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 11, 12, 14, 22, 23, 24, 25, 26, 28, 29, 37, 38, 39, 42, 43, 44, 47, 48, 52], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/__init__.py": {"executed_lines": [0], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/connection.py": {"executed_lines": [1, 7, 8, 10, 11, 13, 16, 25, 32, 49, 52, 53, 65, 66, 67, 68, 69, 70, 71, 73, 76, 77, 91, 92, 93, 94, 95, 96, 97, 99, 102, 112, 114, 117, 130, 131, 132, 133, 134, 135, 136], "summary": {"covered_lines": 40, "num_statements": 40, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"get_session": {"executed_lines": [49], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "get_db": {"executed_lines": [65, 66, 67, 68, 69, 70, 71, 73], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "transaction": {"executed_lines": [91, 92, 93, 94, 95, 96, 97, 99], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "init_db": {"executed_lines": [112, 114], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "check_connection": {"executed_lines": [130, 131, 132, 133, 134, 135, 136], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 7, 8, 10, 11, 13, 16, 25, 32, 52, 53, 76, 77, 102, 117], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 7, 8, 10, 11, 13, 16, 25, 32, 49, 52, 53, 65, 66, 67, 68, 69, 70, 71, 73, 76, 77, 91, 92, 93, 94, 95, 96, 97, 99, 102, 112, 114, 117, 130, 131, 132, 133, 134, 135, 136], "summary": {"covered_lines": 40, "num_statements": 40, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/migrations/__init__.py": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/migrations/env.py": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 24, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 24, "excluded_lines": 0}, "missing_lines": [7, 9, 10, 13, 16, 20, 23, 27, 28, 32, 35, 46, 47, 56, 57, 60, 66, 72, 73, 80, 81, 84, 85, 87], "excluded_lines": [], "functions": {"run_migrations_offline": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 4, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [46, 47, 56, 57], "excluded_lines": []}, "run_migrations_online": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 5, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [66, 72, 73, 80, 81], "excluded_lines": []}, "": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 15, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 15, "excluded_lines": 0}, "missing_lines": [7, 9, 10, 13, 16, 20, 23, 27, 28, 32, 35, 60, 84, 85, 87], "excluded_lines": []}}, "classes": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 24, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 24, "excluded_lines": 0}, "missing_lines": [7, 9, 10, 13, 16, 20, 23, 27, 28, 32, 35, 46, 47, 56, 57, 60, 66, 72, 73, 80, 81, 84, 85, 87], "excluded_lines": []}}}, "backend/src/catsyphon/db/repositories/__init__.py": {"executed_lines": [1, 7, 8, 9, 10, 11, 12, 13, 15], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 7, 8, 9, 10, 11, 12, 13, 15], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 7, 8, 9, 10, 11, 12, 13, 15], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/repositories/base.py": {"executed_lines": [1, 5, 6, 8, 10, 12, 15, 16, 18, 26, 27, 29, 39, 40, 41, 42, 43, 45, 55, 57, 68, 69, 70, 71, 73, 84, 85, 86, 87, 88, 89, 90, 92, 102, 103, 104, 105, 106, 109, 116], "summary": {"covered_lines": 38, "num_statements": 39, "percent_covered": 97.43589743589743, "percent_covered_display": "97", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [107], "excluded_lines": [], "functions": {"BaseRepository.__init__": {"executed_lines": [26, 27], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "BaseRepository.create": {"executed_lines": [39, 40, 41, 42, 43], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "BaseRepository.get": {"executed_lines": [55], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "BaseRepository.get_all": {"executed_lines": [68, 69, 70, 71], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "BaseRepository.update": {"executed_lines": [84, 85, 86, 87, 88, 89, 90], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "BaseRepository.delete": {"executed_lines": [102, 103, 104, 105, 106], "summary": {"covered_lines": 5, "num_statements": 6, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [107], "excluded_lines": []}, "BaseRepository.count": {"executed_lines": [116], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 5, 6, 8, 10, 12, 15, 16, 18, 29, 45, 57, 73, 92, 109], "summary": {"covered_lines": 13, "num_statements": 13, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"BaseRepository": {"executed_lines": [26, 27, 39, 40, 41, 42, 43, 55, 68, 69, 70, 71, 84, 85, 86, 87, 88, 89, 90, 102, 103, 104, 105, 106, 116], "summary": {"covered_lines": 25, "num_statements": 26, "percent_covered": 96.15384615384616, "percent_covered_display": "96", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [107], "excluded_lines": []}, "": {"executed_lines": [1, 5, 6, 8, 10, 12, 15, 16, 18, 29, 45, 57, 73, 92, 109], "summary": {"covered_lines": 13, "num_statements": 13, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/repositories/conversation.py": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 19, 21, 31, 43, 60, 66, 67, 68, 70, 87, 93, 95, 97, 114, 120, 122, 124, 143, 152, 154, 156, 166, 172, 182], "summary": {"covered_lines": 32, "num_statements": 35, "percent_covered": 91.42857142857143, "percent_covered_display": "91", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [94, 121, 153], "excluded_lines": [], "functions": {"ConversationRepository.__init__": {"executed_lines": [19], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConversationRepository.get_with_relations": {"executed_lines": [31], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConversationRepository.get_by_project": {"executed_lines": [60, 66, 67, 68], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConversationRepository.get_by_developer": {"executed_lines": [87, 93, 95], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [94], "excluded_lines": []}, "ConversationRepository.get_by_agent_type": {"executed_lines": [114, 120, 122], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [121], "excluded_lines": []}, "ConversationRepository.get_by_date_range": {"executed_lines": [143, 152, 154], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [153], "excluded_lines": []}, "ConversationRepository.count_by_status": {"executed_lines": [166], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConversationRepository.get_recent": {"executed_lines": [182], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 21, 43, 70, 97, 124, 156, 172], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"ConversationRepository": {"executed_lines": [19, 31, 60, 66, 67, 68, 87, 93, 95, 114, 120, 122, 143, 152, 154, 166, 182], "summary": {"covered_lines": 17, "num_statements": 20, "percent_covered": 85.0, "percent_covered_display": "85", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [94, 121, 153], "excluded_lines": []}, "": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 21, 43, 70, 97, 124, 156, 172], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/repositories/developer.py": {"executed_lines": [1, 5, 7, 9, 10, 13, 14, 16, 17, 19, 29, 33, 43, 45, 56, 57, 58, 59, 61, 72], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"DeveloperRepository.__init__": {"executed_lines": [17], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DeveloperRepository.get_by_username": {"executed_lines": [29], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DeveloperRepository.get_by_email": {"executed_lines": [43], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DeveloperRepository.get_or_create": {"executed_lines": [56, 57, 58, 59], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "DeveloperRepository.get_or_create_by_username": {"executed_lines": [72], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 5, 7, 9, 10, 13, 14, 16, 19, 33, 45, 61], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"DeveloperRepository": {"executed_lines": [17, 29, 43, 56, 57, 58, 59, 72], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 5, 7, 9, 10, 13, 14, 16, 19, 33, 45, 61], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/repositories/epoch.py": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 19, 21, 38, 44, 46, 48, 61, 70, 100, 101, 102, 104, 117, 127, 133], "summary": {"covered_lines": 23, "num_statements": 24, "percent_covered": 95.83333333333333, "percent_covered_display": "96", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [45], "excluded_lines": [], "functions": {"EpochRepository.__init__": {"executed_lines": [19], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "EpochRepository.get_by_conversation": {"executed_lines": [38, 44, 46], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [45], "excluded_lines": []}, "EpochRepository.get_by_sequence": {"executed_lines": [61], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "EpochRepository.create_epoch": {"executed_lines": [100, 101, 102, 104], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "EpochRepository.get_next_sequence": {"executed_lines": [127, 133], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 21, 48, 70, 117], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"EpochRepository": {"executed_lines": [19, 38, 44, 46, 61, 100, 101, 102, 104, 127, 133], "summary": {"covered_lines": 11, "num_statements": 12, "percent_covered": 91.66666666666667, "percent_covered_display": "92", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [45], "excluded_lines": []}, "": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 21, 48, 70, 117], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/repositories/message.py": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 19, 21, 38, 44, 46, 48, 65, 71, 73, 75, 94, 103, 105, 107, 140, 154, 179, 182, 183, 185], "summary": {"covered_lines": 28, "num_statements": 31, "percent_covered": 90.3225806451613, "percent_covered_display": "90", "missing_lines": 3, "excluded_lines": 1}, "missing_lines": [45, 72, 104], "excluded_lines": [155], "functions": {"MessageRepository.__init__": {"executed_lines": [19], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "MessageRepository.get_by_conversation": {"executed_lines": [38, 44, 46], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [45], "excluded_lines": []}, "MessageRepository.get_by_epoch": {"executed_lines": [65, 71, 73], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [72], "excluded_lines": []}, "MessageRepository.get_by_role": {"executed_lines": [94, 103, 105], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [104], "excluded_lines": []}, "MessageRepository.create_message": {"executed_lines": [140], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "MessageRepository.bulk_create": {"executed_lines": [179, 182, 183, 185], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [155]}, "": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 21, 48, 75, 107, 154], "summary": {"covered_lines": 13, "num_statements": 13, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"MessageRepository": {"executed_lines": [19, 38, 44, 46, 65, 71, 73, 94, 103, 105, 140, 179, 182, 183, 185], "summary": {"covered_lines": 15, "num_statements": 18, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 3, "excluded_lines": 1}, "missing_lines": [45, 72, 104], "excluded_lines": [155]}, "": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 21, 48, 75, 107, 154], "summary": {"covered_lines": 13, "num_statements": 13, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/repositories/project.py": {"executed_lines": [1, 5, 7, 9, 10, 13, 14, 16, 17, 19, 29, 31, 41, 45, 56, 57, 58, 59], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"ProjectRepository.__init__": {"executed_lines": [17], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ProjectRepository.get_by_name": {"executed_lines": [29], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ProjectRepository.search_by_name": {"executed_lines": [41], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ProjectRepository.get_or_create_by_name": {"executed_lines": [56, 57, 58, 59], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 5, 7, 9, 10, 13, 14, 16, 19, 31, 45], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"ProjectRepository": {"executed_lines": [17, 29, 41, 56, 57, 58, 59], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 5, 7, 9, 10, 13, 14, 16, 19, 31, 45], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/db/repositories/raw_log.py": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 19, 21, 31, 38, 55, 61, 63, 65, 87, 89, 98, 121], "summary": {"covered_lines": 20, "num_statements": 21, "percent_covered": 95.23809523809524, "percent_covered_display": "95", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [62], "excluded_lines": [], "functions": {"RawLogRepository.__init__": {"executed_lines": [19], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "RawLogRepository.get_by_conversation": {"executed_lines": [31], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "RawLogRepository.get_by_agent_type": {"executed_lines": [55, 61, 63], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [62], "excluded_lines": []}, "RawLogRepository.create_from_file": {"executed_lines": [87, 89], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "RawLogRepository.create_from_content": {"executed_lines": [121], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 21, 38, 65, 98], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"RawLogRepository": {"executed_lines": [19, 31, 55, 61, 63, 87, 89, 121], "summary": {"covered_lines": 8, "num_statements": 9, "percent_covered": 88.88888888888889, "percent_covered_display": "89", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [62], "excluded_lines": []}, "": {"executed_lines": [1, 5, 6, 7, 9, 11, 12, 15, 16, 18, 21, 38, 65, 98], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/main.py": {"executed_lines": [1, 4, 6, 9, 11, 14], "summary": {"covered_lines": 5, "num_statements": 6, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [15], "excluded_lines": [], "functions": {"hello": {"executed_lines": [6], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "main": {"executed_lines": [11], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 4, 9, 14], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [15], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 4, 6, 9, 11, 14], "summary": {"covered_lines": 5, "num_statements": 6, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [15], "excluded_lines": []}}}, "backend/src/catsyphon/models/__init__.py": {"executed_lines": [0], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/models/db.py": {"executed_lines": [1, 8, 9, 10, 12, 21, 22, 23, 26, 27, 29, 32, 33, 35, 37, 40, 41, 42, 45, 53, 57, 58, 61, 62, 64, 66, 69, 70, 71, 74, 79, 83, 84, 87, 88, 90, 92, 95, 98, 101, 104, 105, 108, 111, 114, 115, 120, 121, 125, 128, 136, 137, 140, 143, 146, 149, 152, 156, 157, 164, 165, 167, 169, 172, 177, 182, 185, 190, 193, 198, 201, 204, 207, 211, 216, 217, 220, 224, 225, 232, 233, 235, 237, 240, 245, 251, 254, 255, 256, 259, 260, 265, 270, 272, 276, 281, 282, 284, 285, 290, 291, 293, 295, 298, 303, 308, 314, 315, 318, 321, 324, 328, 329, 333, 338, 339, 341, 342, 349, 350, 352, 354, 357, 363, 366, 367, 371, 375, 380, 384, 385, 392, 393, 395, 397, 400, 406, 407, 410, 411, 413, 416, 420, 425, 427, 428], "summary": {"covered_lines": 136, "num_statements": 136, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"Project.__repr__": {"executed_lines": [58], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Developer.__repr__": {"executed_lines": [84], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Conversation.__repr__": {"executed_lines": [157], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Epoch.__repr__": {"executed_lines": [225], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Message.__repr__": {"executed_lines": [285], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileTouched.__repr__": {"executed_lines": [342], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConversationTag.__repr__": {"executed_lines": [385], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "RawLog.__repr__": {"executed_lines": [428], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 21, 22, 23, 26, 27, 29, 32, 33, 35, 37, 40, 41, 42, 45, 53, 57, 61, 62, 64, 66, 69, 70, 71, 74, 79, 83, 87, 88, 90, 92, 95, 98, 101, 104, 105, 108, 111, 114, 115, 120, 121, 125, 128, 136, 137, 140, 143, 146, 149, 152, 156, 164, 165, 167, 169, 172, 177, 182, 185, 190, 193, 198, 201, 204, 207, 211, 216, 217, 220, 224, 232, 233, 235, 237, 240, 245, 251, 254, 255, 256, 259, 260, 265, 270, 272, 276, 281, 282, 284, 290, 291, 293, 295, 298, 303, 308, 314, 315, 318, 321, 324, 328, 329, 333, 338, 339, 341, 349, 350, 352, 354, 357, 363, 366, 367, 371, 375, 380, 384, 392, 393, 395, 397, 400, 406, 407, 410, 411, 413, 416, 420, 425, 427], "summary": {"covered_lines": 128, "num_statements": 128, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"Base": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Project": {"executed_lines": [58], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Developer": {"executed_lines": [84], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Conversation": {"executed_lines": [157], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Epoch": {"executed_lines": [225], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Message": {"executed_lines": [285], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FileTouched": {"executed_lines": [342], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConversationTag": {"executed_lines": [385], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "RawLog": {"executed_lines": [428], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 21, 22, 23, 26, 27, 29, 32, 33, 35, 37, 40, 41, 42, 45, 53, 57, 61, 62, 64, 66, 69, 70, 71, 74, 79, 83, 87, 88, 90, 92, 95, 98, 101, 104, 105, 108, 111, 114, 115, 120, 121, 125, 128, 136, 137, 140, 143, 146, 149, 152, 156, 164, 165, 167, 169, 172, 177, 182, 185, 190, 193, 198, 201, 204, 207, 211, 216, 217, 220, 224, 232, 233, 235, 237, 240, 245, 251, 254, 255, 256, 259, 260, 265, 270, 272, 276, 281, 282, 284, 290, 291, 293, 295, 298, 303, 308, 314, 315, 318, 321, 324, 328, 329, 333, 338, 339, 341, 349, 350, 352, 354, 357, 363, 366, 367, 371, 375, 380, 384, 392, 393, 395, 397, 400, 406, 407, 410, 411, 413, 416, 420, 425, 427], "summary": {"covered_lines": 128, "num_statements": 128, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/models/parsed.py": {"executed_lines": [1, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30, 31, 32, 33, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 67, 68, 69, 72, 73, 76, 77, 80, 83, 86, 87, 88, 91, 92, 94, 96], "summary": {"covered_lines": 56, "num_statements": 56, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"ConversationTags.to_dict": {"executed_lines": [96], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30, 31, 32, 33, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 67, 68, 69, 72, 73, 76, 77, 80, 83, 86, 87, 88, 91, 92, 94], "summary": {"covered_lines": 55, "num_statements": 55, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"ToolCall": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CodeChange": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ParsedMessage": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ParsedConversation": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConversationTags": {"executed_lines": [96], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 21, 24, 25, 26, 28, 29, 30, 31, 32, 33, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 47, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 67, 68, 69, 72, 73, 76, 77, 80, 83, 86, 87, 88, 91, 92, 94], "summary": {"covered_lines": 55, "num_statements": 55, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/parsers/__init__.py": {"executed_lines": [1, 8, 14, 15, 17], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 8, 14, 15, 17], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 14, 15, 17], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/parsers/base.py": {"executed_lines": [1, 8, 9, 11, 14, 15, 17, 20, 21, 23, 26, 27, 29, 32, 33, 40, 56], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 4}, "missing_lines": [], "excluded_lines": [54, 55, 76, 77], "functions": {"ConversationParser.can_parse": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [54]}, "ConversationParser.parse": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [76]}, "": {"executed_lines": [1, 8, 9, 11, 14, 15, 17, 20, 21, 23, 26, 27, 29, 32, 33, 40, 56], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [55]}}, "classes": {"ParserError": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ParseFormatError": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ParseDataError": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConversationParser": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [54, 76]}, "": {"executed_lines": [1, 8, 9, 11, 14, 15, 17, 20, 21, 23, 26, 27, 29, 32, 33, 40, 56], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [55]}}}, "backend/src/catsyphon/parsers/claude_code.py": {"executed_lines": [1, 9, 10, 11, 12, 13, 14, 16, 22, 23, 29, 32, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 66, 77, 78, 81, 82, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 104, 106, 120, 121, 123, 126, 128, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 145, 149, 152, 153, 154, 157, 158, 159, 161, 164, 177, 190, 191, 193, 194, 195, 196, 197, 199, 202, 203, 204, 205, 206, 209, 214, 216, 235, 242, 247, 250, 252, 253, 254, 255, 256, 262, 264, 266, 279, 280, 281, 284, 285, 286, 287, 289, 290, 296, 299, 302, 303, 304, 305, 306, 307, 308, 311, 312, 313, 314, 321, 330, 343, 344, 345, 347, 348, 349, 352, 353, 354, 356, 364, 376, 378, 379, 382, 383, 384, 385, 387, 388, 398, 399, 400, 402, 403, 412], "summary": {"covered_lines": 148, "num_statements": 164, "percent_covered": 90.2439024390244, "percent_covered_display": "90", "missing_lines": 16, "excluded_lines": 0}, "missing_lines": [100, 101, 102, 129, 146, 200, 211, 212, 243, 244, 257, 258, 259, 291, 292, 293], "excluded_lines": [], "functions": {"ClaudeCodeParser.can_parse": {"executed_lines": [77, 78, 81, 82, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 104], "summary": {"covered_lines": 17, "num_statements": 20, "percent_covered": 85.0, "percent_covered_display": "85", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [100, 101, 102], "excluded_lines": []}, "ClaudeCodeParser.parse": {"executed_lines": [120, 121, 123, 126, 128, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 145, 149, 152, 153, 154, 157, 158, 159, 161, 164], "summary": {"covered_lines": 26, "num_statements": 28, "percent_covered": 92.85714285714286, "percent_covered_display": "93", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [129, 146], "excluded_lines": []}, "ClaudeCodeParser._parse_all_lines": {"executed_lines": [190, 191, 193, 194, 195, 196, 197, 199, 202, 203, 204, 205, 206, 209, 214], "summary": {"covered_lines": 15, "num_statements": 18, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [200, 211, 212], "excluded_lines": []}, "ClaudeCodeParser._build_message_thread": {"executed_lines": [235, 242, 247, 250, 252, 253, 254, 255, 256, 262, 264], "summary": {"covered_lines": 11, "num_statements": 16, "percent_covered": 68.75, "percent_covered_display": "69", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [243, 244, 257, 258, 259], "excluded_lines": []}, "ClaudeCodeParser._convert_to_parsed_message": {"executed_lines": [279, 280, 281, 284, 285, 286, 287, 289, 290, 296, 299, 302, 303, 304, 305, 306, 307, 308, 311, 312, 313, 314, 321], "summary": {"covered_lines": 23, "num_statements": 26, "percent_covered": 88.46153846153847, "percent_covered_display": "88", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [291, 292, 293], "excluded_lines": []}, "ClaudeCodeParser._extract_tool_call": {"executed_lines": [343, 344, 345, 347, 348, 349, 352, 353, 354, 356], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ClaudeCodeParser._detect_code_changes": {"executed_lines": [376, 378, 379, 382, 383, 384, 385, 387, 388, 398, 399, 400, 402, 403, 412], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 9, 10, 11, 12, 13, 14, 16, 22, 23, 29, 32, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 66, 106, 177, 216, 266, 330, 364], "summary": {"covered_lines": 31, "num_statements": 31, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"_MessageData": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ClaudeCodeParser": {"executed_lines": [77, 78, 81, 82, 85, 86, 87, 88, 89, 90, 92, 93, 95, 96, 97, 98, 104, 120, 121, 123, 126, 128, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 143, 145, 149, 152, 153, 154, 157, 158, 159, 161, 164, 190, 191, 193, 194, 195, 196, 197, 199, 202, 203, 204, 205, 206, 209, 214, 235, 242, 247, 250, 252, 253, 254, 255, 256, 262, 264, 279, 280, 281, 284, 285, 286, 287, 289, 290, 296, 299, 302, 303, 304, 305, 306, 307, 308, 311, 312, 313, 314, 321, 343, 344, 345, 347, 348, 349, 352, 353, 354, 356, 376, 378, 379, 382, 383, 384, 385, 387, 388, 398, 399, 400, 402, 403, 412], "summary": {"covered_lines": 117, "num_statements": 133, "percent_covered": 87.96992481203007, "percent_covered_display": "88", "missing_lines": 16, "excluded_lines": 0}, "missing_lines": [100, 101, 102, 129, 146, 200, 211, 212, 243, 244, 257, 258, 259, 291, 292, 293], "excluded_lines": []}, "": {"executed_lines": [1, 9, 10, 11, 12, 13, 14, 16, 22, 23, 29, 32, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 51, 52, 66, 106, 177, 216, 266, 330, 364], "summary": {"covered_lines": 31, "num_statements": 31, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/parsers/registry.py": {"executed_lines": [1, 8, 9, 10, 12, 13, 15, 18, 19, 33, 35, 37, 48, 49, 51, 71, 72, 75, 76, 77, 79, 80, 81, 82, 88, 93, 107, 108, 110, 111, 112, 113, 118, 120, 121, 128, 132, 135, 150, 151, 154, 156, 158, 160], "summary": {"covered_lines": 42, "num_statements": 48, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [83, 84, 85, 114, 115, 116], "excluded_lines": [], "functions": {"ParserRegistry.__init__": {"executed_lines": [35], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ParserRegistry.register": {"executed_lines": [48, 49], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ParserRegistry.parse": {"executed_lines": [71, 72, 75, 76, 77, 79, 80, 81, 82, 88], "summary": {"covered_lines": 10, "num_statements": 13, "percent_covered": 76.92307692307692, "percent_covered_display": "77", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [83, 84, 85], "excluded_lines": []}, "ParserRegistry.find_parser": {"executed_lines": [107, 108, 110, 111, 112, 113, 118], "summary": {"covered_lines": 7, "num_statements": 10, "percent_covered": 70.0, "percent_covered_display": "70", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [114, 115, 116], "excluded_lines": []}, "ParserRegistry.registered_parsers": {"executed_lines": [128], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "get_default_registry": {"executed_lines": [150, 151, 154, 156, 158, 160], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 13, 15, 18, 19, 33, 37, 51, 93, 120, 121, 132, 135], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"ParserRegistry": {"executed_lines": [35, 48, 49, 71, 72, 75, 76, 77, 79, 80, 81, 82, 88, 107, 108, 110, 111, 112, 113, 118, 128], "summary": {"covered_lines": 21, "num_statements": 27, "percent_covered": 77.77777777777777, "percent_covered_display": "78", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [83, 84, 85, 114, 115, 116], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 13, 15, 18, 19, 33, 37, 51, 93, 120, 121, 132, 135, 150, 151, 154, 156, 158, 160], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/parsers/utils.py": {"executed_lines": [1, 8, 9, 11, 14, 27, 28, 29, 30, 33, 48, 51, 52, 53, 54, 56, 59, 85, 87, 88, 89, 92, 93, 96, 97, 98, 99, 100, 102, 105, 119, 120, 122, 123, 124, 125, 126, 127, 129, 132, 153, 154, 155, 156, 157, 158, 159, 163, 165, 166, 168], "summary": {"covered_lines": 50, "num_statements": 52, "percent_covered": 96.15384615384616, "percent_covered_display": "96", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [160, 161], "excluded_lines": [], "functions": {"parse_iso_timestamp": {"executed_lines": [27, 28, 29, 30], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "build_message_tree": {"executed_lines": [48, 51, 52, 53, 54, 56], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "match_tool_calls_with_results": {"executed_lines": [85, 87, 88, 89, 92, 93, 96, 97, 98, 99, 100, 102], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "extract_text_content": {"executed_lines": [119, 120, 122, 123, 124, 125, 126, 127, 129], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "safe_get_nested": {"executed_lines": [153, 154, 155, 156, 157, 158, 159, 163, 165, 166, 168], "summary": {"covered_lines": 11, "num_statements": 13, "percent_covered": 84.61538461538461, "percent_covered_display": "85", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [160, 161], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 11, 14, 33, 59, 105, 132], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 9, 11, 14, 27, 28, 29, 30, 33, 48, 51, 52, 53, 54, 56, 59, 85, 87, 88, 89, 92, 93, 96, 97, 98, 99, 100, 102, 105, 119, 120, 122, 123, 124, 125, 126, 127, 129, 132, 153, 154, 155, 156, 157, 158, 159, 163, 165, 166, 168], "summary": {"covered_lines": 50, "num_statements": 52, "percent_covered": 96.15384615384616, "percent_covered_display": "96", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [160, 161], "excluded_lines": []}}}, "backend/src/catsyphon/pipeline/__init__.py": {"executed_lines": [1, 5, 7], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 5, 7], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 5, 7], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/pipeline/ingestion.py": {"executed_lines": [1, 9, 10, 11, 13, 15, 23, 24, 26, 29, 73, 76, 77, 78, 79, 80, 81, 84, 85, 86, 87, 88, 91, 92, 93, 94, 95, 98, 115, 119, 130, 133, 134, 136, 147, 160, 161, 163, 166, 182, 183, 186, 187, 188, 195, 196, 199, 200, 209, 210, 211, 214, 215, 221, 224, 227, 229, 230, 235], "summary": {"covered_lines": 58, "num_statements": 60, "percent_covered": 96.66666666666667, "percent_covered_display": "97", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [162, 164], "excluded_lines": [], "functions": {"ingest_conversation": {"executed_lines": [73, 76, 77, 78, 79, 80, 81, 84, 85, 86, 87, 88, 91, 92, 93, 94, 95, 98, 115, 119, 130, 133, 134, 136, 147, 160, 161, 163, 166, 182, 183, 186, 187, 188, 195, 196, 199, 200, 209, 210, 211, 214, 215, 221, 224, 227, 229, 230, 235], "summary": {"covered_lines": 49, "num_statements": 51, "percent_covered": 96.07843137254902, "percent_covered_display": "96", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [162, 164], "excluded_lines": []}, "": {"executed_lines": [1, 9, 10, 11, 13, 15, 23, 24, 26, 29], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 9, 10, 11, 13, 15, 23, 24, 26, 29, 73, 76, 77, 78, 79, 80, 81, 84, 85, 86, 87, 88, 91, 92, 93, 94, 95, 98, 115, 119, 130, 133, 134, 136, 147, 160, 161, 163, 166, 182, 183, 186, 187, 188, 195, 196, 199, 200, 209, 210, 211, 214, 215, 221, 224, 227, 229, 230, 235], "summary": {"covered_lines": 58, "num_statements": 60, "percent_covered": 96.66666666666667, "percent_covered_display": "97", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [162, 164], "excluded_lines": []}}}, "backend/src/catsyphon/sdk/__init__.py": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "backend/src/catsyphon/tagging/__init__.py": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}}, "totals": {"covered_lines": 854, "num_statements": 920, "percent_covered": 92.82608695652173, "percent_covered_display": "93", "missing_lines": 66, "excluded_lines": 5}}