package prospective_memory_test import ( "errors" "testing" "git.cin.su/m/Assistant/contracts/authority" contract "git.cin.su/m/Assistant/contracts/continuity" "git.cin.su/m/Assistant/contracts/identity" "git.cin.su/m/Assistant/contracts/work" "git.cin.su/m/Assistant/modules/continuity/domain" "git.cin.su/m/Assistant/platform/ids" ) func TestWS002SurvivesSchedulerLossAndRevalidatesBeforeDelivery(t *testing.T) { item := contract.ProspectiveItem{ID: contract.ProspectiveItemID(ids.ID("reminder")), CommitmentID: contract.CommitmentID(ids.ID("commitment")), OwnerPrincipalID: identity.PrincipalID(ids.ID("creator")), ScopeID: authority.ScopeID(ids.ID("global")), GoalID: work.GoalID(ids.ID("goal")), TriggerAtUnixMillis: 1_800_000_000_000, State: contract.ProspectiveArmed, Revision: 1} store := domain.Recover([]contract.ProspectiveItem{item}) // Scheduler state is discarded; only the canonical snapshot reconstructs work. recovered := domain.Recover(store.Snapshot()) triggered, err := recovered.Trigger(item.ID, 1) if err != nil { t.Fatal(err) } if _, err := recovered.Trigger(item.ID, 1); !errors.Is(err, domain.ErrProspectiveRevision) { t.Fatalf("duplicate trigger error = %v, want revision conflict", err) } revalidating, err := recovered.BeginRevalidation(item.ID, triggered.Revision) if err != nil { t.Fatal(err) } suppressed, err := recovered.FinishRevalidation(item.ID, revalidating.Revision, false) if err != nil { t.Fatal(err) } if suppressed.State != contract.ProspectiveSuppressed { t.Fatalf("state = %s, want SUPPRESSED", suppressed.State) } }