Coverage report: 100%

Files Functions Classes

coverage.py v7.8.0, created at 2025-09-23 21:54 +0000

File function statements missing excluded branches partial coverage
src/prosemark/__init__.py (no function) 0 0 0 0 0 100%
src/prosemark/adapters/__init__.py (no function) 11 0 0 0 0 100%
src/prosemark/adapters/binder_repo_fs.py BinderRepoFs.__init__ 4 0 0 0 0 100%
src/prosemark/adapters/binder_repo_fs.py BinderRepoFs.load 17 0 0 2 0 100%
src/prosemark/adapters/binder_repo_fs.py BinderRepoFs.save 10 0 0 2 0 100%
src/prosemark/adapters/binder_repo_fs.py BinderRepoFs._extract_managed_block 9 0 0 4 0 100%
src/prosemark/adapters/binder_repo_fs.py BinderRepoFs._update_managed_block 7 0 0 2 0 100%
src/prosemark/adapters/binder_repo_fs.py BinderRepoFs._create_new_content 1 0 0 0 0 100%
src/prosemark/adapters/binder_repo_fs.py (no function) 15 0 2 0 0 100%
src/prosemark/adapters/binder_scaffold.py generate_binder_scaffold 28 0 3 8 0 100%
src/prosemark/adapters/binder_scaffold.py _generate_scaffold_content 1 0 0 0 0 100%
src/prosemark/adapters/binder_scaffold.py (no function) 5 0 0 0 0 100%
src/prosemark/adapters/clock_system.py ClockSystem.now_iso 1 0 0 0 0 100%
src/prosemark/adapters/clock_system.py (no function) 4 0 0 0 0 100%
src/prosemark/adapters/console_pretty.py ConsolePretty.__init__ 2 0 0 0 0 100%
src/prosemark/adapters/console_pretty.py ConsolePretty.print 1 0 0 0 0 100%
src/prosemark/adapters/console_pretty.py ConsolePretty.print_tree 3 0 0 2 0 100%
src/prosemark/adapters/console_pretty.py ConsolePretty._print_tree_item 5 0 0 2 0 100%
src/prosemark/adapters/console_pretty.py ConsolePretty._detect_color_support 7 0 0 6 0 100%
src/prosemark/adapters/console_pretty.py (no function) 10 0 2 0 0 100%
src/prosemark/adapters/daily_repo_fs.py DailyRepoFs.__init__ 4 0 0 0 0 100%
src/prosemark/adapters/daily_repo_fs.py DailyRepoFs.write_freeform 18 0 0 2 0 100%
src/prosemark/adapters/daily_repo_fs.py (no function) 10 0 0 0 0 100%
src/prosemark/adapters/editor_launcher_system.py EditorLauncherSystem.open 15 0 0 0 0 100%
src/prosemark/adapters/editor_launcher_system.py EditorLauncherSystem._find_editor 11 0 0 10 0 100%
src/prosemark/adapters/editor_launcher_system.py EditorLauncherSystem._command_exists 5 0 0 0 0 100%
src/prosemark/adapters/editor_launcher_system.py EditorLauncherSystem._build_command 5 0 0 2 0 100%
src/prosemark/adapters/editor_launcher_system.py EditorLauncherSystem._supports_cursor_hint 2 0 0 0 0 100%
src/prosemark/adapters/editor_launcher_system.py EditorLauncherSystem._add_cursor_hint 11 0 0 10 0 100%
src/prosemark/adapters/editor_launcher_system.py (no function) 18 0 0 0 0 100%
src/prosemark/adapters/fake_clock.py FakeClock.__init__ 1 0 0 0 0 100%
src/prosemark/adapters/fake_clock.py FakeClock.now_iso 1 0 0 0 0 100%
src/prosemark/adapters/fake_clock.py (no function) 4 0 0 0 0 100%
src/prosemark/adapters/fake_config.py FakeConfigPort.__init__ 1 0 0 0 0 100%
src/prosemark/adapters/fake_config.py FakeConfigPort.create_default_config 1 0 0 0 0 100%
src/prosemark/adapters/fake_config.py FakeConfigPort.config_exists 1 0 0 0 0 100%
src/prosemark/adapters/fake_config.py FakeConfigPort.get_default_config_values 1 0 0 0 0 100%
src/prosemark/adapters/fake_config.py (no function) 7 0 0 0 0 100%
src/prosemark/adapters/fake_console.py FakeConsolePort.__init__ 2 0 0 0 0 100%
src/prosemark/adapters/fake_console.py FakeConsolePort.print 1 0 0 0 0 100%
src/prosemark/adapters/fake_console.py FakeConsolePort.print_tree 1 0 0 0 0 100%
src/prosemark/adapters/fake_console.py FakeConsolePort.get_output 1 0 0 0 0 100%
src/prosemark/adapters/fake_console.py FakeConsolePort.last_output 0 0 4 0 0 100%
src/prosemark/adapters/fake_console.py FakeConsolePort.output_contains 1 0 0 0 0 100%
src/prosemark/adapters/fake_console.py FakeConsolePort.get_tree_calls 1 0 0 0 0 100%
src/prosemark/adapters/fake_console.py FakeConsolePort.tree_call_count 1 0 0 0 0 100%
src/prosemark/adapters/fake_console.py (no function) 11 0 2 0 0 100%
src/prosemark/adapters/fake_id_generator.py FakeIdGenerator.__init__ 2 0 2 0 0 100%
src/prosemark/adapters/fake_id_generator.py FakeIdGenerator.new 4 0 2 0 0 100%
src/prosemark/adapters/fake_id_generator.py FakeIdGenerator.reset 0 0 6 0 0 100%
src/prosemark/adapters/fake_id_generator.py FakeIdGenerator.remaining_count 0 0 7 0 0 100%
src/prosemark/adapters/fake_id_generator.py FakeIdGenerator.generated_count 1 0 0 0 0 100%
src/prosemark/adapters/fake_id_generator.py FakeIdGenerator.peek_next 0 0 14 0 0 100%
src/prosemark/adapters/fake_id_generator.py (no function) 6 0 3 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.__init__ 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.debug 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.info 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.warning 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.error 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.exception 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.get_logs 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.get_logs_by_level 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.has_logged 10 0 2 8 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.get_logged_messages 10 0 2 6 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.clear_logs 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.last_log 0 0 4 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.log_count 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.log_count_by_level 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.info_messages 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.error_messages 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.debug_messages 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.exception_messages 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger.clear 1 0 0 0 0 100%
src/prosemark/adapters/fake_logger.py (no function) 25 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.__init__ 7 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.create 4 0 3 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.read_frontmatter 5 0 3 2 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.write_frontmatter 0 0 17 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.open_in_editor 6 0 6 2 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.delete 3 0 3 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.node_exists 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.get_editor_calls 0 0 7 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.clear_editor_calls 0 0 6 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.get_delete_calls 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.delete_called_with 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.clear_delete_calls 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.get_node_count 0 0 7 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.set_open_in_editor_exception 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.open_in_editor_calls 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.open_in_editor_calls 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.set_existing_files 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.set_existing_notes_files 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.get_existing_files 7 0 0 2 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.get_existing_notes_files 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.file_exists 7 0 0 4 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo.set_frontmatter_mismatch 1 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py (no function) 24 0 4 0 0 100%
src/prosemark/adapters/fake_storage.py FakeBinderRepo.__init__ 1 0 0 0 0 100%
src/prosemark/adapters/fake_storage.py FakeBinderRepo.load 1 0 3 0 0 100%
src/prosemark/adapters/fake_storage.py FakeBinderRepo.save 1 0 0 0 0 100%
src/prosemark/adapters/fake_storage.py FakeBinderRepo.set_binder 1 0 0 0 0 100%
src/prosemark/adapters/fake_storage.py (no function) 8 0 2 0 0 100%
src/prosemark/adapters/frontmatter_codec.py FrontmatterCodec.parse 10 0 0 4 0 100%
src/prosemark/adapters/frontmatter_codec.py FrontmatterCodec.generate 8 0 0 2 0 100%
src/prosemark/adapters/frontmatter_codec.py FrontmatterCodec.update_frontmatter 3 0 0 0 0 100%
src/prosemark/adapters/frontmatter_codec.py FrontmatterCodec._validate_frontmatter_format 6 0 0 6 0 100%
src/prosemark/adapters/frontmatter_codec.py FrontmatterCodec._check_misplaced_frontmatter 10 0 0 8 0 100%
src/prosemark/adapters/frontmatter_codec.py FrontmatterCodec._parse_yaml_content 11 0 0 4 0 100%
src/prosemark/adapters/frontmatter_codec.py FrontmatterCodec._convert_datetimes_to_strings 6 0 0 4 0 100%
src/prosemark/adapters/frontmatter_codec.py (no function) 18 0 0 0 0 100%
src/prosemark/adapters/id_generator.py SimpleIdGenerator.new 1 0 0 0 0 100%
src/prosemark/adapters/id_generator.py (no function) 4 0 0 0 0 100%
src/prosemark/adapters/id_generator_uuid7.py IdGeneratorUuid7.new 1 0 0 0 0 100%
src/prosemark/adapters/id_generator_uuid7.py (no function) 4 0 0 0 0 100%
src/prosemark/adapters/logger_stdout.py LoggerStdout.__init__ 2 0 0 0 0 100%
src/prosemark/adapters/logger_stdout.py LoggerStdout.debug 1 0 1 0 0 100%
src/prosemark/adapters/logger_stdout.py LoggerStdout.info 1 0 1 0 0 100%
src/prosemark/adapters/logger_stdout.py LoggerStdout.warning 1 0 1 0 0 100%
src/prosemark/adapters/logger_stdout.py LoggerStdout.error 1 0 1 0 0 100%
src/prosemark/adapters/logger_stdout.py LoggerStdout.exception 0 0 2 0 0 100%
src/prosemark/adapters/logger_stdout.py (no function) 10 0 0 0 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser.parse_to_binder 11 0 0 2 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser.render_from_binder 4 0 0 2 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser._validate_markdown_format 5 0 0 4 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser._check_bracket_patterns 4 0 0 4 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser._handle_no_matches 7 0 0 6 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser._build_binder_tree 13 0 0 4 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser._raise_malformed_error 2 0 0 0 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser._raise_parse_error 2 0 0 0 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser._render_item 6 0 0 4 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser._extract_node_id 7 0 2 4 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser._find_parent 6 0 0 4 0 100%
src/prosemark/adapters/markdown_binder_parser.py (no function) 24 0 0 0 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs.__init__ 4 0 0 0 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs.create 15 0 0 2 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs.read_frontmatter 15 0 0 2 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs.write_frontmatter 13 0 0 2 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs.open_in_editor 15 0 0 6 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs.delete 12 0 0 6 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs.get_existing_files 14 0 2 2 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs._is_valid_node_id 5 0 0 4 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs._is_uuid7_format 14 0 0 8 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs._is_reasonable_node_id 4 0 0 2 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs.file_exists 7 0 0 4 0 100%
src/prosemark/adapters/node_repo_fs.py (no function) 24 0 0 0 0 100%
src/prosemark/app/__init__.py (no function) 2 0 0 0 0 100%
src/prosemark/app/add_node.py AddNode.__init__ 6 0 0 0 0 100%
src/prosemark/app/add_node.py AddNode.execute 21 0 0 8 0 100%
src/prosemark/app/add_node.py AddNode._find_item 7 0 0 6 0 100%
src/prosemark/app/add_node.py (no function) 7 0 7 0 0 100%
src/prosemark/app/audit_project.py AuditReport.has_issues 1 0 0 0 0 100%
src/prosemark/app/audit_project.py AuditProject.__init__ 4 0 0 0 0 100%
src/prosemark/app/audit_project.py AuditProject.execute 11 0 0 0 0 100%
src/prosemark/app/audit_project.py AuditProject._check_items 16 0 3 10 0 100%
src/prosemark/app/audit_project.py AuditProject._find_orphans 12 0 0 8 0 100%
src/prosemark/app/audit_project.py AuditProject._collect_ids 4 0 0 4 0 100%
src/prosemark/app/audit_project.py AuditProject._display_report 25 0 0 18 0 100%
src/prosemark/app/audit_project.py (no function) 37 0 5 0 0 100%
src/prosemark/app/init_project.py InitProject.__init__ 3 0 0 0 0 100%
src/prosemark/app/init_project.py InitProject.execute 11 0 0 2 0 100%
src/prosemark/app/init_project.py (no function) 6 0 4 0 0 100%
src/prosemark/app/materialize_all_placeholders.py MaterializeAllPlaceholders.__init__ 6 0 0 0 0 100%
src/prosemark/app/materialize_all_placeholders.py MaterializeAllPlaceholders.execute 35 0 0 14 0 100%
src/prosemark/app/materialize_all_placeholders.py MaterializeAllPlaceholders._discover_placeholders 3 0 0 0 0 100%
src/prosemark/app/materialize_all_placeholders.py MaterializeAllPlaceholders._collect_placeholders_recursive 8 0 0 6 0 100%
src/prosemark/app/materialize_all_placeholders.py MaterializeAllPlaceholders._materialize_single_placeholder 3 0 0 0 0 100%
src/prosemark/app/materialize_all_placeholders.py MaterializeAllPlaceholders._create_failure_record 3 0 0 0 0 100%
src/prosemark/app/materialize_all_placeholders.py MaterializeAllPlaceholders._categorize_error 12 0 0 10 0 100%
src/prosemark/app/materialize_all_placeholders.py (no function) 19 0 7 0 0 100%
src/prosemark/app/materialize_node.py MaterializeNode.__init__ 6 0 0 0 0 100%
src/prosemark/app/materialize_node.py MaterializeNode.execute 15 0 3 0 0 100%
src/prosemark/app/materialize_node.py MaterializeNode._find_placeholder 7 0 0 6 0 100%
src/prosemark/app/materialize_node.py (no function) 8 0 7 0 0 100%
src/prosemark/app/move_node.py MoveNode.__init__ 3 0 0 0 0 100%
src/prosemark/app/move_node.py MoveNode.execute 25 0 5 10 0 100%
src/prosemark/app/move_node.py MoveNode._find_item 5 0 2 4 0 100%
src/prosemark/app/move_node.py MoveNode._remove_item 8 0 0 6 0 100%
src/prosemark/app/move_node.py MoveNode._would_create_cycle 1 0 0 0 0 100%
src/prosemark/app/move_node.py (no function) 10 0 4 0 0 100%
src/prosemark/app/remove_node.py RemoveNode.__init__ 4 0 0 0 0 100%
src/prosemark/app/remove_node.py RemoveNode.execute 25 0 0 12 0 100%
src/prosemark/app/remove_node.py RemoveNode._find_parent_and_position 9 0 0 8 0 100%
src/prosemark/app/remove_node.py (no function) 8 0 5 0 0 100%
src/prosemark/app/use_cases.py AuditReport.is_clean 1 0 0 0 0 100%
src/prosemark/app/use_cases.py AuditReport.format_report 20 0 0 10 0 100%
src/prosemark/app/use_cases.py AuditReport.to_json 2 0 0 0 0 100%
src/prosemark/app/use_cases.py InitProject.__init__ 5 0 0 0 0 100%
src/prosemark/app/use_cases.py InitProject.execute 13 0 0 2 0 100%
src/prosemark/app/use_cases.py InitProject._create_initial_binder 4 0 0 0 0 100%
src/prosemark/app/use_cases.py InitProject._create_default_config 3 0 0 0 0 100%
src/prosemark/app/use_cases.py AddNode.__init__ 5 0 0 0 0 100%
src/prosemark/app/use_cases.py AddNode.execute 12 0 0 0 0 100%
src/prosemark/app/use_cases.py AddNode._add_node_to_binder 16 0 1 8 0 100%
src/prosemark/app/use_cases.py EditPart.__init__ 3 0 0 0 0 100%
src/prosemark/app/use_cases.py EditPart.execute 16 0 0 4 0 100%
src/prosemark/app/use_cases.py MoveNode.__init__ 2 0 0 0 0 100%
src/prosemark/app/use_cases.py MoveNode.execute 23 0 0 8 0 100%
src/prosemark/app/use_cases.py MoveNode._would_create_circular_dependency 3 0 0 2 0 100%
src/prosemark/app/use_cases.py MoveNode._is_ancestor 8 0 1 4 0 100%
src/prosemark/app/use_cases.py MoveNode._find_parent_of_node 7 0 1 4 0 100%
src/prosemark/app/use_cases.py MoveNode._find_parent_of_node._search_for_parent 8 0 0 8 0 100%
src/prosemark/app/use_cases.py MoveNode._remove_node_from_current_location 8 0 0 4 0 100%
src/prosemark/app/use_cases.py MoveNode._add_node_to_new_location 12 0 0 6 0 100%
src/prosemark/app/use_cases.py RemoveNode.__init__ 3 0 0 0 0 100%
src/prosemark/app/use_cases.py RemoveNode.execute 18 0 0 6 0 100%
src/prosemark/app/use_cases.py RemoveNode._find_parent_of_node 7 0 1 4 0 100%
src/prosemark/app/use_cases.py RemoveNode._find_parent_of_node._search_for_parent 8 0 0 8 0 100%
src/prosemark/app/use_cases.py RemoveNode._promote_children_to_parent_level 10 0 0 6 0 100%
src/prosemark/app/use_cases.py RemoveNode._remove_node_from_binder 4 0 0 2 0 100%
src/prosemark/app/use_cases.py WriteFreeform.__init__ 4 0 0 0 0 100%
src/prosemark/app/use_cases.py WriteFreeform.execute 16 0 0 2 0 100%
src/prosemark/app/use_cases.py ShowStructure.__init__ 2 0 0 0 0 100%
src/prosemark/app/use_cases.py ShowStructure.execute 7 0 0 4 0 100%
src/prosemark/app/use_cases.py ShowStructure._format_full_structure 13 0 0 6 0 100%
src/prosemark/app/use_cases.py ShowStructure._format_subtree_structure 9 0 0 2 0 100%
src/prosemark/app/use_cases.py ShowStructure._format_items 8 0 0 4 0 100%
src/prosemark/app/use_cases.py ShowStructure._format_items_with_root_connectors 8 0 0 4 0 100%
src/prosemark/app/use_cases.py ShowStructure._format_single_item 14 0 0 6 0 100%
src/prosemark/app/use_cases.py ShowStructure._count_all_items 4 0 0 2 0 100%
src/prosemark/app/use_cases.py ShowStructure._count_placeholders 4 0 0 2 0 100%
src/prosemark/app/use_cases.py MaterializeNode.__init__ 4 0 0 0 0 100%
src/prosemark/app/use_cases.py MaterializeNode.execute 22 0 4 4 0 100%
src/prosemark/app/use_cases.py MaterializeNode._find_item_by_title_recursive 7 0 0 6 0 100%
src/prosemark/app/use_cases.py AuditBinder.__init__ 3 0 0 0 0 100%
src/prosemark/app/use_cases.py AuditBinder.execute 17 0 0 0 0 100%
src/prosemark/app/use_cases.py AuditBinder._scan_placeholders 5 0 0 2 0 100%
src/prosemark/app/use_cases.py AuditBinder._scan_placeholders._scan_item_recursive 8 0 0 4 0 100%
src/prosemark/app/use_cases.py AuditBinder._get_existing_node_files 1 0 0 0 0 100%
src/prosemark/app/use_cases.py AuditBinder._scan_missing_files 7 0 0 2 0 100%
src/prosemark/app/use_cases.py AuditBinder._scan_missing_notes_files 8 0 0 4 0 100%
src/prosemark/app/use_cases.py AuditBinder._scan_orphaned_files 7 0 0 2 0 100%
src/prosemark/app/use_cases.py AuditBinder._scan_orphaned_invalid_files 29 0 5 12 0 100%
src/prosemark/app/use_cases.py AuditBinder._scan_id_mismatches 21 0 0 4 0 100%
src/prosemark/app/use_cases.py (no function) 89 0 10 0 0 100%
src/prosemark/cli/__init__.py (no function) 11 0 0 0 0 100%
src/prosemark/cli/add.py add_command 42 0 0 6 0 100%
src/prosemark/cli/add.py (no function) 18 0 0 0 0 100%
src/prosemark/cli/audit.py _report_placeholders 4 0 0 6 0 100%
src/prosemark/cli/audit.py _report_missing_nodes 4 0 0 6 0 100%
src/prosemark/cli/audit.py _report_orphans 4 0 0 6 0 100%
src/prosemark/cli/audit.py _report_mismatches 4 0 0 6 0 100%
src/prosemark/cli/audit.py audit_command 33 0 0 12 0 100%
src/prosemark/cli/audit.py (no function) 17 0 0 0 0 100%
src/prosemark/cli/edit.py edit_command 26 0 0 4 0 100%
src/prosemark/cli/edit.py (no function) 15 0 0 0 0 100%
src/prosemark/cli/init.py FileSystemConfigPort.create_default_config 0 0 0 0 0 100%
src/prosemark/cli/init.py FileSystemConfigPort.config_exists 1 0 0 0 0 100%
src/prosemark/cli/init.py FileSystemConfigPort.get_default_config_values 1 0 0 0 0 100%
src/prosemark/cli/init.py FileSystemConfigPort.load_config 1 0 0 0 0 100%
src/prosemark/cli/init.py init_command 20 0 0 0 0 100%
src/prosemark/cli/init.py (no function) 22 0 0 0 0 100%
src/prosemark/cli/main.py FileSystemConfigPort.create_default_config 0 0 0 0 0 100%
src/prosemark/cli/main.py FileSystemConfigPort.config_exists 1 0 0 0 0 100%
src/prosemark/cli/main.py FileSystemConfigPort.get_default_config_values 1 0 0 0 0 100%
src/prosemark/cli/main.py FileSystemConfigPort.load_config 1 0 0 0 0 100%
src/prosemark/cli/main.py _get_project_root 1 0 0 0 0 100%
src/prosemark/cli/main.py init 20 0 0 0 0 100%
src/prosemark/cli/main.py add 23 0 0 0 0 100%
src/prosemark/cli/main.py edit 26 0 0 4 0 100%
src/prosemark/cli/main.py structure 28 0 0 8 0 100%
src/prosemark/cli/main.py write 17 0 0 0 0 100%
src/prosemark/cli/main.py _validate_materialize_args 6 0 0 4 0 100%
src/prosemark/cli/main.py _create_shared_dependencies 7 0 0 0 0 100%
src/prosemark/cli/main.py _generate_json_result 17 0 0 8 0 100%
src/prosemark/cli/main.py _check_result_failure_status 6 0 0 6 0 100%
src/prosemark/cli/main.py _report_materialization_progress 10 0 0 8 0 100%
src/prosemark/cli/main.py _materialize_all_placeholders 23 0 0 8 0 100%
src/prosemark/cli/main.py _materialize_all_placeholders.progress_callback 2 0 0 0 0 100%
src/prosemark/cli/main.py _describe_materialization_result 6 0 0 2 0 100%
src/prosemark/cli/main.py _get_safe_attribute 8 0 0 2 0 100%
src/prosemark/cli/main.py _get_summary_message 9 0 0 6 0 100%
src/prosemark/cli/main.py _materialize_single_placeholder 5 0 0 0 0 100%
src/prosemark/cli/main.py materialize 25 0 0 4 0 100%
src/prosemark/cli/main.py move 20 0 0 0 0 100%
src/prosemark/cli/main.py remove 27 0 0 6 0 100%
src/prosemark/cli/main.py _validate_materialize_all_options 15 0 0 10 0 100%
src/prosemark/cli/main.py _execute_dry_run_materialize 9 0 0 4 0 100%
src/prosemark/cli/main.py _execute_materialize_all 2 0 0 0 0 100%
src/prosemark/cli/main.py materialize_all 30 0 0 6 0 100%
src/prosemark/cli/main.py audit 40 0 0 26 0 100%
src/prosemark/cli/main.py main 1 0 0 0 0 100%
src/prosemark/cli/main.py (no function) 76 0 2 0 0 100%
src/prosemark/cli/materialize.py materialize_command 22 0 0 0 0 100%
src/prosemark/cli/materialize.py (no function) 15 0 0 0 0 100%
src/prosemark/cli/move.py move_command 24 0 0 4 0 100%
src/prosemark/cli/move.py (no function) 13 0 0 0 0 100%
src/prosemark/cli/remove.py remove_command 25 0 0 4 0 100%
src/prosemark/cli/remove.py (no function) 16 0 0 0 0 100%
src/prosemark/cli/structure.py structure_command 25 0 0 8 0 100%
src/prosemark/cli/structure.py (no function) 13 0 2 0 0 100%
src/prosemark/cli/write.py write_command 17 0 0 0 0 100%
src/prosemark/cli/write.py (no function) 13 0 0 0 0 100%
src/prosemark/domain/__init__.py (no function) 0 0 0 0 0 100%
src/prosemark/domain/batch_materialize_result.py BatchMaterializeResult.__post_init__ 7 0 3 2 0 100%
src/prosemark/domain/batch_materialize_result.py BatchMaterializeResult.success_rate 3 0 0 2 0 100%
src/prosemark/domain/batch_materialize_result.py BatchMaterializeResult.has_failures 1 0 0 0 0 100%
src/prosemark/domain/batch_materialize_result.py BatchMaterializeResult.is_complete_success 1 0 0 0 0 100%
src/prosemark/domain/batch_materialize_result.py BatchMaterializeResult.is_complete_failure 1 0 0 0 0 100%
src/prosemark/domain/batch_materialize_result.py BatchMaterializeResult.summary_message 9 0 0 6 0 100%
src/prosemark/domain/batch_materialize_result.py (no function) 21 0 0 2 0 100%
src/prosemark/domain/binder.py (no function) 7 0 0 0 0 100%
src/prosemark/domain/entities.py Node.__init__ 21 0 0 8 0 100%
src/prosemark/domain/entities.py Node.get_expected_draft_path 2 0 0 0 0 100%
src/prosemark/domain/entities.py Node.get_expected_notes_path 2 0 0 0 0 100%
src/prosemark/domain/entities.py Node.touch 4 0 0 2 0 100%
src/prosemark/domain/entities.py Node.update_metadata 6 0 0 6 0 100%
src/prosemark/domain/entities.py Node.from_metadata 3 0 0 0 0 100%
src/prosemark/domain/entities.py Node.to_metadata 1 0 0 0 0 100%
src/prosemark/domain/entities.py Node.__str__ 2 0 0 0 0 100%
src/prosemark/domain/entities.py Node.__eq__ 3 0 0 2 0 100%
src/prosemark/domain/entities.py Node.__hash__ 1 0 0 0 0 100%
src/prosemark/domain/entities.py FreeformContent.__post_init__ 3 0 0 0 0 100%
src/prosemark/domain/entities.py FreeformContent._validate_required_fields 6 0 0 4 0 100%
src/prosemark/domain/entities.py FreeformContent._validate_uuid_format 9 0 0 2 0 100%
src/prosemark/domain/entities.py FreeformContent._validate_filename_pattern 8 0 0 2 0 100%
src/prosemark/domain/entities.py FreeformContent._extract_filename_parts 6 0 0 2 0 100%
src/prosemark/domain/entities.py FreeformContent._validate_uuid_match 3 0 0 2 0 100%
src/prosemark/domain/entities.py FreeformContent._validate_timestamp_format 4 0 0 2 0 100%
src/prosemark/domain/entities.py FreeformContent._validate_timestamp_components 10 0 0 0 0 100%
src/prosemark/domain/entities.py FreeformContent._validate_time_ranges 12 0 0 8 0 100%
src/prosemark/domain/entities.py FreeformContent._validate_timestamp_consistency 10 0 0 2 0 100%
src/prosemark/domain/entities.py FreeformContent._raise_uuid_version_error 2 0 0 0 0 100%
src/prosemark/domain/entities.py FreeformContent.get_expected_filename 4 0 0 0 0 100%
src/prosemark/domain/entities.py FreeformContent.parse_filename 10 0 0 4 0 100%
src/prosemark/domain/entities.py FreeformContent.update_title 1 0 0 0 0 100%
src/prosemark/domain/entities.py FreeformContent.__eq__ 3 0 0 2 0 100%
src/prosemark/domain/entities.py FreeformContent.__hash__ 1 0 0 0 0 100%
src/prosemark/domain/entities.py FreeformContent.get_filename_pattern 1 0 0 0 0 100%
src/prosemark/domain/entities.py (no function) 63 0 0 0 0 100%
src/prosemark/domain/materialize_failure.py MaterializeFailure.__post_init__ 12 0 0 8 0 100%
src/prosemark/domain/materialize_failure.py MaterializeFailure.is_retryable 2 0 0 0 0 100%
src/prosemark/domain/materialize_failure.py MaterializeFailure.is_critical 2 0 0 0 0 100%
src/prosemark/domain/materialize_failure.py MaterializeFailure.should_stop_batch 1 0 0 0 0 100%
src/prosemark/domain/materialize_failure.py MaterializeFailure.formatted_error 3 0 0 2 0 100%
src/prosemark/domain/materialize_failure.py MaterializeFailure.__str__ 1 0 0 0 0 100%
src/prosemark/domain/materialize_failure.py (no function) 18 0 0 0 0 100%
src/prosemark/domain/materialize_result.py MaterializeResult.__post_init__ 17 0 0 10 0 100%
src/prosemark/domain/materialize_result.py MaterializeResult._is_valid_uuid7 2 0 0 0 0 100%
src/prosemark/domain/materialize_result.py MaterializeResult._is_valid_position 2 0 0 0 0 100%
src/prosemark/domain/materialize_result.py MaterializeResult.main_file_path 2 0 0 0 0 100%
src/prosemark/domain/materialize_result.py MaterializeResult.notes_file_path 2 0 0 0 0 100%
src/prosemark/domain/materialize_result.py MaterializeResult.__str__ 1 0 0 0 0 100%
src/prosemark/domain/materialize_result.py (no function) 20 0 0 0 0 100%
src/prosemark/domain/models.py NodeId.__post_init__ 13 0 3 4 0 100%
src/prosemark/domain/models.py NodeId.__str__ 1 0 0 0 0 100%
src/prosemark/domain/models.py NodeId.__repr__ 1 0 0 0 0 100%
src/prosemark/domain/models.py NodeId.__hash__ 1 0 0 0 0 100%
src/prosemark/domain/models.py NodeId.__eq__ 3 0 0 2 0 100%
src/prosemark/domain/models.py NodeId.generate 13 0 0 0 0 100%
src/prosemark/domain/models.py BinderItem.__init__ 12 0 0 6 0 100%
src/prosemark/domain/models.py BinderItem.id 1 0 0 0 0 100%
src/prosemark/domain/models.py BinderItem.is_root 1 0 0 0 0 100%
src/prosemark/domain/models.py BinderItem.is_leaf 1 0 0 0 0 100%
src/prosemark/domain/models.py BinderItem.is_placeholder 1 0 0 0 0 100%
src/prosemark/domain/models.py BinderItem.is_materialized 1 0 0 0 0 100%
src/prosemark/domain/models.py BinderItem.materialize 5 0 0 2 0 100%
src/prosemark/domain/models.py BinderItem.get_depth 6 0 0 2 0 100%
src/prosemark/domain/models.py BinderItem.get_path_to_root 6 0 0 2 0 100%
src/prosemark/domain/models.py BinderItem.get_siblings 3 0 0 2 0 100%
src/prosemark/domain/models.py BinderItem.add_child 2 0 0 0 0 100%
src/prosemark/domain/models.py BinderItem.remove_child 3 0 0 2 0 100%
src/prosemark/domain/models.py Binder.children 1 0 0 0 0 100%
src/prosemark/domain/models.py Binder.__post_init__ 1 0 0 0 0 100%
src/prosemark/domain/models.py Binder.validate_integrity 4 0 0 0 0 100%
src/prosemark/domain/models.py Binder.find_by_id 6 0 0 4 0 100%
src/prosemark/domain/models.py Binder.find_by_id._search_item 7 0 0 6 0 100%
src/prosemark/domain/models.py Binder.find_item_by_node_id 1 0 0 0 0 100%
src/prosemark/domain/models.py Binder.get_all_node_ids 5 0 0 2 0 100%
src/prosemark/domain/models.py Binder.get_all_node_ids._collect_node_ids 4 0 0 4 0 100%
src/prosemark/domain/models.py Binder.find_placeholder_by_display_title 6 0 0 4 0 100%
src/prosemark/domain/models.py Binder.find_placeholder_by_display_title._search_item 7 0 0 6 0 100%
src/prosemark/domain/models.py Binder.add_root_item 3 0 0 0 0 100%
src/prosemark/domain/models.py Binder.remove_root_item 2 0 0 2 0 100%
src/prosemark/domain/models.py Binder.depth_first_traversal 5 0 0 2 0 100%
src/prosemark/domain/models.py Binder.depth_first_traversal._traverse 3 0 0 2 0 100%
src/prosemark/domain/models.py NodeMetadata.to_dict 7 0 0 4 0 100%
src/prosemark/domain/models.py NodeMetadata.from_dict 16 0 0 6 0 100%
src/prosemark/domain/models.py (no function) 61 0 0 0 0 100%
src/prosemark/domain/placeholder_summary.py PlaceholderSummary.__post_init__ 12 0 0 8 0 100%
src/prosemark/domain/placeholder_summary.py PlaceholderSummary._is_valid_position 3 0 0 0 0 100%
src/prosemark/domain/placeholder_summary.py PlaceholderSummary.is_root_level 1 0 0 0 0 100%
src/prosemark/domain/placeholder_summary.py PlaceholderSummary.hierarchy_path 3 0 0 2 0 100%
src/prosemark/domain/placeholder_summary.py PlaceholderSummary.position_indices 3 0 0 0 0 100%
src/prosemark/domain/placeholder_summary.py PlaceholderSummary.with_updated_position 1 0 0 0 0 100%
src/prosemark/domain/placeholder_summary.py PlaceholderSummary.__str__ 3 0 0 2 0 100%
src/prosemark/domain/placeholder_summary.py (no function) 18 0 0 0 0 100%
src/prosemark/domain/policies.py validate_no_duplicate_ids 4 0 0 2 0 100%
src/prosemark/domain/policies.py validate_no_duplicate_ids._collect_node_ids 7 0 0 6 0 100%
src/prosemark/domain/policies.py validate_tree_structure 3 0 0 2 0 100%
src/prosemark/domain/policies.py validate_tree_structure._validate_item_structure 2 0 6 2 0 100%
src/prosemark/domain/policies.py validate_placeholder_handling 3 0 0 2 0 100%
src/prosemark/domain/policies.py validate_placeholder_handling._validate_placeholder_item 5 0 0 4 0 100%
src/prosemark/domain/policies.py (no function) 5 0 2 0 0 100%
src/prosemark/exceptions.py (no function) 18 0 0 0 0 100%
src/prosemark/ports/__init__.py (no function) 10 0 0 0 0 100%
src/prosemark/ports/binder_repo.py BinderRepo.load 0 0 0 0 0 100%
src/prosemark/ports/binder_repo.py BinderRepo.save 0 0 0 0 0 100%
src/prosemark/ports/binder_repo.py (no function) 7 0 2 0 0 100%
src/prosemark/ports/clock.py Clock.now_iso 0 0 2 0 0 100%
src/prosemark/ports/clock.py (no function) 4 0 0 0 0 100%
src/prosemark/ports/config_port.py ConfigPort.create_default_config 0 0 2 0 0 100%
src/prosemark/ports/config_port.py ConfigPort.config_exists 0 0 2 0 0 100%
src/prosemark/ports/config_port.py ConfigPort.get_default_config_values 0 0 2 0 0 100%
src/prosemark/ports/config_port.py (no function) 14 0 0 0 0 100%
src/prosemark/ports/console_port.py ConsolePort.print 0 0 2 0 0 100%
src/prosemark/ports/console_port.py ConsolePort.print_info 1 0 0 0 0 100%
src/prosemark/ports/console_port.py ConsolePort.print_success 1 0 0 0 0 100%
src/prosemark/ports/console_port.py ConsolePort.print_warning 1 0 0 0 0 100%
src/prosemark/ports/console_port.py ConsolePort.print_error 1 0 0 0 0 100%
src/prosemark/ports/console_port.py ConsolePort.print_tree 3 0 0 2 0 100%
src/prosemark/ports/console_port.py ConsolePort._print_item 7 0 0 4 0 100%
src/prosemark/ports/console_port.py (no function) 11 0 2 0 0 100%
src/prosemark/ports/daily_repo.py DailyRepo.write_freeform 0 0 0 0 0 100%
src/prosemark/ports/daily_repo.py (no function) 4 0 0 0 0 100%
src/prosemark/ports/editor_port.py EditorPort.open 0 0 1 0 0 100%
src/prosemark/ports/editor_port.py (no function) 4 0 0 0 0 100%
src/prosemark/ports/id_generator.py IdGenerator.new 0 0 2 0 0 100%
src/prosemark/ports/id_generator.py (no function) 5 0 2 0 0 100%
src/prosemark/ports/logger.py Logger.debug 0 0 2 0 0 100%
src/prosemark/ports/logger.py Logger.info 0 0 2 0 0 100%
src/prosemark/ports/logger.py Logger.warning 0 0 2 0 0 100%
src/prosemark/ports/logger.py Logger.error 0 0 2 0 0 100%
src/prosemark/ports/logger.py Logger.exception 0 0 2 0 0 100%
src/prosemark/ports/logger.py (no function) 12 0 0 0 0 100%
src/prosemark/ports/node_repo.py NodeRepo.create 0 0 0 0 0 100%
src/prosemark/ports/node_repo.py NodeRepo.read_frontmatter 0 0 0 0 0 100%
src/prosemark/ports/node_repo.py NodeRepo.write_frontmatter 0 0 0 0 0 100%
src/prosemark/ports/node_repo.py NodeRepo.open_in_editor 0 0 0 0 0 100%
src/prosemark/ports/node_repo.py NodeRepo.delete 0 0 0 0 0 100%
src/prosemark/ports/node_repo.py NodeRepo.get_existing_files 0 0 0 0 0 100%
src/prosemark/ports/node_repo.py NodeRepo.file_exists 0 0 0 0 0 100%
src/prosemark/ports/node_repo.py (no function) 17 0 2 0 0 100%
Total   3311 0 250 820 0 100%

No items found using the specified filter.