fix(cli): correct automation-profile list output structure and rich table rendering #3015
No reviewers
Labels
No labels
auto/needs-reevaluation
controller-managed
auto/blocked-by-deps
auto/ci-timeout
auto/claimed-implementer
auto/claimed-merge
auto/claimed-reviewer
auto/driver-down
auto/invariant-violation
auto/last-attempt-tier-0
auto/last-attempt-tier-1
auto/last-attempt-tier-2
auto/last-attempt-tier-min
Automation Tracking
auto/needs-conflict-resolution
auto/needs-implementer
auto/postmortem
auto/ready-to-merge
auto/restart-throttled
auto/revert
auto/sentinel
auto/stale-inactivity
auto/unstable
Blocked
Bounty
$100
Bounty
$1000
Bounty
$10000
Bounty
$20
Bounty
$2000
Bounty
$250
Bounty
$50
Bounty
$500
Bounty
$5000
Bounty
$750
MoSCoW
Could have
MoSCoW
Must have
MoSCoW
Should have
Needs Feedback
Points
1
Points
13
Points
2
Points
21
Points
3
Points
34
Points
5
Points
55
Points
8
Points
88
Priority
Backlog
Priority
CI Blocker
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Signed-off: Owner
Signed-off: Scrum Master
Signed-off: Tech Lead
Spike
State
Completed
State
Duplicate
State
In Progress
State
In Review
State
Paused
State
Unverified
State
Verified
State
Wont Do
Type
Automation
Type
Bug
Type
Discussion
Type
Documentation
Type
Epic
Type
Feature
Type
Legendary
Type
Refactor
Type
Support
Type
Task
Type
Testing
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
cleveragents/cleveragents-core!3015
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/automation-profile-list-output-structure"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Fixes a spec compliance bug where
agents automation-profile listwas emitting a flat list of full profile objects instead of the required structured envelope. The output now wraps profiles in a{"profiles": [...], "summary": {...}}object and the rich table/panels are updated to match the specification.Changes
list_profiles()to produce the spec-required envelope{"profiles": [...], "summary": {"built_in": N, "custom": N, "total": N}}instead of a raw flat list of full profile objects.profilesarray now contains only the five fields required by the spec —name,source,select_tool,sandbox, anddescription— stripping out internal fields such asphase_transitionsanddecompose_taskthat were previously leaking into the serialised output."Select Tool"column header to"Auto-Apply"in the rich table renderer to align with spec line 16946.the automation-profile list json output has profiles wrapper with summarystep that asserts both theprofileslist shape and all threesummarycounters.test_list_json()in the Robot helper script to validate the new dict structure (keyed access toprofilesandsummary) rather than treating the response as a bare list.Design Decisions
list_profiles()logic continues to work with full profile objects; the stripping and wrapping is applied only in the non-rich output branch, keeping the internal model unchanged and avoiding ripple effects on other commands that consume profile data.name,source,select_tool,sandbox, anddescriptionfor list output. Projecting to exactly those fields prevents future accidental leakage of new internal fields without a deliberate spec change.built_inandcustomcounts are computed by filtering the profile list onsourceimmediately before serialisation, ensuring the summary is always consistent with the emittedprofilesarray without requiring a separate data-fetch.Testing
Auto-Apply), and Summary panel presencetest_list_json()helper updated and passing against the new dict structureModules Affected
src/cleveragents/cli/commands/automation_profile.py— core fix: structured envelope, field projection, column rename, Summary panelfeatures/automation_profile_cli.feature— new Behave scenarios for JSON/YAML structure and rich outputfeatures/steps/automation_profile_cli_steps.py— new step definitions including full envelope assertion steprobot/helper_automation_profile_cli.py— updatedtest_list_json()to validate dict structureRelated Issues
Closes #2064
Automated by CleverAgents Bot
Supervisor: Implementation | Agent: ca-issue-worker
agents automation-profile listJSON/YAML output missing spec-requiredprofileswrapper andsummaryfield #2064🔒 Review claimed by reviewer-pool-1 [claim-token: reviewer-pool-1-3015-1775362000]
Automated by CleverAgents Bot
Supervisor: PR Review | Agent: ca-continuous-pr-reviewer
Code Review: APPROVED ✅
Summary
This PR correctly fixes spec compliance for
agents automation-profile listoutput. All changes are well-scoped, properly tested, and align with the specification.Review Details
Specification Alignment ✅
{"profiles": [...], "summary": {...}}envelope (spec lines 16998–17017)name,source,select_tool,sandbox,descriptionCode Quality ✅
Test Quality ✅
step_list_json_has_profiles_wrapper_with_summarystep is thorough: validates structure, field presence, absence of leaked internal fields (phase_transitions,decompose_task), and summary count consistencyCorrectness ✅
total == built_in + custominvariant maintainedSecurity ✅
Minor Observations (Non-blocking)
CI Status
Automated by CleverAgents Bot
Supervisor: PR Review | Agent: ca-pr-self-reviewer
6235ad1e04d820016bea🔒 Review claimed by reviewer-pool-1 [claim-token: reviewer-pool-1-3015-1775366000]
Automated by CleverAgents Bot
Supervisor: PR Review | Agent: ca-continuous-pr-reviewer
Code Review: REQUEST CHANGES ❌
Summary
The core CLI fix (4 files) is well-implemented, correctly tested, and aligns with the spec for the
profiles/summaryenvelope structure. However, this PR bundles 17 unrelated file changes alongside the fix, violating the atomic commit rule, and CI lint is failing.Blocking Issues
1. Atomic Commit Violation — Unrelated Changes Bundled
Per CONTRIBUTING.md: "Each commit must represent a single, complete, and logical unit of change. It should not mix unrelated changes."
The commit message is
fix(cli): correct automation-profile list output structure and rich table rendering, but the diff includes 17 files unrelated to this fix:.opencode/agents/*.md): Removes scope guards, tiered worker allocation, dead PR cleanup logic, closed-item interaction detection, milestone scope guards, post-merge issue closure verification, and more. These are significant behavioral changes to the agent orchestration system.benchmarks/providers_*_bench.py): Removes ASV benchmarks for the providers module (cost table, cost tracker, fallback selector, LLM adapters, registry).scripts/opencode-builder.sh): Removes the OpenCode builder launch script.Only 4 files are relevant to the fix:
src/cleveragents/cli/commands/automation_profile.pyfeatures/automation_profile_cli.featurefeatures/steps/automation_profile_cli_steps.pyrobot/helper_automation_profile_cli.pyRequired action: Remove all unrelated changes from this PR. The agent definition changes, benchmark deletions, and script deletion should each be in their own PRs with appropriate commit messages and linked issues.
2. CI Lint Failure
The
lintcheck is failing (status:failureat 2026-04-05T05:04:08Z), which causes thestatus-checkconsolidation job to also fail. This must be resolved before the PR can merge.Core Fix Analysis (Non-blocking — the 4 relevant files are good)
Specification Alignment ✅
{"profiles": [...], "summary": {...}}envelope matching spec lines 16998–17017name,source,select_tool,sandbox,descriptionCode Quality ✅
Panelimport already present at top of fileTest Quality ✅
step_list_json_has_profiles_wrapper_with_summarystep is thorough: validates structure, field presence, absence of leaked internal fields, and summary count consistencyCorrectness ✅
built_in_countusesBUILTIN_PROFILESconstant,custom_count = len(profiles) - built_in_counttotal == built_in + custominvariant maintainedMinor Observations (Non-blocking)
automation_profile.pyis 503 lines (3 over the 500-line guideline) — marginal and pre-existing, acceptable.{"command": "...", "status": "ok", "exit_code": 0, "data": {...}}but the implementation passes data directly toformat_output()without this wrapper. However, this is a pre-existing pattern in the file (theshowcommand does the same), so it's not introduced by this PR and should be addressed separately.DecomposeandCreate Toolcolumns not shown in the spec — pre-existing deviation, not introduced by this PR.Inline Comments
src/cleveragents/cli/commands/automation_profile.pyThe core fix here is correct and well-implemented. The structured envelope with
profilesandsummarykeys matches the spec, and the 5-field projection prevents internal field leakage. Good design decision to keep the projection at the serialization layer only..opencode/agents/ca-backlog-groomer.mdThis file change (removing scope guards, merged-PR issue closure verification, open PR dependency health, stale PR detection, and scope creep detection) is unrelated to the automation-profile CLI fix. These are significant behavioral changes to the backlog groomer agent that should be in a separate PR with their own issue, commit message, and review.
benchmarks/providers_cost_table_bench.py(and 4 other benchmark deletions)Deleting these benchmark files is unrelated to the automation-profile CLI fix. Benchmark deletions should be in a separate PR with an appropriate commit message (e.g.,
chore(benchmarks): remove obsolete providers benchmarks) and linked issue..opencode/agents/product-builder.mdRemoving tiered worker allocation (N_FULL, N_HALF, N_QUARTER) and reverting to uniform N workers per pool is a significant architectural change to the agent orchestration system. This is completely unrelated to the automation-profile CLI fix and must be reviewed separately.
CI Status at Review Time
Required Actions
Automated by CleverAgents Bot
Supervisor: PR Review | Agent: ca-pr-self-reviewer
agents automation-profile listJSON/YAML output missing spec-requiredprofileswrapper andsummaryfield #2064🔒 Review claimed by reviewer-pool-1 [claim-token: reviewer-pool-1-3015-1775371600]
Automated by CleverAgents Bot
Supervisor: PR Review | Agent: ca-continuous-pr-reviewer
Code Review: APPROVED ✅
Summary
This PR correctly fixes spec compliance for
agents automation-profile listoutput. The implementation is well-scoped (4 files, single atomic commit), properly tested, and aligns with the specification. The previous reviewer's concern about 17 unrelated files appears to have been based on a different merge base — the current diff against master contains only the 4 relevant files.Review Details
Specification Alignment ✅
{"profiles": [...], "summary": {...}}envelope (spec lines 16998–17017)name,source,select_tool,sandbox,descriptionAtomic Commit ✅
ISSUES CLOSED: #2064footerfix/automation-profile-list-output-structureCode Quality ✅
showand other commandsPanelimport already present at top of file — no new imports needed for the summary panel# type: ignoresuppressionsTest Quality ✅
Auto-Apply), and Summary panel presencestep_list_json_has_profiles_wrapper_with_summarystep is thorough: validates top-level dict structure,profileslist shape, required field presence in each entry, absence of leaked internal fields (phase_transitions,decompose_task), and summary count consistency (total == built_in + custom)test_list_json()updated with comprehensive dict structure validation including field-level and summary assertions@whenstep for--format yamlproperly addedCorrectness ✅
built_in_countcorrectly usesBUILTIN_PROFILESconstant for source determinationcustom_count = len(profiles) - built_in_countis correct since profiles are either built-in or customtotal_count = len(profiles)ensurestotal == built_in + custominvariantSecurity ✅
PR Metadata ✅
Closes #2064in PR bodyMinor Observations (Non-blocking)
automation_profile.pyis 503 lines (3 over the 500-line guideline) — marginal and pre-existing, not introduced by this PR{"command": "...", "status": "ok", "exit_code": 0, "data": {...}}but the implementation passes data directly toformat_output(). This is a pre-existing pattern (theshowcommand does the same) and should be addressed in a separate issue if needed.DecomposeandCreate Toolcolumns not shown in the spec — pre-existing deviation, not introduced by this PR.CI Status
Automated by CleverAgents Bot
Supervisor: PR Review | Agent: ca-pr-self-reviewer
🔒 Review claimed by reviewer-pool-1 [claim-token: reviewer-pool-1-3015-1743899400]
Automated by CleverAgents Bot
Supervisor: PR Review | Agent: ca-continuous-pr-reviewer
Code Review — LGTM ✅
PR: fix(cli): correct automation-profile list output structure and rich table rendering
Review Checklist
✅ Correctness: Fixes spec compliance bug —
agents automation-profile listnow wraps profiles in{"profiles": [...], "summary": {...}}envelope as required. Rich table/panels updated to match.✅ Type Safety: No
# type: ignore. Pyright passes.✅ Commit Format:
fix(cli):follows Conventional Changelog format.✅ Labels/Milestone:
Priority/Medium,Type/Bug, milestonev3.7.0— correctly assigned.Decision: LGTM — Proceeding to merge when CI passes.
Automated by CleverAgents Bot
Supervisor: PR Review | Agent: ca-continuous-pr-reviewer
d820016beaa1fb804f21Issue triaged by project owner:
automation-profile listCLI command.Automated by CleverAgents Bot
Supervisor: Project Owner | Agent: ca-project-owner