From 0be06abc547dfcc4b0e33d8bfc8b9b76b36c8675 Mon Sep 17 00:00:00 2001 From: Saagar Date: Sat, 4 Jul 2026 06:29:43 -0700 Subject: [PATCH] fix: hide experiment rows from control center summary --- src/cli.py | 19 ++++++++++++++++++- tests/test_cli_hardening.py | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/cli.py b/src/cli.py index 4ba8811..4b046fd 100644 --- a/src/cli.py +++ b/src/cli.py @@ -4720,7 +4720,8 @@ def _print_control_center_summary(snapshot: dict) -> None: ("deferred", "Safe to Defer"), ] for lane, label in lane_labels: - items = [item for item in queue if item.get("lane") == lane] + lane_items = [item for item in queue if item.get("lane") == lane] + items = [item for item in lane_items if _should_print_control_center_item(item)] if not items: continue print(f"\n{label}") @@ -4737,6 +4738,9 @@ def _print_control_center_summary(snapshot: dict) -> None: " Intent alignment: " f"{item.get('intent_alignment')} ({item.get('intent_alignment_reason', 'No alignment reason is recorded yet.')})" ) + omitted_count = len(lane_items) - len(items) + if omitted_count > 0: + print(f" ({omitted_count} experiment/manual-only item(s) hidden from default view.)") if recent_changes: print("\nRecently Changed") for item in recent_changes[:5]: @@ -4748,6 +4752,19 @@ def _print_control_center_summary(snapshot: dict) -> None: ) +def _should_print_control_center_item(item: dict) -> bool: + catalog = item.get("portfolio_catalog") or {} + lifecycle = str(catalog.get("lifecycle_state") or "").strip().lower() + intended = str(catalog.get("intended_disposition") or "").strip().lower() + program = str(catalog.get("maturity_program") or "").strip().lower() + operating_path = str(item.get("operating_path") or catalog.get("operating_path") or "").strip().lower() + if lifecycle in {"experiment", "experimental"}: + return False + if intended == "experiment" or program == "experiment" or operating_path == "experiment": + return False + return True + + def _fetch_repo_metadata(args, client: GitHubClient) -> tuple[list[RepoMetadata], list[dict]]: if args.graphql and args.token: from src.graphql_client import bulk_fetch_repos diff --git a/tests/test_cli_hardening.py b/tests/test_cli_hardening.py index 3b0427d..cfa60e1 100644 --- a/tests/test_cli_hardening.py +++ b/tests/test_cli_hardening.py @@ -570,6 +570,27 @@ def test_main_control_center_suppresses_queue_when_portfolio_truth_is_newer( assert "Act now on StaleRepo" not in combined +def test_control_center_default_print_hides_experiment_items() -> None: + assert cli._should_print_control_center_item( + { + "repo": "active-repo", + "operating_path": "maintain", + "portfolio_catalog": {"lifecycle_state": "active"}, + } + ) + assert not cli._should_print_control_center_item( + { + "repo": "experiment-repo", + "operating_path": "experiment", + "portfolio_catalog": { + "lifecycle_state": "experimental", + "intended_disposition": "experiment", + "maturity_program": "experiment", + }, + } + ) + + def test_main_control_center_requires_latest_report(monkeypatch): args = _make_args(control_center=True)