forked from cleveragents/cleveragents-core
5e96b4bf80
Implement the spec's 6-level execution environment precedence chain (spec lines 19324-19386): 1. Plan override (priority=override) — always wins 2. Project override (priority=override) — wins over devcontainer 3. Nearest-ancestor devcontainer — auto-discovered 4. Plan fallback (priority=fallback) — defers to devcontainer 5. Project fallback (priority=fallback) — defers to closer scopes 6. Host default — final fallback - New resolve_with_precedence() API on ExecutionEnvironmentResolver - Added execution_env_priority field to ContextConfig (project model) - has_devcontainer() helper for devcontainer-instance detection - Legacy 4-level resolve() preserved for backward compatibility - _parse_priority() defaults missing priority to FALLBACK - 13 new Behave scenarios testing all 6 levels + edge cases - Updated CHANGELOG ISSUES CLOSED: #877
85 lines
5.0 KiB
Gherkin
85 lines
5.0 KiB
Gherkin
@exec-env-precedence
|
|
Feature: 6-level execution environment precedence chain (#877)
|
|
Verifies the full 6-level precedence chain: plan override,
|
|
project override, nearest-ancestor devcontainer, plan fallback,
|
|
project fallback, host default. Also tests DAG walking for
|
|
devcontainer discovery and container:// reference parsing.
|
|
|
|
# ── 6-Level Precedence Chain ────────────────────────────
|
|
|
|
Scenario: Level 1 — plan override wins over everything for precedence
|
|
When I resolve precedence with plan_env "container" plan_priority "override" project_env "host" project_priority "override" devcontainer true
|
|
Then the precedence resolved environment should be "container"
|
|
|
|
Scenario: Level 2 — project override wins over devcontainer for precedence
|
|
When I resolve precedence with plan_env "host" plan_priority "fallback" project_env "container" project_priority "override" devcontainer false
|
|
Then the precedence resolved environment should be "container"
|
|
|
|
Scenario: Level 3 — devcontainer wins over plan fallback for precedence
|
|
When I resolve precedence with plan_env "host" plan_priority "fallback" project_env "host" project_priority "fallback" devcontainer true
|
|
Then the precedence resolved environment should be "container"
|
|
|
|
Scenario: Level 4 — plan fallback used when no devcontainer for precedence
|
|
When I resolve precedence with plan_env "container" plan_priority "fallback" project_env "host" project_priority "fallback" devcontainer false
|
|
Then the precedence resolved environment should be "container"
|
|
|
|
Scenario: Level 5 — project fallback used when no plan env for precedence
|
|
When I resolve precedence with project_env "container" project_priority "fallback" devcontainer false
|
|
Then the precedence resolved environment should be "container"
|
|
|
|
Scenario: Level 6 — host default when nothing configured for precedence
|
|
When I resolve precedence with devcontainer false
|
|
Then the precedence resolved environment should be "host"
|
|
|
|
Scenario: Tool override trumps all 6 levels for precedence
|
|
When I resolve precedence with tool_env "host" plan_env "container" plan_priority "override" devcontainer true
|
|
Then the precedence resolved environment should be "host"
|
|
|
|
Scenario: Plan override beats project override for precedence
|
|
When I resolve precedence with plan_env "host" plan_priority "override" project_env "container" project_priority "override" devcontainer false
|
|
Then the precedence resolved environment should be "host"
|
|
|
|
Scenario: Project override beats devcontainer for precedence
|
|
When I resolve precedence with project_env "host" project_priority "override" devcontainer true
|
|
Then the precedence resolved environment should be "host"
|
|
|
|
Scenario: Default priority is fallback for precedence
|
|
When I resolve precedence with plan_env "host" project_env "host" devcontainer true
|
|
Then the precedence resolved environment should be "container"
|
|
|
|
# ── Devcontainer helpers ────────────────────────────────
|
|
|
|
Scenario: has_devcontainer detects devcontainer-instance for precedence
|
|
When I check has_devcontainer with types "git-checkout,devcontainer-instance" for precedence
|
|
Then has_devcontainer should be true for precedence
|
|
|
|
Scenario: has_devcontainer returns false without devcontainer for precedence
|
|
When I check has_devcontainer with types "git-checkout,fs-directory" for precedence
|
|
Then has_devcontainer should be false for precedence
|
|
|
|
# ── ContextConfig priority field ────────────────────────
|
|
|
|
Scenario: ContextConfig supports execution_env_priority field for precedence
|
|
When I create a ContextConfig with priority "override" for precedence
|
|
Then the context config priority should be "override" for precedence
|
|
|
|
# ── DAG walk (#877 subtask 2) ───────────────────────────
|
|
|
|
Scenario: DAG walk finds nearest devcontainer ancestor for precedence
|
|
When I resolve with DAG walk from "res-file" with devcontainer ancestor for precedence
|
|
Then the precedence resolved environment should be "container"
|
|
|
|
Scenario: DAG walk returns host when no devcontainer ancestor for precedence
|
|
When I resolve with DAG walk from "res-file" without devcontainer ancestor for precedence
|
|
Then the precedence resolved environment should be "host"
|
|
|
|
# ── Container reference (#877 subtask 4) ────────────────
|
|
|
|
Scenario: Container reference parsed correctly for precedence
|
|
When I parse container ref "container://local/my-dc" for precedence
|
|
Then the container ref name should be "local/my-dc" for precedence
|
|
|
|
Scenario: Container reference coerces to CONTAINER_REF for precedence
|
|
When I resolve precedence with plan_env "container://local/my-dc" plan_priority "override" project_env "host" project_priority "fallback" devcontainer false
|
|
Then the precedence resolved environment should be "container_ref"
|