feat(core): add deterministic fidelity release gate
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import type { FidelityVector } from "@siax/c0py-types";
|
||||
|
||||
export interface FidelityPolicy {
|
||||
minimum: Partial<Record<keyof FidelityVector, number | boolean>>;
|
||||
requireZeroRuntimeErrors?: boolean;
|
||||
requireProductionBuild?: boolean;
|
||||
}
|
||||
|
||||
export interface FidelityGateResult {
|
||||
passed: boolean;
|
||||
failures: string[];
|
||||
}
|
||||
|
||||
export const defaultClonePolicy: FidelityPolicy = {
|
||||
minimum: {
|
||||
routeCoverage: 1,
|
||||
interactionCoverage: 1,
|
||||
workflowCoverage: 1,
|
||||
networkContractParity: 1,
|
||||
responsiveCoverage: 1,
|
||||
assets: 1,
|
||||
accessibilityPass: true,
|
||||
},
|
||||
requireZeroRuntimeErrors: true,
|
||||
requireProductionBuild: true,
|
||||
};
|
||||
|
||||
export function evaluateFidelity(
|
||||
vector: FidelityVector,
|
||||
policy: FidelityPolicy = defaultClonePolicy,
|
||||
): FidelityGateResult {
|
||||
const failures: string[] = [];
|
||||
|
||||
for (const [dimension, requirement] of Object.entries(policy.minimum) as Array<
|
||||
[keyof FidelityVector, number | boolean]
|
||||
>) {
|
||||
const actual = vector[dimension];
|
||||
|
||||
if (typeof requirement === "boolean") {
|
||||
if (actual !== requirement) failures.push(`${dimension}: expected ${requirement}, got ${String(actual)}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (typeof actual !== "number" || actual < requirement) {
|
||||
failures.push(`${dimension}: expected >= ${requirement}, got ${String(actual)}`);
|
||||
}
|
||||
}
|
||||
|
||||
if (policy.requireZeroRuntimeErrors && vector.runtimeErrorCount !== 0) {
|
||||
failures.push(`runtimeErrorCount: expected 0, got ${String(vector.runtimeErrorCount)}`);
|
||||
}
|
||||
|
||||
if (policy.requireProductionBuild && vector.productionBuildPass !== true) {
|
||||
failures.push(`productionBuildPass: expected true, got ${String(vector.productionBuildPass)}`);
|
||||
}
|
||||
|
||||
return { passed: failures.length === 0, failures };
|
||||
}
|
||||
Reference in New Issue
Block a user