fix/plan-artifacts-missing-validation-apply-summary
2832 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
7a4e8ff984 |
docs(changelog): restore deleted entries and add #9084 entry
CI / lint (pull_request) Successful in 35s
CI / build (pull_request) Successful in 44s
CI / push-validation (pull_request) Successful in 26s
CI / typecheck (pull_request) Successful in 59s
CI / helm (pull_request) Successful in 31s
CI / quality (pull_request) Successful in 1m13s
CI / security (pull_request) Successful in 1m23s
CI / unit_tests (pull_request) Successful in 4m50s
CI / docker (pull_request) Successful in 1m43s
CI / integration_tests (pull_request) Successful in 8m11s
CI / coverage (pull_request) Successful in 9m2s
CI / status-check (pull_request) Successful in 3s
Restores 129 lines accidentally removed during rebase conflict resolution: entries for #8588, #4740, #9056, #9096, #7875, #10970, #8520, #10987 (### Changed), #9055, #1549/#1544 (### Security), and #7623, #9060, #9824, #10972 (### Fixed). Also restores 4 lines removed from the repository save() session-contract entry. Adds required CHANGELOG entry for this PR's own fix: - Plan artifacts JSON completeness fix (#9084) ISSUES CLOSED: #9084 |
||
|
|
c957cf8cb1 |
fix(plan): unwrap format_output envelope in artifact JSON step assertions
The artifacts() method routes JSON through format_output() which wraps
the payload in a spec-required envelope {"data": ..., "status": ...}.
The two @tdd_issue_4253 step assertions were checking parsed["key"]
directly, but the actual fields live at parsed["data"]["key"].
Update step_artifacts_json_validation and step_artifacts_json_apply_summary
to extract parsed["data"] before asserting on validation_summary and
apply_summary respectively.
ISSUES CLOSED: #9084
|
||
|
|
87cfdae489 |
docs(plan): add CHANGELOG and CONTRIBUTORS entries for #9084 fix
- Add changelog entry under [Unreleased]/Fixed for plan artifacts JSON completeness (#9084) - Add contributors detail for validation_summary and apply_summary fix work. ISSUES CLOSED: #9084 |
||
|
|
70a302a368 |
fix(plan): remove @tdd_expected_fail tags from passing artifact tests
The _build_artifacts_dict function in plan_apply_service.py already includes validation_summary and apply_summary in the artifacts output. These two test scenarios were marked as @tdd_expected_fail but now pass with the current implementation. Removing the tags to reflect the actual passing status. Also added the missing unit-tests.yaml validation config file that the tests require. ISSUES CLOSED: #9084 |
||
|
|
d3f63baa01 |
Merge pull request 'fix(plan-lifecycle): add rollback_plan method to PlanLifecycleService' (#3911) from fix/plan-lifecycle-service-rollback-method into master
CI / benchmark-regression (push) Has started running
CI / lint (push) Successful in 47s
CI / quality (push) Successful in 50s
CI / typecheck (push) Successful in 1m0s
CI / security (push) Successful in 1m10s
CI / helm (push) Successful in 28s
CI / push-validation (push) Successful in 26s
CI / build (push) Successful in 30s
CI / e2e_tests (push) Successful in 51s
CI / unit_tests (push) Successful in 5m7s
CI / integration_tests (push) Successful in 8m26s
CI / docker (push) Successful in 1m58s
CI / benchmark-publish (push) Has started running
CI / coverage (push) Successful in 8m58s
CI / status-check (push) Successful in 6s
|
||
|
|
8469214dfb |
chore: re-trigger CI [controller]
CI / lint (pull_request) Successful in 41s
CI / typecheck (pull_request) Successful in 1m0s
CI / push-validation (pull_request) Successful in 38s
CI / helm (pull_request) Successful in 40s
CI / security (pull_request) Successful in 1m9s
CI / build (pull_request) Successful in 48s
CI / quality (pull_request) Successful in 1m16s
CI / unit_tests (pull_request) Successful in 5m17s
CI / docker (pull_request) Successful in 1m38s
CI / integration_tests (pull_request) Successful in 8m50s
CI / coverage (pull_request) Successful in 8m35s
CI / status-check (pull_request) Successful in 3s
|
||
|
|
afe89964df |
chore(tests): remove stale tdd_expected_fail tags from tests now passing on master
CI / push-validation (pull_request) Successful in 26s
CI / helm (pull_request) Successful in 50s
CI / lint (pull_request) Successful in 52s
CI / build (pull_request) Successful in 51s
CI / quality (pull_request) Successful in 52s
CI / security (pull_request) Successful in 1m15s
CI / typecheck (pull_request) Successful in 1m35s
CI / unit_tests (pull_request) Successful in 5m25s
CI / docker (pull_request) Successful in 1m34s
CI / integration_tests (pull_request) Failing after 10m26s
CI / coverage (pull_request) Failing after 18m51s
CI / status-check (pull_request) Has been cancelled
The tdd_expected_fail listener (robot/tdd_expected_fail_listener.py and features/environment.py) inverts test results: a test tagged @tdd_expected_fail that PASSES is forced to FAIL with the message "Bug appears to be fixed. Remove the tdd_expected_fail tag…". After rebasing onto master, 22 scenarios across 11 files were triggering that forced-failure path because the underlying bugs (#4199, #4201, #4202, #4203, #4205, #4206, #4243, #4252, #4301, #4303, #4304) have been fixed on master but the @tdd_expected_fail tags were never removed. This commit removes the stale tag (keeping @tdd_issue and @tdd_issue_<N> for traceability, per the master-side pattern in robot/tdd_skill_add_regression.robot:9 "tag removed after bug fix"). Files touched (lines: where the stale tag was): features/plan_cli_spec_alignment.feature (121, 128, 136) robot/a2a_facade.robot (40) robot/actor_cli_show.robot (13, 30) robot/actor_configuration.robot (8) robot/actor_context_export_import.robot (20, 71, 92) robot/cli_extensions.robot (61) robot/cli_formats.robot (14, 23, 30, 48, 57, 85) robot/cli_lifecycle_e2e.robot (77, 87) robot/config_project_scope.robot (37) robot/config_resolution.robot (13) robot/container_tool_exec.robot (137) Verified locally: targeted unit_tests run on features/plan_cli_spec_alignment.feature now passes 20/20 (was 17/20 with 3 scenarios forced-failed by the inversion). ISSUES CLOSED: #3677 |
||
|
|
8c8cbb771a |
fix(plan-lifecycle): align rollback contract with spec
- update PlanLifecycleService documentation for rollback phase/state semantics\n- add Behave scenarios covering checkpoint error propagation and supporting steps\n- adjust mock helpers to raise configured exceptions and keep scenario count accurate\n\nISSUES CLOSED: #3677 |
||
|
|
7fb3fc76c8 |
fix(plan-lifecycle): add rollback_plan method to PlanLifecycleService
- What was implemented
- Added PLAN_ROLLED_BACK event type to the EventType enum at src/cleveragents/infrastructure/events/types.py to properly represent successful rollbacks in the domain model.
- Implemented rollback_plan(plan_id: str, checkpoint_id: str) -> RollbackResult in PlanLifecycleService (src/cleveragents/application/services/plan_lifecycle_service.py) with:
- Plan state validation: rejects rollback when the plan is in terminal APPLIED or CANCELLED states.
- Delegation to CheckpointService.selective_rollback() to perform the actual rollback logic and obtain a RollbackResult.
- Emission of PLAN_ROLLED_BACK as a domain event to reflect the completed rollback.
- checkpoint_service is accepted as an optional constructor parameter; if not provided, a PlanError is raised to preserve backward compatibility.
- Updated CLI behavior in src/cleveragents/cli/commands/plan.py so agents plan rollback routes through PlanLifecycleService.rollback_plan() rather than calling CheckpointService.selective_rollback() directly.
- Updated PlanLifecycleService module docstring to include rollback_plan in the documented API.
- Added Behave feature file features/plan_lifecycle_rollback.feature with 11 scenarios covering state validation, domain events, and delegation.
- Added step implementations in features/steps/plan_lifecycle_rollback_steps.py to support the new scenarios.
- Key design decisions
- rollback_plan returns RollbackResult (the same result type produced by CheckpointService.selective_rollback) so the CLI can display rollback details consistently.
- Terminal states APPLIED and CANCELLED are disallowed for rollback to prevent inconsistent or invalid state transitions.
- checkpoint_service is optional in the PlanLifecycleService constructor; when omitted (None), a PlanError is raised to retain backward compatibility while signaling explicit dependency requirements.
- CLI UI remains powered by CheckpointService for metadata enrichment (e.g., confirmation prompts), but the actual rollback action is performed via PlanLifecycleService to ensure proper domain workflow and event emission.
- Technical implications
- All rollback logic now flows through the domain service layer (PlanLifecycleService) to preserve invariants and emit domain events, rather than allowing ad-hoc UI routes to bypass service validation.
- The UI can still retrieve checkpoint metadata for user confirmation, but the operation that modifies state uses the new rollback_plan pathway.
- Tests and behavior coverage were expanded via the new Behave feature and step implementations to validate state handling, events, and delegation.
- Affected modules/components
- src/cleveragents/infrastructure/events/types.py
- src/cleveragents/application/services/plan_lifecycle_service.py
- src/cleveragents/cli/commands/plan.py
- PlanLifecycleService module docstring
- features/plan_lifecycle_rollback.feature
- features/steps/plan_lifecycle_rollback_steps.py
ISSUES CLOSED: #3677
|
||
|
|
6bb0e6ddc1 |
Merge pull request 'fix(cli): add timing.started ISO timestamp to plan prompt JSON envelope' (#9447) from fix/plan-prompt-json-timing-started into master
CI / push-validation (push) Successful in 29s
CI / helm (push) Successful in 31s
CI / lint (push) Successful in 37s
CI / build (push) Successful in 38s
CI / quality (push) Successful in 51s
CI / typecheck (push) Successful in 1m24s
CI / security (push) Successful in 1m24s
CI / e2e_tests (push) Successful in 1m26s
CI / unit_tests (push) Successful in 4m55s
CI / docker (push) Successful in 2m8s
CI / integration_tests (push) Successful in 9m32s
CI / coverage (push) Failing after 10m56s
CI / status-check (push) Failing after 2s
CI / benchmark-publish (push) Has started running
CI / benchmark-regression (push) Failing after 11m40s
|
||
|
|
24d315749b |
fix(cli): plan prompt JSON envelope and remove unrelated files
CI / lint (pull_request) Successful in 32s
CI / push-validation (pull_request) Successful in 25s
CI / build (pull_request) Successful in 48s
CI / helm (pull_request) Successful in 53s
CI / quality (pull_request) Successful in 1m1s
CI / typecheck (pull_request) Successful in 1m9s
CI / security (pull_request) Successful in 1m11s
CI / unit_tests (pull_request) Successful in 5m16s
CI / docker (pull_request) Successful in 1m34s
CI / integration_tests (pull_request) Successful in 9m33s
CI / coverage (pull_request) Successful in 10m21s
CI / status-check (pull_request) Successful in 2s
The prior commits added `timing.started` to a local envelope dict in `prompt_plan_cmd`, but that dict was passed as the `data` argument to `format_output()`, which builds its OWN envelope from `data`. Result: the test-asserted `command="plan prompt"` ended up as an empty string at the JSON root, and `timing.started` was buried in `data.timing.started` instead of `timing.started`. This commit: - Extends `format_output` and `_build_envelope` with an optional `started_at: datetime | None` parameter. When provided, the envelope's `timing` dict includes a `started` ISO-8601 field alongside `duration_ms`. Backward compatible: default `None` preserves the existing timing shape for all current callers. - Refactors `prompt_plan_cmd` to call `format_output(prompt_data, fmt, command="plan prompt", ..., started_at=started_at)` for the JSON and YAML formats so the envelope keys are populated at the document root. Table/plain/color formats retain the legacy envelope-wrapping behavior — the existing scenario outline relies on the envelope being passed directly to the table renderer. - Removes 48 unrelated files accidentally committed to the repo root by the original PR commit (`_issue_state.py`, `_pr_dep*.py`, `_pr_labels.py`, `_pr_setup.py`, `coverage_boost_steps*.py`, `cross_plan_correction_*.py`, `parse_*.py`, `search_*.py`, `retry_policy_updated.py`, `run_behave_parallel.py`, `acms_context_analysis_steps.py`, `aggregate_all.py`, `check_issues.py`, `check_last_page.py`, `fix_timing.py`, `helper_cross_plan_correction*.py`, `groom_prompt.txt`, `label_result.txt`, `prompt_auto_rev_sup.txt`, `tmp/uat_worker_*`, `tmp/update_issue_labels.sh`). These contained hardcoded API tokens and broke `ruff format --check`. The exposed token (`92224acff675c50c5958d1eaca9a688abd405e06`) should be rotated separately. - Adds CHANGELOG.md entry under [Unreleased] > Fixed. ISSUES CLOSED: #9353 |
||
|
|
1f1b135db7 |
fix(cli): add timing.started ISO timestamp to plan prompt JSON envelope
- Capture started_at timestamp using datetime.now(UTC) before service call - Add timing.started field to JSON envelope with ISO 8601 format - Update step definitions to verify timing.started is present and valid - Remove @tdd_expected_fail tag from plan_prompt_command.feature scenario - Remove unrelated files accidentally committed to repo root - Move datetime import to top of plan_prompt_command_steps.py - Add CHANGELOG.md entry under [Unreleased] > Fixed ISSUES CLOSED: #9353 |
||
|
|
abd4e83baa |
fix(cli): add timing.started ISO timestamp to plan prompt JSON envelope
- Capture started_at timestamp using datetime.now(UTC) before service call - Add timing.started field to JSON envelope with ISO 8601 format - Update step definitions to verify timing.started is present and valid - Remove @tdd_expected_fail tag from plan_prompt_command.feature scenario Fixes #9353 |
||
|
|
73c7722c8c |
Merge pull request 'docs(timeline): [AUTO-TIME-1] Day 104 supervisor cycle 1 — milestone status refresh' (#9349) from timeline/day-104-2026-04-14-auto-time-1 into master
CI / build (push) Successful in 37s
CI / lint (push) Successful in 47s
CI / push-validation (push) Successful in 23s
CI / quality (push) Successful in 50s
CI / helm (push) Successful in 33s
CI / typecheck (push) Successful in 1m19s
CI / security (push) Successful in 1m19s
CI / e2e_tests (push) Successful in 50s
CI / unit_tests (push) Successful in 4m36s
CI / docker (push) Successful in 1m43s
CI / integration_tests (push) Successful in 8m9s
CI / coverage (push) Successful in 8m29s
CI / status-check (push) Successful in 3s
CI / benchmark-regression (push) Has been cancelled
CI / benchmark-publish (push) Has been cancelled
|
||
|
|
07b31b99dc |
fix(benchmarks): import CloudSandboxStrategy from cloud_aws module
CI / lint (pull_request) Successful in 38s
CI / helm (pull_request) Successful in 30s
CI / push-validation (pull_request) Successful in 28s
CI / build (pull_request) Successful in 51s
CI / typecheck (pull_request) Successful in 1m13s
CI / quality (pull_request) Successful in 1m15s
CI / security (pull_request) Successful in 1m24s
CI / unit_tests (pull_request) Successful in 5m15s
CI / docker (pull_request) Successful in 1m44s
CI / integration_tests (pull_request) Successful in 9m57s
CI / coverage (pull_request) Successful in 8m29s
CI / status-check (pull_request) Successful in 3s
The benchmark suite was trying to import CloudSandboxStrategy from the cloud handler, but it's only defined in cloud_aws. Update the benchmark to import directly from cloud_aws where the class is defined. This fixes the CI / benchmark-publish ImportError. |
||
|
|
b55eff834b |
fix(benchmarks): import CloudSandboxStrategy from cloud_aws module
The benchmark suite was trying to import CloudSandboxStrategy from the cloud handler, but it's only defined in cloud_aws. Update the benchmark to import directly from cloud_aws where the class is defined. This fixes the CI / benchmark-publish ImportError. |
||
|
|
bb0d459a86 |
fix(resource): export CloudSandboxStrategy from cloud handler module
The benchmark suite imports CloudSandboxStrategy from the cloud handler, but it was only defined in cloud_aws.py and not re-exported. Add the import, export list, and ensure proper import ordering. Fixes CI / benchmark-publish import error. |
||
|
|
e0ee573a1d |
fix(resource): export CloudSandboxStrategy from cloud handler module
The benchmark suite imports CloudSandboxStrategy from the cloud handler, but it was only defined in cloud_aws.py and not re-exported. Add the import and export so benchmarks can import it from the canonical location. Fixes CI / benchmark-publish import error. |
||
|
|
1b8554fe36 |
Merge pull request 'docs(timeline): Day 97 schedule adherence update (2026-04-08)' (#4663) from docs/timeline-day-97 into master
CI / helm (push) Successful in 37s
CI / lint (push) Successful in 52s
CI / build (push) Successful in 49s
CI / quality (push) Successful in 57s
CI / push-validation (push) Successful in 37s
CI / typecheck (push) Successful in 1m11s
CI / security (push) Successful in 1m15s
CI / e2e_tests (push) Successful in 1m3s
CI / benchmark-regression (push) Has started running
CI / benchmark-publish (push) Has started running
CI / unit_tests (push) Successful in 6m7s
CI / integration_tests (push) Successful in 8m23s
CI / docker (push) Successful in 1m41s
CI / coverage (push) Failing after 8m55s
CI / status-check (push) Failing after 5s
|
||
|
|
639c188518 |
fix(benchmarks): import CloudSandboxStrategy from cloud_aws; guard empty base_ref in benchmark-regression workflow
CI / push-validation (pull_request) Successful in 25s
CI / lint (pull_request) Successful in 45s
CI / quality (pull_request) Successful in 47s
CI / helm (pull_request) Successful in 49s
CI / build (pull_request) Successful in 50s
CI / typecheck (pull_request) Successful in 1m5s
CI / security (pull_request) Successful in 1m9s
CI / unit_tests (pull_request) Successful in 4m27s
CI / docker (pull_request) Successful in 1m28s
CI / integration_tests (pull_request) Successful in 9m16s
CI / coverage (pull_request) Successful in 11m38s
CI / status-check (pull_request) Successful in 3s
CloudSandboxStrategy is defined in cloud_aws.py, not cloud.py. The benchmark was importing it from the wrong module, causing an ImportError during benchmark discovery. The benchmark-regression CI job's "Compute base commit" step used forgejo.base_ref which is empty for push events, causing `git merge-base HEAD "origin/"` to fail with exit 128. Add a guard that falls back to HEAD~1 when base_ref is unset. |
||
|
|
7ca74bd8b3 |
Merge pull request 'chore(agents): improve pr-self-reviewer — add blocking vs non-blocking severity classification' (#5301) from improvement/agent-pr-self-reviewer-blocking-vs-nonblocking into master
CI / lint (push) Successful in 32s
CI / push-validation (push) Successful in 27s
CI / build (push) Successful in 36s
CI / quality (push) Successful in 49s
CI / helm (push) Successful in 47s
CI / typecheck (push) Successful in 1m8s
CI / e2e_tests (push) Successful in 1m3s
CI / security (push) Successful in 1m10s
CI / benchmark-regression (push) Failing after 37s
CI / benchmark-publish (push) Failing after 1m45s
CI / unit_tests (push) Successful in 4m53s
CI / docker (push) Successful in 1m46s
CI / integration_tests (push) Successful in 9m13s
CI / coverage (push) Successful in 9m28s
CI / status-check (push) Successful in 3s
|
||
|
|
8eebe5734f |
chore(agents): improve pr-self-reviewer — add blocking vs non-blocking severity classification
CI / lint (pull_request) Successful in 38s
CI / quality (pull_request) Successful in 1m1s
CI / typecheck (pull_request) Successful in 1m12s
CI / security (pull_request) Successful in 1m25s
CI / helm (pull_request) Successful in 30s
CI / build (pull_request) Successful in 38s
CI / push-validation (pull_request) Successful in 40s
CI / unit_tests (pull_request) Successful in 5m36s
CI / docker (pull_request) Successful in 1m37s
CI / integration_tests (pull_request) Successful in 9m30s
CI / coverage (pull_request) Successful in 9m33s
CI / status-check (pull_request) Successful in 3s
|
||
|
|
3eb49e4afe |
chore(agents): improve pr-self-reviewer — add blocking vs non-blocking severity classification
Approved proposal: #4506 Pattern: prompt_improvement Evidence: 100% REQUEST_CHANGES rate across 20+ PR reviews — zero APPROVEs. All issues treated equally regardless of severity (missing metadata = security bug). Fix: Add severity classification section distinguishing BLOCKING issues (code correctness, security, spec violations, forbidden patterns) from NON-BLOCKING issues (missing PR metadata, minor style, merge conflicts). Decision rule: REQUEST_CHANGES only if BLOCKING issues exist; APPROVE with comments if only NON-BLOCKING issues. ISSUES CLOSED: #4506 |
||
|
|
b5dbb64cfc |
Merge pull request 'fix(agent): prune completed tasks from Agent._tasks to prevent unbounded growth' (#9225) from fix/agent-task-list-memory-leak into master
CI / push-validation (push) Successful in 27s
CI / build (push) Successful in 44s
CI / lint (push) Successful in 45s
CI / helm (push) Successful in 49s
CI / quality (push) Successful in 53s
CI / typecheck (push) Successful in 1m5s
CI / e2e_tests (push) Successful in 1m0s
CI / security (push) Successful in 1m14s
CI / benchmark-regression (push) Failing after 41s
CI / benchmark-publish (push) Failing after 1m48s
CI / unit_tests (push) Successful in 5m19s
CI / integration_tests (push) Successful in 8m45s
CI / docker (push) Successful in 1m28s
CI / lint (pull_request) Successful in 33s
CI / build (pull_request) Successful in 35s
CI / helm (pull_request) Successful in 33s
CI / quality (pull_request) Successful in 52s
CI / push-validation (pull_request) Successful in 33s
CI / typecheck (pull_request) Successful in 1m13s
CI / security (pull_request) Successful in 1m16s
CI / unit_tests (pull_request) Successful in 4m53s
CI / docker (pull_request) Successful in 1m49s
CI / coverage (push) Successful in 11m59s
CI / status-check (push) Successful in 4s
CI / integration_tests (pull_request) Successful in 9m37s
CI / coverage (pull_request) Successful in 9m29s
CI / status-check (pull_request) Successful in 3s
|
||
|
|
c86db5afa9 |
style: ruff format fix for agent_task_memory_leak_fix_steps.py
CI / lint (pull_request) Successful in 41s
CI / helm (pull_request) Successful in 35s
CI / build (pull_request) Successful in 40s
CI / typecheck (pull_request) Successful in 1m0s
CI / quality (pull_request) Successful in 1m6s
CI / security (pull_request) Successful in 1m17s
CI / push-validation (pull_request) Successful in 24s
CI / unit_tests (pull_request) Successful in 4m53s
CI / docker (pull_request) Successful in 1m46s
CI / integration_tests (pull_request) Successful in 8m23s
CI / coverage (pull_request) Successful in 10m17s
CI / status-check (pull_request) Successful in 2s
Add blank line after docstring in step_basic_agent_setup to satisfy ruff format check. |
||
|
|
bb3ce1586b |
fix(agent): fix BDD test coordination and add CONTRIBUTORS entry
Fix the failing unit tests in agent_task_memory_leak_fix.feature by
replacing the broken event loop management with a persistent background
asyncio event loop running in a daemon thread. The original implementation
called asyncio.create_task() from synchronous Behave step code, which
requires a running event loop — causing RuntimeError: no running event loop.
The fix introduces a _BackgroundLoop class that keeps a dedicated asyncio
event loop alive in a background thread. All agent instantiation and
message sending now happens via asyncio.run_coroutine_threadsafe(), ensuring
the event loop is always running when asyncio.create_task() is called.
Also adds the missing step definition for 'I send {count:d} messages to
the agent' (without 'in rapid succession') to match the feature file.
Updates CONTRIBUTORS.md with the agent task memory leak fix contribution.
ISSUES CLOSED: #9044
|
||
|
|
9dd2ebb3f2 |
fix(agent): prune completed tasks from Agent._tasks to prevent unbounded growth
This fix addresses issue #9044 by adding a done callback to each asyncio.Task created in the Agent._setup_processing_pipeline method. The callback removes the task from the _tasks set upon completion, preventing unbounded memory growth in long-lived agent instances. The fix uses task.add_done_callback(self._tasks.discard) to ensure that completed tasks are promptly removed from the set, allowing them to be garbage collected. Using set.discard is safe as it never raises ValueError on double-removal. ISSUES CLOSED: #9044 |
||
|
|
7034a1dd53 |
Merge pull request '[AUTO-ARCH-14] docs(spec): clarify Anonymous Tool enforcement rules in glossary' (#9241) from auto-arch-14/spec-anonymous-tool-enforcement into master
CI / lint (push) Successful in 31s
CI / quality (push) Successful in 44s
CI / helm (push) Successful in 37s
CI / build (push) Successful in 41s
CI / push-validation (push) Successful in 31s
CI / typecheck (push) Successful in 1m16s
CI / security (push) Successful in 1m16s
CI / e2e_tests (push) Successful in 1m10s
CI / benchmark-regression (push) Failing after 38s
CI / benchmark-publish (push) Failing after 1m49s
CI / unit_tests (push) Successful in 5m27s
CI / docker (push) Successful in 1m41s
CI / integration_tests (push) Successful in 9m13s
CI / coverage (push) Successful in 11m34s
CI / status-check (push) Successful in 3s
CI / status-check (pull_request) Successful in 3s
CI / lint (pull_request) Successful in 45s
CI / push-validation (pull_request) Successful in 26s
CI / security (pull_request) Successful in 1m22s
CI / unit_tests (pull_request) Successful in 5m29s
CI / helm (pull_request) Successful in 40s
CI / build (pull_request) Successful in 45s
CI / typecheck (pull_request) Successful in 1m13s
CI / quality (pull_request) Successful in 1m16s
CI / integration_tests (pull_request) Successful in 9m15s
CI / docker (pull_request) Successful in 1m39s
CI / coverage (pull_request) Successful in 10m34s
|
||
|
|
c06f26e6fa |
chore: worker ruff auto-fix (pre-push lint gate)
CI / push-validation (pull_request) Successful in 29s
CI / helm (pull_request) Successful in 33s
CI / lint (pull_request) Successful in 48s
CI / build (pull_request) Successful in 46s
CI / quality (pull_request) Successful in 1m4s
CI / typecheck (pull_request) Successful in 1m6s
CI / security (pull_request) Successful in 1m19s
CI / unit_tests (pull_request) Successful in 5m5s
CI / docker (pull_request) Successful in 1m36s
CI / integration_tests (pull_request) Successful in 8m39s
CI / coverage (pull_request) Successful in 8m29s
CI / status-check (pull_request) Successful in 2s
|
||
|
|
37e7fb4612 |
fix(plan): NamespacedName digit-start validation BDD scenarios
Remove @tdd_expected_fail tags from the 3 NamespacedName validation scenarios and fix step mismatch that caused 2 constructor scenarios to fail. Constructor scenarios now use the existing "a Pydantic ValidationError should be raised" step (context_strategy_registry_steps) which correctly checks pydantic.ValidationError instead of the project's cleveragents.core.exceptions.ValidationError. Also remove the duplicate @then step accidentally left in plan_namespaced_name_tdd_steps.py (would have caused NameError since the `then` import was already removed). ISSUES CLOSED: #2145, #2147, #8799 |
||
|
|
2c5076840e |
fix(plan): apply ruff format to plan.py — fix CI lint failure
Reformats the NamespacedName validator error messages in plan.py to comply with ruff format style (single-line f-strings instead of multi-line parenthesized form). ISSUES CLOSED: #8799 |
||
|
|
b31d52fe0e |
docs(spec): clarify Anonymous Tool enforcement rules in glossary
Expands the Anonymous Tool glossary entry to explicitly document: - Anonymous tools are never passed to ToolRegistry.register() - Name field is required but context-local (no namespace prefix) - Attempting global registration raises ToolError - Namespacing requirement applies only to registered tools Closes #8799. [AUTO-ARCH-14] |
||
|
|
a3be769e72 |
Merge pull request 'fix(a2a): add input validation for optional parameters in facade handlers' (#9253) from fix/a2a-facade-optional-param-validation into master
CI / push-validation (push) Successful in 24s
CI / build (push) Successful in 37s
CI / helm (push) Successful in 44s
CI / quality (push) Successful in 45s
CI / lint (push) Successful in 56s
CI / typecheck (push) Successful in 58s
CI / e2e_tests (push) Successful in 1m0s
CI / security (push) Successful in 1m8s
CI / benchmark-regression (push) Failing after 40s
CI / benchmark-publish (push) Failing after 1m36s
CI / unit_tests (push) Successful in 4m7s
CI / docker (push) Successful in 1m47s
CI / integration_tests (push) Successful in 7m45s
CI / coverage (push) Successful in 8m31s
CI / status-check (push) Successful in 3s
|
||
|
|
e86a2a2c38 |
fix(a2a): format step definitions file
CI / quality (pull_request) Successful in 44s
CI / helm (pull_request) Successful in 37s
CI / build (pull_request) Successful in 38s
CI / lint (pull_request) Successful in 53s
CI / typecheck (pull_request) Successful in 1m1s
CI / push-validation (pull_request) Successful in 23s
CI / security (pull_request) Successful in 1m24s
CI / unit_tests (pull_request) Successful in 5m20s
CI / docker (pull_request) Successful in 1m48s
CI / integration_tests (pull_request) Successful in 7m52s
CI / coverage (pull_request) Successful in 9m49s
CI / status-check (pull_request) Successful in 3s
|
||
|
|
893debfeaf |
fix(a2a): add input validation for optional parameters in facade handlers
- Added input validation for namespace parameter in _handle_registry_list_tools in src/cleveragents/a2a/facade.py: If provided, must be a non-empty string; empty strings raise ValueError; non-string types raise TypeError - Added input validation for type_name parameter in _handle_registry_list_resources in src/cleveragents/a2a/facade.py: If provided, must be a non-empty string; empty strings raise ValueError; non-string types raise TypeError - Added input validation for arguments parameter in _handle_plan_create in src/cleveragents/a2a/facade.py: If provided, must be a dict; non-dict types raise TypeError - Added input validation for created_by parameter in _handle_plan_create in src/cleveragents/a2a/facade.py: If provided, must be a non-empty string; empty strings raise ValueError; non-string types raise TypeError - Added BDD feature file features/a2a_facade_optional_param_validation.feature with 17 scenarios covering all validation paths - Added step definitions features/steps/a2a_facade_optional_param_validation_steps.py ISSUES CLOSED: #9059 |
||
|
|
610ce0d51a |
Merge pull request 'docs(spec): document context_tier_hydrator module in ACMS architecture section' (#9208) from docs/reference-glossary into master
CI / lint (push) Successful in 35s
CI / quality (push) Successful in 48s
CI / build (push) Successful in 31s
CI / typecheck (push) Successful in 1m21s
CI / security (push) Successful in 1m21s
CI / push-validation (push) Successful in 36s
CI / helm (push) Successful in 39s
CI / e2e_tests (push) Successful in 48s
CI / benchmark-regression (push) Failing after 40s
CI / benchmark-publish (push) Failing after 1m35s
CI / unit_tests (push) Successful in 4m35s
CI / docker (push) Successful in 1m33s
CI / integration_tests (push) Successful in 8m20s
CI / coverage (push) Successful in 9m42s
CI / status-check (push) Successful in 3s
|
||
|
|
a3a0bd60f8 |
chore: re-trigger CI [controller]
CI / helm (pull_request) Successful in 29s
CI / push-validation (pull_request) Successful in 28s
CI / lint (pull_request) Successful in 41s
CI / build (pull_request) Successful in 41s
CI / quality (pull_request) Successful in 46s
CI / typecheck (pull_request) Successful in 1m7s
CI / security (pull_request) Successful in 1m24s
CI / unit_tests (pull_request) Successful in 5m12s
CI / docker (pull_request) Successful in 1m26s
CI / integration_tests (pull_request) Successful in 7m48s
CI / coverage (pull_request) Successful in 9m47s
CI / status-check (pull_request) Successful in 3s
|
||
|
|
7ba1e5737f |
docs(spec): document context_tier_hydrator module in ACMS architecture section
Adds Context Tier Hydration subsection to the ACMS Architecture section of the specification, documenting the context_tier_hydrator module's public interface (hydrate_tiers_for_plan, hydrate_tiers_from_project), file listing strategy (git ls-files for git-checkout resources, os.walk fallback), budget limits (256 KB per file, 10 MB total per project), and fragment structure (TieredFragment with ContextTier.HOT placement, metadata keys path/detail_depth/relevance_score). Also updates CHANGELOG.md under [Unreleased] > Documentation and adds contribution entry to CONTRIBUTORS.md. ISSUES CLOSED: #6175 |
||
|
|
70b064e877 |
Merge pull request 'fix(domain): correct invariant precedence chain to include action scope' (#9240) from fix/invariant-precedence-chain-action-scope into master
CI / lint (push) Successful in 39s
CI / helm (push) Successful in 32s
CI / push-validation (push) Successful in 26s
CI / build (push) Successful in 50s
CI / quality (push) Successful in 53s
CI / typecheck (push) Successful in 1m25s
CI / security (push) Successful in 1m25s
CI / e2e_tests (push) Successful in 55s
CI / benchmark-regression (push) Failing after 41s
CI / benchmark-publish (push) Failing after 1m50s
CI / unit_tests (push) Successful in 5m28s
CI / docker (push) Successful in 1m34s
CI / integration_tests (push) Successful in 8m11s
CI / coverage (push) Successful in 8m34s
CI / status-check (push) Successful in 3s
|
||
|
|
7b008193d6 |
fix(domain): correct invariant precedence chain to include action scope
CI / lint (pull_request) Successful in 41s
CI / typecheck (pull_request) Successful in 1m5s
CI / quality (pull_request) Successful in 1m2s
CI / security (pull_request) Successful in 1m12s
CI / build (pull_request) Successful in 35s
CI / helm (pull_request) Successful in 29s
CI / push-validation (pull_request) Successful in 24s
CI / unit_tests (pull_request) Successful in 5m7s
CI / docker (pull_request) Successful in 1m38s
CI / integration_tests (pull_request) Successful in 9m1s
CI / coverage (pull_request) Successful in 10m38s
CI / status-check (pull_request) Successful in 3s
The invariant precedence chain is four-tier per specification §92: plan > action > project > global This fix updates: 1. Module docstring in invariant.py to document the correct four-tier precedence 2. InvariantScope class docstring to reflect PLAN > ACTION > PROJECT > GLOBAL 3. merge_invariants() function to accept action_invariants parameter 4. InvariantSet.merge() class method to accept and pass action_invariants 5. InvariantService.get_effective_invariants() to collect and pass action invariants 6. BDD test steps to include action invariants in merge operations 7. Benchmark suite to include action invariants in performance tests 8. Robot Framework helper to pass action_invariants to merge functions 9. CHANGELOG.md entry under [Unreleased]/### Fixed section 10. CONTRIBUTORS.md entry documenting HAL 9000 contribution All docstrings now correctly document the four-tier precedence chain, and the merge logic properly handles action-scope invariants between plan and project scopes. ISSUES CLOSED: #9003 |
||
|
|
8cbd4ee2a8 |
Merge pull request 'refactor(agent): replace hardcoded dependency and context file limits with configurable parameters' (#9246) from refactor/agent-configurable-limits-context-analysis-plan-generation into master
CI / push-validation (push) Successful in 27s
CI / build (push) Successful in 38s
CI / lint (push) Successful in 45s
CI / helm (push) Successful in 44s
CI / quality (push) Successful in 46s
CI / typecheck (push) Successful in 1m2s
CI / e2e_tests (push) Successful in 1m1s
CI / security (push) Successful in 1m17s
CI / benchmark-regression (push) Failing after 41s
CI / benchmark-publish (push) Failing after 1m50s
CI / unit_tests (push) Successful in 4m23s
CI / docker (push) Successful in 1m52s
CI / integration_tests (push) Failing after 8m39s
CI / coverage (push) Successful in 10m2s
CI / status-check (push) Failing after 3s
|
||
|
|
e9e2deb090 |
refactor(agent): replace hardcoded dependency and context file limits with configurable parameters
CI / lint (pull_request) Successful in 40s
CI / typecheck (pull_request) Successful in 1m8s
CI / quality (pull_request) Successful in 1m0s
CI / security (pull_request) Successful in 1m21s
CI / push-validation (pull_request) Successful in 27s
CI / helm (pull_request) Successful in 30s
CI / build (pull_request) Successful in 37s
CI / unit_tests (pull_request) Successful in 4m10s
CI / docker (pull_request) Successful in 1m43s
CI / integration_tests (pull_request) Successful in 8m36s
CI / coverage (pull_request) Successful in 13m31s
CI / status-check (pull_request) Successful in 3s
author CleverThis <hal9000@cleverthis.com> 1776170939 +0000 committer CleverThis <hal9000@cleverthis.com> 1776170939 +0000 refactor(agent): replace hardcoded dependency and context file limits with configurable parameters Implemented configurable limits for the agent and graph components: - ContextAnalysisAgent now accepts max_dependencies: int = 10 with validation (ValueError if <= 0) - _parse_dependencies uses self.max_dependencies instead of a hard-coded 10 - PlanGenerationGraph now accepts max_context_files: int = 5 with validation (ValueError if <= 0) - _format_context_summary uses self.max_context_files instead of a hard-coded 5 - Updated class docstrings to reflect new parameters - Added Behave feature file at features/agent_configurable_limits.feature with 12 scenarios - Added step definitions at features/steps/agent_configurable_limits_steps.py ISSUES CLOSED: #9050 |
||
|
|
303e1c99e5 |
Merge pull request 'feat(decisions): verify agents plan tree CLI command implementation' (#8691) from feat/v3.2.0-plan-tree-cli into master
CI / push-validation (push) Successful in 26s
CI / lint (push) Successful in 37s
CI / build (push) Successful in 35s
CI / helm (push) Successful in 58s
CI / quality (push) Successful in 1m6s
CI / security (push) Successful in 1m6s
CI / typecheck (push) Successful in 1m10s
CI / e2e_tests (push) Successful in 1m16s
CI / benchmark-regression (push) Failing after 41s
CI / benchmark-publish (push) Failing after 1m51s
CI / unit_tests (push) Successful in 4m41s
CI / docker (push) Successful in 1m52s
CI / integration_tests (push) Successful in 9m44s
CI / coverage (push) Successful in 9m48s
CI / status-check (push) Successful in 3s
|
||
|
|
5947732295 |
chore: re-trigger CI [controller]
CI / push-validation (pull_request) Successful in 31s
CI / helm (pull_request) Successful in 40s
CI / build (pull_request) Successful in 42s
CI / lint (pull_request) Successful in 1m4s
CI / quality (pull_request) Successful in 1m3s
CI / typecheck (pull_request) Successful in 1m6s
CI / security (pull_request) Successful in 1m20s
CI / unit_tests (pull_request) Successful in 4m36s
CI / docker (pull_request) Successful in 1m46s
CI / integration_tests (pull_request) Successful in 9m28s
CI / coverage (pull_request) Successful in 9m51s
CI / status-check (pull_request) Successful in 3s
|
||
|
|
5282c7bebf |
fix(decisions): add error handling, ULID validation, and CHANGELOG entry to plan tree command
- Remove redundant local import of get_container (already imported at module level) - Add _validate_plan_ulid() call before querying decision service for actionable error messages - Wrap service calls in try/except catching ValidationError, PlanError, CleverAgentsError - Add CHANGELOG.md entry for agents plan tree command (#8525) ISSUES CLOSED: #8525 |
||
|
|
0153905c87 |
Merge pull request 'feat(resource): add --clone-into to container-instance and fix devcontainer-instance sandbox strategy' (#8304) from feat/m6/devcontainer-clone-into-sandbox into master
CI / lint (push) Successful in 47s
CI / typecheck (push) Successful in 1m11s
CI / quality (push) Successful in 48s
CI / security (push) Successful in 1m7s
CI / helm (push) Successful in 38s
CI / build (push) Successful in 50s
CI / push-validation (push) Successful in 40s
CI / benchmark-regression (push) Failing after 39s
CI / e2e_tests (push) Successful in 54s
CI / benchmark-publish (push) Failing after 2m2s
CI / unit_tests (push) Successful in 4m48s
CI / docker (push) Successful in 1m45s
CI / integration_tests (push) Successful in 11m7s
CI / coverage (push) Successful in 9m45s
CI / status-check (push) Successful in 3s
|
||
|
|
93f6cc703c |
fix(tests): use valid ULID and classification in clone-into step fixture
CI / push-validation (pull_request) Successful in 29s
CI / helm (pull_request) Successful in 42s
CI / lint (pull_request) Successful in 50s
CI / build (pull_request) Successful in 52s
CI / quality (pull_request) Successful in 53s
CI / typecheck (pull_request) Successful in 58s
CI / security (pull_request) Successful in 1m32s
CI / unit_tests (pull_request) Successful in 6m15s
CI / docker (pull_request) Successful in 1m38s
CI / integration_tests (pull_request) Successful in 10m5s
CI / coverage (pull_request) Successful in 12m43s
CI / status-check (pull_request) Successful in 3s
Resource Pydantic model requires resource_id to match the ULID pattern
^[0-9A-HJKMNP-TV-Z]{26}$ and classification to be 'physical' or
'virtual'. The test fixture used '01HANDLER0000000000000001' (invalid
ULID) and 'tool' (invalid enum), causing a ValidationError during
scenario setup that Behave reported as a traceback outside scenario.
Fixes the errored scenario in features/container_clone_into.feature:88.
ISSUES CLOSED: #7555
|
||
|
|
d384cebc9d |
fix(resource): update stale DETECTED→DISCOVERED scenario title in protocol methods
The devcontainer_handler_protocol_methods.feature file and its step definitions still referenced the old ContainerLifecycleState.DETECTED terminology. Update to DISCOVERED for consistency with specification. ISSUES CLOSED: #7555 |
||
|
|
fa215f86c6 |
fix(resource): move inline imports to top and remove redundant import
Addresses remaining CI review feedback from HAL9001 on PR #8304: 1. Moved all cleveragents imports from inside function bodies to module-level in features/steps/container_clone_into_steps.py (5 functions fixed) 2. Moved BUILTIN_TYPES import from inside step_look_up_in_builtin_types() to module level in features/steps/devcontainer_sandbox_strategy_steps.py 3. Removed redundant inline import of EMPTY_CONTENT_HASH and BaseResourceHandler inside diff() method of devcontainer.py (already available at module level) 4. Fixed stale docstring referencing old 'detected' terminology in robot/helper_devcontainer_lifecycle.py cmd_transition_valid() All files pass ruff format and ruff check. |
||
|
|
750148360e | ci: retrigger CI after infrastructure failure (attempt 2) |