test: add WP7-02 controlled real contract gate
Dada P0-A isolated Windows CI / validate-and-package (push) Failing after 1m36s
Dada P0-A isolated Windows CI / validate-and-package (push) Failing after 1m36s
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { test } from "node:test";
|
||||
|
||||
import {
|
||||
AI_GATEWAY_CREDENTIAL_TARGET,
|
||||
WP7_02_MODEL_IDS,
|
||||
buildBlockedModelEvidence,
|
||||
buildModelContractPlan,
|
||||
inspectAiGatewayReadiness,
|
||||
validateCandidateDependency,
|
||||
validateIndependentEvidenceSet,
|
||||
} from "../../scripts/lib/wp7-02-external-contract.mjs";
|
||||
|
||||
const candidate = () => ({
|
||||
browsers: [
|
||||
{ brand: "Google Chrome", full_version: "150.0.7871.187", major: 150, source: "installed_executable" },
|
||||
{ brand: "Microsoft Edge", full_version: "151.0.4129.59", major: 151, source: "installed_executable" },
|
||||
],
|
||||
build_commit: "623cad25b2a2a9a003502c9a92ebd318dad06248",
|
||||
candidate_package: { release_status: "candidate_unvalidated", sha256: "A".repeat(64) },
|
||||
final_release: false,
|
||||
fixed_port: 43121,
|
||||
recorded_at: "2026-08-04T05:28:11.257Z",
|
||||
schema_version: "1.0",
|
||||
status: "candidate_unvalidated",
|
||||
});
|
||||
|
||||
test("TDD-WP7-EXT-001 fixes the complete per-model controlled-real matrix", () => {
|
||||
assert.deepEqual(WP7_02_MODEL_IDS, [
|
||||
"gemini-3.1-flash-image-preview",
|
||||
"gemini-3-pro-image-preview",
|
||||
"gpt-image-2",
|
||||
]);
|
||||
for (const modelId of WP7_02_MODEL_IDS) {
|
||||
const plan = buildModelContractPlan(modelId);
|
||||
assert.equal(plan.model_id, modelId);
|
||||
assert.deepEqual(plan.inputs, ["pure_text", "reference_image"]);
|
||||
assert.deepEqual(plan.ratios, ["3:4", "1:1", "4:3", "9:16"]);
|
||||
assert.deepEqual(plan.execution_modes, ["sync", "async", "poll"]);
|
||||
assert.deepEqual(plan.response_checks, ["single_image", "mime", "dimensions", "sanitized_usage"]);
|
||||
assert.deepEqual(plan.planned_request_breakdown, {
|
||||
contract_change_full_revalidation: 20,
|
||||
error_categories: 9,
|
||||
execution_modes_and_poll: 3,
|
||||
input_and_ratio_success: 6,
|
||||
settlement_boundaries: 2,
|
||||
});
|
||||
assert.equal(Object.values(plan.planned_request_breakdown).reduce((total, count) => total + count, 0), 40);
|
||||
assert.deepEqual(plan.error_categories, [
|
||||
"upstream_timeout", "upstream_failed", "safety_rejected", "model_disabled",
|
||||
"gateway_balance_insufficient", "gateway_contract_invalid", "reference_invalid",
|
||||
"unknown_retryable", "unknown_non_retryable",
|
||||
]);
|
||||
assert.deepEqual(plan.error_expectations.safety_rejected, {
|
||||
credit_effect: "release_once",
|
||||
job_outcome: "rejected",
|
||||
user_action: "modify_prompt_or_reference",
|
||||
});
|
||||
assert.deepEqual(plan.error_expectations.reference_invalid, {
|
||||
credit_effect: "no_reserve_or_release_once",
|
||||
job_outcome: "not_created_or_failed",
|
||||
user_action: "replace_or_remove_reference",
|
||||
});
|
||||
assert.deepEqual(plan.state_checks, [
|
||||
"credit_commit_once", "credit_release_once_per_terminal_failure",
|
||||
"contract_change_invalidation", "full_revalidation",
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
test("TDD-WP7-EXT-001 rejects candidate drift and final-release substitution", () => {
|
||||
assert.equal(validateCandidateDependency(candidate()).build_commit, candidate().build_commit);
|
||||
assert.throws(() => validateCandidateDependency({ ...candidate(), final_release: true }), /WP7_02_CANDIDATE_FINAL_RELEASE_FORBIDDEN/);
|
||||
const drifted = candidate();
|
||||
drifted.browsers[0].full_version = "150.0.7871.188";
|
||||
assert.throws(() => validateCandidateDependency(drifted), /WP7_02_CANDIDATE_BROWSER_MISMATCH/);
|
||||
});
|
||||
|
||||
test("TDD-WP7-EXT-001 remains externally blocked without confirmation, config and credential", () => {
|
||||
const readiness = inspectAiGatewayReadiness({
|
||||
candidateRecord: candidate(),
|
||||
confirmed: false,
|
||||
credentialTargets: [],
|
||||
modelConfig: undefined,
|
||||
modelId: WP7_02_MODEL_IDS[0],
|
||||
});
|
||||
assert.equal(AI_GATEWAY_CREDENTIAL_TARGET, "Dada/P0A/worker/ai-gateway");
|
||||
assert.equal(readiness.status, "externally_blocked");
|
||||
assert.equal(readiness.real_calls, 0);
|
||||
assert.deepEqual(readiness.blockers, [
|
||||
"explicit_confirmation_absent",
|
||||
"real_gateway_credentials_absent",
|
||||
"real_model_config_absent",
|
||||
]);
|
||||
assert.equal("verified" in readiness, false);
|
||||
});
|
||||
|
||||
test("TDD-WP7-EXT-001 writes blocked evidence without mock or sensitive payloads", () => {
|
||||
const evidence = WP7_02_MODEL_IDS.map((modelId) => buildBlockedModelEvidence({
|
||||
blockers: ["real_gateway_credentials_absent", "real_model_config_absent"],
|
||||
candidateRecord: candidate(),
|
||||
modelId,
|
||||
runId: "wp7-02-red-test",
|
||||
}));
|
||||
validateIndependentEvidenceSet(evidence);
|
||||
assert.equal(new Set(evidence.map((entry) => entry.evidence_id)).size, 3);
|
||||
for (const entry of evidence) {
|
||||
assert.equal(entry.status, "externally_blocked");
|
||||
assert.equal(entry.external_calls.real_calls, 0);
|
||||
assert.equal(entry.external_calls.mode, "controlled_real_not_executed");
|
||||
assert.equal(entry.matrix.scenarios.every((scenario) => scenario.status === "not_run"), true);
|
||||
assert.equal(entry.manual_review.status, "blocked");
|
||||
assert.equal(entry.redaction.secret_scan, "passed");
|
||||
assert.doesNotMatch(JSON.stringify(entry), /raw_prompt|raw_provider|credential_value|[A-Za-z]:\\\\Users\\\\/i);
|
||||
}
|
||||
|
||||
const shared = structuredClone(evidence);
|
||||
shared[1].evidence_id = shared[0].evidence_id;
|
||||
assert.throws(() => validateIndependentEvidenceSet(shared), /WP7_02_SHARED_EVIDENCE_FORBIDDEN/);
|
||||
});
|
||||
Reference in New Issue
Block a user