Commit Graph

2680 Commits

Author SHA1 Message Date
drew 11c0fd11d5 perf(ci): raise pabot integration parallelism cap min(2)->min(6)
CI / lint (pull_request) Successful in 37s
CI / push-validation (pull_request) Successful in 22s
CI / helm (pull_request) Successful in 27s
CI / build (pull_request) Successful in 32s
CI / quality (pull_request) Successful in 45s
CI / typecheck (pull_request) Successful in 1m20s
CI / security (pull_request) Successful in 1m21s
CI / unit_tests (pull_request) Successful in 4m19s
CI / docker (pull_request) Successful in 1m19s
CI / integration_tests (pull_request) Successful in 7m45s
CI / coverage (pull_request) Successful in 8m18s
CI / status-check (pull_request) Successful in 3s
integration_tests was throttled to `min(2, _default_processes())` (commit
92e258535, a flaky-stabilization measure). Evidence from a cached CI run shows
the suite does ~47min of work serialized through 2 pabot lanes on a 32-core
runner -> ~24min wall (exactly 2x == 2 lanes), the chronic ~21-30min seen
across recent runs. It is linearly parallelism-bound.

Raise the cap to `min(6, _default_processes())`: ~4x more lanes -> projected
~6-8min wall, while staying well short of per-core fan-out (the runner reports
32 cores; behave already uses all of them). The cap is kept (not removed)
because the suite makes live LLM calls — ~149 HTTP 429 rate-limit responses
were observed even at 2-way, and unbounded fan-out would spike 429/OOM flakes
(the exact failure 92e258535 was masking). 6 is a deliberate middle ground;
TEST_PROCESSES / --processes still override.

Updates the now-stale "<=2 processes" docstrings on integration_tests and
slow_integration_tests. Behave/unit_tests parallelism (_default_processes(),
uncapped) is unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 22:32:43 -04:00
drew 8119043837 fix(coverage): reconcile robot coverage-threshold test with pyproject delegation (WS5)
CI / integration_tests (pull_request) Has started running
CI / push-validation (pull_request) Successful in 37s
CI / helm (pull_request) Successful in 40s
CI / build (pull_request) Successful in 46s
CI / lint (pull_request) Successful in 1m6s
CI / typecheck (pull_request) Successful in 1m6s
CI / quality (pull_request) Successful in 1m6s
CI / security (pull_request) Successful in 1m51s
CI / unit_tests (pull_request) Successful in 7m23s
CI / coverage (pull_request) Has started running
CI / docker (pull_request) Successful in 1m52s
CI / status-check (pull_request) Has been cancelled
integration_tests (Robot/pabot) failed on robot/coverage_threshold.robot
"Noxfile Contains Coverage Threshold Constant": it asserted the literal
`COVERAGE_THRESHOLD = 96.5` in noxfile.py, but the coverage_report session now
delegates the constant to pyproject's single source
(`COVERAGE_THRESHOLD = _read_coverage_fail_under()`).

This was the last WS5 reconciliation gap (the plan enumerated behave feature
steps + ci.yml + guidelines prose, but not the Robot suite). Assert the
delegation plus the pyproject floor (`fail_under = 96.5`) instead of the literal,
mirroring the behave step fix in b499834c0. The other assertions in the suite
(--fail-under= substring, [tool.coverage.run], branch=true, source=["src"]) are
unaffected; verified no other robot/behave/pytest test depends on the literal.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 22:11:54 -04:00
drew b499834c0f fix(coverage): resolve fail-under from pyproject in threshold-enforcement step (WS5)
CI / lint (pull_request) Successful in 42s
CI / typecheck (pull_request) Successful in 55s
CI / quality (pull_request) Successful in 59s
CI / security (pull_request) Successful in 1m16s
CI / helm (pull_request) Successful in 40s
CI / build (pull_request) Successful in 43s
CI / push-validation (pull_request) Successful in 20s
CI / unit_tests (pull_request) Successful in 4m26s
CI / docker (pull_request) Successful in 1m25s
CI / coverage (pull_request) Successful in 9m34s
CI / integration_tests (pull_request) Failing after 21m41s
CI / status-check (pull_request) Failing after 3s
The coverage_report noxfile session now delegates COVERAGE_THRESHOLD to the
pyproject single source (`COVERAGE_THRESHOLD = _read_coverage_fail_under()`),
so the AST value is a Call, not a Constant. The
coverage_threshold_enforcement.feature step "I parse the COVERAGE_THRESHOLD
constant from noxfile.py" raised ValueError (errored scenario) because it only
handled a literal constant — this was the missed third WS5 step file (the
config + consolidated steps were already reconciled).

