feat(harness): add information gain stop and audit

This commit is contained in:
aruo
2026-07-27 01:03:34 +08:00
parent de5a5b09d9
commit d0452184ee
92 changed files with 5019 additions and 122 deletions
@@ -0,0 +1,67 @@
package com.superbiz.agent.harness.progress;
import com.superbiz.agent.harness.contract.EvidenceStatus;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
class DiagnosisProgressTrackerTest {
@Test
void gainedResetsConsecutiveNoGainAndConsumesPendingCallOnce() {
DiagnosisProgressTracker tracker = new DiagnosisProgressTracker(2);
tracker.recordDuplicateScope();
tracker.recordCompleted(call("call-1", "scope-1"), EvidenceStatus.EVIDENCE_FOUND);
tracker.applyPreviousObservation(new PreviousObservation("call-1", InformationGain.GAINED));
DiagnosisProgressSnapshotState state = tracker.snapshot();
assertEquals(0, state.consecutiveNoGain());
assertEquals(DiagnosisCollectionState.COLLECTING, state.collectionState());
assertThrows(IllegalArgumentException.class, () -> tracker.applyPreviousObservation(
new PreviousObservation("call-1", InformationGain.NO_GAIN)));
}
@Test
void rejectsMissingOrOutOfOrderEvaluation() {
DiagnosisProgressTracker tracker = new DiagnosisProgressTracker(2);
tracker.recordCompleted(call("call-1", "scope-1"), EvidenceStatus.EVIDENCE_FOUND);
assertThrows(IllegalArgumentException.class, () -> tracker.applyPreviousObservation(null));
assertThrows(IllegalArgumentException.class, () -> tracker.applyPreviousObservation(
new PreviousObservation("call-other", InformationGain.GAINED)));
assertEquals("call-1", tracker.snapshot().pendingToolCallId());
}
@Test
void deterministicNoEvidenceSaturatesAndStopInstructionIsClaimedOnce() {
DiagnosisProgressTracker tracker = new DiagnosisProgressTracker(2);
tracker.recordCompleted(call("call-1", "scope-1"), EvidenceStatus.NO_EVIDENCE);
tracker.recordCompleted(call("call-2", "scope-2"), EvidenceStatus.NO_EVIDENCE);
DiagnosisProgressSnapshotState state = tracker.snapshot();
assertEquals(DiagnosisCollectionState.SATURATED, state.collectionState());
assertEquals(DiagnosisStopReason.INFORMATION_SATURATED, state.stopReason());
assertTrue(tracker.claimStopInstruction());
assertFalse(tracker.claimStopInstruction());
}
@Test
void onlySuccessfulCompletedScopesParticipateInDuplicateDetection() {
DiagnosisProgressTracker tracker = new DiagnosisProgressTracker(3);
assertFalse(tracker.isDuplicate("lookup_knowledge", "scope-1"));
tracker.recordCompleted(call("call-1", "scope-1"), EvidenceStatus.EVIDENCE_FOUND);
assertTrue(tracker.isDuplicate("lookup_knowledge", "scope-1"));
assertFalse(tracker.isDuplicate("query_logs", "scope-1"));
assertFalse(tracker.isDuplicate("lookup_knowledge", "scope-2"));
}
private CompletedToolCall call(String id, String scope) {
return new CompletedToolCall(id, "lookup_knowledge", scope);
}
}