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
## 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>
184 lines
9.1 KiB
Gherkin
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
|