The PR 1482 merge of master into bugfix/session-export-format-flag left
multiple broken states:
1. delete(): Orphaned else block without matching if/elif — removed
the orphaned structure that references deleted fmt/message_count vars.
2. export_session(): Multiple unbound variable references (json_data instead
of data, fmt instead of output_format) and a call to deleted
_render_export_panels function — fixed all references and removed the
Rich panel rendering block since CLI export is JSON-only per spec §1986.
3. import_session(): References to deleted schema_version and actor_name
variables in structured output envelope — replaced with data.get() calls.
4. _facade_dispatch(): Changed A2aRequest constructor from operation= to
method= (matching the actual model field name) and response attributes
from .status/.data to .error/.result (matching A2aResponse model).
5. Added --format flag to export_session() that explicitly rejects non-JSON
data format values (md, xml, etc.) since CLI export is JSON-only per spec.
Use TUI /session:export --format md for Markdown export instead.
6. Updated robot integration tests (helper_session_cli.py, session_cli.robot)
to expect JSON output instead of Rich panels for file and stdout export.
- Add v3.6.0 features guide covering advanced context management, enhanced security profiles, improved observability, performance optimizations, and API enhancements
- Add v3.7.0 features guide covering TUI redesign, Agent-to-Agent Communication (A2A), enhanced automation execution, advanced skill management, and improved developer experience
- Add comprehensive v3.7.0 TUI guide with detailed navigation, management interfaces, keyboard shortcuts, and advanced features
- Add v3.7.0 A2A protocol specification covering message format, transport layers, authentication, error handling, and multi-agent orchestration
- Add v3.6.0-v3.7.0 release notes with upgrade paths, deprecation timeline, and migration guides
- Include practical examples and best practices for all major features
- Ensure all documentation is properly formatted with table of contents and cross-references
This documentation audit and update provides comprehensive coverage of v3.6.0 and v3.7.0 features with examples, ensuring users can effectively utilize new capabilities.
The PR added build_context_set_payload / render_context_set_plain /
render_context_set_rich in cleveragents.cli.rendering.project_context_set
but context_set never called them: rich output rendered a single
"Context Policy Updated" panel and json/yaml/plain went through
format_output(data, output_format) with no envelope kwargs. The five
BDD scenarios validating the spec envelope therefore failed.
Replace the tail of context_set so rich emits the four spec panels
(Context Policy / Limits / Summarization / Other Views) plus the
"checkmark Context policy updated" line, plain calls
render_context_set_plain directly, and json/yaml flow through
format_output with command="project context set", status="ok",
exit_code=0, and messages=[{level: ok, text: "Context policy updated"}].
ISSUES CLOSED: #6319
render_context_set_plain (~49 lines) was completely uncovered because no
existing test exercised the plain output path for context_set. Add a
coverage-boost scenario that uses format "plain" to cover those lines.
Also add a scenario with max_file_size=100 (not divisible by any binary
unit) to cover the _format_size bytes-fallback path (line 36 of
project_context_set.py).
ISSUES CLOSED: #6319
- Fix E501 line-length violations (lines 154, 184, 188, 194, 196) by
extracting ternary expressions into local variables in
render_context_set_plain and render_context_set_rich
- Fix I001 import block formatting in project_context_set.py
- Fix ruff format issue in project_context_cli_steps.py
ISSUES CLOSED: #6319
Implemented spec-compliant JSON, YAML, plain, and rich outputs for `agents project context set`. Added BDD coverage verifying the new output structure across formats.\n\nISSUES CLOSED: #6319
The CHANGELOG.md and CONTRIBUTORS.md entries from db048dd2 claimed this
PR adds `features/pure_graph_coverage.feature`. That standalone file
was intentionally not added (and an earlier draft was removed) because
the PureGraph scenarios already live in
`features/consolidated_langgraph.feature` — adding a standalone file
would have created duplicate Behave scenarios against the same step
definitions and broken `unit_tests` CI.
Reword both entries to accurately describe what this PR delivers:
- the previously orphaned `features/steps/pure_graph_coverage_steps.py`
is now driven through the existing consolidated feature file
- Robot Framework integration tests in `robot/langgraph/pure_graph.robot`
backed by `robot/langgraph/pure_graph_lib.py`
- ASV benchmarks in `benchmarks/pure_graph_bench.py`
ISSUES CLOSED: #9531
- Remove unused `import ast` and fix `set_function_registry` to store
callable values directly instead of calling eval() on a function object
- Replace try/except/pass with contextlib.suppress (SIM105)
- Add strict=False to zip() call (B905)
- Wrap long line in execute_graph (E501)
- Use list unpacking in assert_topo_order_equals (RUF005)
- Fix keyword name: Remove hyphen from 'Non-Functional' (Python method
has no hyphen so Robot generates 'Non Functional')
- Rewrite Set Double And Increment Registry to evaluate lambdas directly
rather than iterating a list of tuples (which paired whole tuples as
loop variables instead of unpacking them)
- Pass node/function name lists via Robot list variables instead of
space-delimited positional args
ISSUES CLOSED: #9531
- Remove features/pure_graph_coverage.feature to resolve duplicate BDD scenarios
conflict with existing consolidated_langgraph.feature (lines 440-474) that was
introduced by prior consolidation commit 60887308. Duplicate scenario execution
causes unit_tests CI failure.
- Replace Robot Framework stub tests in robot/langraph/pure_graph.robot with real
PureGraph integration tests:
* Topological order verifies start/end boundaries and node sequence
* Function execution validates sequential transformation (double=1->2, increment=2->3)
* Missing function test confirms graceful skip behavior without exceptions
* Non-functional nodes verify pass-through semantics
- Create pure_graph_lib.py Robot Framework library module with proper keywords
for graph construction, topo order computation, and execution under test.
ISSUES CLOSED: #9531
Fix formatting issues found by CI lint check:
- Consolidate multi-line NodeConfig and PureGraph constructor calls
onto single lines as preferred by ruff formatter
This resolves the failing CI / lint (pull_request) check.
ISSUES CLOSED: #9531
- Fix RUF012: Annotate mutable class attributes (params, param_names) with
typing.ClassVar in PureGraphBench benchmark suite
- Fix W293: Remove trailing whitespace from blank lines in benchmark file
This fixes the CI lint check that was failing on the pr-creator generated
benchmark code.
ISSUES CLOSED: #9531
Update the PR compliance checklist items that were missing from the original
PR creation by pr-creator:
- Added ### Tests section to CHANGELOG.md documenting the PureGraph BDD,
Robot Framework integration tests, and ASV benchmark additions
- Updated CONTRIBUTORS.md with contribution details for the PureGraph test
coverage suite (PR #9601 / issue #9531)
This completes items [1] and [2] of the mandatory 8-item PR Compliance Checklist.
ISSUES CLOSED: #9531
Add comprehensive test coverage for PureGraph module:
- Created features/pure_graph_coverage.feature with BDD scenarios for topological ordering, function execution, missing function handling, and non-functional nodes
- Added robot/langgraph/pure_graph.robot with Robot Framework integration tests
- Created benchmarks/pure_graph_bench.py with ASV benchmarks for execution throughput and ordering performance
This addresses the test infrastructure gap identified in issue #9531 where PureGraph had orphaned step definitions but no feature file, and lacked integration and performance test coverage.
ISSUES CLOSED: #9531
Covers uncovered paths in acms_context.py:
- Empty view name rejection (context show error path)
- Clear without filters warning and auto-confirmation path
This improves code coverage by exercising the following functions:
- acms_context_show empty view validation branch (line 91-93)
- acms_context_clear no-filters warning with confirmation bypass (line 215-219)
Closes#9586
- Fix acms CLI command hierarchy: nested acms_context.app under main.py
'acms' Typer as 'context' sub-command to form canonical path
[H[2J[3J (was incorrectly at ).
- Warm/cold tier budget labels now say 'decisions' instead of fragments
for clarity (warm/cold use decision budgets, not token budgets).
- Simplify _remove_fragments: ContextTierService is already thread-safe
with RLock; manual lock detection/holding was unnecessary and fragile.
- Update CHANGELOG to clarify warm/cold tiers use decision budget limits.
Extends the budget utilization summary in `context show` to display
hot/warm/cold tier utilization percentages individually, satisfying
the spec requirement for a per-tier breakdown. Previously only hot
tier utilization was shown.
- Hot tier: tokens used vs. max_tokens_hot budget
- Warm tier: fragment count vs. max_decisions_warm budget
- Cold tier: fragment count vs. max_decisions_cold budget
Also updates Robot Framework helper to verify per-tier breakdown
is present in output, and updates CHANGELOG/CONTRIBUTORS.
ISSUES CLOSED: #9586
- Fix integration test failure: Context Show Validates Empty View Name
- typer.Exit is click.Exit (RuntimeError subclass), not SystemExit
- Robot helper now catches typer.Exit using exit_code attribute
- Helper path insertion now always places clone src at sys.path[0]
to prevent /app/src from shadowing the PR branch source
- Fix information disclosure: CleverAgentsError handler now logs
exception internally via _logger.exception() and shows generic
user-facing message instead of str(e)
- Fix budget utilization: use actual per-tier token counts instead
of hot_count * 100 (fragment count * arbitrary factor)
- Fix type safety: _remove_fragments now uses _TierServiceProtocol
instead of object, enabling proper static type checking
- Fix overly broad except: cancellation handled with early return
instead of catching typer.Exit(0) in the except block
- Add broad glob pattern warning when --path matches > 50 entries
- Remove duplicate HAL 9000 entry from CONTRIBUTORS.md
- Fix Behave steps to catch typer.Exit in addition to SystemExit
ISSUES CLOSED: #9586
The ACMS context CLI commands ('context show' / 'context clear') were fully
implemented in 'acms_context.py' with comprehensive tests, mocks, benchmarks,
and documentation — but the module was never imported or registered in
'cli/main.py'. This commit wires up the 'acms_context.app' Typer sub-app
so that 'agents acms context show' and 'agents acms context clear' are
actually accessible from the CLI.
Changes:
- Import acms_context in _register_subcommands()
- Register acms_context.app as the 'acms' sub-app on the main Typer app
- Add 'acms' to valid_cmds list in main() for fast-path validation
- Add 'acms context' entry to _print_basic_help() output
- Minor formatting cleanup applied by ruff
ISSUES CLOSED: #9586
Refs: #9675
- Rewrote production CLI to use real ContextTierService (get_scoped_view, get_all_fragments, evict_lru) instead of non-existent ACMSService
- Removed unused imports (Path, Panel, ScopedView) from production code
- Fixed all lint issues: trailing whitespace, import ordering, nested with statements
- Replaced typer.Abort() with typer.Exit(code=1) for error exits
- Added input validation for empty/whitespace view parameter
- Fixed error handling to use str(e) instead of e.message
- Added guards against negative budget values in _format_budget_utilization
- Added warning when clearing context with no filters (clear ALL)
- Removed module-level console side effect
- Moved mocks to features/mocks/acms_context_mocks.py per CONTRIBUTING.md
- Fixed test assertions to capture real CLI output (not placeholder)
- Fixed duplicate step definitions (AmbiguousStep errors)
- Fixed feature file step mismatch for tier count parameter
- Added Robot Framework integration tests in robot/acms_context_cli.robot
- Added performance benchmarks in benchmarks/acms_context_cli_bench.py
- Updated CHANGELOG.md with ACMS context CLI feature entry
- Updated CONTRIBUTORS.md with ACMS context CLI contribution
ISSUES CLOSED: #9586
Restore all five required Rich output panels to _print_lifecycle_plan():
- Plan Status panel: Processing State, Projects, Arguments, Automation Profile,
actors (Strategy/Execution/Estimation/Invariant), Execution Environment,
Created/Updated timestamps, Description, Definition of Done, DoD evaluation,
Invariants, resume metadata, multi-project scopes, error message
- Progress panel: Strategize/Execute/Apply step indicators
- Timing panel: Started, Elapsed, ETA (using estimation_result when available),
and all phase timestamps (Strategize Started/Completed, Execute Started/Completed,
Applied At)
- Execution Detail panel: Sandbox, Tool Calls (N/A), Files Modified (N/A),
Child Plans, Checkpoints
- Cost panel: Tokens Used, Cost So Far, Estimated Total Cost
- Footer: ✓ OK Status refreshed
Also fixes:
- tool_calls semantic bug: display N/A instead of total_tokens
- files_modified: display N/A (not available in cost_metadata)
- ETA calculation: use estimation_result.estimated_time_seconds or N/A
- In-function import: moved Plan as LifecyclePlan to top of file
- Import sorting: split aliased import per ruff isort rules
Adds BDD scenarios for all five panels in plan_lifecycle_cli_coverage.feature
with step definitions in plan_lifecycle_cli_coverage_steps.py.
Updates CHANGELOG.md with user-facing output changes.
ISSUES CLOSED: #9341
Implements the missing output panels for the 'agents plan status' command as specified in the product specification. The command now renders five panels:
1. Plan Status - Plan ID, Phase, State, Action, Project, Automation, Attempt
2. Progress - Strategize/Execute/Apply step progress with status indicators (✓, ⏳, •)
3. Timing - Started, Elapsed, ETA
4. Execution Detail - Sandbox strategy, Tool Calls, Files Modified, Child Plans, Checkpoints
5. Cost - Tokens Used, Cost So Far, Estimated
Also adds the '✓ OK Status refreshed' footer line as required by the specification.
ISSUES CLOSED: #9341
Extended features/mocks/test_uow_factory.py with:
- use_test_uow(context) function to attach test UoW to Behave context with automatic cleanup
- cleanup_test_uow(context) function for teardown
- Comprehensive docstrings and examples
Updated features/environment.py:
- Added cleanup_test_uow() call in after_scenario hook
ISSUES CLOSED: #9541