Ctrl K
ComunidadGuías…

tests/governance-helpers.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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') };
}