Coverage report: 99%

Files Functions Classes

coverage.py v7.8.0, created at 2025-09-24 18:08 +0000

File class statements missing excluded branches partial coverage
src/prosemark/__init__.py (no class) 3 0 6 0 0 100%
src/prosemark/adapters/__init__.py (no class) 11 0 0 0 0 100%
src/prosemark/adapters/binder_repo_fs.py BinderRepoFs 48 0 0 10 0 100%
src/prosemark/adapters/binder_repo_fs.py (no class) 15 0 2 0 0 100%
src/prosemark/adapters/binder_scaffold.py (no class) 34 0 3 8 0 100%
src/prosemark/adapters/clock_system.py ClockSystem 1 0 0 0 0 100%
src/prosemark/adapters/clock_system.py (no class) 4 0 0 0 0 100%
src/prosemark/adapters/console_pretty.py ConsolePretty 18 0 0 10 0 100%
src/prosemark/adapters/console_pretty.py (no class) 10 0 2 0 0 100%
src/prosemark/adapters/daily_repo_fs.py DailyRepoFs 22 0 0 2 0 100%
src/prosemark/adapters/daily_repo_fs.py (no class) 10 0 0 0 0 100%
src/prosemark/adapters/editor_launcher_system.py EditorLauncherSystem 49 0 0 22 0 100%
src/prosemark/adapters/editor_launcher_system.py (no class) 18 0 0 0 0 100%
src/prosemark/adapters/fake_clock.py FakeClock 2 0 0 0 0 100%
src/prosemark/adapters/fake_clock.py (no class) 4 0 0 0 0 100%
src/prosemark/adapters/fake_config.py FakeConfigPort 4 0 0 0 0 100%
src/prosemark/adapters/fake_config.py (no class) 7 0 0 0 0 100%
src/prosemark/adapters/fake_console.py FakeConsolePort 8 0 4 0 0 100%
src/prosemark/adapters/fake_console.py (no class) 11 0 2 0 0 100%
src/prosemark/adapters/fake_id_generator.py FakeIdGenerator 7 0 31 0 0 100%
src/prosemark/adapters/fake_id_generator.py (no class) 6 0 3 0 0 100%
src/prosemark/adapters/fake_logger.py FakeLogger 36 0 8 14 0 100%
src/prosemark/adapters/fake_logger.py (no class) 25 0 0 0 0 100%
src/prosemark/adapters/fake_node_repo.py FakeNodeRepo 50 0 52 10 0 100%
src/prosemark/adapters/fake_node_repo.py (no class) 24 0 4 0 0 100%
src/prosemark/adapters/fake_storage.py FakeBinderRepo 4 0 3 0 0 100%
src/prosemark/adapters/fake_storage.py (no class) 8 0 2 0 0 100%
src/prosemark/adapters/frontmatter_codec.py FrontmatterCodec 54 0 0 28 0 100%
src/prosemark/adapters/frontmatter_codec.py (no class) 18 0 0 0 0 100%
src/prosemark/adapters/id_generator.py SimpleIdGenerator 1 0 0 0 0 100%
src/prosemark/adapters/id_generator.py (no class) 4 0 0 0 0 100%
src/prosemark/adapters/id_generator_uuid7.py IdGeneratorUuid7 1 0 0 0 0 100%
src/prosemark/adapters/id_generator_uuid7.py (no class) 4 0 0 0 0 100%
src/prosemark/adapters/logger_stdout.py LoggerStdout 6 0 6 0 0 100%
src/prosemark/adapters/logger_stdout.py (no class) 10 0 0 0 0 100%
src/prosemark/adapters/markdown_binder_parser.py MarkdownBinderParser 67 0 2 34 0 100%
src/prosemark/adapters/markdown_binder_parser.py (no class) 24 0 0 0 0 100%
src/prosemark/adapters/node_repo_fs.py NodeRepoFs 118 0 2 38 0 100%
src/prosemark/adapters/node_repo_fs.py (no class) 24 0 0 0 0 100%
src/prosemark/app/__init__.py (no class) 2 0 0 0 0 100%
src/prosemark/app/add_node.py AddNode 34 0 0 14 0 100%
src/prosemark/app/add_node.py (no class) 7 0 7 0 0 100%
src/prosemark/app/audit_project.py PlaceholderIssue 0 0 0 0 0 100%
src/prosemark/app/audit_project.py MissingIssue 0 0 0 0 0 100%
src/prosemark/app/audit_project.py OrphanIssue 0 0 0 0 0 100%
src/prosemark/app/audit_project.py MismatchIssue 0 0 0 0 0 100%
src/prosemark/app/audit_project.py AuditReport 1 0 0 0 0 100%
src/prosemark/app/audit_project.py AuditProject 72 0 3 40 0 100%
src/prosemark/app/audit_project.py (no class) 37 0 5 0 0 100%
src/prosemark/app/init_project.py InitProject 14 0 0 2 0 100%
src/prosemark/app/init_project.py (no class) 6 0 4 0 0 100%
src/prosemark/app/materialize_all_placeholders.py MaterializeAllPlaceholders 70 0 0 30 0 100%
src/prosemark/app/materialize_all_placeholders.py (no class) 19 0 7 0 0 100%
src/prosemark/app/materialize_node.py MaterializeNode 28 0 3 6 0 100%
src/prosemark/app/materialize_node.py (no class) 8 0 7 0 0 100%
src/prosemark/app/move_node.py MoveNode 42 0 7 20 0 100%
src/prosemark/app/move_node.py (no class) 10 0 4 0 0 100%
src/prosemark/app/remove_node.py RemoveNode 38 0 0 20 0 100%
src/prosemark/app/remove_node.py (no class) 8 0 5 0 0 100%
src/prosemark/app/use_cases.py PlaceholderIssue 0 0 0 0 0 100%
src/prosemark/app/use_cases.py MissingIssue 0 0 0 0 0 100%
src/prosemark/app/use_cases.py OrphanIssue 0 0 0 0 0 100%
src/prosemark/app/use_cases.py MismatchIssue 0 0 0 0 0 100%
src/prosemark/app/use_cases.py AuditReport 23 0 0 10 0 100%
src/prosemark/app/use_cases.py InitProject 25 0 0 2 0 100%
src/prosemark/app/use_cases.py AddNode 33 0 1 8 0 100%
src/prosemark/app/use_cases.py EditPart 19 0 0 4 0 100%
src/prosemark/app/use_cases.py MoveNode 71 0 2 36 0 100%
src/prosemark/app/use_cases.py RemoveNode 50 0 1 26 0 100%
src/prosemark/app/use_cases.py WriteFreeform 20 0 0 2 0 100%
src/prosemark/app/use_cases.py ShowStructure 69 0 0 30 0 100%
src/prosemark/app/use_cases.py MaterializeNode 33 0 4 10 0 100%
src/prosemark/app/use_cases.py AuditBinder 106 1 5 30 1 99%
src/prosemark/app/use_cases.py (no class) 89 0 10 0 0 100%
src/prosemark/cli/__init__.py (no class) 11 0 0 0 0 100%
src/prosemark/cli/add.py (no class) 60 0 0 6 0 100%
src/prosemark/cli/audit.py (no class) 66 0 0 36 0 100%
src/prosemark/cli/edit.py (no class) 41 0 0 4 0 100%
src/prosemark/cli/init.py FileSystemConfigPort 3 0 0 0 0 100%
src/prosemark/cli/init.py (no class) 42 0 0 0 0 100%
src/prosemark/cli/main.py MaterializationResult 0 0 0 0 0 100%
src/prosemark/cli/main.py FileSystemConfigPort 3 0 0 0 0 100%
src/prosemark/cli/main.py (no class) 448 0 2 112 0 100%
src/prosemark/cli/materialize.py (no class) 37 0 0 0 0 100%
src/prosemark/cli/move.py (no class) 37 0 0 4 0 100%
src/prosemark/cli/remove.py (no class) 41 0 0 4 0 100%
src/prosemark/cli/structure.py (no class) 38 0 2 8 0 100%
src/prosemark/cli/write.py (no class) 16 0 0 0 0 100%
src/prosemark/domain/__init__.py (no class) 0 0 0 0 0 100%
src/prosemark/domain/batch_materialize_result.py BatchMaterializeResult 22 0 3 10 0 100%
src/prosemark/domain/batch_materialize_result.py (no class) 21 0 0 2 0 100%
src/prosemark/domain/binder.py Item 0 0 0 0 0 100%
src/prosemark/domain/binder.py (no class) 7 0 0 0 0 100%
src/prosemark/domain/entities.py Node 45 0 0 18 0 100%
src/prosemark/domain/entities.py FreeformContent 93 0 0 30 0 100%
src/prosemark/domain/entities.py (no class) 63 0 0 0 0 100%
src/prosemark/domain/materialize_failure.py MaterializeFailure 21 0 0 10 0 100%
src/prosemark/domain/materialize_failure.py (no class) 18 0 0 0 0 100%
src/prosemark/domain/materialize_result.py MaterializeResult 26 0 0 10 0 100%
src/prosemark/domain/materialize_result.py (no class) 20 0 0 0 0 100%
src/prosemark/domain/models.py NodeId 32 0 3 6 0 100%
src/prosemark/domain/models.py BinderItem 42 0 0 16 0 100%
src/prosemark/domain/models.py Binder 55 0 0 32 0 100%
src/prosemark/domain/models.py NodeMetadata 23 0 0 10 0 100%
src/prosemark/domain/models.py (no class) 61 0 0 0 0 100%
src/prosemark/domain/placeholder_summary.py PlaceholderSummary 26 0 0 12 0 100%
src/prosemark/domain/placeholder_summary.py (no class) 18 0 0 0 0 100%
src/prosemark/domain/policies.py (no class) 29 0 8 18 0 100%
src/prosemark/exceptions.py ProsemarkError 0 0 0 0 0 100%
src/prosemark/exceptions.py BinderIntegrityError 0 0 0 0 0 100%
src/prosemark/exceptions.py NodeIdentityError 0 0 0 0 0 100%
src/prosemark/exceptions.py BinderNotFoundError 0 0 0 0 0 100%
src/prosemark/exceptions.py NodeNotFoundError 0 0 0 0 0 100%
src/prosemark/exceptions.py BinderFormatError 0 0 0 0 0 100%
src/prosemark/exceptions.py FileSystemError 0 0 0 0 0 100%
src/prosemark/exceptions.py ProsemarkFileExistsError 0 0 0 0 0 100%
src/prosemark/exceptions.py EditorLaunchError 0 0 0 0 0 100%
src/prosemark/exceptions.py PlaceholderNotFoundError 0 0 0 0 0 100%
src/prosemark/exceptions.py AlreadyMaterializedError 0 0 0 0 0 100%
src/prosemark/exceptions.py EditorNotFoundError 0 0 0 0 0 100%
src/prosemark/exceptions.py FreeformContentValidationError 0 0 0 0 0 100%
src/prosemark/exceptions.py NodeValidationError 0 0 0 0 0 100%
src/prosemark/exceptions.py NodeAlreadyExistsError 0 0 0 0 0 100%
src/prosemark/exceptions.py FrontmatterFormatError 0 0 0 0 0 100%
src/prosemark/exceptions.py InvalidPartError 0 0 0 0 0 100%
src/prosemark/exceptions.py EditorError 0 0 0 0 0 100%
src/prosemark/exceptions.py (no class) 18 0 0 0 0 100%
src/prosemark/freewriting/__init__.py (no class) 0 0 0 0 0 100%
src/prosemark/freewriting/adapters/__init__.py (no class) 0 0 0 0 0 100%
src/prosemark/freewriting/adapters/cli_adapter.py TyperCLIAdapter 105 0 0 32 1 99%
src/prosemark/freewriting/adapters/cli_adapter.py (no class) 57 17 3 2 1 69%
src/prosemark/freewriting/adapters/file_system_adapter.py FileSystemAdapter 67 0 3 10 0 100%
src/prosemark/freewriting/adapters/file_system_adapter.py (no class) 28 0 0 0 0 100%
src/prosemark/freewriting/adapters/freewrite_service_adapter.py FreewriteServiceAdapter 90 0 0 38 0 100%
src/prosemark/freewriting/adapters/freewrite_service_adapter.py (no class) 25 0 3 0 0 100%
src/prosemark/freewriting/adapters/node_service_adapter.py NodeServiceAdapter 88 5 0 18 1 94%
src/prosemark/freewriting/adapters/node_service_adapter.py (no class) 17 0 5 0 0 100%
src/prosemark/freewriting/adapters/title_handler.py (no class) 11 0 0 4 0 100%
src/prosemark/freewriting/adapters/tui_adapter.py FreewritingApp 105 11 0 38 3 89%
src/prosemark/freewriting/adapters/tui_adapter.py TextualTUIAdapter 51 0 0 26 0 100%
src/prosemark/freewriting/adapters/tui_adapter.py (no class) 50 0 5 0 0 100%
src/prosemark/freewriting/container.py (no class) 62 0 6 8 0 100%
src/prosemark/freewriting/domain/__init__.py (no class) 0 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py FreewriteError 7 0 0 2 0 100%
src/prosemark/freewriting/domain/exceptions.py ValidationError 5 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py FileSystemError 7 0 0 2 0 100%
src/prosemark/freewriting/domain/exceptions.py NodeError 6 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py SessionError 6 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py TUIError 6 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py CLIError 9 0 0 2 0 100%
src/prosemark/freewriting/domain/exceptions.py ConfigurationError 5 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py ContentError 6 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py ArgumentValidationError 1 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py ThemeNotFoundError 1 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py DirectoryNotWritableError 1 0 0 0 0 100%
src/prosemark/freewriting/domain/exceptions.py (no class) 28 0 0 0 0 100%
src/prosemark/freewriting/domain/models.py SessionState 0 0 0 0 0 100%
src/prosemark/freewriting/domain/models.py FreewriteSession 56 0 3 20 0 100%
src/prosemark/freewriting/domain/models.py SessionConfig 19 0 3 6 0 100%
src/prosemark/freewriting/domain/models.py FreewriteContent 13 0 0 6 0 100%
src/prosemark/freewriting/domain/models.py FileTarget 19 0 3 6 0 100%
src/prosemark/freewriting/domain/models.py (no class) 77 0 0 0 0 100%
src/prosemark/freewriting/ports/__init__.py (no class) 0 0 0 0 0 100%
src/prosemark/freewriting/ports/cli_adapter.py CLIAdapterPort 0 0 0 0 0 100%
src/prosemark/freewriting/ports/cli_adapter.py CommandValidationPort 0 0 0 0 0 100%
src/prosemark/freewriting/ports/cli_adapter.py CLIContext 0 0 0 0 0 100%
src/prosemark/freewriting/ports/cli_adapter.py ValidationResult 0 0 0 0 0 100%
src/prosemark/freewriting/ports/cli_adapter.py CLIResponse 0 0 0 0 0 100%
src/prosemark/freewriting/ports/cli_adapter.py (no class) 45 0 3 0 0 100%
src/prosemark/freewriting/ports/file_system.py FileSystemPort 0 0 10 0 0 100%
src/prosemark/freewriting/ports/file_system.py (no class) 26 0 2 0 0 100%
src/prosemark/freewriting/ports/freewrite_service.py FreewriteServicePort 0 0 0 0 0 100%
src/prosemark/freewriting/ports/freewrite_service.py NodeServicePort 0 0 0 0 0 100%
src/prosemark/freewriting/ports/freewrite_service.py FileSystemPort 0 0 0 0 0 100%
src/prosemark/freewriting/ports/freewrite_service.py (no class) 31 0 3 0 0 100%
src/prosemark/freewriting/ports/node_service.py NodeServicePort 0 0 0 0 0 100%
src/prosemark/freewriting/ports/node_service.py (no class) 16 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py UIState 0 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py TUIConfig 0 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py TUIAdapterPort 0 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py TUIEventPort 0 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py TUIDisplayPort 0 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py InputSubmittedEvent 0 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py SessionProgressEvent 0 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py ErrorEvent 0 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py SessionCompletedEvent 0 0 0 0 0 100%
src/prosemark/freewriting/ports/tui_adapter.py (no class) 81 0 4 0 0 100%
src/prosemark/freewriting/test_helpers.py (no class) 29 2 0 10 3 87%
src/prosemark/ports/__init__.py (no class) 10 0 0 0 0 100%
src/prosemark/ports/binder_repo.py BinderRepo 0 0 0 0 0 100%
src/prosemark/ports/binder_repo.py (no class) 7 0 2 0 0 100%
src/prosemark/ports/cli_adapter.py CLIAdapterPort 0 0 7 0 0 100%
src/prosemark/ports/cli_adapter.py (no class) 0 0 6 0 0 100%
src/prosemark/ports/clock.py Clock 0 0 2 0 0 100%
src/prosemark/ports/clock.py (no class) 4 0 0 0 0 100%
src/prosemark/ports/config_port.py ProsemarkConfig 0 0 0 0 0 100%
src/prosemark/ports/config_port.py ConfigPort 0 0 6 0 0 100%
src/prosemark/ports/config_port.py (no class) 14 0 0 0 0 100%
src/prosemark/ports/console_port.py ConsolePort 14 0 2 6 0 100%
src/prosemark/ports/console_port.py (no class) 11 0 2 0 0 100%
src/prosemark/ports/daily_repo.py DailyRepo 0 0 0 0 0 100%
src/prosemark/ports/daily_repo.py (no class) 4 0 0 0 0 100%
src/prosemark/ports/editor_port.py EditorPort 0 0 1 0 0 100%
src/prosemark/ports/editor_port.py (no class) 4 0 0 0 0 100%
src/prosemark/ports/freewrite_service.py FreewriteServicePort 0 0 7 0 0 100%
src/prosemark/ports/freewrite_service.py (no class) 0 0 6 0 0 100%
src/prosemark/ports/id_generator.py IdGenerator 0 0 2 0 0 100%
src/prosemark/ports/id_generator.py (no class) 5 0 2 0 0 100%
src/prosemark/ports/logger.py Logger 0 0 10 0 0 100%
src/prosemark/ports/logger.py (no class) 12 0 0 0 0 100%
src/prosemark/ports/node_repo.py NodeRepo 0 0 0 0 0 100%
src/prosemark/ports/node_repo.py (no class) 17 0 2 0 0 100%
src/prosemark/ports/tui_adapter.py TUIAdapterPort 0 0 7 0 0 100%
src/prosemark/ports/tui_adapter.py (no class) 0 0 6 0 0 100%
Total   4545 36 351 1050 10 99%

No items found using the specified filter.