fix: normalize automatic birth-time errors

This commit is contained in:
Jesse_Chen
2026-07-21 17:54:27 +08:00
parent e7460ca8e4
commit a38a096ba1
2 changed files with 16 additions and 4 deletions
@@ -16,6 +16,7 @@ import {
} from "@/lib/birth-time-guided-effect-coordinator";
import type { StableActionIdentityRegistry } from "@/lib/birth-time-guided-effect-coordinator";
import { runBirthTimeScoringPoll, scoringPollDelay } from "@/lib/birth-time-guided-polling";
import { birthTimeUserError } from "@/lib/birth-time-user-error";
type AutomaticEffectsInput = {
readonly journey: JourneyClientResponse | null;
@@ -82,7 +83,7 @@ export function useBirthTimeAutomaticJourneyEffects(input: AutomaticEffectsInput
if (publishCurrentJourney({ expected, current: latest.current, next, publish: onJourney })) latest.current = next;
}).catch((caught: unknown) => {
if (latest.current?.caseId === expected.caseId && latest.current.turnVersion === expected.turnVersion) {
setError(caught instanceof Error ? caught.message : "暂时无法生成下一题,请重试。");
setError(birthTimeUserError(caught));
}
});
}, [actionRegistry, generationIdentity, generationRequests, generationRun, latest, onJourney, preview, setError]);
@@ -114,7 +115,7 @@ export function useBirthTimeAutomaticJourneyEffects(input: AutomaticEffectsInput
latest.current = result.turn;
if (result.kind === "exhausted") setError("评分仍在进行。你可以稍后继续,或重新检查状态。");
}).catch((caught: unknown) => {
if (!controller.signal.aborted) setError(caught instanceof Error ? caught.message : "暂时无法读取评分进度,请稍后重试。");
if (!controller.signal.aborted) setError(birthTimeUserError(caught));
});
});
return () => { cancelStart(); controller.abort(); };
+13 -2
View File
@@ -15,6 +15,17 @@ test("birth-time errors preserve a safe server message", () => {
});
test("all guided journey mutations normalize implementation errors", () => {
const source = readFileSync(new URL("../src/hooks/use-birth-time-guided-journey.ts", import.meta.url), "utf8");
assert.equal((source.match(/setError\(birthTimeUserError\(caught\)\)/g) ?? []).length, 2);
const sources = [
"../src/hooks/use-birth-time-guided-journey.ts",
"../src/hooks/use-birth-time-automatic-journey-effects.ts",
].map((path) => readFileSync(new URL(path, import.meta.url), "utf8"));
assert.equal(
sources.reduce(
(count, source) =>
count +
(source.match(/setError\(birthTimeUserError\(caught\)\)/g) ?? []).length,
0,
),
3,
);
});