From 7549d7c268f6bc3c4005a9221aed7ad388c91708 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 19:04:35 +0000 Subject: [PATCH] feat: improve checkpoint empty state UX Co-authored-by: ivangegovdve-sudo <225339531+ivangegovdve-sudo@users.noreply.github.com> --- .Jules/palette.md | 4 ++++ src/python_learning_orchestrated/cli.py | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.Jules/palette.md b/.Jules/palette.md index 35ad244..e97ab31 100644 --- a/.Jules/palette.md +++ b/.Jules/palette.md @@ -5,3 +5,7 @@ ## 2024-05-24 - CLI Output Scannability and Human-Readability **Learning:** In text-based CLI menus, using internal identifiers (like `lesson-1`) and verbose status strings (like `pending` or `completed`) makes lists hard to scan and feels too technical. **Action:** When displaying lists of items with states, use familiar visual symbols (like `[x]` vs `[ ]`) and human-readable titles (like "Variables") to improve scannability and create a more friendly, intuitive interface. + +## 2024-05-25 - Actionable Empty States in CLI +**Learning:** Showing a generic "No [items] found" message in a CLI leaves the user at a dead-end, unsure of what to do next. Providing actionable instructions directly in the empty state helps guide them to the right command. +**Action:** Always pair empty state messages with clear, actionable instructions or commands on how to create the missing resource to improve the user experience and avoid dead-ends. diff --git a/src/python_learning_orchestrated/cli.py b/src/python_learning_orchestrated/cli.py index 31751d2..99d29a6 100644 --- a/src/python_learning_orchestrated/cli.py +++ b/src/python_learning_orchestrated/cli.py @@ -223,7 +223,10 @@ def main( if args.checkpoint_command == "list": checkpoints = checkpoint_store.list_checkpoints() if not checkpoints: - output_fn("No checkpoints found.") + output_fn( + "No checkpoints found. " + "Use 'checkpoint create ' to create one." + ) return output_fn(f"Checkpoints ({len(checkpoints)}):") for checkpoint in checkpoints: