fix: retain structured Workdir refusal diagnostics across provider boundaries
This commit is contained in:
@@ -421,6 +421,13 @@ fn checkout_known_refusals_have_typed_codes_without_changing_normal_tools() {
|
||||
use workdir::{WorkdirError, WorkdirSessionCapability};
|
||||
let cases = [
|
||||
(WorkdirError::Denied("denied".into()), "checkout_denied"),
|
||||
(
|
||||
WorkdirError::DenialContext {
|
||||
reason: workdir::WorkdirDenialReason::OsPermissionDenied,
|
||||
source: Box::new(WorkdirError::OutOfScope("outside".into())),
|
||||
},
|
||||
"checkout_denied",
|
||||
),
|
||||
(
|
||||
WorkdirError::OutOfScope("outside".into()),
|
||||
"checkout_denied",
|
||||
|
||||
@@ -139,7 +139,12 @@ impl FileTarget {
|
||||
|
||||
pub(crate) fn checked_error(error: workdir::WorkdirError) -> ToolError {
|
||||
use workdir::WorkdirError;
|
||||
if let WorkdirError::DenialContext { source, .. } = error {
|
||||
// Diagnostic enrichment must not change the established tool classification.
|
||||
return checked_error(*source);
|
||||
}
|
||||
let code = match &error {
|
||||
WorkdirError::DenialContext { .. } => unreachable!("unwrapped above"),
|
||||
WorkdirError::Conflict(_) | WorkdirError::NotFound(_) => "checkout_stale",
|
||||
WorkdirError::Denied { .. }
|
||||
| WorkdirError::OutOfScope { .. }
|
||||
|
||||
Reference in New Issue
Block a user