From 2c6eaaa52d7c9ff16b84655427b6c55cbc31ebfe Mon Sep 17 00:00:00 2001 From: Dotta Date: Thu, 16 Jul 2026 21:37:55 +0000 Subject: [PATCH] fix(ui): explain missing worktree seed provenance Co-Authored-By: Paperclip --- ui/src/components/WorktreeRunEngineBanner.test.tsx | 10 ++++++++-- ui/src/components/WorktreeRunEngineBanner.tsx | 7 +++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ui/src/components/WorktreeRunEngineBanner.test.tsx b/ui/src/components/WorktreeRunEngineBanner.test.tsx index 702187261e4..f9ec2d793bf 100644 --- a/ui/src/components/WorktreeRunEngineBanner.test.tsx +++ b/ui/src/components/WorktreeRunEngineBanner.test.tsx @@ -115,6 +115,12 @@ describe("WorktreeRunEngineBanner", () => { expect(container.textContent).toContain("Toggle it off and back on"); }); + it("explains a missing seed epoch", () => { + const container = mount(suppressed("missing_seed_epoch")); + expect(container.textContent).toContain("missing seed epoch"); + expect(container.textContent).toContain("Toggle off and back on"); + }); + it("explains a flag-disabled run engine", () => { const container = mount(suppressed("flag_disabled")); expect(container.textContent).toContain("Run engine off"); @@ -134,8 +140,8 @@ describe("WorktreeRunEngineBanner", () => { expect(strip?.textContent).toContain("5 inherited runs inactive"); }); - // PAP-14415: the strip supplies its own bold "Run engine" subject, so the - // suppressed predicate must not restate it (no "Run engine run engine off"). + // The strip supplies its own bold "Run engine" subject, so the suppressed + // predicate must not restate it (no "Run engine run engine off"). it("does not stutter the run-engine subject in the suppressed strip", () => { const container = mount(suppressed("flag_disabled", { quarantinedRunCount: 4 }), "strip"); const text = container diff --git a/ui/src/components/WorktreeRunEngineBanner.tsx b/ui/src/components/WorktreeRunEngineBanner.tsx index dfa06d2213d..c33b2c5283b 100644 --- a/ui/src/components/WorktreeRunEngineBanner.tsx +++ b/ui/src/components/WorktreeRunEngineBanner.tsx @@ -58,6 +58,13 @@ function suppressionCopy( "This worktree has not stamped an instance identity yet, so execution fails closed. Toggle off and back on to arm execution.", stripLabel: "suppressed — no identity", }; + case "missing_seed_epoch": + return { + headline: "Execution suppressed — missing seed epoch", + detail: + "This worktree has no seed epoch stamped yet, so execution fails closed. Toggle off and back on to arm execution.", + stripLabel: "suppressed — missing seed epoch", + }; case "instance_id_mismatch": return { headline: "Toggle inactive — bound to another instance",