Coverage for little_loops / cli / issues / set_status.py: 0%

17 statements  

« prev     ^ index     » next       coverage.py v7.12.0, created at 2026-05-28 13:07 -0500

1"""ll-issues set-status: Transition an issue to a new status value.""" 

2 

3from __future__ import annotations 

4 

5import argparse 

6import sys 

7from typing import TYPE_CHECKING 

8 

9if TYPE_CHECKING: 

10 from little_loops.config import BRConfig 

11 

12 

13def cmd_set_status(config: BRConfig, args: argparse.Namespace) -> int: 

14 """Write a new status value into an issue's YAML frontmatter. 

15 

16 Validates the target status against the canonical enum before writing. 

17 Prints the before→after transition to stdout on success. 

18 

19 Args: 

20 config: Project configuration 

21 args: Parsed arguments with .issue_id and .status 

22 

23 Returns: 

24 Exit code (0 = success, 1 = error) 

25 """ 

26 from little_loops.cli.issues.show import _resolve_issue_id 

27 from little_loops.frontmatter import parse_frontmatter, update_frontmatter 

28 

29 path = _resolve_issue_id(config, args.issue_id) 

30 if path is None: 

31 print(f"Error: Issue '{args.issue_id}' not found.", file=sys.stderr) 

32 return 1 

33 

34 content = path.read_text() 

35 old_status = parse_frontmatter(content).get("status", "unknown") 

36 new_content = update_frontmatter(content, {"status": args.status}) 

37 path.write_text(new_content) 

38 print(f"{args.issue_id}: {old_status}{args.status}") 

39 return 0