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
« 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."""
3from __future__ import annotations
5import argparse
6import sys
7from typing import TYPE_CHECKING
9if TYPE_CHECKING:
10 from little_loops.config import BRConfig
13def cmd_set_status(config: BRConfig, args: argparse.Namespace) -> int:
14 """Write a new status value into an issue's YAML frontmatter.
16 Validates the target status against the canonical enum before writing.
17 Prints the before→after transition to stdout on success.
19 Args:
20 config: Project configuration
21 args: Parsed arguments with .issue_id and .status
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
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
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