fix(reference): preserve physical failures across late cancellation (#10072)

* fix(reference): preserve physical failures across late cancellation

* fix(reference): retain late cancellation alongside read failures

* fix(reference): preserve metadata errors through cancellation

* fix(reference): retain directory failure identity

* fix(reference): preserve parallel physical and cancellation outcomes

* fix(reference): preserve optional Git metadata absence
This commit is contained in:
morluto authored and GitHub committed 2026-11-11 18:53:08 +08:00
1 parent 3ad2e214be
commit 0e0af455f2
13 files changed
+781 -199

No files matched your search

+16 -2
View File
@@ -33,12 +33,23 @@ export const readReferenceSource = async (
resources: ArtifactResourceScope,
options: ReferenceSourceReaderOptions = {},
): Promise<ReferenceSourceResult<ReferenceSourceRead>> => {
let result: ReferenceSourceResult<ReferenceSourceRead>;
try {
return await resources.run(() => readSource(root, resources, options));
result = await resources.run(() => readSource(root, resources, options));
} catch (cause: unknown) {
if (!(cause instanceof ArtifactReaderFailure)) throw cause;
return err(referenceSourceResourceFailure(cause));
result = err(referenceSourceResourceFailure(cause));
}
if (
!result.ok &&
result.error.code !== "cancelled" &&
options.signal?.aborted
)
return err({
...result.error,
secondaryCancellation: { cause: options.signal.reason },
});
return result;
};
const readSource = async (
@@ -99,6 +110,9 @@ const readSource = async (
tag: "reference-source-reader",
code: "io",
message: state.rootFailure.message,
...(state.rootFailureCause === undefined
? {}
: { cause: state.rootFailureCause.value }),
partial: read,
});
return traversal.ok ? ok(read) : err({ ...traversal.error, partial: read });