supervisor-go: add ledger package with Append/Read APIs, tests; refactor CLI to use package; update README

This commit is contained in:
shadowmo
2026-02-23 21:28:28 -06:00
parent bca500623b
commit 6f2a1aa4b1
4 changed files with 235 additions and 122 deletions

View File

@@ -0,0 +1,56 @@
package ledger
import (
"os"
"testing"
)
func TestAppendAndRead(t *testing.T) {
f, err := os.CreateTemp("", "ledger-test-*.jsonl")
if err != nil {
t.Fatalf("tempfile: %v", err)
}
path := f.Name()
f.Close()
defer os.Remove(path)
l := New(path, "stream-1")
// ensure empty read
evs, err := l.ReadAll()
if err != nil {
t.Fatalf("read empty: %v", err)
}
if len(evs) != 0 {
t.Fatalf("expected 0 events, got %d", len(evs))
}
e1, err := l.Append("route_decision", map[string]any{"tier": "fast"})
if err != nil {
t.Fatalf("append1: %v", err)
}
if l.LastHash == nil || *l.LastHash != e1.Hash {
t.Fatalf("lasthash not set after append1")
}
e2, err := l.Append("final_output_emitted", map[string]any{"result": "ok"})
if err != nil {
t.Fatalf("append2: %v", err)
}
if l.LastHash == nil || *l.LastHash != e2.Hash {
t.Fatalf("lasthash not set after append2")
}
if e2.PrevHash == nil || *e2.PrevHash != e1.Hash {
t.Fatalf("prevhash chain broken")
}
evs, err = l.ReadAll()
if err != nil {
t.Fatalf("read: %v", err)
}
if len(evs) != 2 {
t.Fatalf("expected 2 events, got %d", len(evs))
}
if evs[0].Hash != e1.Hash || evs[1].Hash != e2.Hash {
t.Fatalf("readback hashes mismatch")
}
}