mirror of
https://github.com/morluto/rea.git
synced 2026-11-14 18:52:48 +00:00
fix(evidence): report partial workflow question publication (#8848)
* fix(evidence): report partial workflow question publication * fix: project nested recovery for caller lifetime
This commit is contained in:
1 parent
b97023809f
commit
6df2ac1d7e
9 files changed
+363
-27
No files matched your search
@@ -33,7 +33,10 @@ import {
|
||||
} from "./hopperStartupFailure.js";
|
||||
import { ProviderAdapterError } from "./providerAdapterError.js";
|
||||
import { UnknownRegistryError } from "./unknownRegistryError.js";
|
||||
import { projectAnalysisError } from "./analysisErrorProjection.js";
|
||||
import {
|
||||
childFailureDiagnostics,
|
||||
projectAnalysisError,
|
||||
} from "./analysisErrorProjection.js";
|
||||
import {
|
||||
analysisErrorRemediationAction,
|
||||
analysisErrorUserMessage,
|
||||
@@ -48,6 +51,55 @@ import { analysisErrorWithCleanupFailure } from "./analysisErrorCleanup.js";
|
||||
import type { AnalysisCallerLifetime } from "./analysisErrorBase.js";
|
||||
import { ProviderCleanupError } from "./providerCleanupError.js";
|
||||
|
||||
it("projects nested workflow-publication recovery for the actual caller lifetime", () => {
|
||||
const child = new UnknownRegistryError(
|
||||
"limit",
|
||||
).retainWorkflowUnknownPublication({
|
||||
evidence_id: `ev_${"a".repeat(64)}`,
|
||||
evidence_retention: "retained",
|
||||
total_questions: 3,
|
||||
created_questions: 1,
|
||||
existing_questions: 0,
|
||||
next_question_index: 1,
|
||||
});
|
||||
const error = new AnalysisCancelledError(
|
||||
"trace_feature",
|
||||
childFailureDiagnostics({ child: { error: child } }),
|
||||
);
|
||||
const continuing = projectAnalysisError(error);
|
||||
const invocation = projectAnalysisError(error, "invocation");
|
||||
const childOf = (value: typeof continuing) => {
|
||||
const diagnostics = value.details?.diagnostics;
|
||||
if (
|
||||
typeof diagnostics !== "object" ||
|
||||
diagnostics === null ||
|
||||
Array.isArray(diagnostics)
|
||||
)
|
||||
throw new Error("Expected child diagnostics");
|
||||
return analysisErrorProjectionSchema.parse(diagnostics.child);
|
||||
};
|
||||
expect(
|
||||
childOf(continuing).details?.workflow_unknown_publication,
|
||||
).toMatchObject({
|
||||
evidence_retention: "retained",
|
||||
created_questions: 1,
|
||||
next_question_index: 1,
|
||||
});
|
||||
expect(childOf(continuing).remediation.action).toContain(
|
||||
"get_evidence_bundle",
|
||||
);
|
||||
expect(
|
||||
childOf(invocation).details?.workflow_unknown_publication,
|
||||
).toMatchObject({
|
||||
evidence_retention: "invocation-only",
|
||||
created_questions: 1,
|
||||
next_question_index: 1,
|
||||
});
|
||||
expect(childOf(invocation).remediation.action).not.toContain(
|
||||
"get_evidence_bundle",
|
||||
);
|
||||
});
|
||||
|
||||
describe("agent recovery metadata", () => {
|
||||
it("does not mark deterministic input validation as retryable", () => {
|
||||
const projected = projectAnalysisError(
|
||||
|
||||
Reference in new issue
Block a user