Add the same pyproject `[tool.coverage.report].fail_under` fallback used by
coverage_threshold_config_steps.py, and fix the phantom-97 in the feature
description prose. Verified: the four coverage feature files now pass
(136 scenarios, 0 errored); previously unit_tests errored on
coverage_threshold_enforcement.feature:7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:37:24 -04:00
drew a49f37eb1f test(coverage): de-razor master coverage 96.465% -> 96.623%
CI / integration_tests (pull_request) Has started running
CI / push-validation (pull_request) Successful in 38s
CI / helm (pull_request) Successful in 45s
CI / build (pull_request) Successful in 47s
CI / lint (pull_request) Successful in 1m11s
CI / quality (pull_request) Successful in 1m16s
CI / typecheck (pull_request) Successful in 1m24s
CI / security (pull_request) Successful in 1m23s
CI / unit_tests (pull_request) Failing after 4m57s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Has been cancelled
Master passed the 96.5 floor only by rounding (96.465 -> 96.5). Add genuine
behave coverage + omit a structurally-uncoverable module so the floor has real
headroom. fail_under stays 96.5 (ratchet rule: raise only after coverage holds).

- omit src/cleveragents/application/services/__init__.py (noxfile + pyproject):
  100% of its "missing" lines are inside an `if TYPE_CHECKING:` block (never
  executes at runtime) and slipcover has no per-line pragma to exclude them.
- features/coverage_validation_error_paths.feature (+ steps): 16 scenarios
  exercising the defensive error-path branches in core/validation.py that the
  existing structural_validation.feature does not reach (non-dict node, dup
  decision_id, non-list children, invalid child ULID, missing decision fields,
  wrong-typed confidence/parent/sequence, malformed structured-output, unknown
  dispatcher target). Routed through the public
  validate_structured_component_output dispatcher; pure functions, no DB/CLI.

Full engine run: NOX_EXIT=0, no dead chunks, 96.623% (validation.py now fully
covered).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:07:39 -04:00
drew 4dec646e2f feat(ci): parallel coverage engine + explicit nox-gated coverage job (Phase 2)
Ports the WS1 fast/parallel coverage engine onto master and reconciles the
coverage gate to a single source. Local full-suite run on master's suite:
NOX_EXIT=0, all 12 chunks alive (no dead chunks), peak 658MB/chunk
(ceiling ~2.6GB vs the old ~1.4GB single-process that OOMs/reaper-kills),
96.465% -> 96.5 (rounded) >= 96.5 floor.

noxfile.py — coverage_report full-suite path now fans out K concurrent
slipcover processes (K=COVERAGE_PROCESSES, default 4) over N bin-packed
chunks (by scenario count), failing loud on any dead chunk (never merges
survivors) and merging per-chunk JSON. Bounds per-process peak RSS, killing
the single-process OOM/reaper collapse. Targeted (.feature posargs) runs keep
the single-process path. COVERAGE_THRESHOLD now reads
pyproject [tool.coverage.report].fail_under. Features are enumerated by direct
glob (NOT by importing run_behave_parallel, whose top level imports
behave/behave_parallel and is unavailable in the nox orchestrator process).

pyproject.toml — adds [tool.coverage.report].fail_under = 96.5 as the single
source of truth, with the evidence-gated ratchet rule (objective 97%).

.forgejo/workflows/ci.yml — coverage job: carries the skip_coverage operator
valve; propagates nox's exit EXPLICITLY (set -uo pipefail + PIPESTATUS +
exit $rc) instead of relying on the runner's implicit bash -eo pipefail;
adds timeout-minutes: 30 so a hang fails cleanly with diagnostics; deletes
the dead threshold=50 "Surface coverage summary" step; fixes the phantom-97
step label. Gating remains nox's --fail-under (sourced from pyproject).

