f808abff86
Fix JSON syntax errors in .devcontainer/devcontainer.json (removed
invalid JS-style // comments) and .devcontainer/opencode.json (removed
90+ trailing commas). Apply auto-fixes for end-of-file and trailing
whitespace issues across 100+ files. Fix SIM105 ruff violations in
benchmarks/core_circuit_breaker_bench.py (use contextlib.suppress).
Note: The security fix from issue #7478 (validate_path startswith bypass)
was already delivered to master in commit e18ac5f2. This PR as currently
structured is non-atomic (35 commits across 10+ issues) and needs
significant restructure before merge. This commit only addresses the
CI/pre-commit failures.
ISSUES CLOSED: #7478
238 lines
8.6 KiB
Gherkin
238 lines
8.6 KiB
Gherkin
Feature: Consolidated Context
|
|
Combined scenarios from: context_analysis_agent_coverage, context_manager_coverage, context_service_analysis, context_vector_search, project_context_policy
|
|
|
|
# ============================================================
|
|
# Originally from: context_analysis_agent_coverage.feature
|
|
# Feature: Context Analysis Agent Coverage
|
|
# ============================================================
|
|
|
|
# ============================================================
|
|
# Originally from: context_manager_coverage.feature
|
|
# Feature: Context manager coverage
|
|
# ============================================================
|
|
|
|
@coverage
|
|
Scenario: Load stored context JSON files
|
|
Given a context manager storage directory with valid JSON files
|
|
When I initialize the context manager from that directory
|
|
Then the stored context data should be loaded
|
|
|
|
|
|
@coverage
|
|
Scenario: Ignore invalid JSON files for context storage
|
|
Given a context manager storage directory with invalid JSON files
|
|
When I initialize the context manager from that directory
|
|
Then invalid context files should load as empty defaults
|
|
|
|
|
|
@coverage
|
|
Scenario: Use default home context path and delete
|
|
Given a temporary home directory for the context manager
|
|
When I initialize the context manager without a context directory
|
|
Then the context manager should use the default home context path
|
|
And deleting the context should remove the directory
|
|
|
|
|
|
@coverage
|
|
Scenario: Update state and metadata and report existence
|
|
Given a context manager for state and metadata updates
|
|
When I update state and metadata in the context manager
|
|
Then the context manager should return the updated values
|
|
And the context should report it exists on disk
|
|
|
|
|
|
@coverage
|
|
Scenario: Return last messages and clear context
|
|
Given a context manager with stored messages
|
|
When I request the last message and clear the context
|
|
Then the last message should be returned and the context reset
|
|
|
|
|
|
@coverage
|
|
Scenario: Export and import a context snapshot
|
|
Given a context manager with exportable data
|
|
When I export and import the context
|
|
Then the imported context should match the exported data
|
|
|
|
|
|
# ============================================================
|
|
# Originally from: context_service_analysis.feature
|
|
# Feature: Context Service Analysis Integration
|
|
# ============================================================
|
|
|
|
# ============================================================
|
|
# Originally from: context_vector_search.feature
|
|
# Feature: Context Vector Search
|
|
# ============================================================
|
|
|
|
# ============================================================
|
|
# Originally from: project_context_policy.feature
|
|
# Feature: Project Context Policy Domain Model
|
|
# ============================================================
|
|
|
|
Scenario: Empty policy defaults to including everything
|
|
When I create an empty project context policy
|
|
Then the default view should include all resources
|
|
And the default view should include all paths
|
|
And the default view should have no file size limit
|
|
And the default view should have no total size limit
|
|
|
|
# ---- View inheritance ----
|
|
|
|
|
|
Scenario: Strategize inherits from default when not overridden
|
|
Given a policy with only a default view
|
|
When I resolve the view for phase "strategize"
|
|
Then the resolved view should be the default view
|
|
|
|
|
|
Scenario: Execute inherits from strategize when not overridden
|
|
Given a policy with default and strategize views
|
|
When I resolve the view for phase "execute"
|
|
Then the resolved view should be the strategize view
|
|
|
|
|
|
Scenario: Apply inherits from execute when not overridden
|
|
Given a policy with default strategize and execute views
|
|
When I resolve the view for phase "apply"
|
|
Then the resolved view should be the execute view
|
|
|
|
|
|
Scenario: Execute inherits from default when strategize is None
|
|
Given a policy with only a default view
|
|
When I resolve the view for phase "execute"
|
|
Then the resolved view should be the default view
|
|
|
|
|
|
Scenario: Apply falls through to default when all overrides are None
|
|
Given a policy with only a default view
|
|
When I resolve the view for phase "apply"
|
|
Then the resolved view should be the default view
|
|
|
|
|
|
Scenario: Resolve default phase returns default view
|
|
Given a policy with only a default view
|
|
When I resolve the view for phase "default"
|
|
Then the resolved view should be the default view
|
|
|
|
# ---- Override isolation ----
|
|
|
|
|
|
Scenario: Override at execute level does not affect strategize
|
|
Given a policy with a custom execute view
|
|
When I resolve the view for phase "strategize"
|
|
Then the resolved view should be the default view
|
|
|
|
|
|
Scenario: Override at execute returns execute view
|
|
Given a policy with a custom execute view
|
|
When I resolve the view for phase "execute"
|
|
Then the resolved view should be the execute view
|
|
|
|
# ---- Invalid phase name ----
|
|
|
|
|
|
Scenario: Invalid phase name raises error
|
|
Given a policy with only a default view
|
|
When I try to resolve the view for phase "invalid_phase"
|
|
Then a context policy error should be raised
|
|
And the context policy error should mention "Invalid phase"
|
|
|
|
|
|
Scenario: Unknown phase name raises error
|
|
Given a policy with only a default view
|
|
When I try to resolve the view for phase "plan"
|
|
Then a context policy error should be raised
|
|
And the context policy error should mention "Invalid phase"
|
|
|
|
# ---- Include/exclude resource patterns ----
|
|
|
|
|
|
Scenario: Include resources filters correctly
|
|
When I create a context view with include resources "db-*,cache-*"
|
|
Then the context view should have 2 include resources
|
|
|
|
|
|
Scenario: Exclude resources filters correctly
|
|
When I create a context view with exclude resources "temp-*"
|
|
Then the context view should have 1 exclude resource
|
|
|
|
|
|
Scenario: Combined include and exclude resources
|
|
When I create a context view with include "db-*" and exclude "db-test"
|
|
Then the context view should have 1 include resource
|
|
And the context view should have 1 exclude resource
|
|
|
|
# ---- Include/exclude path globs ----
|
|
|
|
|
|
Scenario: Include paths accepts globs
|
|
When I create a context view with include paths "src/**/*.py,tests/**"
|
|
Then the context view should have 2 include paths
|
|
|
|
|
|
Scenario: Exclude paths accepts globs
|
|
When I create a context view with exclude paths "*.pyc,__pycache__/**"
|
|
Then the context view should have 2 exclude paths
|
|
|
|
# ---- Size limit validation ----
|
|
|
|
|
|
Scenario: Valid max file size is accepted
|
|
When I create a context view with max file size 1048576
|
|
Then the context view max file size should be 1048576
|
|
|
|
|
|
Scenario: None max file size means no limit
|
|
When I create a context view with no file size limit
|
|
Then the context view max file size should be None
|
|
|
|
|
|
Scenario: Zero max file size raises error
|
|
When I try to create a context view with max file size 0
|
|
Then a context policy error should be raised
|
|
And the context policy error should mention "positive integer"
|
|
|
|
|
|
Scenario: Negative max file size raises error
|
|
When I try to create a context view with max file size -100
|
|
Then a context policy error should be raised
|
|
And the context policy error should mention "positive integer"
|
|
|
|
|
|
Scenario: Valid max total size is accepted
|
|
When I create a context view with max total size 10485760
|
|
Then the context view max total size should be 10485760
|
|
|
|
|
|
Scenario: Zero max total size raises error
|
|
When I try to create a context view with max total size 0
|
|
Then a context policy error should be raised
|
|
And the context policy error should mention "positive integer"
|
|
|
|
|
|
Scenario: Negative max total size raises error
|
|
When I try to create a context view with max total size -50
|
|
Then a context policy error should be raised
|
|
And the context policy error should mention "positive integer"
|
|
|
|
# ---- Serialization round-trip ----
|
|
|
|
|
|
Scenario: Policy survives JSON round-trip
|
|
Given a fully populated context policy
|
|
When I serialize and deserialize the policy
|
|
Then the deserialized policy should match the original
|
|
|
|
# ---- ContextView model_dump ----
|
|
|
|
|
|
Scenario: ContextView model_dump has expected keys
|
|
When I create a context view with defaults
|
|
Then the context view dump should have key "include_resources"
|
|
And the context view dump should have key "exclude_resources"
|
|
And the context view dump should have key "include_paths"
|
|
And the context view dump should have key "exclude_paths"
|
|
And the context view dump should have key "max_file_size"
|
|
And the context view dump should have key "max_total_size"
|