返回 DeepSeek-Reasonix
goal_progress_test.go
根目录 / internal / evidence / goal_progress_test.go
1 package evidence
2
3 import (
4 "encoding/json"
5 "testing"
6 )
7
8 func TestSuccessfulProgressSignaturesUseObservedReadResult(t *testing.T) {
9 first := ReceiptFromToolCall("grep", json.RawMessage(`{"path":"a.go","pattern":"TODO"}`), true, true)
10 first.ObserveOutput("a.go:10: TODO")
11 repeat := first
12 changed := ReceiptFromToolCall("grep", json.RawMessage(`{"pattern":"TODO","path":"a.go"}`), true, true)
13 changed.ObserveOutput("a.go:10: TODO\na.go:20: TODO")
14
15 firstSig, ok := progressReceiptSignature(first)
16 if !ok {
17 t.Fatal("successful non-empty grep must produce progress evidence")
18 }
19 repeatSig, _ := progressReceiptSignature(repeat)
20 changedSig, _ := progressReceiptSignature(changed)
21 if firstSig != repeatSig {
22 t.Fatalf("same args and result changed identity: %q != %q", firstSig, repeatSig)
23 }
24 if firstSig == changedSig {
25 t.Fatal("same query with changed host-observed output must be new evidence")
26 }
27 if first.OutputBytes == 0 || first.OutputDigest == "" {
28 t.Fatalf("ObserveOutput did not attest output: %+v", first)
29 }
30 }
31
32 func TestSuccessfulProgressFingerprintDeduplicatesReceipts(t *testing.T) {
33 ledger := NewLedger()
34 read := ReceiptFromToolCall("read_file", json.RawMessage(`{"path":"a.go"}`), true, true)
35 read.ObserveOutput("package a")
36 ledger.Record(read)
37 first := ledger.SuccessfulProgressFingerprint()
38
39 ledger.Record(read)
40 if repeat := ledger.SuccessfulProgressFingerprint(); repeat != first {
41 t.Fatalf("exact repeat changed fingerprint: %q != %q", repeat, first)
42 }
43
44 ledger.Record(ReceiptFromToolCall("todo_write", json.RawMessage(`{"todos":[]}`), true, true))
45 if cleared := ledger.SuccessfulProgressFingerprint(); cleared == first {
46 t.Fatal("explicit todo clear did not change fingerprint")
47 }
48 }
49
49 lines GO