5e96b4bf80
CI / build (pull_request) Successful in 16s
CI / helm (pull_request) Successful in 21s
CI / lint (pull_request) Successful in 3m18s
CI / quality (pull_request) Successful in 3m47s
CI / typecheck (pull_request) Successful in 3m57s
CI / security (pull_request) Successful in 4m6s
CI / benchmark-publish (pull_request) Has been skipped
CI / integration_tests (pull_request) Successful in 7m6s
CI / unit_tests (pull_request) Successful in 7m18s
CI / docker (pull_request) Successful in 1m19s
CI / coverage (pull_request) Successful in 11m49s
CI / e2e_tests (pull_request) Successful in 20m44s
CI / status-check (pull_request) Successful in 1s
CI / benchmark-regression (pull_request) Successful in 55m9s
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"
|