Coverage for little_loops / cli / issues / next_issues.py: 100%
22 statements
« prev ^ index » next coverage.py v7.12.0, created at 2026-04-11 23:20 -0500
« prev ^ index » next coverage.py v7.12.0, created at 2026-04-11 23:20 -0500
1"""ll-issues next-issues: Print all active issues in ranked order."""
3from __future__ import annotations
5import argparse
6from typing import TYPE_CHECKING
8if TYPE_CHECKING:
9 from little_loops.config import BRConfig
12def cmd_next_issues(config: BRConfig, args: argparse.Namespace) -> int:
13 """Print all active issues sorted by outcome confidence and readiness.
15 Sort key: (-(outcome_confidence or -1), -(confidence_score or -1), priority_int)
17 Args:
18 config: Project configuration
19 args: Parsed arguments with optional .json, .path flags and .count
21 Returns:
22 Exit code (0 = at least one found, 1 = no issues)
23 """
24 from little_loops.cli.output import print_json
25 from little_loops.issue_parser import find_issues
27 issues = find_issues(config)
28 if not issues:
29 return 1
31 issues.sort(
32 key=lambda i: (
33 -(i.outcome_confidence if i.outcome_confidence is not None else -1),
34 -(i.confidence_score if i.confidence_score is not None else -1),
35 i.priority_int,
36 )
37 )
39 count = getattr(args, "count", None)
40 ranked = issues[:count] if count else issues
42 if getattr(args, "json", False):
43 print_json(
44 [
45 {
46 "id": i.issue_id,
47 "path": str(i.path),
48 "outcome_confidence": i.outcome_confidence,
49 "confidence_score": i.confidence_score,
50 "priority": i.priority,
51 }
52 for i in ranked
53 ]
54 )
55 return 0
57 if getattr(args, "path", False):
58 for i in ranked:
59 print(str(i.path))
60 return 0
62 for i in ranked:
63 print(i.issue_id)
64 return 0