fix(cli): correct automation-profile list output structure and rich table rendering #3015
Labels
Clear labels
auto/needs-reevaluation
controller-managed
overdue
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
Needs Feedback
Signed-off: Owner
Signed-off: Scrum Master
Signed-off: Tech Lead
Spike
Controller deferred this PR; awaiting Phase 6+ scope-evaluator or operator re-enablement.
Auto-agents controller manages this PR/issue (see tools/controller/deploy/RUNBOOK.md). Remove this label to abandon controller management.
PR blocked by an open issue dependency. Operator must close the dep (or remove the dependency link) before the merge driver can act. Auto-cleared by merge_drive when no open deps remain.
Most recent merge cycle hit CI timeout. Driver excludes this PR while last merge_cycle row is < 30 min old; label persists thereafter as visible history.
Currently being processed by an implementer worker.
Currently being processed by the merge driver.
Currently being processed by a reviewer worker.
Merge driver heartbeat stale; pipeline halted. Closed automatically on next clean tick.
Detected master commit violating the strict merge invariant. Tracked as an issue (not a PR label); kept here for label completeness.
In-cycle escalation: most recent attempt ran at the Tier 0 slot (`tier-0`). Slot's model defined in .opencode/models/tiers.yaml.
In-cycle escalation: most recent attempt ran at the Tier 1 slot (`tier-1`). Slot's model defined in .opencode/models/tiers.yaml.
In-cycle escalation: most recent attempt ran at the Tier 2 slot (`tier-2`). Slot's model defined in .opencode/models/tiers.yaml. Gated behind IMPLEMENTER_ESCALATION_TIER2_ENABLED.
In-cycle escalation: most recent attempt ran at the Tier -1 slot (`tier-min`). Slot's model defined in .opencode/models/tiers.yaml. Suffix is ``-min`` (not ``--1``) so the Forgejo UI reads naturally.
Tracking issues used by the AI Automation system for agents to communicate and report.
Rebase conflict needs LLM conflict-resolver.
Failing CI needs implementer attention.
Documenting a driver incident or rollback.
Reviewer has APPROVED this PR and no later REQUEST_CHANGES is outstanding. The merge driver requires this label to even consider a PR for merging. Set by the reviewer worker on APPROVE; cleared on REQUEST_CHANGES.
Train repeatedly lost master-tempo races. Driver excludes via merge_cycle until cooldown elapses; label persists as visible history.
Revert PR backing out an invariant violation. Fast-tracked through the merge driver.
Sentinel PR duplicated from upstream into a personal fork by tools/duplicate_prs_to_fork.py for pipeline testing. Lives only in the fork; the canonical pipeline never sees it.
No implementer activity for N days. Flagged for human review. Auto-cleared on next push to head branch.
Repeatedly fails on current master (>= 3 ci-fail-on-rebased-sha releases in 12 h). Excluded from driver until human triage.
A ticket in a blocked state and unable to complete until some other task is completed first.
Bounty
$100
A bounty of $100 for any open-source contributor who provides a MR that solves this issue
Bounty
$1000
A bounty of $1000 for any open-source contributor who provides a MR that solves this issue
Bounty
$10000
A bounty of $10000 for any open-source contributor who provides a MR that solves this issue
Bounty
$20
A bounty of $20 for any open-source contributor who provides a MR that solves this issue
Bounty
$2000
A bounty of $2000 for any open-source contributor who provides a MR that solves this issue
Bounty
$250
A bounty of $250 for any open-source contributor who provides a MR that solves this issue
Bounty
$50
A bounty of $50 for any open-source contributor who provides a MR that solves this issue
Bounty
$500
A bounty of $500 for any open-source contributor who provides a MR that solves this issue
Bounty
$5000
A bounty of $5000 for any open-source contributor who provides a MR that solves this issue
Bounty
$750
A bounty of $750 for any open-source contributor who provides a MR that solves this issue
MoSCoW
Could have
Could have feature in order to satisfy the epic/legendary.
MoSCoW
Must have
Must have feature in order to satisfy the epic/legendary.
MoSCoW
Should have
Should have feature in order to satisfy the epic/legendary.
There are questions in the ticket that can not be completed until the project owner provides clarity.
Points
1
1 man-hours worth of work for an expert with no learning curve.
Points
13
13 man-hours worth of work for an expert with no learning curve.
Points
2
2 man-hours worth of work for an expert with no learning curve.
Points
21
21 man-hours worth of work for an expert with no learning curve.
Points
3
3 man-hours worth of work for an expert with no learning curve.
Points
34
34 man-hours worth of work for an expert with no learning curve.
Points
5
5 man-hours worth of work for an expert with no learning curve.
Points
55
55 man-hours worth of work for an expert with no learning curve.
Points
8
8 man-hours worth of work for an expert with no learning curve.
Points
88
88 man-hours worth of work for an expert with no learning curve.
Priority
Backlog
This ticket has backlogged priority and is not to be worked on yet
Priority
CI Blocker
Critical priority issue that blocks CI/CD pipeline and prevents PR merges
Priority
Critical
The priority is critical
Priority
High
The priority is high
Priority
Low
The priority is low
Priority
Medium
The priority is medium
When an epic or legendary is in review it must be signed off by owner, tech lead, and scrum master before being marked as completed.
When an epic or legendary is in review it must be signed off by owner, tech lead, and scrum master before being marked as completed.
When an epic or legendary is in review it must be signed off by owner, tech lead, and scrum master before being marked as completed.
A ticket for learning a tool or technology that is needed to be able to do future planning and design.
State
Completed
The ticket has been fully implemented, completed, and merged with the source code. This label should only be applied once a ticket is closed.
State
Duplicate
A ticket that represents the same content as an existing ticket.
State
In Progress
A ticket that is actively being developed.
State
In Review
A ticket that has had some code completed to implement but is waiting to pass peer review and is not yet merged in.
State
Paused
This ticket's work started but wasn't finished. It's on hold (likely in a feature branch) and will be resumed later, either due to a blocker or a delay.
State
Unverified
All new tickets start in this state. A developer may set it to show the ticket is unverified. This means we haven't agreed to work on it. It will either move to a verified state or be closed as wontdo.
State
Verified
The issue has been verified by a developer as legitimate. It will be worked on and verified tickets are now considered part of the backlog.
State
Wont Do
This ticket has been decided it wont be done. This may mean the bug has been determined to not be real (cant verify) or the feature is one we have decided we dont want to adopt.
Type
Automation
Any edits or discussion about the AI automated coding system.
Type
Bug
Something that doesnt work as intended.
Type
Discussion
Anytime a ticket represents a discussion about a subject and doesnt fall into one of the other categories.
Type
Documentation
An error or improvement needed in the documentation.
Type
Epic
Any first tier epic. That is, an epic which contains only issues as children and will not have sub-epics.
Type
Feature
Some new functionality not present.
Type
Legendary
A type of Epic which will contain other Epics.
Type
Refactor
A code change that restructures existing code without changing its external behavior.
Type
Support
Someone needs help using the project.
Type
Task
A generic task that doesnt fit into the other type categories.
Type
Testing
Work exclusively focusing on fixing or expanding testing.
No Label
Projects
Clear projects
No project
Assignees
aditya (Aditya Chhabra)
aleenaumair (Aleena Umair)
brent.edwards (Brent Edwards)
CoreRasurae (Luis Mendes)
drew (Drew Morris)
eugen.thaci (Eugen Thaci)
freemo (Jeffrey Phillips Freeman)
HAL9000 (HAL 9000)
HAL9001 (HAL9001)
hamza.khyari (Hamza Khyari)
hurui200320 (Rui Hu)
justin.morris
khird (Kyle Hird)
org.cleveragents
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: cleveragents/cleveragents-core#3015
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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
🔒 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
6235ad1e04tod820016bea🔒 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
🔒 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
d820016beatoa1fb804f21Issue triaged by project owner:
automation-profile listCLI command.Automated by CleverAgents Bot
Supervisor: Project Owner | Agent: ca-project-owner