fix(evidence)!: report storage publication limits (#7887)

* fix(evidence): report storage publication limits

* test(evidence): cover staged storage failure cleanup
This commit is contained in:
morluto authored and GitHub committed 2026-10-29 23:03:09 +08:00
1 parent 539a494d25
commit bf115be2cd
6 files changed
+187 -12

No files matched your search

+27 -10
View File
@@ -411,16 +411,16 @@ const writeTextPartsOwned = async (
}),
cause.lease,
);
const failure = classifyWriteFailure(cause.outcome.error);
return stagedCleanupFailure(
new EvidenceFileError(
"write",
fileAccessFailureReason(cause.outcome.error),
{
cause,
path: requestedPath,
cleanup,
},
),
new EvidenceFileError("write", failure.reason, {
cause,
path: requestedPath,
cleanup,
...(failure.systemCode === undefined
? {}
: { systemCode: failure.systemCode }),
}),
cause.lease,
);
}
@@ -437,15 +437,32 @@ const writeTextPartsOwned = async (
path: requestedPath,
}),
);
const failure = classifyWriteFailure(cause);
return err(
new EvidenceFileError("write", fileAccessFailureReason(cause), {
new EvidenceFileError("write", failure.reason, {
cause,
path: requestedPath,
...(failure.systemCode === undefined
? {}
: { systemCode: failure.systemCode }),
}),
);
}
};
/** Recognize only host codes that establish a publication resource refusal. */
const classifyWriteFailure = (
cause: unknown,
): {
readonly reason: EvidenceFileError["reason"];
readonly systemCode?: "EFBIG" | "ENOSPC" | "EDQUOT";
} => {
const code = fileErrorCode(cause);
return code === "EFBIG" || code === "ENOSPC" || code === "EDQUOT"
? { reason: "storage-limit", systemCode: code }
: { reason: fileAccessFailureReason(cause) };
};
/** The retained staging lease clears this error only when a retry confirms release. */
const stagedCleanupFailure = <
Failure extends EvidenceFileError | AnalysisCancelledError,