d48cda4081
CI / Test (ubuntu-latest, Node 18.x, bun) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, npm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, pnpm) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 18.x, yarn) (push) Failing after 15m1s
CI / Test (ubuntu-latest, Node 20.x, bun) (push) Failing after 17m13s
CI / Test (ubuntu-latest, Node 20.x, npm) (push) Failing after 18m42s
CI / Test (ubuntu-latest, Node 20.x, pnpm) (push) Failing after 15m0s
CI / Test (ubuntu-latest, Node 20.x, yarn) (push) Failing after 49m44s
CI / Test (ubuntu-latest, Node 22.x, bun) (push) Failing after 51m55s
CI / Test (ubuntu-latest, Node 22.x, pnpm) (push) Failing after 21m57s
CI / Test (ubuntu-latest, Node 22.x, npm) (push) Failing after 37m39s
CI / Test (ubuntu-latest, Node 22.x, yarn) (push) Failing after 34m7s
CI / Validate Components (push) Failing after 37m15s
CI / Python Tests (push) Failing after 10m1s
CI / Security Scan (push) Failing after 10m1s
CI / Lint (push) Failing after 17m12s
CI / Coverage (push) Failing after 20m19s
CI / Test (macos-latest, Node 18.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 18.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 20.x, yarn) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, bun) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (macos-latest, Node 22.x, yarn) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, npm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, pnpm) (push) Has been cancelled
CI / Test (windows-latest, Node 22.x, yarn) (push) Has been cancelled
60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
const EVALUATION_SCHEMA_VERSION = 'ecc.skill-evaluation.v1';
|
|
|
|
function roundRate(value) {
|
|
return Math.round(value * 1000) / 1000;
|
|
}
|
|
|
|
function summarize(records) {
|
|
const runs = records.length;
|
|
const successes = records.filter(record => record.outcome && record.outcome.success).length;
|
|
const failures = runs - successes;
|
|
return {
|
|
runs,
|
|
successes,
|
|
failures,
|
|
successRate: runs > 0 ? roundRate(successes / runs) : 0
|
|
};
|
|
}
|
|
|
|
function buildSkillEvaluationScaffold(skillId, records, options = {}) {
|
|
const minimumRunsPerVariant = options.minimumRunsPerVariant || 2;
|
|
const amendmentId = options.amendmentId || null;
|
|
const filtered = records.filter(record => record.skill && record.skill.id === skillId);
|
|
const baseline = filtered.filter(record => !record.run || record.run.variant !== 'amended');
|
|
const amended = filtered.filter(record => record.run && record.run.variant === 'amended')
|
|
.filter(record => !amendmentId || record.run.amendmentId === amendmentId);
|
|
|
|
const baselineSummary = summarize(baseline);
|
|
const amendedSummary = summarize(amended);
|
|
const delta = {
|
|
successRate: roundRate(amendedSummary.successRate - baselineSummary.successRate),
|
|
failures: amendedSummary.failures - baselineSummary.failures
|
|
};
|
|
|
|
let recommendation = 'insufficient-data';
|
|
if (baselineSummary.runs >= minimumRunsPerVariant && amendedSummary.runs >= minimumRunsPerVariant) {
|
|
recommendation = delta.successRate > 0 ? 'promote-amendment' : 'keep-baseline';
|
|
}
|
|
|
|
return {
|
|
schemaVersion: EVALUATION_SCHEMA_VERSION,
|
|
generatedAt: new Date().toISOString(),
|
|
skillId,
|
|
amendmentId,
|
|
gate: {
|
|
minimumRunsPerVariant
|
|
},
|
|
baseline: baselineSummary,
|
|
amended: amendedSummary,
|
|
delta,
|
|
recommendation
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
EVALUATION_SCHEMA_VERSION,
|
|
buildSkillEvaluationScaffold
|
|
};
|