feat(watchdog): quarantine escalates to ask_owner; reinstate/retire resolve fail-safe (#45)

This commit is contained in:
Smokey committed 2026-10-28 09:20:34 -06:00
1 parent bf4844c010
commit 720352c45b
6 files changed
+207 -23

No files matched your search

+26
View File
@@ -142,6 +142,32 @@ func (s *NestStore) Create(name string, crows []string) (Nest, error) {
return copyNest(n), nil
}
// RemoveCrow takes one crow out of a nest's membership (the owner's retire
// call, #45). An unknown nest or a crow that is not a member is a no-op: the
// removal is idempotent.
func (s *NestStore) RemoveCrow(nestID, crow string) error {
s.mu.Lock()
defer s.mu.Unlock()
for i := range s.made {
if s.made[i].ID != nestID {
continue
}
j := slices.Index(s.made[i].Crows, crow)
if j < 0 {
return nil
}
old := s.made[i].Crows
rest := slices.Clone(old)
s.made[i].Crows = slices.Delete(rest, j, j+1)
if err := s.save(); err != nil {
s.made[i].Crows = old
return err
}
return nil
}
return nil
}
// save writes atomically, like the ledger. The caller holds s.mu.
func (s *NestStore) save() error {
data, err := json.MarshalIndent(s.made, "", " ")