| import { describe, it } from 'node:test'; | |
| import assert from 'node:assert/strict'; | |
| import { runFailureLoop } from '../src/failure-loop.js'; | |
| const cleanAudit = { | |
| security: { findings: [] }, | |
| logic: { findings: [] } | |
| }; | |
| const cleanProof = { allVerified: true, orphanArtifacts: [] }; | |
| const badAudit = { | |
| security: { findings: [{ severity: 'critical', category: 'code_injection' }] }, | |
| logic: { findings: [] } | |
| }; | |
| const badProof = { allVerified: false, orphanArtifacts: ['orphan.ts'] }; | |
| describe('failure-loop', () => { | |
| it('passes for clean audit', () => { | |
| const result = runFailureLoop(cleanAudit, cleanProof); | |
| assert.equal(result.requiresRepentance, false); | |
| assert.equal(result.scenarios.length, 7); | |
| }); | |
| it('requires repentance for critical findings', () => { | |
| const result = runFailureLoop(badAudit, badProof); | |
| assert.equal(result.requiresRepentance, true); | |
| assert.ok(result.failuresFound > 0); | |
| }); | |
| it('covers all 7 failure questions', () => { | |
| const result = runFailureLoop(cleanAudit, cleanProof); | |
| const ids = result.scenarios.map(s => s.id); | |
| assert.ok(ids.includes('F-001')); | |
| assert.ok(ids.includes('F-007')); | |
| }); | |
| }); | |