ff42d59d6d
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 14s
CI / build (pull_request) Successful in 17s
CI / quality (pull_request) Successful in 19s
CI / security (pull_request) Successful in 32s
CI / typecheck (pull_request) Successful in 33s
CI / unit_tests (pull_request) Successful in 2m22s
CI / integration_tests (pull_request) Successful in 2m52s
CI / docker (pull_request) Successful in 39s
CI / coverage (pull_request) Successful in 4m13s
CI / lint (push) Successful in 13s
CI / build (push) Successful in 15s
CI / quality (push) Successful in 16s
CI / security (push) Successful in 31s
CI / typecheck (push) Successful in 32s
CI / benchmark-regression (push) Has been skipped
CI / unit_tests (push) Successful in 2m31s
CI / integration_tests (push) Successful in 3m0s
CI / docker (push) Successful in 39s
CI / coverage (push) Successful in 5m5s
CI / benchmark-publish (push) Successful in 14m43s
CI / benchmark-regression (pull_request) Successful in 25m44s
Wire all four project context CLI commands (inspect, simulate, set, show) to live ACMS pipeline services via ContextTierService and CRP models. - context inspect: queries ContextTierService for tier metrics and per-project fragments with filtering by strategy/focus/breadth/depth - context simulate: dry-run context assembly using CRP models with configurable token budget and assembly strategies - context set: 12 new ACMS pipeline options (hot_max_tokens, warm_max_decisions, cold_max_decisions, summary_max_tokens, temporal_scope, auto_refresh, focus_area, breadth, depth, assembly_strategy, retrieval_strategy, summary_strategy) - context show: displays ACMS pipeline configuration alongside policy - `context inspect` displayed global tier fragment counts (hot/warm/cold) across all projects instead of counts for the target project only. Add `ContextTierService.get_scoped_metrics(project_names)` which uses `ScopedBackendView` to filter fragment counts to the specified projects while keeping hit/miss counters as global service-level cache metrics. Update `context_inspect()` to call `get_scoped_metrics([project])` instead of `get_metrics()`. - `context simulate --focus` accepted focus URIs and passed them to the `ContextRequest` model but never used them to filter the fragment list, making the `--focus` flag a no-op. Add focus URI filtering in `_simulate_context_assembly()` after `get_scoped_view()` — filters `project_fragments` by matching each fragment's `resource_id` against the supplied focus URIs. Also fixes redaction false positives for hot_max_tokens and summary_max_tokens keys, and Rich Console line-wrapping in test output that caused JSON parse failures. Includes 28 new Behave BDD scenarios for wiring coverage, updated Robot Framework integration tests, and reference documentation. ISSUES CLOSED: #499
176 lines
8.8 KiB
Gherkin
176 lines
8.8 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 ──────────────────────────
|
|
|
|
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"
|
|
|
|
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
|
|
|
|
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"
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|