tests/governance-helpers.ts
Rama main · réplica de lectura del repositorio original.
import { FileDecisionGovernanceStore } from '../src/adapters/storage/decision-governance-store.js';
import { evaluateDecisions, exportDecisionSuite } from '../src/application/decision-evaluation.js';
import { decisionEvidenceDigest, policyVersion, type DecisionReview } from '../src/domain/decision-governance.js';
import { configSchema } from '../src/domain/config.js';
import { taskId } from '../src/domain/identity.js';
import { decisionFixture, decisionResult, decisionSubject } from './decision-helpers.js';
export async function governanceFixture() {
const fixture = await decisionFixture();
const governance = new FileDecisionGovernanceStore(fixture.root);
const config = configSchema.parse({ repository: 'owner/repo', dataDir: fixture.root,
decision: { enabled: true, useManagedPolicy: true, mode: 'gate' } });
for (let index = 0; index < 4; index++) {
const subject = { ...decisionSubject, issue: index + 1, candidateId: taskId(['candidate', index]) };
await fixture.evaluator.evaluate(subject, new AbortController().signal);
}
const records = await fixture.store.list('owner/repo');
for (let index = 0; index < records.length; index++) {
const record = records[index]!;
record.result = decisionResult({ risk: index % 2 ? 'high' : 'low' });
await fixture.store.save(record);
const review: DecisionReview = { schemaVersion: 1, id: taskId(['review', record.id]), repository: 'owner/repo',
decisionId: record.id, inputDigest: record.inputDigest, evidenceDigest: decisionEvidenceDigest(record),
labels: { expectedRoute: index % 2 ? 'review' : 'continue', expectedKind: 'bugfix', expectedRisk: index % 2 ? 'high' : 'low',
testable: true, reviewer: 'local-operator', note: 'Human-reviewed fixed fixture.' }, createdAt: '2026-10-26T00:00:00Z', requestId: taskId(['request', record.id]) };
await governance.saveReview(review);
}
const policy = policyVersion('owner/repo', { name: 'conservative', model: 'jev-1.13.0', mode: 'gate' });
await governance.savePolicy(policy);
const suite = await exportDecisionSuite('owner/repo', 'decision-triage', fixture.store, governance);
const evaluation = await evaluateDecisions(suite, 'owner/repo', config.decision!, policy, fixture.store, governance);
await governance.saveEvaluation(evaluation);
return { ...fixture, config, governance, suite, policy, evaluation, records: await fixture.store.list('owner/repo') };
}