fix: block code agent non-2xx readiness
This commit is contained in:
@@ -103,7 +103,96 @@ test("rejects accepted workbench evidence that mixes provider_unavailable blocke
|
||||
code: "provider_unavailable",
|
||||
missingEnv: ["OPENAI_API_KEY"]
|
||||
};
|
||||
await assertRejected(report, /provider_unavailable or OPENAI_API_KEY blockers/);
|
||||
await assertRejected(report, /provider_unavailable, OPENAI_API_KEY, or providerStatus blockers/);
|
||||
});
|
||||
|
||||
test("accepts blocked workbench evidence for provider HTTP 502 without promoting completion", async () => {
|
||||
const report = cloneBaseReport();
|
||||
const journey = report.checks.find((check) => check.id === "live-code-agent-browser-journey");
|
||||
report.status = "blocked";
|
||||
report.evidenceLevel = "BLOCKED";
|
||||
report.devLive = false;
|
||||
report.devPreconditions.status = "blocked";
|
||||
report.devPreconditions.summary = "Deployed browser journey is blocked; see checks and blockers.";
|
||||
report.blockers = [
|
||||
{
|
||||
type: "runtime_blocker",
|
||||
scope: "live-code-agent-browser-journey",
|
||||
status: "open",
|
||||
summary: "Code Agent provider returned provider_unavailable with provider HTTP 502."
|
||||
}
|
||||
];
|
||||
report.safety.retainedApiFields = [
|
||||
"status",
|
||||
"provider",
|
||||
"model",
|
||||
"backend",
|
||||
"traceId",
|
||||
"hasReply",
|
||||
"error.code",
|
||||
"error.missingEnv",
|
||||
"error.providerStatus"
|
||||
];
|
||||
journey.status = "blocked";
|
||||
journey.summary = "Deployed browser journey reached Code Agent, but the provider returned a blocked/unavailable state instead of a completed reply.";
|
||||
journey.evidence = [
|
||||
"POST /v1/agent/chat HTTP 200",
|
||||
"status=failed",
|
||||
"provider=openai-responses",
|
||||
"model=gpt-5.5",
|
||||
"traceId=trc_provider_502",
|
||||
"uiStatus=发送失败",
|
||||
"blocker=provider-upstream"
|
||||
];
|
||||
journey.observations.request.status = 200;
|
||||
journey.observations.response = {
|
||||
status: "failed",
|
||||
provider: "openai-responses",
|
||||
model: "gpt-5.5",
|
||||
backend: "hwlab-cloud-api/openai-responses",
|
||||
traceId: "trc_provider_502",
|
||||
hasReply: false,
|
||||
error: {
|
||||
code: "provider_unavailable",
|
||||
missingEnv: [],
|
||||
providerStatus: 502
|
||||
}
|
||||
};
|
||||
journey.observations.classification = {
|
||||
status: "blocked",
|
||||
blocker: "provider-upstream",
|
||||
providerStatus: 502,
|
||||
reason: "Code Agent HTTP non-2xx status 502 means the upstream response is blocked, not completed"
|
||||
};
|
||||
journey.observations.ui.agentChatStatus = "发送失败";
|
||||
journey.observations.ui.inputCleared = false;
|
||||
journey.observations.ui.completedMessageVisible = false;
|
||||
journey.observations.ui.failedMessageVisible = true;
|
||||
journey.observations.networkEvents = [
|
||||
{
|
||||
method: "POST",
|
||||
status: 200,
|
||||
urlPath: "/v1/agent/chat",
|
||||
body: journey.observations.response
|
||||
}
|
||||
];
|
||||
|
||||
await withReport(report, async (reportPath) => {
|
||||
const result = runValidator(reportPath);
|
||||
assert.equal(result.status, 0, result.stderr);
|
||||
assert.match(result.stdout, /validated 1 dev-gate report JSON file/);
|
||||
});
|
||||
});
|
||||
|
||||
test("rejects accepted workbench evidence that hides providerStatus 502 in network events", async () => {
|
||||
const report = cloneBaseReport();
|
||||
const journey = report.checks.find((check) => check.id === "live-code-agent-browser-journey");
|
||||
journey.observations.networkEvents[0].body.error = {
|
||||
code: null,
|
||||
missingEnv: [],
|
||||
providerStatus: 502
|
||||
};
|
||||
await assertRejected(report, /providerStatus blockers/);
|
||||
});
|
||||
|
||||
test("rejects accepted workbench evidence that uses the synthetic gpt-5 placeholder model", async () => {
|
||||
|
||||
Reference in New Issue
Block a user