Files
freemo 884fe12511 ```
fix(tool): wire 6-level execution environment precedence chain into ToolRunner

What was implemented
- Updated ToolRunner.execute() to accept plan_priority and project_priority parameters (optional) and to propagate these priority values through the execution path.
- Replaced the legacy four-level resolve_and_validate() with resolve_with_precedence() to implement the correct six-level precedence chain.
- Introduced devcontainer_available derived from has_devcontainer() on linked_resource_types and wired this into the resolution process.
- Updated all call sites (router.py and actor_runtime.py) to accept and forward the new priority parameters.
- Added 12 unit tests verifying the six-level precedence chain behavior in ToolRunner.execute().
- Added integration tests covering override vs. fallback scenarios to ensure correct end-to-end behavior.

Key design decisions and rationale
- Use resolve_with_precedence() instead of resolve_with_dag() because linked_resource_types already provides devcontainer availability information, eliminating the need for a full DAG walk while preserving correct precedence semantics.
- Preserve the existing contract of raising ContainerUnavailableError by retaining a final validate_container_available() call after resolution, ensuring proper error signaling when a container is resolved but no linked container resource exists.
- Make plan_priority and project_priority optional with None defaulting to fallback semantics, aligning with the resolver's _parse_priority() behavior and keeping backward-compatible defaults for existing callers.

ISSUES CLOSED: #2592
```
2026-04-05 08:47:35 +00:00
..
```
2026-04-05 08:47:35 +00:00
```
2026-04-05 08:47:35 +00:00