Files
cleveragents-core/features/context_cli_wiring.feature
T
hurui200320 2005b8ef82
CI / push-validation (push) Successful in 18s
CI / build (push) Successful in 19s
CI / helm (push) Successful in 24s
CI / lint (push) Successful in 29s
CI / security (push) Successful in 1m11s
CI / e2e_tests (push) Successful in 2m56s
CI / quality (push) Successful in 3m40s
CI / typecheck (push) Successful in 3m59s
CI / integration_tests (push) Successful in 4m3s
CI / unit_tests (push) Successful in 4m55s
CI / docker (push) Successful in 10s
CI / coverage (push) Successful in 10m44s
CI / status-check (push) Successful in 1s
CI / benchmark-regression (push) Has been skipped
CI / benchmark-publish (push) Successful in 1h13m28s
feat(tests): replace all @skip tags with proper @tdd_expected_fail tags or remove them across the entire codebase (#7221)
## Summary

Replaces all 234 bare `@skip` occurrences across 82 Behave feature files with the correct TDD issue-capture tagging system described in CONTRIBUTING.md § Bug Fix Workflow.

Previously, the noxfile ran Behave with `--tags=not @skip`, silently excluding all `@skip`-tagged scenarios from every CI run. These tests never ran, never inverted results via the `@tdd_expected_fail` mechanism, and never contributed to coverage — defeating the purpose of TDD issue-capture testing. Every `@skip` occurrence had a commented-out hint line immediately above it showing the intended proper tags (e.g., `# @tdd_issue @tdd_issue_4272 @tdd_expected_fail @skip`), confirming they were all intended for conversion.

## Changes

### Mechanical conversion (234 replacements across 82 files)
- Extracted the proper TDD tags from the comment hint above each `@skip` line, removed `@skip` from the tag set, and replaced the `@skip` line with those tags.
- Removed the now-redundant comment hint lines alongside each replacement.

### Bug-fixed scenarios — `@tdd_expected_fail` removed (84 scenarios)
- After conversion, ran `nox -s unit_tests` to identify which newly-enabled `@tdd_expected_fail` scenarios now **pass** (their referenced bugs have already been fixed). Removed `@tdd_expected_fail` from those 84 scenarios and their corresponding feature-level tags, leaving only the permanent `@tdd_issue @tdd_issue_<N>` regression-guard tags.
- Affected features include: `tdd_tool_runner_env_precedence`, `tdd_automation_profile_session_leak`, `tls_certificate_check`, `project_create_persist`, `resource_type_bootstrap_*`, and 18 others.

### Noxfile cleanup
- Removed all four `--tags=not @skip` arguments from `noxfile.py` (unit_tests and coverage sessions). With zero `@skip` tags remaining in the codebase, this filter was dead code and its presence would mislead future maintainers into thinking `@skip` is still a supported escape mechanism.

### Regression guard files
- Split the regression guards into two focused files:
  - `tdd_regression_guards_exec_env.feature` for bug #4281 (exec-env precedence)
  - `tdd_regression_guards_session_list.feature` for bug #4271 (session list summary)
- Each file carries only its own `@tdd_issue` tags at the feature level, avoiding cross-contamination via Behave tag inheritance. The `Background` step (`session-list-summary mock`) only appears in the session-list file where it is actually needed.

### Duplicate tag cleanup
- Removed duplicate `@tdd_issue @tdd_issue_4287` tag lines in `tdd_skill_add_regression.feature` (lines 20 and 29).

### Inline comment for retained `@tdd_expected_fail`
- Added inline comment in `ci_workflow_validation.feature:134` explaining why this specific #4227 scenario retains `@tdd_expected_fail` despite #4227 being closed (CI YAML does not encode threshold as a machine-readable value).

### Known edge cases — `@tdd_expected_fail` retained (closed issues, fix on master, scenarios still fail)
The following issues are **closed** and their fixes **are on master**, but the specific test assertions still fail because the fixes address other aspects of the bugs. The `@tdd_expected_fail` tags are functionally correct and must remain until the specific scenario assertions pass:
- `tdd_exec_env_resolution_precedence.feature` — bug #1080 (closed 2026-03-31). The precedence-level-2-vs-4 scenario still fails.
- `session_list_summary_dedup.feature` — bug #3046 (closed 2026-04-05). The dedup-consistency scenarios still fail.
- `actor_add_update_enforcement.feature` — bug #2609 (closed 2026-04-05). The enforcement scenarios still fail.
- `ci_workflow_validation.feature:134` — #4227 (closed 2026-04-08). The CI YAML threshold assertion still fails.

## Verification

- `grep -r "@skip" features/ --include="*.feature"` → **zero results** ✓
- `grep -n "tags=not @skip" noxfile.py` → **zero results** ✓
- `nox -s unit_tests` → **629 features passed, 0 failed** ✓ (up from ~545 before this PR)
- CI all green (coverage ≥ 97%) ✓
- Integration tests (Robot Framework) do not use `@skip` — confirmed no action needed ✓
- E2E tests (Robot Framework) do not use `@skip` — confirmed no action needed ✓
- `CHANGELOG.md` updated with entry for this change ✓
- `CONTRIBUTORS.md` — Rui Hu already listed ✓

## Issues Addressed

Closes #7025

Co-authored-by: CleverThis <hal9000@cleverthis.com>
Reviewed-on: #7221
Reviewed-by: HAL 9000 <HAL9000@cleverthis.com>
Reviewed-by: HAL9001 <hal9001@cleverthis.com>
Co-authored-by: Rui Hu <rui.hu@cleverthis.com>
Co-committed-by: Rui Hu <rui.hu@cleverthis.com>
2026-04-13 04:56:01 +00:00

184 lines
9.1 KiB
Gherkin

Feature: Context CLI ACMS pipeline wiring (B2.cli)
As a CleverAgents user
I want context inspect and simulate commands wired to the ACMS pipeline
So that I can examine tier state and dry-run context assembly
Background:
Given a context wiring in-memory database is initialized
And a project "local/wire-app" exists for context wiring
# ── context set with ACMS options ──────────────────────────
Scenario: Set ACMS hot_max_tokens option
When I run wired context set on "local/wire-app" with hot-max-tokens 4000
Then the wired context set command should succeed
And the stored ACMS config hot_max_tokens should be 4000
Scenario: Set ACMS warm_max_decisions option
When I run wired context set on "local/wire-app" with warm-max-decisions 200
Then the wired context set command should succeed
And the stored ACMS config warm_max_decisions should be 200
Scenario: Set ACMS cold_max_decisions option
When I run wired context set on "local/wire-app" with cold-max-decisions 3000
Then the wired context set command should succeed
And the stored ACMS config cold_max_decisions should be 3000
Scenario: Set ACMS temporal_scope option
When I run wired context set on "local/wire-app" with temporal-scope "recent"
Then the wired context set command should succeed
And the stored ACMS config temporal_scope should be "recent"
Scenario: Set invalid temporal_scope fails
When I run wired context set on "local/wire-app" with temporal-scope "invalid"
Then the wired context set command should fail
Scenario: Set ACMS auto-refresh off
When I run wired context set on "local/wire-app" with no-auto-refresh
Then the wired context set command should succeed
And the stored ACMS config auto_refresh should be false
Scenario: Set ACMS summarize off
When I run wired context set on "local/wire-app" with no-summarize
Then the wired context set command should succeed
And the stored ACMS config summarize should be false
Scenario: Set ACMS strategy option
When I run wired context set on "local/wire-app" with strategy "breadth_first"
Then the wired context set command should succeed
And the stored ACMS config strategies should contain "breadth_first"
Scenario: Set ACMS skeleton_ratio option
When I run wired context set on "local/wire-app" with skeleton-ratio 0.5
Then the wired context set command should succeed
And the stored ACMS config skeleton_ratio should be 0.5
Scenario: Set ACMS default_breadth option
When I run wired context set on "local/wire-app" with default-breadth 5
Then the wired context set command should succeed
And the stored ACMS config default_breadth should be 5
Scenario: Set ACMS default_depth option
When I run wired context set on "local/wire-app" with default-depth 7
Then the wired context set command should succeed
And the stored ACMS config default_depth should be 7
Scenario: Set ACMS query_limit option
When I run wired context set on "local/wire-app" with query-limit 50
Then the wired context set command should succeed
And the stored ACMS config query_limit should be 50
Scenario: Set ACMS summary_max_tokens option
When I run wired context set on "local/wire-app" with summary-max-tokens 2000
Then the wired context set command should succeed
And the stored ACMS config summary_max_tokens should be 2000
# ── context show with ACMS config ──────────────────────────
@tdd_issue @tdd_issue_4244 @tdd_expected_fail
Scenario: Show displays ACMS pipeline config
Given I have set ACMS config on "local/wire-app" with hot-max-tokens 6000
When I run wired context show on "local/wire-app" with format "json"
Then the wired context show command should succeed
And the wired output should be valid JSON
And the wired JSON output should contain key "acms_config"
@tdd_issue @tdd_issue_4244 @tdd_expected_fail
Scenario: Show with view displays ACMS config
Given I have set ACMS config on "local/wire-app" with hot-max-tokens 6000
When I run wired context show on "local/wire-app" with view "default" and format "json"
Then the wired context show command should succeed
And the wired output should be valid JSON
And the wired JSON output should contain key "acms_config"
# ── context inspect wired to tier service ──────────────────
Scenario: Inspect returns tier metrics with no fragments
When I run wired inspect for project "local/wire-app" using defaults
Then the wired context inspect command should succeed
@tdd_issue @tdd_issue_4244 @tdd_expected_fail
Scenario: Inspect with JSON format returns valid JSON
When I run wired inspect for project "local/wire-app" using format "json"
Then the wired context inspect command should succeed
And the wired output should be valid JSON
And the wired JSON output should contain key "tier_metrics"
And the wired JSON output should contain key "project_fragments"
And the wired JSON output should contain key "actor_visibility"
@tdd_issue @tdd_issue_4244 @tdd_expected_fail
Scenario: Inspect with pre-populated fragments shows counts
Given the tier service has a hot fragment "frag-1" for project "local/wire-app"
And the tier service has a warm fragment "frag-2" for project "local/wire-app"
When I run wired inspect for project "local/wire-app" using format "json"
Then the wired context inspect command should succeed
And the wired JSON project_fragments total should be 2
@tdd_issue @tdd_issue_4244 @tdd_expected_fail
Scenario: Inspect shows project-scoped tier metrics not global counts
Given the tier service has a hot fragment "scoped-a" for project "local/wire-app"
And the tier service has a hot fragment "other-b" for project "local/other-proj"
When I run wired inspect for project "local/wire-app" using format "json"
Then the wired context inspect command should succeed
And the wired JSON tier_metrics hot_count should be 1
Scenario: Inspect on nonexistent project fails
When I run wired inspect for project "local/no-such" using defaults
Then the wired context inspect command should fail
Scenario: Inspect with invalid view fails
When I run wired inspect for project "local/wire-app" using view "bogus"
Then the wired context inspect command should fail
# ── context simulate wired to tier service ─────────────────
Scenario: Simulate returns assembly result with no fragments
When I run wired simulate for project "local/wire-app" using defaults
Then the wired context simulate command should succeed
@tdd_issue @tdd_issue_4244 @tdd_expected_fail
Scenario: Simulate with JSON format returns valid JSON
When I run wired simulate for project "local/wire-app" using format "json"
Then the wired context simulate command should succeed
And the wired output should be valid JSON
And the wired JSON output should contain key "total_tokens"
And the wired JSON output should contain key "budget_used"
And the wired JSON output should contain key "strategies_used"
And the wired JSON output should contain key "context_hash"
Scenario: Simulate with budget override
When I run wired simulate for project "local/wire-app" using budget 2000
Then the wired context simulate command should succeed
@tdd_issue @tdd_issue_4244 @tdd_expected_fail
Scenario: Simulate with pre-populated fragments assembles them
Given the tier service has a hot fragment "sim-1" for project "local/wire-app" sized at 100 tokens
When I run wired simulate for project "local/wire-app" using format "json"
Then the wired context simulate command should succeed
And the wired JSON total_tokens should be greater than 0
Scenario: Simulate on nonexistent project fails
When I run wired simulate for project "local/no-such" using defaults
Then the wired context simulate command should fail
Scenario: Simulate with invalid view fails
When I run wired simulate for project "local/wire-app" using view "bogus"
Then the wired context simulate command should fail
Scenario: Simulate with strategy hint
When I run wired simulate for project "local/wire-app" using strategy "breadth_first"
Then the wired context simulate command should succeed
@tdd_issue @tdd_issue_4244 @tdd_expected_fail
Scenario: Simulate with focus filters fragments by resource URI
Given a focused hot fragment "foc-1" with resource "uko:file/main.py" and 100 tokens exists for project "local/wire-app"
And a focused hot fragment "foc-2" with resource "uko:file/test.py" and 80 tokens exists for project "local/wire-app"
When I run wired simulate for project "local/wire-app" focusing on "uko:file/main.py" in format "json"
Then the wired context simulate command should succeed
And the wired JSON fragment_count should be 1
And the wired JSON total_tokens should be 100
Scenario: Simulate with view option
When I run wired simulate for project "local/wire-app" using view "strategize"
Then the wired context simulate command should succeed