Skip to content

Commit b7695b5

Browse files
fix: skip audit provider unless LLM audit mode is explicit
1 parent 1a0ecce commit b7695b5

1 file changed

Lines changed: 23 additions & 4 deletions

File tree

global-template/docgen/lib/pipeline.mjs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import path from 'node:path';
22
import * as base from './pipeline-base.mjs';
33
import { guardedAudit } from './audit-guard.mjs';
4-
import { advisoryLlmAuditSummary } from './audit-policy.mjs';
4+
import { advisoryLlmAuditSummary, auditLlmMode, deterministicOnlyAuditSummary } from './audit-policy.mjs';
55
import { budgetReport } from './provider.mjs';
66
import { ingestModels } from './indexer.mjs';
77
import { loadConfig, projectPaths, readJson, sourceSnapshot, updateStage, writeJson } from './core.mjs';
@@ -17,23 +17,42 @@ export async function model(root, { skipIndex = false } = {}) {
1717
}
1818
export const plan = base.plan;
1919
export const generate = base.generate;
20+
21+
async function finishDeterministicOnlyAudit(root) {
22+
const paths = projectPaths(root);
23+
const quality = readJson(path.join(paths.audit, 'deterministic.json'));
24+
const summary = deterministicOnlyAuditSummary(quality);
25+
writeJson(path.join(paths.audit, 'quality-summary.json'), summary);
26+
updateStage(root, 'audit', summary.pass ? 'completed' : 'failed', {
27+
...summary,
28+
inputHash: summary.auditInputHash,
29+
mode: 'deterministic-only'
30+
});
31+
if (!summary.pass) throw new Error(`Quality failed before LLM audit: deterministicFailures=${summary.deterministicFailures}, highRiskFindings=0. No audit-provider tokens were spent. See .docgen/audit/deterministic.json.`);
32+
console.log('[docgen] audit DETERMINISTIC-ONLY | pass | provider calls 0');
33+
return summary;
34+
}
35+
2036
export async function audit(root) {
37+
const config = loadConfig(root);
38+
const llmMode = auditLlmMode(config);
2139
try {
22-
return await guardedAudit(root, base.audit);
40+
return await guardedAudit(root, llmMode === 'off' ? finishDeterministicOnlyAudit : base.audit);
2341
} catch (error) {
2442
const paths = projectPaths(root);
2543
const summaryFile = path.join(paths.audit, 'quality-summary.json');
2644
const summary = readJson(summaryFile, null);
27-
const advisory = advisoryLlmAuditSummary(summary, loadConfig(root));
45+
const advisory = advisoryLlmAuditSummary(summary, config);
2846
if (advisory) {
2947
writeJson(summaryFile, advisory);
3048
updateStage(root, 'audit', 'completed', {
3149
...advisory,
3250
inputHash: advisory.auditInputHash,
3351
advisory: true,
52+
llmMode,
3453
originalError: error.message
3554
});
36-
console.warn(`[docgen] audit ADVISORY | ${advisory.advisoryHighRiskFindings} high/critical LLM finding(s) recorded but not blocking. Set audit.blockOnLlmFindings=true to enforce them.`);
55+
console.warn(`[docgen] audit ADVISORY | ${advisory.advisoryHighRiskFindings} high/critical LLM finding(s) recorded but not blocking.`);
3756
return advisory;
3857
}
3958
throw error;

0 commit comments

Comments
 (0)