Problem
The adversarial replay CLI resolves relative --replay paths from the recipe directory. The generated replay command points at files/adversarial/..., which is an artifact path relative to the caller's artifacts/workspace context, so replay unexpectedly reads below the recipe source directory and can target paths outside the documented invocation contract.
Expected
Resolve caller-provided relative replay paths from the invocation working directory, reject workspace escape after canonical normalization, and continue accepting explicit absolute paths when they remain inside the invocation workspace.
Context
Confirmed while completing #2017 after merged PR #2028. The fix should remain generic and include path-safety tests.
Refs #2017
Problem
The adversarial replay CLI resolves relative
--replaypaths from the recipe directory. The generated replay command points atfiles/adversarial/..., which is an artifact path relative to the caller's artifacts/workspace context, so replay unexpectedly reads below the recipe source directory and can target paths outside the documented invocation contract.Expected
Resolve caller-provided relative replay paths from the invocation working directory, reject workspace escape after canonical normalization, and continue accepting explicit absolute paths when they remain inside the invocation workspace.
Context
Confirmed while completing #2017 after merged PR #2028. The fix should remain generic and include path-safety tests.
Refs #2017