Coverage report: 90%

Files Functions Classes

coverage.py v7.12.0, created at 2026-05-22 16:19 -0500

File class   statements missing excluded   coverage
little_loops / cli / action.py (no class)   122 5 0   96%
little_loops / cli / adapt_agents_for_codex.py (no class)   125 23 0   82%
little_loops / cli / adapt_skills_for_codex.py (no class)   203 43 0   79%
little_loops / cli / auto.py (no class)   34 7 0   79%
little_loops / cli / create_extension.py (no class)   60 5 0   92%
little_loops / cli / deps.py (no class)   241 46 0   81%
little_loops / cli / docs.py (no class)   89 11 0   88%
little_loops / cli / doctor.py (no class)   46 0 0   100%
little_loops / cli / generate_skill_descriptions.py (no class)   103 20 0   81%
little_loops / cli / gitignore.py (no class)   36 0 0   100%
little_loops / cli / history.py (no class)   80 1 0   99%
little_loops / cli / issues / anchor_sweep.py (no class)   26 2 2   92%
little_loops / cli / issues / append_log.py (no class)   12 0 2   100%
little_loops / cli / issues / check_flag.py (no class)   14 9 2   36%
little_loops / cli / issues / check_readiness.py (no class)   27 21 2   22%
little_loops / cli / issues / clusters.py (no class)   163 6 4   96%
little_loops / cli / issues / count_cmd.py (no class)   31 0 2   100%
little_loops / cli / issues / impact_effort.py (no class)   131 6 3   95%
little_loops / cli / issues / list_cmd.py (no class)   86 5 2   94%
little_loops / cli / issues / next_action.py (no class)   30 0 2   100%
little_loops / cli / issues / next_id.py (no class)   7 0 2   100%
little_loops / cli / issues / next_issue.py (no class)   28 3 2   89%
little_loops / cli / issues / next_issues.py (no class)   29 3 2   90%
little_loops / cli / issues / path_cmd.py (no class)   19 2 3   89%
little_loops / cli / issues / refine_status.py (no class)   255 7 3   97%
little_loops / cli / issues / search.py (no class)   256 29 5   89%
little_loops / cli / issues / sequence.py (no class)   38 4 2   89%
little_loops / cli / issues / set_scores.py (no class)   31 0 2   100%
little_loops / cli / issues / show.py (no class)   277 16 2   94%
little_loops / cli / issues / skip.py (no class)   36 11 3   69%
little_loops / cli / learning_tests.py (no class)   46 2 0   96%
little_loops / cli / logs.py (no class)   236 31 0   87%
little_loops / cli / loop / __main__.py (no class)   1 1 2   0%
little_loops / cli / loop / _helpers.py (no class)   366 16 2   96%
little_loops / cli / loop / config_cmds.py (no class)   42 0 0   100%
little_loops / cli / loop / info.py (no class)   646 137 0   79%
little_loops / cli / loop / layout.py TopologyDetector   14 0 0   100%
little_loops / cli / loop / layout.py LayerAssigner   56 0 0   100%
little_loops / cli / loop / layout.py CrossingMinimizer   37 0 0   100%
little_loops / cli / loop / layout.py (no class)   923 78 0   92%
little_loops / cli / loop / lifecycle.py (no class)   298 28 0   91%
little_loops / cli / loop / next_loop.py LoopCandidate   1 0 0   100%
little_loops / cli / loop / next_loop.py (no class)   180 32 0   82%
little_loops / cli / loop / run.py (no class)   224 24 0   89%
little_loops / cli / loop / testing.py (no class)   155 23 0   85%
little_loops / cli / messages.py (no class)   106 4 0   96%
little_loops / cli / migrate.py (no class)   121 9 0   93%
little_loops / cli / migrate_labels.py (no class)   90 13 0   86%
little_loops / cli / migrate_relationships.py (no class)   87 13 0   85%
little_loops / cli / migrate_status.py (no class)   61 9 0   85%
little_loops / cli / output.py (no class)   45 2 2   96%
little_loops / cli / parallel.py (no class)   77 6 0   92%
little_loops / cli / schemas.py (no class)   20 3 0   85%
little_loops / cli / session.py (no class)   56 14 0   75%
little_loops / cli / sprint / _helpers.py (no class)   156 40 4   74%
little_loops / cli / sprint / create.py (no class)   35 7 0   80%
little_loops / cli / sprint / edit.py (no class)   85 14 0   84%
little_loops / cli / sprint / manage.py (no class)   131 14 0   89%
little_loops / cli / sprint / run.py (no class)   318 45 3   86%
little_loops / cli / sprint / show.py (no class)   209 38 3   82%
little_loops / cli / sync.py (no class)   144 39 0   73%
little_loops / cli_args.py (no class)   109 0 0   100%
little_loops / config / automation.py AutomationConfig   1 0 0   100%
little_loops / config / automation.py ParallelAutomationConfig   2 0 0   100%
little_loops / config / automation.py ConfidenceGateConfig   2 0 0   100%
little_loops / config / automation.py RateLimitsConfig   1 0 0   100%
little_loops / config / automation.py RecursiveRefineConfig   1 0 0   100%
little_loops / config / automation.py CommandsConfig   1 0 0   100%
little_loops / config / automation.py ScoringWeightsConfig   1 0 0   100%
little_loops / config / automation.py DependencyMappingConfig   1 0 0   100%
little_loops / config / automation.py (no class)   79 0 0   100%
little_loops / config / cli.py CliColorsLoggerConfig   1 0 0   100%
little_loops / config / cli.py CliColorsPriorityConfig   1 0 0   100%
little_loops / config / cli.py CliColorsTypeConfig   1 0 0   100%
little_loops / config / cli.py CliColorsEdgeLabelsConfig   2 0 0   100%
little_loops / config / cli.py CliColorsConfig   1 0 0   100%
little_loops / config / cli.py RefineStatusConfig   1 0 0   100%
little_loops / config / cli.py CliConfig   1 0 0   100%
little_loops / config / cli.py (no class)   64 0 0   100%
little_loops / config / core.py ProjectConfig   1 0 0   100%
little_loops / config / core.py BRConfig   76 3 0   96%
little_loops / config / core.py (no class)   109 0 0   100%
little_loops / config / features.py CategoryConfig   1 0 0   100%
little_loops / config / features.py DuplicateDetectionConfig   1 0 0   100%
little_loops / config / features.py NextIssueSortKey   7 4 0   43%
little_loops / config / features.py NextIssueConfig   8 0 0   100%
little_loops / config / features.py IssuesConfig   16 0 0   100%
little_loops / config / features.py ScanConfig   1 0 0   100%
little_loops / config / features.py SprintsConfig   1 0 0   100%
little_loops / config / features.py LearningTestsConfig   1 0 0   100%
little_loops / config / features.py LoopsGlyphsConfig   2 0 0   100%
little_loops / config / features.py LoopsConfig   1 0 0   100%
little_loops / config / features.py GitHubSyncConfig   1 0 0   100%
little_loops / config / features.py SyncConfig   1 0 0   100%
little_loops / config / features.py SocketEventsConfig   1 0 0   100%
little_loops / config / features.py OTelEventsConfig   1 0 0   100%
little_loops / config / features.py WebhookEventsConfig   1 0 0   100%
little_loops / config / features.py SqliteEventsConfig   1 0 0   100%
little_loops / config / features.py EventsConfig   1 0 0   100%
little_loops / config / features.py (no class)   146 0 0   100%
little_loops / config / orchestration.py OrchestrationConfig   1 0 0   100%
little_loops / config / orchestration.py (no class)   8 0 0   100%
little_loops / dependency_graph.py WaveContentionNote   0 0 0   100%
little_loops / dependency_graph.py DependencyGraph   127 5 0   96%
little_loops / dependency_graph.py (no class)   73 0 3   100%
little_loops / dependency_mapper / analysis.py (no class)   197 8 3   96%
little_loops / dependency_mapper / formatting.py (no class)   153 9 3   94%
little_loops / dependency_mapper / models.py DependencyProposal   0 0 0   100%
little_loops / dependency_mapper / models.py ParallelSafePair   0 0 0   100%
little_loops / dependency_mapper / models.py ValidationResult   1 0 0   100%
little_loops / dependency_mapper / models.py DependencyReport   0 0 0   100%
little_loops / dependency_mapper / models.py FixResult   0 0 0   100%
little_loops / dependency_mapper / models.py (no class)   40 0 0   100%
little_loops / dependency_mapper / operations.py (no class)   135 13 3   90%
little_loops / doc_counts.py CountResult   0 0 0   100%
little_loops / doc_counts.py VerificationResult   3 0 0   100%
little_loops / doc_counts.py FixResult   0 0 0   100%
little_loops / doc_counts.py SkillBudgetResult   0 0 0   100%
little_loops / doc_counts.py (no class)   156 8 0   95%
little_loops / events.py LLEvent   6 0 0   100%
little_loops / events.py EventBus   41 2 0   95%
little_loops / events.py (no class)   29 0 2   100%
little_loops / extension.py LLExtension   1 1 0   0%
little_loops / extension.py InterceptorExtension   3 3 0   0%
little_loops / extension.py ActionProviderExtension   1 1 0   0%
little_loops / extension.py EvaluatorProviderExtension   1 1 0   0%
little_loops / extension.py LLHookIntentExtension   1 0 0   100%
little_loops / extension.py NoopLoggerExtension   4 0 0   100%
little_loops / extension.py ExtensionLoader   27 7 0   74%
little_loops / extension.py (no class)   72 0 6   100%
little_loops / extensions / reference_interceptor.py ReferenceInterceptorExtension   2 0 0   100%
little_loops / extensions / reference_interceptor.py (no class)   6 0 0   100%
little_loops / file_utils.py (no class)   48 4 2   92%
little_loops / frontmatter.py (no class)   69 0 0   100%
little_loops / fsm / concurrency.py ScopeLock   2 0 0   100%
little_loops / fsm / concurrency.py LockManager   79 1 0   99%
little_loops / fsm / concurrency.py (no class)   41 0 0   100%
little_loops / fsm / evaluators.py EvaluationResult   0 0 0   100%
little_loops / fsm / evaluators.py (no class)   272 12 0   96%
little_loops / fsm / executor.py RouteContext   0 0 0   100%
little_loops / fsm / executor.py RouteDecision   0 0 0   100%
little_loops / fsm / executor.py FSMExecutor   498 16 0   97%
little_loops / fsm / executor.py (no class)   78 0 0   100%
little_loops / fsm / fragments.py (no class)   109 4 0   96%
little_loops / fsm / handoff_handler.py HandoffBehavior   0 0 0   100%
little_loops / fsm / handoff_handler.py HandoffResult   0 0 0   100%
little_loops / fsm / handoff_handler.py HandoffHandler   16 1 0   94%
little_loops / fsm / handoff_handler.py (no class)   18 0 0   100%
little_loops / fsm / interpolation.py InterpolationError   0 0 0   100%
little_loops / fsm / interpolation.py InterpolationContext   44 0 0   100%
little_loops / fsm / interpolation.py (no class)   72 3 0   96%
little_loops / fsm / persistence.py LoopState   24 1 0   96%
little_loops / fsm / persistence.py StatePersistence   65 3 0   95%
little_loops / fsm / persistence.py PersistentExecutor   76 9 0   88%
little_loops / fsm / persistence.py (no class)   198 23 0   88%
little_loops / fsm / rate_limit_circuit.py RateLimitCircuit   56 13 0   77%
little_loops / fsm / rate_limit_circuit.py (no class)   19 0 0   100%
little_loops / fsm / runners.py ActionRunner   1 1 0   0%
little_loops / fsm / runners.py DefaultActionRunner   41 2 0   95%
little_loops / fsm / runners.py SimulationActionRunner   42 8 0   81%
little_loops / fsm / runners.py (no class)   25 0 0   100%
little_loops / fsm / schema.py EvaluateConfig   33 7 0   79%
little_loops / fsm / schema.py RouteConfig   8 0 0   100%
little_loops / fsm / schema.py ParameterSpec   11 0 0   100%
little_loops / fsm / schema.py ThrottleConfig   9 0 0   100%
little_loops / fsm / schema.py LearningConfig   2 0 0   100%
little_loops / fsm / schema.py StateConfig   110 3 0   97%
little_loops / fsm / schema.py LLMConfig   11 2 0   82%
little_loops / fsm / schema.py LoopConfigOverrides   23 1 0   96%
little_loops / fsm / schema.py CommandEntry   0 0 0   100%
little_loops / fsm / schema.py TargetStateSpec   2 0 0   100%
little_loops / fsm / schema.py TargetFileSpec   9 1 0   89%
little_loops / fsm / schema.py FSMLoop   56 10 0   82%
little_loops / fsm / schema.py (no class)   163 0 0   100%
little_loops / fsm / signal_detector.py DetectedSignal   0 0 0   100%
little_loops / fsm / signal_detector.py SignalPattern   7 0 0   100%
little_loops / fsm / signal_detector.py SignalDetector   6 0 0   100%
little_loops / fsm / signal_detector.py (no class)   18 0 0   100%
little_loops / fsm / types.py ExecutionResult   8 0 0   100%
little_loops / fsm / types.py ActionResult   0 0 0   100%
little_loops / fsm / types.py (no class)   23 0 4   100%
little_loops / fsm / validation.py ValidationSeverity   0 0 0   100%
little_loops / fsm / validation.py ValidationError   4 0 0   100%
little_loops / fsm / validation.py (no class)   278 30 0   89%
little_loops / generate_schemas.py (no class)   33 1 5   97%
little_loops / git_operations.py GitignorePattern   5 0 0   100%
little_loops / git_operations.py GitignoreSuggestion   10 0 0   100%
little_loops / git_operations.py (no class)   171 27 0   84%
little_loops / goals_parser.py Persona   1 0 0   100%
little_loops / goals_parser.py Priority   1 0 0   100%
little_loops / goals_parser.py ProductGoals   33 0 0   100%
little_loops / goals_parser.py (no class)   46 0 0   100%
little_loops / hooks / __main__.py (no class)   1 1 2   0%
little_loops / hooks / post_tool_use.py (no class)   5 0 0   100%
little_loops / hooks / pre_compact.py (no class)   48 8 0   83%
little_loops / hooks / pre_tool_use.py (no class)   5 0 0   100%
little_loops / hooks / session_start.py (no class)   85 10 0   88%
little_loops / hooks / types.py LLHookEvent   7 0 0   100%
little_loops / hooks / types.py LLHookResult   11 0 0   100%
little_loops / hooks / types.py (no class)   24 0 0   100%
little_loops / hooks / user_prompt_submit.py (no class)   53 42 0   21%
little_loops / host_runner.py HostNotConfigured   0 0 0   100%
little_loops / host_runner.py CapabilityNotSupported   0 0 0   100%
little_loops / host_runner.py HostCapabilities   0 0 0   100%
little_loops / host_runner.py HostInvocation   0 0 0   100%
little_loops / host_runner.py CapabilityEntry   0 0 0   100%
little_loops / host_runner.py HookEntry   0 0 0   100%
little_loops / host_runner.py CapabilityReport   0 0 0   100%
little_loops / host_runner.py HostRunner   6 6 0   0%
little_loops / host_runner.py ClaudeCodeRunner   29 1 0   97%
little_loops / host_runner.py CodexRunner   55 9 0   84%
little_loops / host_runner.py OpenCodeRunner   6 1 0   83%
little_loops / host_runner.py PiRunner   6 1 0   83%
little_loops / host_runner.py (no class)   123 0 0   100%
little_loops / issue_discovery / extraction.py (no class)   106 34 2   68%
little_loops / issue_discovery / matching.py MatchClassification   0 0 0   100%
little_loops / issue_discovery / matching.py RegressionEvidence   0 0 0   100%
little_loops / issue_discovery / matching.py FindingMatch   7 0 0   100%
little_loops / issue_discovery / matching.py (no class)   65 0 2   100%
little_loops / issue_discovery / search.py (no class)   187 55 3   71%
little_loops / issue_history / _utils.py (no class)   10 0 0   100%
little_loops / issue_history / analysis.py (no class)   66 8 0   88%
little_loops / issue_history / coupling.py (no class)   69 0 0   100%
little_loops / issue_history / debt.py (no class)   187 10 0   95%
little_loops / issue_history / doc_synthesis.py (no class)   150 5 0   97%
little_loops / issue_history / formatting.py (no class)   659 206 0   69%
little_loops / issue_history / hotspots.py (no class)   56 1 0   98%
little_loops / issue_history / models.py CompletedIssue   1 0 0   100%
little_loops / issue_history / models.py HistorySummary   7 0 0   100%
little_loops / issue_history / models.py PeriodMetrics   5 0 0   100%
little_loops / issue_history / models.py SubsystemHealth   1 0 0   100%
little_loops / issue_history / models.py Hotspot   1 0 0   100%
little_loops / issue_history / models.py HotspotAnalysis   1 0 0   100%
little_loops / issue_history / models.py CouplingPair   1 0 0   100%
little_loops / issue_history / models.py CouplingAnalysis   1 0 0   100%
little_loops / issue_history / models.py RegressionCluster   1 0 0   100%
little_loops / issue_history / models.py RegressionAnalysis   1 0 0   100%
little_loops / issue_history / models.py TestGap   1 0 0   100%
little_loops / issue_history / models.py TestGapAnalysis   1 0 0   100%
little_loops / issue_history / models.py RejectionMetrics   7 0 0   100%
little_loops / issue_history / models.py RejectionAnalysis   1 0 0   100%
little_loops / issue_history / models.py ManualPattern   1 0 0   100%
little_loops / issue_history / models.py ManualPatternAnalysis   4 0 0   100%
little_loops / issue_history / models.py ConfigGap   1 0 0   100%
little_loops / issue_history / models.py ConfigGapsAnalysis   1 0 0   100%
little_loops / issue_history / models.py AgentOutcome   5 0 0   100%
little_loops / issue_history / models.py AgentEffectivenessAnalysis   1 0 0   100%
little_loops / issue_history / models.py TechnicalDebtMetrics   1 0 0   100%
little_loops / issue_history / models.py ComplexityProxy   1 0 0   100%
little_loops / issue_history / models.py ComplexityProxyAnalysis   1 0 0   100%
little_loops / issue_history / models.py CrossCuttingSmell   1 0 0   100%
little_loops / issue_history / models.py CrossCuttingAnalysis   1 0 0   100%
little_loops / issue_history / models.py HistoryAnalysis   1 0 0   100%
little_loops / issue_history / models.py (no class)   255 0 0   100%
little_loops / issue_history / parsing.py (no class)   202 11 0   95%
little_loops / issue_history / quality.py (no class)   180 11 0   94%
little_loops / issue_history / regressions.py (no class)   63 7 0   89%
little_loops / issue_history / summary.py (no class)   116 5 0   96%
little_loops / issue_lifecycle.py FailureType   0 0 0   100%
little_loops / issue_lifecycle.py (no class)   262 37 0   86%
little_loops / issue_manager.py IssueProcessingResult   0 0 0   100%
little_loops / issue_manager.py AutoManager   155 31 0   80%
little_loops / issue_manager.py (no class)   357 29 0   92%
little_loops / issue_parser.py ProductImpact   4 0 0   100%
little_loops / issue_parser.py IssueInfo   6 0 0   100%
little_loops / issue_parser.py IssueParser   154 5 0   97%
little_loops / issue_parser.py (no class)   165 6 2   96%
little_loops / issue_template.py (no class)   56 3 0   95%
little_loops / issues / anchor_sweep.py SweepResult   0 0 0   100%
little_loops / issues / anchor_sweep.py (no class)   62 7 0   89%
little_loops / issues / anchors.py (no class)   19 0 0   100%
little_loops / learning_tests.py Assertion   2 0 0   100%
little_loops / learning_tests.py LearnTestRecord   2 0 0   100%
little_loops / learning_tests.py (no class)   71 2 0   97%
little_loops / link_checker.py LinkResult   0 0 0   100%
little_loops / link_checker.py LinkCheckResult   1 0 0   100%
little_loops / link_checker.py (no class)   182 13 0   93%
little_loops / logger.py Logger   32 0 0   100%
little_loops / logger.py (no class)   28 0 2   100%
little_loops / logo.py (no class)   12 12 0   0%
little_loops / loops / yaml_state_editor.py (no class)   17 0 0   100%
little_loops / mcp_call.py (no class)   132 36 2   73%
little_loops / output_parsing.py (no class)   185 5 0   97%
little_loops / parallel / file_hints.py FileHints   64 2 0   97%
little_loops / parallel / file_hints.py (no class)   77 0 2   100%
little_loops / parallel / git_lock.py GitLock   41 5 0   88%
little_loops / parallel / git_lock.py (no class)   14 0 2   100%
little_loops / parallel / merge_coordinator.py MergeCoordinator   380 68 0   82%
little_loops / parallel / merge_coordinator.py (no class)   44 0 2   100%
little_loops / parallel / orchestrator.py ParallelOrchestrator   588 100 0   83%
little_loops / parallel / orchestrator.py (no class)   55 0 2   100%
little_loops / parallel / overlap_detector.py OverlapResult   1 0 0   100%
little_loops / parallel / overlap_detector.py OverlapDetector   34 0 0   100%
little_loops / parallel / overlap_detector.py (no class)   21 0 3   100%
little_loops / parallel / priority_queue.py IssuePriorityQueue   72 1 0   99%
little_loops / parallel / priority_queue.py (no class)   33 0 3   100%
little_loops / parallel / types.py QueuedIssue   4 0 0   100%
little_loops / parallel / types.py WorkerResult   2 0 0   100%
little_loops / parallel / types.py MergeStatus   0 0 0   100%
little_loops / parallel / types.py WorkerStage   0 0 0   100%
little_loops / parallel / types.py MergeRequest   1 0 0   100%
little_loops / parallel / types.py OrchestratorState   2 0 0   100%
little_loops / parallel / types.py PendingWorktreeInfo   1 0 0   100%
little_loops / parallel / types.py ParallelConfig   12 0 0   100%
little_loops / parallel / types.py (no class)   122 0 2   100%
little_loops / parallel / worker_pool.py WorkerPool   456 56 0   88%
little_loops / parallel / worker_pool.py (no class)   51 0 4   100%
little_loops / session_log.py (no class)   47 0 0   100%
little_loops / session_store.py SQLiteTransport   34 9 0   74%
little_loops / session_store.py (no class)   157 33 0   79%
little_loops / skill_expander.py (no class)   54 0 0   100%
little_loops / sprint.py SprintOptions   4 0 0   100%
little_loops / sprint.py SprintState   2 0 0   100%
little_loops / sprint.py Sprint   16 0 0   100%
little_loops / sprint.py SprintManager   54 4 0   93%
little_loops / sprint.py (no class)   51 0 3   100%
little_loops / state.py ProcessingState   2 0 0   100%
little_loops / state.py StateManager   60 4 0   93%
little_loops / state.py (no class)   39 0 0   100%
little_loops / subprocess_utils.py (no class)   174 25 0   86%
little_loops / sync.py SyncedIssue   0 0 0   100%
little_loops / sync.py SyncResult   1 0 0   100%
little_loops / sync.py SyncStatus   1 0 0   100%
little_loops / sync.py GitHubSyncManager   443 60 0   86%
little_loops / sync.py (no class)   112 7 3   94%
little_loops / testing.py LLTestBus   20 0 0   100%
little_loops / testing.py (no class)   11 0 2   100%
little_loops / text_utils.py (no class)   51 1 0   98%
little_loops / transport.py Transport   2 2 0   0%
little_loops / transport.py JsonlTransport   5 0 0   100%
little_loops / transport.py _SocketClient   8 0 0   100%
little_loops / transport.py UnixSocketTransport   106 18 0   83%
little_loops / transport.py OTelTransport   89 12 0   87%
little_loops / transport.py WebhookTransport   44 2 0   95%
little_loops / transport.py (no class)   102 10 3   90%
little_loops / user_messages.py UserMessage   4 0 0   100%
little_loops / user_messages.py ResponseMetadata   1 0 0   100%
little_loops / user_messages.py CommandRecord   1 0 0   100%
little_loops / user_messages.py ExampleRecord   1 0 0   100%
little_loops / user_messages.py (no class)   325 27 0   92%
little_loops / work_verification.py (no class)   54 2 2   96%
little_loops / workflow_sequence / analysis.py (no class)   332 7 0   98%
little_loops / workflow_sequence / io.py (no class)   25 0 0   100%
little_loops / workflow_sequence / models.py SessionLink   1 0 0   100%
little_loops / workflow_sequence / models.py EntityCluster   1 0 0   100%
little_loops / workflow_sequence / models.py WorkflowBoundary   1 0 0   100%
little_loops / workflow_sequence / models.py Workflow   1 0 0   100%
little_loops / workflow_sequence / models.py WorkflowAnalysis   1 0 0   100%
little_loops / workflow_sequence / models.py (no class)   52 0 0   100%
little_loops / worktree_utils.py (no class)   57 1 3   98%
Total     21727 2249 145   90%

No items found using the specified filter.