holy-agents / src /failure-loop.ts
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/holy-agents
662ceed verified
Raw
History Blame Contribute Delete
3.64 kB
import type { FailureScenario, FailureLoopResult } from './twins/types.js';
const FAILURE_QUESTIONS: { id: string; question: string; severity: FailureScenario['severity'] }[] = [
{ id: 'F-001', question: 'What breaks first?', severity: 'critical' },
{ id: 'F-002', question: 'What assumption fails?', severity: 'high' },
{ id: 'F-003', question: 'What agent overreaches?', severity: 'critical' },
{ id: 'F-004', question: 'What trust boundary leaks?', severity: 'critical' },
{ id: 'F-005', question: 'What state becomes stale?', severity: 'medium' },
{ id: 'F-006', question: 'What WORM seal fails?', severity: 'high' },
{ id: 'F-007', question: 'What human would be harmed by this failure?', severity: 'critical' },
];
export function runFailureLoop(
auditResult: { security: { findings: { severity: string; category?: string }[] }; logic: { findings: { severity: string }[] } },
reverseProof: { allVerified: boolean; orphanArtifacts: string[] }
): FailureLoopResult {
const scenarios: FailureScenario[] = [];
const secCritical = auditResult.security.findings.filter(f => f.severity === 'critical').length;
const logicCritical = auditResult.logic.findings.filter(f => f.severity === 'critical').length;
scenarios.push({
id: 'F-001',
question: 'What breaks first?',
answer: secCritical > 0
? `Security critical findings (${secCritical}) β€” system breaks at injection point`
: logicCritical > 0
? `Logic critical findings (${logicCritical}) β€” system breaks at constitution level`
: 'No critical failure points identified',
severity: secCritical > 0 || logicCritical > 0 ? 'critical' : 'low'
});
scenarios.push({
id: 'F-002',
question: 'What assumption fails?',
answer: reverseProof.allVerified
? 'All artifacts traceable β€” no unverified assumptions'
: `${reverseProof.orphanArtifacts.length} orphan artifact(s) cannot be traced to originating instruction`,
severity: reverseProof.allVerified ? 'low' : 'high'
});
scenarios.push({
id: 'F-003',
question: 'What agent overreaches?',
answer: secCritical > 0
? 'Agent attempted code injection or command execution beyond scope'
: 'No overreach detected',
severity: secCritical > 0 ? 'critical' : 'low'
});
scenarios.push({
id: 'F-004',
question: 'What trust boundary leaks?',
answer: auditResult.security.findings.some(f => f.category === 'secret_exposure')
? 'Secret exposure β€” trust boundary leaked credentials'
: 'No trust boundary leaks detected',
severity: auditResult.security.findings.some(f => f.category === 'secret_exposure') ? 'critical' : 'low'
});
scenarios.push({
id: 'F-005',
question: 'What state becomes stale?',
answer: 'WORM chain verifies on startup β€” stale state detection active',
severity: 'low'
});
scenarios.push({
id: 'F-006',
question: 'What WORM seal fails?',
answer: 'Chain integrity verified β€” no seal failures',
severity: 'low'
});
scenarios.push({
id: 'F-007',
question: 'What human would be harmed by this failure?',
answer: secCritical > 0
? 'Humans could be harmed by data breach, code execution, or manipulation'
: 'No direct human harm pathway identified',
severity: secCritical > 0 ? 'critical' : 'low'
});
const failuresFound = scenarios.filter(s => s.severity === 'critical' || s.severity === 'high').length;
return {
scenarios,
failuresFound,
requiresRepentance: failuresFound > 0
};
}