coverage_threshold_config_steps.py — the fail-under feature step resolves the
floor from pyproject when COVERAGE_THRESHOLD delegates to the reader.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 16:32:53 -04:00
HAL9000 e49f9fa82d Merge pull request 'chore(agents): fix uat-tester parallel docs PR merge conflicts' (#5768) from improvement/agent-uat-tester-parallel-docs-pr-fix into master
CI / push-validation (push) Successful in 23s
CI / helm (push) Successful in 27s
CI / build (push) Successful in 41s
CI / quality (push) Successful in 48s
CI / lint (push) Successful in 51s
CI / typecheck (push) Successful in 1m0s
CI / security (push) Successful in 1m14s
CI / e2e_tests (push) Successful in 1m11s
CI / benchmark-regression (push) Failing after 36s
CI / unit_tests (push) Successful in 6m41s
CI / docker (push) Successful in 1m44s
CI / coverage (push) Successful in 13m13s
CI / integration_tests (push) Successful in 24m6s
CI / status-check (push) Successful in 4s
CI / benchmark-publish (push) Successful in 1h41m22s
2026-06-01 05:36:05 +00:00
HAL9000 5d84984338 fix(uat-tester): resolve 3 bash-permission blockers
CI / build (pull_request) Successful in 35s
CI / lint (pull_request) Successful in 58s
CI / typecheck (pull_request) Successful in 1m17s
CI / quality (pull_request) Successful in 1m16s
CI / helm (pull_request) Successful in 53s
CI / security (pull_request) Successful in 1m23s
CI / push-validation (pull_request) Successful in 20s
CI / unit_tests (pull_request) Successful in 6m16s
CI / docker (pull_request) Successful in 1m36s
CI / coverage (pull_request) Successful in 15m17s
CI / integration_tests (pull_request) Successful in 25m40s
CI / status-check (pull_request) Successful in 2s
- Resolve Forgejo label name to integer ID before PUT /issues/{n}/labels
  (both create_uat_tracking_issue and create_uat_announcement_issue);
  string names cause 422 / silent no-op, breaking the cleanup filter
- Add rm -rf /tmp/uat-tester-* and rm -rf /tmp/docs-* to bash allowlist
  so worker clone cleanup can actually execute
- Replace multi-line python3 -c calls in Pool Supervisor with jq:
  EXISTING_WORKERS lookup now uses jq ltrimstr/startswith filter;
  SESSION_ID creation now uses jq -r '.id'
2026-06-01 01:07:53 -04:00
HAL9000 35b212989e fix(uat-tester): add missing bash permissions for worker clone and docs
Worker Mode requires git clone, git config, git pull, git checkout,
git add, git commit, git push, and uv commands in bash. These were all
missing from the frontmatter permission block, causing every Worker Mode
instance to fail immediately with permission denied on the first command.
2026-06-01 01:07:53 -04:00
HAL9000 a38cb5c317 fix(uat-tester): remove one-shot script and batch examples.json update
- Delete scripts/fix_uat_tester.py: one-off patch script with a
  hardcoded /tmp path that no longer exists. Per CONTRIBUTING.md,
  scripts/ is for ongoing-purpose utilities, not development artifacts.

- Remove update_examples_json() from create_documentation_pr(): each
  per-PR call was modifying examples.json inside the git clone, causing
  merge conflicts when parallel UAT workers created docs PRs
  simultaneously. Option A from reviewer: move the call outside the PR
  creation function entirely.

- Add batch update_examples_json(documented_examples) call after the
  inner docs-PR creation loop completes, guarded by `if documented_examples`.
  This runs once per cycle instead of once per PR, eliminating the
  examples.json conflict surface for parallel workers.

- Expand CHANGELOG entry to reflect the examples.json fix.

ISSUES CLOSED: #4374
2026-06-01 01:07:53 -04:00
HAL9000 6116236c71 fix(agents): resolve PR lint failures and changelog for #5768
Fixed lint errors in fix_uat_tester.py (unused import, string concatenation).
Added CHANGELOG entry per CONTRIBUTING.md requirements.

Closes #5768
2026-06-01 01:07:53 -04:00
HAL9000 f6975d4322 chore(agents): fix uat-tester parallel docs PR merge conflicts
Fixed two critical bugs in the uat-tester agent's create_documentation_pr() function:

1. **Branch-existence guard bug**: Changed existing_branch.get('error') to existing_branch.get('errors') to correctly detect when a branch does not exist. The Forgejo API returns a JSON error body with an errors field (not error) when a branch is absent.

2. **Open-PR duplicate check bug**: Changed head={branch_name} to head={owner}:{branch_name} in the Forgejo API query. The API expects the owner prefix to properly filter PRs by head branch.

These fixes ensure parallel workers can safely coordinate without creating conflicting PRs.

Closes #4374
2026-06-01 01:07:53 -04:00
HAL9000 57802cb1de Merge pull request 'fix(cli): fix session create JSON output data structure to match spec' (#6723) from fix/issue-6441-session-create-json-output into master
CI / lint (push) Successful in 32s
CI / helm (push) Successful in 29s
CI / build (push) Successful in 31s
CI / push-validation (push) Successful in 23s
CI / quality (push) Successful in 50s
CI / typecheck (push) Successful in 1m0s
CI / security (push) Successful in 1m15s
CI / benchmark-regression (push) Failing after 39s
CI / e2e_tests (push) Successful in 1m10s
CI / unit_tests (push) Failing after 12m20s
CI / integration_tests (push) Successful in 24m17s
CI / coverage (push) Has been skipped
CI / docker (push) Has been skipped
CI / status-check (push) Failing after 4s
CI / benchmark-publish (push) Has been cancelled
2026-06-01 05:04:50 +00:00
cleveragents-auto c768d0844f chore: worker ruff auto-fix (pre-push lint gate)
CI / lint (pull_request) Successful in 41s
CI / typecheck (pull_request) Successful in 59s
CI / push-validation (pull_request) Successful in 22s
CI / helm (pull_request) Successful in 27s
CI / build (pull_request) Successful in 30s
CI / security (pull_request) Successful in 1m4s
CI / quality (pull_request) Successful in 53s
CI / unit_tests (pull_request) Successful in 7m23s
CI / docker (pull_request) Successful in 1m28s
CI / coverage (pull_request) Successful in 11m4s
CI / integration_tests (pull_request) Successful in 21m42s
CI / status-check (pull_request) Successful in 3s
2026-06-01 00:40:59 -04:00
HAL9000 c9b274a925 fix(cli): emit JSON envelope messages for session list/show/delete/export/import
The session create command already emitted a spec-compliant JSON envelope
with messages[].text populated, but list, show, delete, export, and
import did not — they either passed no `messages` to `format_output()`
(producing an envelope with an empty messages array) or short-circuited
to a Rich-styled `console.print(...)` line that breaks JSON parsing
entirely.

Failing scenarios in features/session_cli.feature (unit_tests gate)
asserted `messages[0].text == "<command-specific success>"`. Wire each
command's machine-readable path to emit a structured envelope with the
expected message:

- list (empty) → "0 sessions listed"
- list (populated) → "<N> sessions listed"
- show → "Session details loaded"
- delete --format json|yaml|plain → "Session deleted"
- export --output-format json|yaml|plain → "Export completed"
- import --format json|yaml|plain → "Import completed"

The export command gains a new `--output-format` flag distinct from the
existing `--format` (which selects export content format: json or md).
When the new flag is non-rich, the raw export content is suppressed from
stdout so the envelope remains the only thing emitted, and Rich panels
are skipped.

The import command gains a `--format` flag. The delete command already
had a `--format` option but its non-rich branch emitted Rich-styled text
instead of an envelope; that branch now splits cleanly: `--format color`
keeps the human-readable line, and json/yaml/plain emit an envelope.

Also addresses the `Session create initializes MCP logger` and
`Session list initializes MCP logger` scenarios in
features/session_cli_mcp_logger_simple_execution.feature, which inspect
the create()/list_sessions() source via inspect.getsource() and assert
the literal string `logging.getLogger(_MCP_LOGGER_NAME)` appears. Both
functions held the inlined literal `"cleveragents.mcp"` instead of the
module-level `_MCP_LOGGER_NAME` constant; substitute the constant
reference in both call sites.

CHANGELOG entry extended to document the envelope coverage across all
session commands.

ISSUES CLOSED: #6441
2026-06-01 00:40:59 -04:00
HAL9000 0c0101c368 fix(cli): add coverage for session create actor-details paths
Cover the two uncovered code paths introduced by the session create
JSON envelope fix:

1. `_resolve_actor_details(None)` → early `return None` (no actor bound)
2. Actor found in registry path (lines 271-297) — two scenarios:
   - Full config actor (options.temperature + direct context_window)
   - Graph descriptor actor (graph_descriptor.context_window)

Also remove dead redundant isinstance checks:
- `config_blob.get("options") if isinstance(config_blob, dict) else None`
  simplified to `config_blob.get("options")` since config_blob is always
  a dict (assigned on the previous line via ternary with {} fallback).
- Outer `if isinstance(config_blob, dict):` wrapper around context_window
  logic removed for the same reason.

ISSUES CLOSED: #6441
2026-06-01 00:40:59 -04:00
HAL9000 fba9cbf8d1 fix(cli): resolve session export test assertion and move get_container to top-level import
- Fix `security_template_coverage_boost.feature` assertion for "Session
  export to stdout outputs JSON": the export path outputs raw JSON with
  a `session_id` key, not a `data` envelope, so revert the erroneous
  `"data"` assertion back to `"session_id"`.
- Move all deferred `from cleveragents.application.container import
  get_container` imports in session.py to the module-level import
  block, consistent with every other CLI command file (action.py,
  actor.py, config.py, plan.py, etc.). No circular import exists.
- Update `session_cli_uncovered_branches_steps.py` to patch
  `cleveragents.cli.commands.session.get_container` directly (the
  correct target after a top-level import) instead of replacing
  `sys.modules["cleveragents.application.container"]`.
- Add CHANGELOG.md entry for the session create JSON envelope fix.

ISSUES CLOSED: #6441
2026-06-01 00:40:59 -04:00
implementation-worker 0e83ecc6cc fix(cli): update test assertions for new session create JSON structure
Update feature file assertions to match the new nested JSON structure
for session create output. Changed assertions from 'session_id:' to 'id:'
to reflect the new data.session.id structure per spec #6441.
2026-06-01 00:40:59 -04:00
HAL9000 e73150ab74 fix(cli): fix session create JSON output data structure to match spec (#6441)
ISSUES CLOSED: #6441
2026-06-01 00:40:59 -04:00
HAL9000 9a38ea3b88 Merge pull request 'fix(tui): make /help command list all catalogued slash commands from SLASH_COMMAND_SPECS' (#3456) from fix/tui-help-command-full-catalog-listing into master
CI / benchmark-regression (push) Failing after 29s
CI / build (push) Successful in 37s
CI / lint (push) Successful in 49s
CI / quality (push) Successful in 52s
CI / benchmark-publish (push) Has started running
CI / typecheck (push) Successful in 1m16s
CI / security (push) Successful in 1m15s
CI / helm (push) Successful in 23s
CI / push-validation (push) Successful in 23s
CI / e2e_tests (push) Successful in 1m0s
CI / unit_tests (push) Successful in 6m4s
CI / docker (push) Successful in 1m23s
CI / coverage (push) Successful in 11m23s
CI / integration_tests (push) Successful in 23m52s
CI / status-check (push) Successful in 3s
2026-06-01 04:22:21 +00:00
HAL9000 9215894b98 fix(tests): rewrite Robot for-loop as comprehension to preserve indentation
CI / lint (pull_request) Successful in 48s
CI / typecheck (pull_request) Successful in 1m10s
CI / quality (pull_request) Successful in 56s
CI / security (pull_request) Successful in 1m23s
CI / build (pull_request) Successful in 35s
CI / push-validation (pull_request) Successful in 36s
CI / helm (pull_request) Successful in 37s
CI / unit_tests (pull_request) Successful in 7m12s
CI / docker (pull_request) Successful in 1m42s
CI / coverage (pull_request) Successful in 14m19s
CI / integration_tests (pull_request) Successful in 21m38s
CI / status-check (pull_request) Successful in 3s
The Robot Framework `Catenate` keyword treats 2+ consecutive spaces as
field separators and strips them, which breaks Python's mandatory
indentation when a nested `assert` follows a `for` line. As a result
the "TUI Help Command Groups By Namespace" test produced a script with
a de-indented `assert` body, causing an IndentationError under
`python -c` and the test to fail with rc=1.

Rewrite the namespace-presence check as a single-line list
comprehension over the expected group headers, mirroring the pattern
already used by the sibling "Lists All Catalogued Commands" test in
the same file. The check is semantically equivalent — both fail with
the same diagnostic message when a group header is missing — but the
flattened form survives Robot's argument tokenisation intact.

ISSUES CLOSED: #3434
2026-05-31 23:00:02 -04:00
freemo 9131523a7f fix(tui): make /help command list all catalogued slash commands from SLASH_COMMAND_SPECS
CI / lint (pull_request) Successful in 47s
CI / helm (pull_request) Successful in 26s
CI / build (pull_request) Successful in 41s
CI / quality (pull_request) Successful in 53s
CI / typecheck (pull_request) Successful in 1m8s
CI / push-validation (pull_request) Successful in 42s
CI / security (pull_request) Successful in 1m55s
CI / unit_tests (pull_request) Successful in 6m49s
CI / docker (pull_request) Successful in 1m41s
CI / coverage (pull_request) Successful in 10m42s
CI / integration_tests (pull_request) Failing after 27m21s
CI / status-check (pull_request) Failing after 3s
Replace the hardcoded help string in TuiCommandRouter.handle() with a
dynamic lookup against SLASH_COMMAND_SPECS from slash_catalog.py.

Changes:
- Add _help_command(), _help_list_all(), _help_for_command() methods to
  TuiCommandRouter
- /help (no args): iterates SLASH_COMMAND_SPECS, groups commands by
  namespace (sorted alphabetically), renders all 70 commands with
  descriptions in colon-namespaced format (e.g. persona:list)
- /help <command>: looks up the given command in SLASH_COMMAND_SPECS and
  renders its full help (group, description)
- /help <unknown>: returns 'Unknown command: /<cmd>' message
- /help /persona:list (with leading slash): strips the slash and resolves
  correctly
- Import defaultdict and SLASH_COMMAND_SPECS at module level

Tests:
- Update tui_commands_coverage.feature: replace old exact-match scenario
  for help text with new dynamic-listing assertions
- Add tui_commands_coverage_steps.py: new 'should contain' step definition
- Add tui_help_command_full_catalog.feature: 12 BDD scenarios covering
  /help no-args, /help <command>, /help <unknown>, namespace grouping,
  colon-namespaced format, and regression against old hardcoded string
- Add tui_help_command_full_catalog_steps.py: step definitions for the
  new feature (all-commands check, not-equal assertion)
- Add robot/tui_help_command.robot: 5 Robot Framework integration tests
  verifying the help command via direct Python invocation and headless
  TUI startup

Closes #3434

---
**Automated by CleverAgents Bot**
Supervisor: Implementation | Agent: ca-issue-worker
2026-05-31 21:51:37 -04:00
HAL9000 83127f4b1c Merge pull request 'fix(cli): fix project context show JSON/YAML output fields' (#6680) from fix/issue-6323-project-context-show-output into master
CI / helm (push) Successful in 34s
CI / build (push) Successful in 37s
CI / lint (push) Successful in 42s
CI / push-validation (push) Successful in 28s
CI / quality (push) Successful in 50s
CI / security (push) Successful in 1m8s
CI / typecheck (push) Successful in 1m10s
CI / e2e_tests (push) Successful in 1m2s
CI / benchmark-regression (push) Failing after 38s
CI / unit_tests (push) Successful in 6m45s
CI / docker (push) Successful in 1m37s
CI / coverage (push) Failing after 14m39s
CI / integration_tests (push) Successful in 27m7s
CI / status-check (push) Failing after 4s
CI / benchmark-publish (push) Successful in 1h41m9s
2026-06-01 01:34:51 +00:00
cleveragents-auto 57cb71e424 chore: worker ruff auto-fix (pre-push lint gate)
CI / lint (pull_request) Successful in 1m4s
CI / push-validation (pull_request) Successful in 37s
CI / helm (pull_request) Successful in 39s
CI / build (pull_request) Successful in 47s
CI / typecheck (pull_request) Successful in 1m19s
CI / security (pull_request) Successful in 1m18s
CI / quality (pull_request) Successful in 1m19s
CI / unit_tests (pull_request) Successful in 7m0s
CI / docker (pull_request) Successful in 1m38s
CI / coverage (pull_request) Successful in 14m26s
CI / integration_tests (pull_request) Successful in 29m47s
CI / status-check (pull_request) Successful in 4s
2026-05-31 20:45:10 -04:00
HAL9000 826d70299a test(project-context): add BDD scenarios to boost coverage for issue 6323
Cover previously uncovered paths in _format_size (None, byte, KB/MB/GB/TB
branches), format_output dict-message paths (level/text, malformed key
ValueError, empty-level plain output), and context_show rich rendering
with execution environment panel and non-integer depth gradient keys.
2026-05-31 20:45:10 -04:00
HAL9000 565263ab24 fix(cli): fix project context show test mock for tier service
Add ContextTierService mock to step_m5_invoke_project_context_show
so the CLI command can call _get_context_tier_service() without
failing. Also patch _load_policy_json to prevent JSON decode errors
from MagicMock session objects. Update CHANGELOG.md and CONTRIBUTORS.md.

ISSUES CLOSED: #6323
2026-05-31 20:45:10 -04:00
HAL9000 19f11f0d0a fix(cli): restore context show rich panels
ISSUES CLOSED: #6323
2026-05-31 20:45:10 -04:00
HAL9000 17ede04458 fix(cli): align project context show structured output
ISSUES CLOSED: #6323
2026-05-31 20:45:10 -04:00
HAL9000 628c1dcf12 fix(cli): fix project context show JSON/YAML output fields (#6323)
ISSUES CLOSED: #6323
2026-05-31 20:45:10 -04:00
HAL9000 4244704378 Merge pull request 'fix(cli): fix JSON/YAML envelope messages[].text to show actual content' (#6739) from fix/issue-6457-json-envelope-messages-text into master
CI / lint (push) Successful in 40s
CI / build (push) Successful in 35s
CI / quality (push) Successful in 1m11s
CI / typecheck (push) Successful in 1m29s
CI / security (push) Successful in 1m28s
CI / helm (push) Successful in 26s
CI / push-validation (push) Successful in 22s
CI / benchmark-regression (push) Failing after 40s
CI / e2e_tests (push) Successful in 1m6s
CI / unit_tests (push) Successful in 6m42s
CI / docker (push) Successful in 1m37s
CI / benchmark-publish (push) Has started running
CI / coverage (push) Successful in 13m36s
CI / integration_tests (push) Successful in 25m32s
CI / status-check (push) Successful in 4s
2026-06-01 00:34:51 +00:00
HAL9000 9561c3a7be fix(tests): update MCP logger step to match constant usage in source
CI / push-validation (pull_request) Successful in 25s
CI / build (pull_request) Successful in 31s
CI / lint (pull_request) Successful in 38s
CI / helm (pull_request) Successful in 44s
CI / typecheck (pull_request) Successful in 56s
CI / quality (pull_request) Successful in 59s
CI / security (pull_request) Successful in 1m19s
CI / unit_tests (pull_request) Successful in 12m20s
CI / docker (pull_request) Successful in 1m27s
CI / integration_tests (pull_request) Successful in 21m17s
CI / coverage (pull_request) Successful in 13m37s
CI / status-check (pull_request) Successful in 4s
The step assertion checked for 'logging.getLogger("cleveragents.mcp")'
literally, but session.py uses the _MCP_LOGGER_NAME constant so
inspect.getsource() returns 'logging.getLogger(_MCP_LOGGER_NAME)'.
Update the assertion to match the actual source text.

ISSUES CLOSED: #6457
2026-05-31 19:27:43 -04:00
HAL9000 c0606ce0ce fix(cli): handle --format color in session delete as Rich output
The delete command's output branch used `fmt == OutputFormat.RICH` which
caused --format color to emit a JSON envelope instead of Rich panels.
Align with all other session commands by checking
`fmt not in (OutputFormat.RICH, OutputFormat.COLOR)` for machine-readable
paths. Add BDD scenario and step for --format color to close the coverage gap.

ISSUES CLOSED: #6457
2026-05-31 19:27:43 -04:00
HAL9000 b1bfaf032e fix(cli): fix JSON/YAML envelope messages[].text for delete/export/import
Extend the JSON/YAML envelope messages[].text fix to cover the remaining
three session subcommands that were still producing plain Rich output
instead of structured envelopes for non-rich format paths:

- session delete: route non-rich formats through format_output() with
  messages=[{"level": "ok", "text": "Session deleted"}]
- session export: add --output-format/-f option; emit structured envelope
  with session_export/contents/integrity data and "Export completed" message
- session import: add --format/-f option; emit structured envelope with
  session_import/validation/merge data and "Import completed" message

Also add BDD scenarios to features/session_cli.feature for each new
envelope path, add corresponding step definitions, add CHANGELOG entry
under [Unreleased] Fixed, and assign milestone v3.2.0 to the PR.

ISSUES CLOSED: #6457
2026-05-31 19:27:43 -04:00
HAL9000 f8946e1147 test(cli): assert container-instance stop mock invocation
Extend the devcontainer cleanup Behave scenario for container-instance resources to assert that the stop command delegates to the lifecycle stop mock, providing regression coverage that both container-instance and devcontainer-instance remain stoppable.

ISSUES CLOSED: #6457
2026-05-31 19:27:43 -04:00
HAL9000 d785397da4 fix(cli): fix JSON/YAML envelope messages[].text to show actual content (#6457) 2026-05-31 19:27:43 -04:00
HAL9000 5543e66b62 Merge pull request 'fix(cli): add --url flag to resource add for git resource type' (#6621) from fix/issue-6322-resource-add-url-flag into master
CI / push-validation (push) Successful in 24s
CI / helm (push) Successful in 34s
CI / lint (push) Successful in 41s
CI / build (push) Successful in 47s
CI / quality (push) Successful in 1m0s
CI / e2e_tests (push) Successful in 54s
CI / typecheck (push) Successful in 1m7s
CI / security (push) Successful in 1m8s
CI / benchmark-publish (push) Has started running
CI / benchmark-regression (push) Failing after 43s
CI / unit_tests (push) Successful in 6m53s
CI / docker (push) Successful in 1m35s
CI / coverage (push) Successful in 11m19s
CI / integration_tests (push) Successful in 25m41s
CI / status-check (push) Successful in 3s
2026-05-31 22:59:24 +00:00
HAL9000 fcc780bf1b fix(cli): align --url validation error message with test expectations
CI / build (pull_request) Successful in 42s
CI / lint (pull_request) Successful in 1m1s
CI / quality (pull_request) Successful in 1m4s
CI / typecheck (pull_request) Successful in 1m7s
CI / security (pull_request) Successful in 1m16s
CI / helm (pull_request) Successful in 26s
CI / push-validation (pull_request) Successful in 32s
CI / unit_tests (pull_request) Successful in 6m32s
CI / docker (pull_request) Successful in 1m36s
CI / coverage (pull_request) Successful in 13m55s
CI / integration_tests (pull_request) Successful in 27m19s
CI / status-check (pull_request) Successful in 3s
The Behave test expected the error message to contain '--url is only valid
for git resources' but the code was producing '--url only for git resources'.
Updated the validation error message to match the test assertion.

Also updated the Robot Framework integration test to expect the corrected
message, ensuring consistency across both test suites.

Fixes the failing Behave scenario: 'Using --url with a non-git resource type
is rejected' by correcting the error message text output from the CLI.

ISSUES CLOSED: #6322
2026-05-31 17:10:35 -04:00
HAL9000 ca55d565b6 test: add Robot Framework integration test for --url flag
CI / lint (pull_request) Successful in 38s
CI / helm (pull_request) Successful in 29s
CI / build (pull_request) Successful in 39s
CI / push-validation (pull_request) Successful in 37s
CI / quality (pull_request) Successful in 1m0s
CI / security (pull_request) Successful in 1m14s
CI / typecheck (pull_request) Successful in 1m40s
CI / unit_tests (pull_request) Failing after 7m14s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / integration_tests (pull_request) Successful in 25m16s
CI / status-check (pull_request) Failing after 3s
2026-05-31 15:39:36 -04:00
HAL9000 d95873b446 docs: update CHANGELOG for --url flag support 2026-05-31 15:39:36 -04:00
HAL9000 e43305198d fix: apply ruff formatting 2026-05-31 15:39:36 -04:00
HAL9000 60b728c385 fix: shorten error message to pass lint 2026-05-31 15:39:36 -04:00
HAL9000 b598a70c41 fix(cli): resolve lint errors in resource.py
- Break line 702 to fit 88-character limit
- Remove double blank line between validation blocks
- Improves error message clarity by naming 'git' type explicitly
2026-05-31 15:39:36 -04:00
HAL9000 9dcb446641 fix(cli): add --url flag to resource add for git resource type (#6322)
Ensure git resources accept a remote URL flag and persist the value via CLI validation and properties.

ISSUES CLOSED: #6322
2026-05-31 15:39:36 -04:00
HAL9000 2769d13c8e Merge pull request 'fix(cli): fix plan explain to accept decision_id argument' (#6618) from fix/issue-6325-plan-explain-decision-id into master
CI / helm (push) Successful in 30s
CI / build (push) Successful in 33s
CI / lint (push) Successful in 37s
CI / push-validation (push) Successful in 18s
CI / quality (push) Successful in 41s
CI / typecheck (push) Successful in 1m9s
CI / security (push) Successful in 1m18s
CI / benchmark-regression (push) Failing after 37s
CI / e2e_tests (push) Successful in 53s
CI / unit_tests (push) Successful in 6m7s
CI / docker (push) Successful in 1m30s
CI / coverage (push) Successful in 15m37s
CI / integration_tests (push) Successful in 26m13s
CI / status-check (push) Successful in 3s
CI / benchmark-publish (push) Successful in 1h40m39s
2026-05-31 19:26:45 +00:00
HAL9000 4d04b2e4ad test(tdd): restore tdd_plan_explain_plan_id regression tests for fixed behaviour
CI / lint (pull_request) Successful in 48s
CI / quality (pull_request) Successful in 47s
CI / typecheck (pull_request) Successful in 1m8s
CI / build (pull_request) Successful in 30s
CI / push-validation (pull_request) Successful in 19s
CI / security (pull_request) Successful in 1m22s
CI / helm (pull_request) Successful in 28s
CI / unit_tests (pull_request) Successful in 5m58s
CI / docker (pull_request) Successful in 1m38s
CI / coverage (pull_request) Successful in 13m36s
CI / integration_tests (pull_request) Successful in 22m10s
CI / status-check (pull_request) Successful in 3s
The TDD regression files for bug #968 were incorrectly deleted instead of
updated to assert the spec-compliant fixed behaviour from issue #6325.
Per CONTRIBUTING.md the regression guard must be kept and updated — not
removed — once the bug is fixed.

Restore and update all three files to assert the new expected behaviour:
- plan explain rejects a non-decision-id argument with rc=1
- error output contains "not found"
- decision data fields are absent from output

Also pair the orphaned robot/helper_tdd_plan_explain_plan_id.py with a
restored robot test file and update it to verify rc=1 rejection behaviour.

ISSUES CLOSED: #6325
2026-05-31 15:00:33 -04:00
HAL9000 a117445f6d fix(cli): fix lint and unit test failures in plan explain error path
- Shorten error message in explain_decision_cmd to fit 88-char limit (E501)
- Add `from None` to raise typer.Exit(1) inside except block (B904)
- Fix step definition mock to raise DecisionNotFoundError instead of
  returning None, so the exception handler fires and output contains
  "not found" as the scenario asserts

ISSUES CLOSED: #6325
2026-05-31 15:00:33 -04:00
HAL9000 c16d90058d fix(cli): only accept decision_id in plan explain (Closes #6325) 2026-05-31 15:00:33 -04:00
HAL9000 289b2cea10 Merge pull request 'Fix resource removal guard to respect linked children' (#7004) from fix/resource-removal-children-check-6886 into master
CI / benchmark-regression (push) Failing after 32s
CI / benchmark-publish (push) Has started running
CI / lint (push) Successful in 1m12s
CI / push-validation (push) Successful in 36s
CI / quality (push) Successful in 1m7s
CI / helm (push) Successful in 39s
CI / build (push) Successful in 46s
CI / typecheck (push) Successful in 1m22s
CI / security (push) Successful in 1m22s
CI / e2e_tests (push) Successful in 1m6s
CI / unit_tests (push) Successful in 9m1s
CI / docker (push) Successful in 1m25s
CI / coverage (push) Successful in 15m30s
CI / integration_tests (push) Successful in 29m56s
CI / status-check (push) Successful in 3s
2026-05-31 18:52:40 +00:00
HAL9000 e884dce240 Add CHANGELOG entry for resource removal guard fix (bug #6886)
CI / helm (pull_request) Successful in 32s
CI / build (pull_request) Successful in 37s
CI / lint (pull_request) Successful in 1m0s
CI / push-validation (pull_request) Successful in 21s
CI / quality (pull_request) Successful in 1m1s
CI / typecheck (pull_request) Successful in 1m14s
CI / security (pull_request) Successful in 1m19s
CI / unit_tests (pull_request) Successful in 9m9s
CI / docker (pull_request) Successful in 1m49s
CI / coverage (pull_request) Successful in 14m9s
CI / integration_tests (pull_request) Successful in 26m12s
CI / status-check (pull_request) Successful in 3s
The PR was missing the required changelog documentation under [Unreleased] ### Fixed

Signed-off-by: CleverThis <hal9000@cleverthis.com>
2026-05-31 13:33:31 -04:00
HAL9000 9b0cf52a4e Merge pull request 'fix(cli): fix automation-profile add JSON/YAML output format' (#6598) from fix/issue-6345-automation-profile-add-output into master
CI / push-validation (push) Successful in 22s
CI / lint (push) Successful in 35s
CI / build (push) Successful in 35s
CI / helm (push) Successful in 37s
CI / quality (push) Successful in 46s
CI / e2e_tests (push) Successful in 1m4s
CI / typecheck (push) Successful in 1m8s
CI / security (push) Successful in 1m17s
CI / benchmark-regression (push) Failing after 39s
CI / unit_tests (push) Successful in 7m21s
CI / docker (push) Successful in 1m38s
CI / integration_tests (push) Successful in 22m22s
CI / coverage (push) Successful in 13m42s
CI / status-check (push) Successful in 3s
CI / benchmark-publish (push) Failing after 1h21m19s
2026-05-31 17:29:07 +00:00
HAL9000 5eafb6911a fix(cli): fix --update title and guards display in automation-profile add
CI / push-validation (pull_request) Successful in 30s
CI / helm (pull_request) Successful in 33s
CI / lint (pull_request) Successful in 43s
CI / build (pull_request) Successful in 40s
CI / typecheck (pull_request) Successful in 58s
CI / security (pull_request) Successful in 1m14s
CI / quality (pull_request) Successful in 1m17s
CI / unit_tests (pull_request) Successful in 4m35s
CI / docker (pull_request) Successful in 1m35s
CI / coverage (pull_request) Successful in 13m3s
CI / integration_tests (pull_request) Successful in 26m5s
CI / status-check (pull_request) Successful in 3s
- When `--update` is passed but the profile does not exist, use title
  "Profile Added" instead of "Profile Registered" so the Behave step
  asserting "Profile Added" in output passes.
- Add guards panel rendering in `_render_profile_add_rich` so that
  profiles with guards config display Guard fields (max_tool_calls_per_step,
  tool_allowlist, tool_denylist, etc.) in rich add output.

ISSUES CLOSED: #6345
2026-05-31 11:52:57 -04:00