fix herdr launch safety and task context

This commit is contained in:
kami
2026-07-28 13:20:28 +04:00
parent 636ed8a811
commit 58793a5aa3
8 changed files with 826 additions and 74 deletions
+13 -13
View File
@@ -85,7 +85,7 @@ func TestReleaseUploadsHandoffAndReleasesAgent(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(repo, HandoffFile), b, 0644); err != nil {
if err := os.WriteFile(filepath.Join(repo, HandoffReportFile), b, 0644); err != nil {
t.Fatal(err)
}
@@ -105,8 +105,8 @@ func TestReleaseUploadsHandoffAndReleasesAgent(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if got.Anchor.GitSHA != head {
t.Fatalf("stored handoff anchor=%s want=%s", got.Anchor.GitSHA, head)
if got.Anchor.GitSHA == head {
t.Fatal("semantic report should be snapshotted before publication")
}
}
@@ -119,7 +119,7 @@ func TestReleaseRefusesWithoutHandoffFile(t *testing.T) {
}
}
func TestReleaseRefusesOnAnchorMismatch(t *testing.T) {
func TestReleaseDoesNotTrustAgentSuppliedAnchor(t *testing.T) {
repo := t.TempDir()
runGit(t, repo, "init")
runGit(t, repo, "config", "user.email", "t@t")
@@ -130,12 +130,12 @@ func TestReleaseRefusesOnAnchorMismatch(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(repo, HandoffFile), b, 0644); err != nil {
if err := os.WriteFile(filepath.Join(repo, HandoffReportFile), b, 0644); err != nil {
t.Fatal(err)
}
a := CLIAdapter{Client: fakeHerdr(t), Harness: "claude", CAS: &memCAS{}}
if _, err := a.Release(context.Background(), Session{PaneID: "p1", Worktree: repo}); err == nil {
t.Fatal("expected error on anchor mismatch")
if _, err := a.Release(context.Background(), Session{PaneID: "p1", Worktree: repo}); err != nil {
t.Fatalf("Release must derive the anchor itself: %v", err)
}
}
@@ -161,7 +161,7 @@ func TestReleaseScratchCommitsDirtyFilesBeforeUpload(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(repo, HandoffFile), b, 0644); err != nil {
if err := os.WriteFile(filepath.Join(repo, HandoffReportFile), b, 0644); err != nil {
t.Fatal(err)
}
@@ -192,12 +192,12 @@ func TestReleaseScratchCommitsDirtyFilesBeforeUpload(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if got.Anchor.Branch != "orchestra/scratch/t1" || string(branch) != got.Anchor.Branch+"\n" {
if got.Anchor.Branch != "orchestra/scratch/p1" || string(branch) != got.Anchor.Branch+"\n" {
t.Fatalf("expected worktree on scratch branch, got %q (handoff says %q)", branch, got.Anchor.Branch)
}
}
func TestReleaseRefusesOnStaleDirtyFile(t *testing.T) {
func TestReleaseDoesNotTrustAgentSuppliedDirtyFile(t *testing.T) {
repo := t.TempDir()
runGit(t, repo, "init")
runGit(t, repo, "config", "user.email", "t@t")
@@ -218,12 +218,12 @@ func TestReleaseRefusesOnStaleDirtyFile(t *testing.T) {
if err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(repo, HandoffFile), b, 0644); err != nil {
if err := os.WriteFile(filepath.Join(repo, HandoffReportFile), b, 0644); err != nil {
t.Fatal(err)
}
a := CLIAdapter{Client: fakeHerdr(t), Harness: "claude", CAS: &memCAS{}}
if _, err := a.Release(context.Background(), Session{PaneID: "p1", Worktree: repo}); err == nil {
t.Fatal("expected refusal when a dirty file no longer matches the handoff's recorded hash")
if _, err := a.Release(context.Background(), Session{PaneID: "p1", Worktree: repo}); err != nil {
t.Fatalf("Release must derive dirty hashes itself: %v", err)
}
}