From 688edbf4f351bdbcd8cb62a68e42f7cceb2fddce Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 02:20:56 -0700 Subject: [PATCH 01/14] test(fixtures): preserve the 499-record watcher cycle-exit capture Captured 2026-07-31 from a live home's state/.watch-cycle-exits.log. It accumulates over days and cannot be regenerated, so it is committed as raw evidence before any analysis or fix is written against it. --- .../fixtures/watch-cycle-exits.fixture.README | 8 + tests/fixtures/watch-cycle-exits.fixture.log | 499 ++++++++++++++++++ 2 files changed, 507 insertions(+) create mode 100644 tests/fixtures/watch-cycle-exits.fixture.README create mode 100644 tests/fixtures/watch-cycle-exits.fixture.log diff --git a/tests/fixtures/watch-cycle-exits.fixture.README b/tests/fixtures/watch-cycle-exits.fixture.README new file mode 100644 index 00000000000..dec0fc32587 --- /dev/null +++ b/tests/fixtures/watch-cycle-exits.fixture.README @@ -0,0 +1,8 @@ +# Fixture: watcher cycle exits, captured 2026-07-31 from state/.watch-cycle-exits.log +# Records: 499 Captured because this log accumulates over days and cannot be regenerated. +# +# successor=none : 499 / 499 +# exit_code=0 : 499 / 499 +# signal=none : 499 / 499 +# reasons : 8 reason=actionable-check 198 reason=actionable-signal 293 reason=actionable-stale +# sub-5s exits : 112 actionable-stale, 5 actionable-check (22% of all cycles) diff --git a/tests/fixtures/watch-cycle-exits.fixture.log b/tests/fixtures/watch-cycle-exits.fixture.log new file mode 100644 index 00000000000..140ceac05f2 --- /dev/null +++ b/tests/fixtures/watch-cycle-exits.fixture.log @@ -0,0 +1,499 @@ +arm_pid=955938 watcher_pid=955948 origin=started started_at=1785226282 ended_at=1785226981 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:955948|identity:linux-starttime=15418475 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=989851 watcher_pid=989861 origin=started started_at=1785229098 ended_at=1785229556 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:989861|identity:linux-starttime=15700140 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1005082 watcher_pid=1005092 origin=started started_at=1785229610 ended_at=1785230073 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1005092|identity:linux-starttime=15751279 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1017845 watcher_pid=1017855 origin=started started_at=1785230097 ended_at=1785230220 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1017855|identity:linux-starttime=15800042 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1023146 watcher_pid=1023156 origin=started started_at=1785230237 ended_at=1785230769 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1023156|identity:linux-starttime=15813968 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1037836 watcher_pid=1037846 origin=started started_at=1785230833 ended_at=1785230866 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1037846|identity:linux-starttime=15873625 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1039710 watcher_pid=1039720 origin=started started_at=1785230881 ended_at=1785230974 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1039720|identity:linux-starttime=15878424 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1042973 watcher_pid=1042983 origin=started started_at=1785230993 ended_at=1785233730 exit_code=0 signal=none reason=actionable-check beacon_age=2 lock_before=pid:1042983|identity:linux-starttime=15889616 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1112438 watcher_pid=1112448 origin=started started_at=1785234171 ended_at=1785286761 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1112448|identity:linux-starttime=16207423 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1297060 watcher_pid=1297070 origin=started started_at=1785287528 ended_at=1785287558 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1297070|identity:linux-starttime=18471484 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1381477 watcher_pid=1381487 origin=started started_at=1785297563 ended_at=1785297891 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1381487|identity:linux-starttime=19475061 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1410371 watcher_pid=1410381 origin=started started_at=1785297935 ended_at=1785297966 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1410381|identity:linux-starttime=19512224 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1420367 watcher_pid=1420377 origin=started started_at=1785298226 ended_at=1785298499 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1420377|identity:linux-starttime=19541320 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1448186 watcher_pid=1448196 origin=started started_at=1785299283 ended_at=1785299285 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1448196|identity:linux-starttime=19647059 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1453259 watcher_pid=1453269 origin=started started_at=1785299366 ended_at=1785299427 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1453269|identity:linux-starttime=19655350 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1461277 watcher_pid=1461287 origin=started started_at=1785299648 ended_at=1785299678 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1461287|identity:linux-starttime=19683541 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1463403 watcher_pid=1463413 origin=started started_at=1785299693 ended_at=1785299730 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1463413|identity:linux-starttime=19688042 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1468620 watcher_pid=1468635 origin=started started_at=1785299779 ended_at=1785299812 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1468635|identity:linux-starttime=19696715 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1471002 watcher_pid=1471028 origin=started started_at=1785299835 ended_at=1785299874 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1471028|identity:linux-starttime=19702268 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1475830 watcher_pid=1475840 origin=started started_at=1785299900 ended_at=1785299903 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1475840|identity:linux-starttime=19708761 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1478003 watcher_pid=1478013 origin=started started_at=1785299921 ended_at=1785301041 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1478013|identity:linux-starttime=19710903 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1586273 watcher_pid=1586283 origin=started started_at=1785301076 ended_at=1785301351 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:1586283|identity:linux-starttime=19826134 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1614153 watcher_pid=1614163 origin=started started_at=1785301427 ended_at=1785301587 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1614163|identity:linux-starttime=19861235 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1628388 watcher_pid=1628398 origin=started started_at=1785301673 ended_at=1785301704 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1628398|identity:linux-starttime=19885859 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1631683 watcher_pid=1631693 origin=started started_at=1785301751 ended_at=1785301782 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1631693|identity:linux-starttime=19893599 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1633884 watcher_pid=1633894 origin=started started_at=1785301801 ended_at=1785301837 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1633894|identity:linux-starttime=19898635 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1638529 watcher_pid=1638539 origin=started started_at=1785301851 ended_at=1785301853 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1638539|identity:linux-starttime=19903641 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1640036 watcher_pid=1640046 origin=started started_at=1785301867 ended_at=1785301898 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1640046|identity:linux-starttime=19905258 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1644805 watcher_pid=1644815 origin=started started_at=1785301990 ended_at=1785302022 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1644815|identity:linux-starttime=19917545 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1646239 watcher_pid=1646249 origin=started started_at=1785302034 ended_at=1785302069 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1646249|identity:linux-starttime=19921907 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1650600 watcher_pid=1650610 origin=started started_at=1785302082 ended_at=1785302148 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1650610|identity:linux-starttime=19926698 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1656884 watcher_pid=1656894 origin=started started_at=1785302178 ended_at=1785302210 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1656894|identity:linux-starttime=19936362 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1659932 watcher_pid=1659942 origin=started started_at=1785302256 ended_at=1785302289 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:1659942|identity:linux-starttime=19944108 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1661982 watcher_pid=1661992 origin=started started_at=1785302304 ended_at=1785302342 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1661992|identity:linux-starttime=19948948 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1666794 watcher_pid=1666804 origin=started started_at=1785302372 ended_at=1785302376 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1666804|identity:linux-starttime=19955775 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1669050 watcher_pid=1669060 origin=started started_at=1785302386 ended_at=1785302436 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1669060|identity:linux-starttime=19957127 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1672584 watcher_pid=1672594 origin=started started_at=1785302453 ended_at=1785302498 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:1672594|identity:linux-starttime=19963869 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1679085 watcher_pid=1679095 origin=started started_at=1785302542 ended_at=1785302653 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1679095|identity:linux-starttime=19972716 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1689399 watcher_pid=1689409 origin=started started_at=1785302669 ended_at=1785302671 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1689409|identity:linux-starttime=19985445 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1691256 watcher_pid=1691266 origin=started started_at=1785302686 ended_at=1785302756 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1691266|identity:linux-starttime=19987177 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1696921 watcher_pid=1696934 origin=started started_at=1785302769 ended_at=1785302772 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1696934|identity:linux-starttime=19995401 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1699110 watcher_pid=1699120 origin=started started_at=1785302785 ended_at=1785302787 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1699120|identity:linux-starttime=19996986 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1700382 watcher_pid=1700392 origin=started started_at=1785302799 ended_at=1785302803 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1700392|identity:linux-starttime=19998475 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1702260 watcher_pid=1702270 origin=started started_at=1785302822 ended_at=1785302853 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1702270|identity:linux-starttime=20000747 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1703732 watcher_pid=1703742 origin=started started_at=1785302860 ended_at=1785302885 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:1703742|identity:linux-starttime=20004540 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1707655 watcher_pid=1707665 origin=started started_at=1785302903 ended_at=1785302907 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:1707665|identity:linux-starttime=20008808 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1709453 watcher_pid=1709463 origin=started started_at=1785302921 ended_at=1785302987 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:1709463|identity:linux-starttime=20010594 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1717976 watcher_pid=1717986 origin=started started_at=1785303003 ended_at=1785303075 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1717986|identity:linux-starttime=20018812 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1724197 watcher_pid=1724207 origin=started started_at=1785303104 ended_at=1785303152 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:1724207|identity:linux-starttime=20028976 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1730502 watcher_pid=1730512 origin=started started_at=1785303163 ended_at=1785303215 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1730512|identity:linux-starttime=20034871 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1734413 watcher_pid=1734423 origin=started started_at=1785303222 ended_at=1785303270 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:1734423|identity:linux-starttime=20040742 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1741557 watcher_pid=1741567 origin=started started_at=1785303279 ended_at=1785303465 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1741567|identity:linux-starttime=20046473 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1760662 watcher_pid=1760672 origin=started started_at=1785303471 ended_at=1785303502 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1760672|identity:linux-starttime=20065586 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1764262 watcher_pid=1764272 origin=started started_at=1785303518 ended_at=1785303559 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1764272|identity:linux-starttime=20070349 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1769123 watcher_pid=1769133 origin=started started_at=1785303569 ended_at=1785303572 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1769133|identity:linux-starttime=20075433 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1770813 watcher_pid=1770823 origin=started started_at=1785303584 ended_at=1785303588 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:1770823|identity:linux-starttime=20076905 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1773019 watcher_pid=1773029 origin=started started_at=1785303600 ended_at=1785303606 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:1773029|identity:linux-starttime=20078488 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1775626 watcher_pid=1775636 origin=started started_at=1785303617 ended_at=1785303691 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:1775636|identity:linux-starttime=20080202 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1781968 watcher_pid=1781978 origin=started started_at=1785303697 ended_at=1785303752 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:1781978|identity:linux-starttime=20088250 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1789244 watcher_pid=1789254 origin=started started_at=1785303762 ended_at=1785304043 exit_code=0 signal=none reason=actionable-check beacon_age=3 lock_before=pid:1789254|identity:linux-starttime=20094776 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1815200 watcher_pid=1815210 origin=started started_at=1785304139 ended_at=1785304479 exit_code=0 signal=none reason=actionable-signal beacon_age=34 lock_before=pid:1815210|identity:linux-starttime=20132401 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1852352 watcher_pid=1852373 origin=started started_at=1785304706 ended_at=1785304760 exit_code=0 signal=none reason=actionable-signal beacon_age=51 lock_before=pid:1852373|identity:linux-starttime=20189093 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1855740 watcher_pid=1855755 origin=started started_at=1785304796 ended_at=1785304830 exit_code=0 signal=none reason=actionable-signal beacon_age=34 lock_before=pid:1855755|identity:linux-starttime=20198118 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1860510 watcher_pid=1860520 origin=started started_at=1785304858 ended_at=1785304968 exit_code=0 signal=none reason=actionable-signal beacon_age=44 lock_before=pid:1860520|identity:linux-starttime=20204316 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1870538 watcher_pid=1870555 origin=started started_at=1785304978 ended_at=1785305151 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1870555|identity:linux-starttime=20216371 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1891129 watcher_pid=1891143 origin=started started_at=1785305177 ended_at=1785305210 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:1891143|identity:linux-starttime=20236253 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1892932 watcher_pid=1892970 origin=started started_at=1785305218 ended_at=1785305278 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1892970|identity:linux-starttime=20240359 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1901438 watcher_pid=1901453 origin=started started_at=1785305314 ended_at=1785305347 exit_code=0 signal=none reason=actionable-stale beacon_age=9 lock_before=pid:1901453|identity:linux-starttime=20249956 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1909285 watcher_pid=1909295 origin=started started_at=1785305359 ended_at=1785305388 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:1909295|identity:linux-starttime=20254421 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1917708 watcher_pid=1917718 origin=started started_at=1785305399 ended_at=1785305436 exit_code=0 signal=none reason=actionable-signal beacon_age=36 lock_before=pid:1917718|identity:linux-starttime=20258506 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1924096 watcher_pid=1924106 origin=started started_at=1785305563 ended_at=1785305607 exit_code=0 signal=none reason=actionable-signal beacon_age=44 lock_before=pid:1924106|identity:linux-starttime=20274832 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1928841 watcher_pid=1928851 origin=started started_at=1785305672 ended_at=1785305744 exit_code=0 signal=none reason=actionable-stale beacon_age=19 lock_before=pid:1928851|identity:linux-starttime=20285803 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1944180 watcher_pid=1944191 origin=started started_at=1785305754 ended_at=1785305765 exit_code=0 signal=none reason=actionable-stale beacon_age=10 lock_before=pid:1944191|identity:linux-starttime=20294030 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1950165 watcher_pid=1950180 origin=started started_at=1785305786 ended_at=1785305855 exit_code=0 signal=none reason=actionable-stale beacon_age=17 lock_before=pid:1950180|identity:linux-starttime=20297156 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1964936 watcher_pid=1965043 origin=started started_at=1785305887 ended_at=1785305944 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1965043|identity:linux-starttime=20307292 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1974529 watcher_pid=1974544 origin=started started_at=1785305975 ended_at=1785306064 exit_code=0 signal=none reason=actionable-signal beacon_age=89 lock_before=pid:1974544|identity:linux-starttime=20316123 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1978787 watcher_pid=1978819 origin=started started_at=1785306131 ended_at=1785306223 exit_code=0 signal=none reason=actionable-stale beacon_age=88 lock_before=pid:1978819|identity:linux-starttime=20331561 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1984355 watcher_pid=1984368 origin=started started_at=1785306237 ended_at=1785306269 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:1984368|identity:linux-starttime=20342394 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1993895 watcher_pid=1993905 origin=started started_at=1785306372 ended_at=1785306403 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1993905|identity:linux-starttime=20355927 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1997298 watcher_pid=1997308 origin=started started_at=1785306448 ended_at=1785306480 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1997308|identity:linux-starttime=20363521 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1999727 watcher_pid=1999737 origin=started started_at=1785306487 ended_at=1785306490 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1999737|identity:linux-starttime=20367429 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2005476 watcher_pid=2005486 origin=started started_at=1785306570 ended_at=1785306601 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2005486|identity:linux-starttime=20375722 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2010025 watcher_pid=2010035 origin=started started_at=1785306659 ended_at=1785306711 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2010035|identity:linux-starttime=20384603 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2017187 watcher_pid=2017197 origin=started started_at=1785306736 ended_at=1785306756 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2017197|identity:linux-starttime=20392295 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2023527 watcher_pid=2023537 origin=started started_at=1785306784 ended_at=1785306815 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2023537|identity:linux-starttime=20397123 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2031345 watcher_pid=2031355 origin=started started_at=1785307059 ended_at=1785307090 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2031355|identity:linux-starttime=20424641 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2033895 watcher_pid=2033905 origin=started started_at=1785307162 ended_at=1785307195 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:2033905|identity:linux-starttime=20434941 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2037962 watcher_pid=2037976 origin=started started_at=1785307269 ended_at=1785307300 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2037976|identity:linux-starttime=20445609 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2039137 watcher_pid=2039147 origin=started started_at=1785307308 ended_at=1785307355 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:2039147|identity:linux-starttime=20449492 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2048970 watcher_pid=2048980 origin=started started_at=1785307373 ended_at=1785307375 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2048980|identity:linux-starttime=20455981 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2050509 watcher_pid=2050520 origin=started started_at=1785307389 ended_at=1785307392 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:2050520|identity:linux-starttime=20457645 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2052484 watcher_pid=2052494 origin=started started_at=1785307404 ended_at=1785307409 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:2052494|identity:linux-starttime=20459111 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2055077 watcher_pid=2055087 origin=started started_at=1785307420 ended_at=1785307426 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:2055087|identity:linux-starttime=20460760 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2058313 watcher_pid=2058323 origin=started started_at=1785307438 ended_at=1785307447 exit_code=0 signal=none reason=actionable-stale beacon_age=9 lock_before=pid:2058323|identity:linux-starttime=20462559 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2062300 watcher_pid=2062310 origin=started started_at=1785307459 ended_at=1785307470 exit_code=0 signal=none reason=actionable-stale beacon_age=11 lock_before=pid:2062310|identity:linux-starttime=20464649 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2067281 watcher_pid=2067291 origin=started started_at=1785307496 ended_at=1785307509 exit_code=0 signal=none reason=actionable-stale beacon_age=13 lock_before=pid:2067291|identity:linux-starttime=20468363 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2073000 watcher_pid=2073010 origin=started started_at=1785307521 ended_at=1785307670 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2073010|identity:linux-starttime=20470859 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2093350 watcher_pid=2093360 origin=started started_at=1785307677 ended_at=1785307749 exit_code=0 signal=none reason=actionable-stale beacon_age=11 lock_before=pid:2093360|identity:linux-starttime=20486401 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2110163 watcher_pid=2110173 origin=started started_at=1785307767 ended_at=1785307920 exit_code=0 signal=none reason=actionable-stale beacon_age=12 lock_before=pid:2110173|identity:linux-starttime=20495437 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2145290 watcher_pid=2145300 origin=started started_at=1785307930 ended_at=1785308679 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2145300|identity:linux-starttime=20511769 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2311279 watcher_pid=2311289 origin=started started_at=1785308713 ended_at=1785309122 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:2311289|identity:linux-starttime=20590058 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2404404 watcher_pid=2404414 origin=started started_at=1785309133 ended_at=1785309264 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2404414|identity:linux-starttime=20632012 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2429298 watcher_pid=2429308 origin=started started_at=1785309317 ended_at=1785309348 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2429308|identity:linux-starttime=20650407 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2430460 watcher_pid=2430470 origin=started started_at=1785309355 ended_at=1785309413 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:2430470|identity:linux-starttime=20654252 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2447150 watcher_pid=2447160 origin=started started_at=1785309423 ended_at=1785309684 exit_code=0 signal=none reason=actionable-signal beacon_age=34 lock_before=pid:2447160|identity:linux-starttime=20661054 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2509668 watcher_pid=2509694 origin=started started_at=1785309696 ended_at=1785309766 exit_code=0 signal=none reason=actionable-stale beacon_age=34 lock_before=pid:2509694|identity:linux-starttime=20688374 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2522538 watcher_pid=2522548 origin=started started_at=1785309780 ended_at=1785309810 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2522548|identity:linux-starttime=20696757 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2526235 watcher_pid=2526245 origin=started started_at=1785309847 ended_at=1785309878 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2526245|identity:linux-starttime=20703480 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2530334 watcher_pid=2530344 origin=started started_at=1785309898 ended_at=1785309947 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2530344|identity:linux-starttime=20708497 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2537252 watcher_pid=2537262 origin=started started_at=1785309972 ended_at=1785309992 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2537262|identity:linux-starttime=20715929 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2544838 watcher_pid=2544848 origin=started started_at=1785310063 ended_at=1785310094 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2544848|identity:linux-starttime=20725005 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2547964 watcher_pid=2547974 origin=started started_at=1785310101 ended_at=1785310154 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2547974|identity:linux-starttime=20728837 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2556610 watcher_pid=2556620 origin=started started_at=1785310202 ended_at=1785310204 exit_code=0 signal=none reason=actionable-check beacon_age=2 lock_before=pid:2556620|identity:linux-starttime=20738955 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2559594 watcher_pid=2559604 origin=started started_at=1785310256 ended_at=1785310288 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2559604|identity:linux-starttime=20744378 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2561525 watcher_pid=2561535 origin=started started_at=1785310296 ended_at=1785310297 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:2561535|identity:linux-starttime=20748365 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2563369 watcher_pid=2563379 origin=started started_at=1785310313 ended_at=1785310332 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2563379|identity:linux-starttime=20749992 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2567707 watcher_pid=2567717 origin=started started_at=1785310342 ended_at=1785310345 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2567717|identity:linux-starttime=20752979 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2570629 watcher_pid=2570639 origin=started started_at=1785310364 ended_at=1785310388 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:2570639|identity:linux-starttime=20755184 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2577651 watcher_pid=2577661 origin=started started_at=1785310400 ended_at=1785310531 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2577661|identity:linux-starttime=20758729 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2597875 watcher_pid=2597885 origin=started started_at=1785310594 ended_at=1785310596 exit_code=0 signal=none reason=actionable-check beacon_age=2 lock_before=pid:2597885|identity:linux-starttime=20778140 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2600164 watcher_pid=2600174 origin=started started_at=1785310639 ended_at=1785310671 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:2600174|identity:linux-starttime=20782664 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2602298 watcher_pid=2602308 origin=started started_at=1785310719 ended_at=1785310723 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:2602308|identity:linux-starttime=20790673 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2605024 watcher_pid=2605034 origin=started started_at=1785310736 ended_at=1785310787 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2605034|identity:linux-starttime=20792343 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2609510 watcher_pid=2609520 origin=started started_at=1785310800 ended_at=1785310801 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:2609520|identity:linux-starttime=20798728 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2611262 watcher_pid=2611272 origin=started started_at=1785310819 ended_at=1785310858 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2611272|identity:linux-starttime=20800644 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2618279 watcher_pid=2618289 origin=started started_at=1785310872 ended_at=1785311029 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:2618289|identity:linux-starttime=20805906 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2643731 watcher_pid=2643741 origin=started started_at=1785311049 ended_at=1785311049 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:2643741|identity:linux-starttime=20823647 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2645454 watcher_pid=2645464 origin=started started_at=1785311076 ended_at=1785311114 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2645464|identity:linux-starttime=20826296 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2654318 watcher_pid=2654328 origin=started started_at=1785311220 ended_at=1785311221 exit_code=0 signal=none reason=actionable-check beacon_age=1 lock_before=pid:2654328|identity:linux-starttime=20840701 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2656277 watcher_pid=2656287 origin=started started_at=1785311256 ended_at=1785311286 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2656287|identity:linux-starttime=20844342 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2658163 watcher_pid=2658173 origin=started started_at=1785311332 ended_at=1785311365 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:2658173|identity:linux-starttime=20851911 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2659407 watcher_pid=2659417 origin=started started_at=1785311374 ended_at=1785311405 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2659417|identity:linux-starttime=20856112 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2660697 watcher_pid=2660707 origin=started started_at=1785311413 ended_at=1785311416 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:2660707|identity:linux-starttime=20860083 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2664165 watcher_pid=2664175 origin=started started_at=1785311506 ended_at=1785311524 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:2664175|identity:linux-starttime=20869321 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2667560 watcher_pid=2667570 origin=started started_at=1785311547 ended_at=1785311549 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:2667570|identity:linux-starttime=20873492 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2670587 watcher_pid=2670603 origin=started started_at=1785311609 ended_at=1785311792 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:2670603|identity:linux-starttime=20879662 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2691492 watcher_pid=2691502 origin=started started_at=1785311827 ended_at=1785311861 exit_code=0 signal=none reason=actionable-signal beacon_age=34 lock_before=pid:2691502|identity:linux-starttime=20901476 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2693168 watcher_pid=2693178 origin=started started_at=1785311877 ended_at=1785311914 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2693178|identity:linux-starttime=20906480 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2698616 watcher_pid=2698626 origin=started started_at=1785311933 ended_at=1785312147 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:2698626|identity:linux-starttime=20912022 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2727077 watcher_pid=2727087 origin=started started_at=1785312166 ended_at=1785312197 exit_code=0 signal=none reason=actionable-stale beacon_age=31 lock_before=pid:2727087|identity:linux-starttime=20935350 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2729230 watcher_pid=2729240 origin=started started_at=1785312219 ended_at=1785312504 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2729240|identity:linux-starttime=20940660 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=36928 watcher_pid=36938 origin=started started_at=1785347427 ended_at=1785347429 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:36938|identity:linux-starttime=284751 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=38282 watcher_pid=38292 origin=started started_at=1785347443 ended_at=1785347446 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:38292|identity:linux-starttime=286425 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=40022 watcher_pid=40032 origin=started started_at=1785347458 ended_at=1785347460 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:40032|identity:linux-starttime=287897 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=41943 watcher_pid=41953 origin=started started_at=1785347512 ended_at=1785347529 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:41953|identity:linux-starttime=293251 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=47720 watcher_pid=47730 origin=started started_at=1785347639 ended_at=1785347671 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:47730|identity:linux-starttime=306009 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=48917 watcher_pid=48927 origin=started started_at=1785347679 ended_at=1785348312 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:48927|identity:linux-starttime=309935 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=156278 watcher_pid=156288 origin=started started_at=1785348907 ended_at=1785348938 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:156288|identity:linux-starttime=432818 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=166105 watcher_pid=166115 origin=started started_at=1785349025 ended_at=1785349055 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:166115|identity:linux-starttime=444592 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=174634 watcher_pid=174644 origin=started started_at=1785349171 ended_at=1785349201 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:174644|identity:linux-starttime=459148 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=209301 watcher_pid=209325 origin=started started_at=1785349330 ended_at=1785349362 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:209325|identity:linux-starttime=475135 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=311727 watcher_pid=311737 origin=started started_at=1785349521 ended_at=1785349601 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:311737|identity:linux-starttime=494192 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=412358 watcher_pid=412386 origin=started started_at=1785349639 ended_at=1785349672 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:412386|identity:linux-starttime=506036 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=444216 watcher_pid=444226 origin=started started_at=1785349686 ended_at=1785349704 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:444226|identity:linux-starttime=510671 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=450685 watcher_pid=450711 origin=started started_at=1785349726 ended_at=1785349758 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:450711|identity:linux-starttime=514733 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=483184 watcher_pid=483198 origin=started started_at=1785349782 ended_at=1785349816 exit_code=0 signal=none reason=actionable-stale beacon_age=34 lock_before=pid:483198|identity:linux-starttime=520279 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=577787 watcher_pid=577808 origin=started started_at=1785349899 ended_at=1785349929 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:577808|identity:linux-starttime=531970 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=644419 watcher_pid=644438 origin=started started_at=1785349947 ended_at=1785349980 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:644438|identity:linux-starttime=536748 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=684893 watcher_pid=684916 origin=started started_at=1785349994 ended_at=1785350017 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:684916|identity:linux-starttime=541512 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=792649 watcher_pid=792659 origin=started started_at=1785350142 ended_at=1785350174 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:792659|identity:linux-starttime=556312 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=805727 watcher_pid=805737 origin=started started_at=1785350183 ended_at=1785350184 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:805737|identity:linux-starttime=560388 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=816505 watcher_pid=816530 origin=started started_at=1785350226 ended_at=1785350228 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:816530|identity:linux-starttime=564664 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=820971 watcher_pid=820995 origin=started started_at=1785350248 ended_at=1785350254 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:820995|identity:linux-starttime=566933 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=826862 watcher_pid=826872 origin=started started_at=1785350284 ended_at=1785350287 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:826872|identity:linux-starttime=570456 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=846427 watcher_pid=846437 origin=started started_at=1785350313 ended_at=1785350340 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:846437|identity:linux-starttime=573420 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=858593 watcher_pid=858603 origin=started started_at=1785350371 ended_at=1785350403 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:858603|identity:linux-starttime=579229 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=861246 watcher_pid=861257 origin=started started_at=1785350458 ended_at=1785350490 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:861257|identity:linux-starttime=587924 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=862960 watcher_pid=862970 origin=started started_at=1785350501 ended_at=1785350509 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:862970|identity:linux-starttime=592150 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=868440 watcher_pid=868450 origin=started started_at=1785350529 ended_at=1785350553 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:868450|identity:linux-starttime=595013 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=876008 watcher_pid=876018 origin=started started_at=1785350604 ended_at=1785350611 exit_code=0 signal=none reason=actionable-stale beacon_age=7 lock_before=pid:876018|identity:linux-starttime=602456 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=879755 watcher_pid=879765 origin=started started_at=1785350623 ended_at=1785350649 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:879765|identity:linux-starttime=604373 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=46397 watcher_pid=46407 origin=started started_at=1785362177 ended_at=1785362179 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:46407|identity:linux-starttime=241237 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=48059 watcher_pid=48069 origin=started started_at=1785362201 ended_at=1785362203 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:48069|identity:linux-starttime=243623 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=49844 watcher_pid=49854 origin=started started_at=1785362213 ended_at=1785362215 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:49854|identity:linux-starttime=244874 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=52111 watcher_pid=52121 origin=started started_at=1785362239 ended_at=1785362240 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:52121|identity:linux-starttime=247437 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=55490 watcher_pid=55500 origin=started started_at=1785362297 ended_at=1785362300 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:55500|identity:linux-starttime=253292 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=57964 watcher_pid=57974 origin=started started_at=1785362309 ended_at=1785362313 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:57974|identity:linux-starttime=254483 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=61971 watcher_pid=61981 origin=started started_at=1785362335 ended_at=1785362338 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:61981|identity:linux-starttime=257099 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=66825 watcher_pid=66835 origin=started started_at=1785362355 ended_at=1785362356 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:66835|identity:linux-starttime=259036 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=70170 watcher_pid=70180 origin=started started_at=1785362372 ended_at=1785362374 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:70180|identity:linux-starttime=260760 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=76232 watcher_pid=76242 origin=started started_at=1785362389 ended_at=1785362625 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:76242|identity:linux-starttime=262424 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=150259 watcher_pid=150269 origin=started started_at=1785362689 ended_at=1785362719 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:150269|identity:linux-starttime=292458 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=151788 watcher_pid=151798 origin=started started_at=1785362729 ended_at=1785365015 exit_code=0 signal=none reason=actionable-check beacon_age=2 lock_before=pid:151798|identity:linux-starttime=296512 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=919911 watcher_pid=919923 origin=started started_at=1785365809 ended_at=1785365847 exit_code=0 signal=none reason=actionable-signal beacon_age=34 lock_before=pid:919923|identity:linux-starttime=604485 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=934874 watcher_pid=934884 origin=started started_at=1785365865 ended_at=1785365912 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:934884|identity:linux-starttime=610074 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=961095 watcher_pid=961105 origin=started started_at=1785366232 ended_at=1785366263 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:961105|identity:linux-starttime=646727 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=967326 watcher_pid=967336 origin=started started_at=1785366303 ended_at=1785366334 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:967336|identity:linux-starttime=653891 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=972176 watcher_pid=972186 origin=started started_at=1785366422 ended_at=1785366456 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:972186|identity:linux-starttime=665745 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=981951 watcher_pid=981961 origin=started started_at=1785366477 ended_at=1785366508 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:981961|identity:linux-starttime=671308 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=987085 watcher_pid=987095 origin=started started_at=1785366611 ended_at=1785366642 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:987095|identity:linux-starttime=684658 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=989239 watcher_pid=989249 origin=started started_at=1785366665 ended_at=1785366671 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:989249|identity:linux-starttime=690117 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=993217 watcher_pid=993227 origin=started started_at=1785366697 ended_at=1785366730 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:993227|identity:linux-starttime=693278 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=995889 watcher_pid=995899 origin=started started_at=1785366741 ended_at=1785366801 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:995899|identity:linux-starttime=697624 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1002436 watcher_pid=1002446 origin=started started_at=1785366850 ended_at=1785366855 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:1002446|identity:linux-starttime=708526 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1004592 watcher_pid=1004608 origin=started started_at=1785366878 ended_at=1785366918 exit_code=0 signal=none reason=actionable-stale beacon_age=40 lock_before=pid:1004608|identity:linux-starttime=711388 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1009256 watcher_pid=1009274 origin=started started_at=1785366949 ended_at=1785366984 exit_code=0 signal=none reason=actionable-signal beacon_age=35 lock_before=pid:1009274|identity:linux-starttime=718475 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1011448 watcher_pid=1011458 origin=started started_at=1785366994 ended_at=1785366998 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1011458|identity:linux-starttime=723016 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1018090 watcher_pid=1018103 origin=started started_at=1785367123 ended_at=1785367174 exit_code=0 signal=none reason=actionable-stale beacon_age=19 lock_before=pid:1018103|identity:linux-starttime=735859 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1035651 watcher_pid=1035669 origin=started started_at=1785367209 ended_at=1785368858 exit_code=0 signal=none reason=actionable-stale beacon_age=12 lock_before=pid:1035669|identity:linux-starttime=744468 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2046385 watcher_pid=2046395 origin=started started_at=1785368925 ended_at=1785369641 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:2046395|identity:linux-starttime=916030 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2688045 watcher_pid=2688064 origin=started started_at=1785369654 ended_at=1785369721 exit_code=0 signal=none reason=actionable-stale beacon_age=13 lock_before=pid:2688064|identity:linux-starttime=988995 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2714360 watcher_pid=2714370 origin=started started_at=1785369765 ended_at=1785369796 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2714370|identity:linux-starttime=1000071 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2716675 watcher_pid=2716685 origin=started started_at=1785369806 ended_at=1785370087 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:2716685|identity:linux-starttime=1004194 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2811877 watcher_pid=2811887 origin=started started_at=1785370106 ended_at=1785370166 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2811887|identity:linux-starttime=1034206 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2868599 watcher_pid=2868618 origin=started started_at=1785370212 ended_at=1785370244 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:2868618|identity:linux-starttime=1044758 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2911085 watcher_pid=2911108 origin=started started_at=1785370252 ended_at=1785370294 exit_code=0 signal=none reason=actionable-stale beacon_age=11 lock_before=pid:2911108|identity:linux-starttime=1048809 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2993996 watcher_pid=2994013 origin=started started_at=1785370434 ended_at=1785370468 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:2994013|identity:linux-starttime=1066930 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3081690 watcher_pid=3081709 origin=started started_at=1785370568 ended_at=1785370577 exit_code=0 signal=none reason=actionable-stale beacon_age=9 lock_before=pid:3081709|identity:linux-starttime=1080357 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3104081 watcher_pid=3104102 origin=started started_at=1785370589 ended_at=1785370601 exit_code=0 signal=none reason=actionable-stale beacon_age=12 lock_before=pid:3104102|identity:linux-starttime=1082492 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3141255 watcher_pid=3141280 origin=started started_at=1785370625 ended_at=1785370628 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3141280|identity:linux-starttime=1086055 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3156833 watcher_pid=3156843 origin=started started_at=1785370642 ended_at=1785370778 exit_code=0 signal=none reason=actionable-stale beacon_age=14 lock_before=pid:3156843|identity:linux-starttime=1087786 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3262289 watcher_pid=3262309 origin=started started_at=1785370789 ended_at=1785371041 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:3262309|identity:linux-starttime=1102522 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3441414 watcher_pid=3441425 origin=started started_at=1785371055 ended_at=1785371059 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:3441425|identity:linux-starttime=1129065 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3445645 watcher_pid=3445655 origin=started started_at=1785371071 ended_at=1785371104 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:3445655|identity:linux-starttime=1130649 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3457563 watcher_pid=3457588 origin=started started_at=1785371145 ended_at=1785371213 exit_code=0 signal=none reason=actionable-stale beacon_age=14 lock_before=pid:3457588|identity:linux-starttime=1138077 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3491198 watcher_pid=3491208 origin=started started_at=1785371223 ended_at=1785371255 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3491208|identity:linux-starttime=1145898 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3492779 watcher_pid=3492789 origin=started started_at=1785371270 ended_at=1785371331 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3492789|identity:linux-starttime=1150587 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3503688 watcher_pid=3503698 origin=started started_at=1785371356 ended_at=1785371387 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3503698|identity:linux-starttime=1159189 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3505186 watcher_pid=3505196 origin=started started_at=1785371398 ended_at=1785371439 exit_code=0 signal=none reason=actionable-stale beacon_age=12 lock_before=pid:3505196|identity:linux-starttime=1163419 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3517493 watcher_pid=3517503 origin=started started_at=1785371453 ended_at=1785371455 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3517503|identity:linux-starttime=1168843 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3519147 watcher_pid=3519157 origin=started started_at=1785371468 ended_at=1785371721 exit_code=0 signal=none reason=actionable-signal beacon_age=35 lock_before=pid:3519157|identity:linux-starttime=1170382 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3575615 watcher_pid=3575633 origin=started started_at=1785371915 ended_at=1785371952 exit_code=0 signal=none reason=actionable-signal beacon_age=36 lock_before=pid:3575633|identity:linux-starttime=1215070 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3578809 watcher_pid=3578827 origin=started started_at=1785371987 ended_at=1785372128 exit_code=0 signal=none reason=actionable-signal beacon_age=34 lock_before=pid:3578827|identity:linux-starttime=1222256 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3608786 watcher_pid=3608808 origin=started started_at=1785372148 ended_at=1785372219 exit_code=0 signal=none reason=actionable-stale beacon_age=27 lock_before=pid:3608808|identity:linux-starttime=1238415 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3654262 watcher_pid=3654443 origin=started started_at=1785372236 ended_at=1785372359 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3654443|identity:linux-starttime=1247138 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3717732 watcher_pid=3717742 origin=started started_at=1785372434 ended_at=1785372467 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3717742|identity:linux-starttime=1267003 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3719385 watcher_pid=3719395 origin=started started_at=1785372485 ended_at=1785372621 exit_code=0 signal=none reason=actionable-signal beacon_age=34 lock_before=pid:3719395|identity:linux-starttime=1272055 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3737236 watcher_pid=3737246 origin=started started_at=1785372636 ended_at=1785372648 exit_code=0 signal=none reason=actionable-stale beacon_age=11 lock_before=pid:3737246|identity:linux-starttime=1287169 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3741520 watcher_pid=3741530 origin=started started_at=1785372662 ended_at=1785372668 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:3741530|identity:linux-starttime=1289762 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3743216 watcher_pid=3743226 origin=started started_at=1785372681 ended_at=1785372688 exit_code=0 signal=none reason=actionable-stale beacon_age=7 lock_before=pid:3743226|identity:linux-starttime=1291692 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3745176 watcher_pid=3745186 origin=started started_at=1785372700 ended_at=1785372709 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:3745186|identity:linux-starttime=1293618 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3749621 watcher_pid=3749631 origin=started started_at=1785372751 ended_at=1785372763 exit_code=0 signal=none reason=actionable-stale beacon_age=11 lock_before=pid:3749631|identity:linux-starttime=1298714 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3766666 watcher_pid=3766676 origin=started started_at=1785373222 ended_at=1785373268 exit_code=0 signal=none reason=actionable-signal beacon_age=45 lock_before=pid:3766676|identity:linux-starttime=1345801 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3772352 watcher_pid=3772367 origin=started started_at=1785373348 ended_at=1785373380 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3772367|identity:linux-starttime=1358343 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3775823 watcher_pid=3775834 origin=started started_at=1785373453 ended_at=1785373485 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3775834|identity:linux-starttime=1368874 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3778949 watcher_pid=3778959 origin=started started_at=1785373541 ended_at=1785373579 exit_code=0 signal=none reason=actionable-signal beacon_age=38 lock_before=pid:3778959|identity:linux-starttime=1377651 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3781976 watcher_pid=3781986 origin=started started_at=1785373608 ended_at=1785373615 exit_code=0 signal=none reason=actionable-stale beacon_age=7 lock_before=pid:3781986|identity:linux-starttime=1384369 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3784953 watcher_pid=3784965 origin=started started_at=1785373638 ended_at=1785373647 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:3784965|identity:linux-starttime=1387406 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3788169 watcher_pid=3788188 origin=started started_at=1785373666 ended_at=1785373672 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:3788188|identity:linux-starttime=1390152 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3789965 watcher_pid=3789975 origin=started started_at=1785373685 ended_at=1785373690 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:3789975|identity:linux-starttime=1392108 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3791930 watcher_pid=3791946 origin=started started_at=1785373709 ended_at=1785373713 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:3791946|identity:linux-starttime=1394434 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3797684 watcher_pid=3797698 origin=started started_at=1785373813 ended_at=1785373844 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3797698|identity:linux-starttime=1404836 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3800303 watcher_pid=3800313 origin=started started_at=1785373884 ended_at=1785373895 exit_code=0 signal=none reason=actionable-stale beacon_age=11 lock_before=pid:3800313|identity:linux-starttime=1411969 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3802933 watcher_pid=3802943 origin=started started_at=1785373913 ended_at=1785373927 exit_code=0 signal=none reason=actionable-stale beacon_age=13 lock_before=pid:3802943|identity:linux-starttime=1414913 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3807565 watcher_pid=3807575 origin=started started_at=1785373946 ended_at=1785373948 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:3807575|identity:linux-starttime=1418150 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3809362 watcher_pid=3809378 origin=started started_at=1785373989 ended_at=1785374022 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:3809378|identity:linux-starttime=1422426 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3811221 watcher_pid=3811231 origin=started started_at=1785374036 ended_at=1785374096 exit_code=0 signal=none reason=actionable-stale beacon_age=24 lock_before=pid:3811231|identity:linux-starttime=1427169 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3823699 watcher_pid=3823709 origin=started started_at=1785374159 ended_at=1785374267 exit_code=0 signal=none reason=actionable-stale beacon_age=24 lock_before=pid:3823709|identity:linux-starttime=1439446 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3843505 watcher_pid=3843515 origin=started started_at=1785374288 ended_at=1785374516 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3843515|identity:linux-starttime=1452322 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3879161 watcher_pid=3879171 origin=started started_at=1785374581 ended_at=1785374584 exit_code=0 signal=none reason=actionable-check beacon_age=2 lock_before=pid:3879171|identity:linux-starttime=1481695 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3881737 watcher_pid=3881747 origin=started started_at=1785374650 ended_at=1785374734 exit_code=0 signal=none reason=actionable-stale beacon_age=16 lock_before=pid:3881747|identity:linux-starttime=1488533 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3895761 watcher_pid=3895771 origin=started started_at=1785374750 ended_at=1785375057 exit_code=0 signal=none reason=actionable-signal beacon_age=35 lock_before=pid:3895771|identity:linux-starttime=1498572 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3941533 watcher_pid=3941543 origin=started started_at=1785375251 ended_at=1785375308 exit_code=0 signal=none reason=actionable-stale beacon_age=9 lock_before=pid:3941543|identity:linux-starttime=1548643 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3955967 watcher_pid=3955977 origin=started started_at=1785375324 ended_at=1785375501 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3955977|identity:linux-starttime=1555965 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3988728 watcher_pid=3988738 origin=started started_at=1785375519 ended_at=1785375577 exit_code=0 signal=none reason=actionable-stale beacon_age=10 lock_before=pid:3988738|identity:linux-starttime=1575507 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4003142 watcher_pid=4003152 origin=started started_at=1785375592 ended_at=1785376105 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:4003152|identity:linux-starttime=1582809 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4108472 watcher_pid=4108482 origin=started started_at=1785376121 ended_at=1785376169 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:4108482|identity:linux-starttime=1635699 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4122185 watcher_pid=4122195 origin=started started_at=1785376186 ended_at=1785376442 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:4122195|identity:linux-starttime=1642124 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4184404 watcher_pid=4184414 origin=started started_at=1785376456 ended_at=1785376487 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:4184414|identity:linux-starttime=1669157 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4185881 watcher_pid=4185891 origin=started started_at=1785376497 ended_at=1785376940 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:4185891|identity:linux-starttime=1673237 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=103475 watcher_pid=103485 origin=started started_at=1785377038 ended_at=1785377128 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:103485|identity:linux-starttime=1727407 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=123164 watcher_pid=123174 origin=started started_at=1785377154 ended_at=1785377204 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:123174|identity:linux-starttime=1739000 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=139419 watcher_pid=139430 origin=started started_at=1785377658 ended_at=1785377664 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:139430|identity:linux-starttime=1789405 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=142320 watcher_pid=142330 origin=started started_at=1785377682 ended_at=1785377691 exit_code=0 signal=none reason=actionable-stale beacon_age=9 lock_before=pid:142330|identity:linux-starttime=1791750 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=146687 watcher_pid=146698 origin=started started_at=1785377704 ended_at=1785377903 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:146698|identity:linux-starttime=1793976 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=195973 watcher_pid=195983 origin=started started_at=1785377917 ended_at=1785377986 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:195983|identity:linux-starttime=1815258 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=213420 watcher_pid=213430 origin=started started_at=1785377999 ended_at=1785378021 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:213430|identity:linux-starttime=1823509 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=220032 watcher_pid=220042 origin=started started_at=1785378035 ended_at=1785378307 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:220042|identity:linux-starttime=1827051 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=287649 watcher_pid=287659 origin=started started_at=1785378324 ended_at=1785378352 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:287659|identity:linux-starttime=1856013 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=296388 watcher_pid=296398 origin=started started_at=1785378366 ended_at=1785380384 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:296398|identity:linux-starttime=1860193 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=772866 watcher_pid=772876 origin=started started_at=1785380455 ended_at=1785380458 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:772876|identity:linux-starttime=2069113 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=774874 watcher_pid=774884 origin=started started_at=1785380474 ended_at=1785380478 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:774884|identity:linux-starttime=2070967 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=776778 watcher_pid=776791 origin=started started_at=1785380495 ended_at=1785380503 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:776791|identity:linux-starttime=2073028 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=780649 watcher_pid=780659 origin=started started_at=1785380518 ended_at=1785380525 exit_code=0 signal=none reason=actionable-stale beacon_age=7 lock_before=pid:780659|identity:linux-starttime=2075389 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=785407 watcher_pid=785417 origin=started started_at=1785380538 ended_at=1785380711 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:785417|identity:linux-starttime=2077394 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=817761 watcher_pid=817771 origin=started started_at=1785380821 ended_at=1785380826 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:817771|identity:linux-starttime=2105722 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=820051 watcher_pid=820061 origin=started started_at=1785380848 ended_at=1785380903 exit_code=0 signal=none reason=actionable-stale beacon_age=9 lock_before=pid:820061|identity:linux-starttime=2108406 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=834223 watcher_pid=834233 origin=started started_at=1785380917 ended_at=1785381274 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:834233|identity:linux-starttime=2115240 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=911090 watcher_pid=911100 origin=started started_at=1785381291 ended_at=1785381364 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:911100|identity:linux-starttime=2152710 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=930192 watcher_pid=930202 origin=started started_at=1785381380 ended_at=1785381382 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:930202|identity:linux-starttime=2161594 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=931653 watcher_pid=931663 origin=started started_at=1785381404 ended_at=1785381406 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:931663|identity:linux-starttime=2164012 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=933247 watcher_pid=933257 origin=started started_at=1785381422 ended_at=1785381425 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:933257|identity:linux-starttime=2165784 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=935047 watcher_pid=935057 origin=started started_at=1785381437 ended_at=1785381440 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:935057|identity:linux-starttime=2167299 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=937296 watcher_pid=937307 origin=started started_at=1785381459 ended_at=1785381463 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:937307|identity:linux-starttime=2169474 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=939909 watcher_pid=939919 origin=started started_at=1785381474 ended_at=1785381481 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:939919|identity:linux-starttime=2171020 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=943913 watcher_pid=943923 origin=started started_at=1785381494 ended_at=1785381503 exit_code=0 signal=none reason=actionable-stale beacon_age=9 lock_before=pid:943923|identity:linux-starttime=2172942 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=948993 watcher_pid=949004 origin=started started_at=1785381515 ended_at=1785381701 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:949004|identity:linux-starttime=2175121 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=986879 watcher_pid=986889 origin=started started_at=1785381736 ended_at=1785382038 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:986889|identity:linux-starttime=2197222 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1053114 watcher_pid=1053124 origin=started started_at=1785382080 ended_at=1785382098 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1053124|identity:linux-starttime=2231571 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1059721 watcher_pid=1059731 origin=started started_at=1785382112 ended_at=1785382150 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1059731|identity:linux-starttime=2234737 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1069706 watcher_pid=1069716 origin=started started_at=1785382163 ended_at=1785382164 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1069716|identity:linux-starttime=2239842 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1072388 watcher_pid=1072398 origin=started started_at=1785382216 ended_at=1785382218 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1072398|identity:linux-starttime=2245158 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1074328 watcher_pid=1074338 origin=started started_at=1785382231 ended_at=1785382234 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1074338|identity:linux-starttime=2246687 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1077613 watcher_pid=1077623 origin=started started_at=1785382285 ended_at=1785382318 exit_code=0 signal=none reason=actionable-stale beacon_age=33 lock_before=pid:1077623|identity:linux-starttime=2252055 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1081789 watcher_pid=1081799 origin=started started_at=1785382333 ended_at=1785382334 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1081799|identity:linux-starttime=2256853 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1085655 watcher_pid=1085665 origin=started started_at=1785382349 ended_at=1785382352 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1085665|identity:linux-starttime=2258439 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1097286 watcher_pid=1097296 origin=started started_at=1785382381 ended_at=1785382386 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:1097296|identity:linux-starttime=2261677 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1119949 watcher_pid=1119959 origin=started started_at=1785382418 ended_at=1785382448 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1119959|identity:linux-starttime=2265341 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1122649 watcher_pid=1122659 origin=started started_at=1785382464 ended_at=1785382864 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1122659|identity:linux-starttime=2269934 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1500315 watcher_pid=1500336 origin=started started_at=1785382898 ended_at=1785382899 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1500336|identity:linux-starttime=2313383 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1532708 watcher_pid=1532730 origin=started started_at=1785382919 ended_at=1785382949 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1532730|identity:linux-starttime=2315431 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1663564 watcher_pid=1663580 origin=started started_at=1785383060 ended_at=1785383092 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:1663580|identity:linux-starttime=2329542 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1672866 watcher_pid=1672876 origin=started started_at=1785383107 ended_at=1785383108 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1672876|identity:linux-starttime=2334229 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1678282 watcher_pid=1678292 origin=started started_at=1785383122 ended_at=1785383124 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1678292|identity:linux-starttime=2335780 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1691471 watcher_pid=1691485 origin=started started_at=1785383138 ended_at=1785383141 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1691485|identity:linux-starttime=2337351 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1711768 watcher_pid=1711935 origin=started started_at=1785383154 ended_at=1785383156 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1711935|identity:linux-starttime=2338960 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1722153 watcher_pid=1722164 origin=started started_at=1785383169 ended_at=1785383172 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1722164|identity:linux-starttime=2340455 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1729658 watcher_pid=1729668 origin=started started_at=1785383186 ended_at=1785383332 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1729668|identity:linux-starttime=2342160 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1815622 watcher_pid=1815633 origin=started started_at=1785383415 ended_at=1785383456 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1815633|identity:linux-starttime=2365037 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1828825 watcher_pid=1828835 origin=started started_at=1785383469 ended_at=1785383784 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1828835|identity:linux-starttime=2370439 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1906318 watcher_pid=1906328 origin=started started_at=1785383834 ended_at=1785383879 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1906328|identity:linux-starttime=2406969 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1922146 watcher_pid=1922156 origin=started started_at=1785383920 ended_at=1785383951 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1922156|identity:linux-starttime=2415554 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1925652 watcher_pid=1925662 origin=started started_at=1785383977 ended_at=1785383978 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1925662|identity:linux-starttime=2421290 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1927964 watcher_pid=1927974 origin=started started_at=1785383996 ended_at=1785384253 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1927974|identity:linux-starttime=2423172 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1995800 watcher_pid=1995810 origin=started started_at=1785384299 ended_at=1785384341 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1995810|identity:linux-starttime=2453478 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2009502 watcher_pid=2009512 origin=started started_at=1785384355 ended_at=1785384386 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2009512|identity:linux-starttime=2459115 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2011315 watcher_pid=2011325 origin=started started_at=1785384401 ended_at=1785385059 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2011325|identity:linux-starttime=2463650 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2198433 watcher_pid=2198443 origin=started started_at=1785385120 ended_at=1785385196 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:2198443|identity:linux-starttime=2535560 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2217984 watcher_pid=2217994 origin=started started_at=1785385276 ended_at=1785385704 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2217994|identity:linux-starttime=2551212 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2335172 watcher_pid=2335182 origin=started started_at=1785385742 ended_at=1785385786 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2335182|identity:linux-starttime=2597810 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2350384 watcher_pid=2350394 origin=started started_at=1785385850 ended_at=1785386568 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:2350394|identity:linux-starttime=2608615 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2559766 watcher_pid=2559776 origin=started started_at=1785386623 ended_at=1785386750 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:2559776|identity:linux-starttime=2685896 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2598807 watcher_pid=2598817 origin=started started_at=1785386766 ended_at=1785387501 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:2598817|identity:linux-starttime=2700153 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2814193 watcher_pid=2814203 origin=started started_at=1785387514 ended_at=1785387954 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2814203|identity:linux-starttime=2774977 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2943255 watcher_pid=2943265 origin=started started_at=1785387974 ended_at=1785388311 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:2943265|identity:linux-starttime=2821015 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3044135 watcher_pid=3044145 origin=started started_at=1785388401 ended_at=1785388781 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3044145|identity:linux-starttime=2863676 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3155369 watcher_pid=3155379 origin=started started_at=1785388837 ended_at=1785390172 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:3155379|identity:linux-starttime=2907273 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3522368 watcher_pid=3522378 origin=started started_at=1785390207 ended_at=1785390237 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3522378|identity:linux-starttime=3044251 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3524023 watcher_pid=3524033 origin=started started_at=1785390262 ended_at=1785390369 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3524033|identity:linux-starttime=3049790 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3554458 watcher_pid=3554468 origin=started started_at=1785390396 ended_at=1785390528 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:3554468|identity:linux-starttime=3063204 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3583696 watcher_pid=3583706 origin=started started_at=1785390533 ended_at=1785390786 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3583706|identity:linux-starttime=3076855 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3661888 watcher_pid=3661898 origin=started started_at=1785390805 ended_at=1785390954 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3661898|identity:linux-starttime=3104042 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3709621 watcher_pid=3709631 origin=started started_at=1785390986 ended_at=1785391017 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3709631|identity:linux-starttime=3122174 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3713087 watcher_pid=3713097 origin=started started_at=1785391050 ended_at=1785391052 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3713097|identity:linux-starttime=3128565 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3715660 watcher_pid=3715671 origin=started started_at=1785391079 ended_at=1785391111 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3715671|identity:linux-starttime=3131445 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3717602 watcher_pid=3717615 origin=started started_at=1785391127 ended_at=1785391170 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3717615|identity:linux-starttime=3136304 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3729286 watcher_pid=3729296 origin=started started_at=1785391186 ended_at=1785391296 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3729296|identity:linux-starttime=3142155 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3754210 watcher_pid=3754220 origin=started started_at=1785391403 ended_at=1785391484 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3754220|identity:linux-starttime=3163882 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3763826 watcher_pid=3763836 origin=started started_at=1785391507 ended_at=1785391561 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3763836|identity:linux-starttime=3174240 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3772256 watcher_pid=3772266 origin=started started_at=1785391599 ended_at=1785391602 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3772266|identity:linux-starttime=3183435 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3775679 watcher_pid=3775689 origin=started started_at=1785391644 ended_at=1785391676 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3775689|identity:linux-starttime=3187996 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3777898 watcher_pid=3777908 origin=started started_at=1785391701 ended_at=1785391886 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3777908|identity:linux-starttime=3193677 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3819650 watcher_pid=3819660 origin=started started_at=1785392025 ended_at=1785392055 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3819660|identity:linux-starttime=3226092 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3823158 watcher_pid=3823168 origin=started started_at=1785392157 ended_at=1785392199 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3823168|identity:linux-starttime=3239261 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3836811 watcher_pid=3836821 origin=started started_at=1785392382 ended_at=1785392384 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3836821|identity:linux-starttime=3261775 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3839180 watcher_pid=3839190 origin=started started_at=1785392407 ended_at=1785392409 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3839190|identity:linux-starttime=3264286 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3842118 watcher_pid=3842128 origin=started started_at=1785392438 ended_at=1785392441 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3842128|identity:linux-starttime=3267354 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3844951 watcher_pid=3844961 origin=started started_at=1785392462 ended_at=1785392467 exit_code=0 signal=none reason=actionable-stale beacon_age=5 lock_before=pid:3844961|identity:linux-starttime=3269723 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3849342 watcher_pid=3849352 origin=started started_at=1785392492 ended_at=1785392530 exit_code=0 signal=none reason=actionable-stale beacon_age=38 lock_before=pid:3849352|identity:linux-starttime=3272808 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3854595 watcher_pid=3854605 origin=started started_at=1785392547 ended_at=1785392586 exit_code=0 signal=none reason=actionable-stale beacon_age=39 lock_before=pid:3854605|identity:linux-starttime=3278311 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3862024 watcher_pid=3862034 origin=started started_at=1785392645 ended_at=1785392967 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:3862034|identity:linux-starttime=3288093 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3934330 watcher_pid=3934340 origin=started started_at=1785392993 ended_at=1785393113 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3934340|identity:linux-starttime=3322884 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3957607 watcher_pid=3957617 origin=started started_at=1785393166 ended_at=1785393212 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:3957617|identity:linux-starttime=3340222 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3969757 watcher_pid=3969767 origin=started started_at=1785393246 ended_at=1785393276 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3969767|identity:linux-starttime=3348184 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3976794 watcher_pid=3976804 origin=started started_at=1785393537 ended_at=1785393569 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3976804|identity:linux-starttime=3377261 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3979156 watcher_pid=3979166 origin=started started_at=1785393628 ended_at=1785393668 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:3979166|identity:linux-starttime=3386401 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3988835 watcher_pid=3988845 origin=started started_at=1785393681 ended_at=1785393684 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3988845|identity:linux-starttime=3391693 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3992225 watcher_pid=3992235 origin=started started_at=1785393741 ended_at=1785393774 exit_code=0 signal=none reason=actionable-stale beacon_age=33 lock_before=pid:3992235|identity:linux-starttime=3397674 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3996752 watcher_pid=3996762 origin=started started_at=1785393805 ended_at=1785393843 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3996762|identity:linux-starttime=3404061 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4007465 watcher_pid=4007475 origin=started started_at=1785393878 ended_at=1785393880 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:4007475|identity:linux-starttime=3411354 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4009223 watcher_pid=4009233 origin=started started_at=1785393898 ended_at=1785393900 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:4009233|identity:linux-starttime=3413324 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4011086 watcher_pid=4011096 origin=started started_at=1785393913 ended_at=1785393915 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:4011096|identity:linux-starttime=3414902 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4013361 watcher_pid=4013371 origin=started started_at=1785393928 ended_at=1785393931 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:4013371|identity:linux-starttime=3416343 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4016016 watcher_pid=4016026 origin=started started_at=1785393943 ended_at=1785393947 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:4016026|identity:linux-starttime=3417826 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4019556 watcher_pid=4019566 origin=started started_at=1785393960 ended_at=1785393966 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:4019566|identity:linux-starttime=3419550 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4024089 watcher_pid=4024099 origin=started started_at=1785393984 ended_at=1785393990 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:4024099|identity:linux-starttime=3421944 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4029193 watcher_pid=4029203 origin=started started_at=1785394002 ended_at=1785394124 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:4029203|identity:linux-starttime=3423794 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4052668 watcher_pid=4052678 origin=started started_at=1785394141 ended_at=1785394399 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:4052678|identity:linux-starttime=3437701 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4111664 watcher_pid=4111675 origin=started started_at=1785394513 ended_at=1785394558 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:4111675|identity:linux-starttime=3474897 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4124190 watcher_pid=4124201 origin=started started_at=1785394573 ended_at=1785394575 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:4124201|identity:linux-starttime=3480917 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4126314 watcher_pid=4126324 origin=started started_at=1785394616 ended_at=1785394619 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:4126324|identity:linux-starttime=3485217 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4129104 watcher_pid=4129114 origin=started started_at=1785394665 ended_at=1785394668 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:4129114|identity:linux-starttime=3490076 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4132301 watcher_pid=4132311 origin=started started_at=1785394685 ended_at=1785394715 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:4132311|identity:linux-starttime=3492047 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=4138762 watcher_pid=4138779 origin=started started_at=1785394759 ended_at=1785394790 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:4138779|identity:linux-starttime=3499502 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=80002 watcher_pid=80012 origin=started started_at=1785394844 ended_at=1785394876 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:80012|identity:linux-starttime=3508019 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=133390 watcher_pid=133400 origin=started started_at=1785394903 ended_at=1785394909 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:133400|identity:linux-starttime=3513909 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=143511 watcher_pid=143538 origin=started started_at=1785394925 ended_at=1785394929 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:143538|identity:linux-starttime=3516071 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=169800 watcher_pid=169814 origin=started started_at=1785394975 ended_at=1785394977 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:169814|identity:linux-starttime=3521098 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=177446 watcher_pid=177456 origin=started started_at=1785394996 ended_at=1785394998 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:177456|identity:linux-starttime=3523181 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=184782 watcher_pid=184792 origin=started started_at=1785395012 ended_at=1785395016 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:184792|identity:linux-starttime=3524788 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=195230 watcher_pid=195240 origin=started started_at=1785395034 ended_at=1785395037 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:195240|identity:linux-starttime=3526940 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=246209 watcher_pid=246234 origin=started started_at=1785395157 ended_at=1785395189 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:246234|identity:linux-starttime=3539244 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=274995 watcher_pid=275005 origin=started started_at=1785395227 ended_at=1785395258 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:275005|identity:linux-starttime=3546297 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=298587 watcher_pid=298597 origin=started started_at=1785395277 ended_at=1785395314 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:298597|identity:linux-starttime=3551320 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=314211 watcher_pid=314232 origin=started started_at=1785397615 ended_at=1785397647 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:314232|identity:linux-starttime=133040 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=594177 watcher_pid=594187 origin=started started_at=1785398115 ended_at=1785398146 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:594187|identity:linux-starttime=182972 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=755753 watcher_pid=755774 origin=started started_at=1785398468 ended_at=1785398501 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:755774|identity:linux-starttime=218293 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=793829 watcher_pid=793849 origin=started started_at=1785398534 ended_at=1785398568 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:793849|identity:linux-starttime=224930 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=874266 watcher_pid=874288 origin=started started_at=1785398604 ended_at=1785398635 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:874288|identity:linux-starttime=231933 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1089167 watcher_pid=1089177 origin=started started_at=1785398889 ended_at=1785398920 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1089177|identity:linux-starttime=260354 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1130447 watcher_pid=1130457 origin=started started_at=1785399067 ended_at=1785399068 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1130457|identity:linux-starttime=278194 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1151350 watcher_pid=1151360 origin=started started_at=1785399117 ended_at=1785399147 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1151360|identity:linux-starttime=283163 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1154072 watcher_pid=1154082 origin=started started_at=1785399177 ended_at=1785399212 exit_code=0 signal=none reason=actionable-stale beacon_age=35 lock_before=pid:1154082|identity:linux-starttime=289176 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1158671 watcher_pid=1158681 origin=started started_at=1785399234 ended_at=1785399237 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1158681|identity:linux-starttime=294921 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1163057 watcher_pid=1163067 origin=started started_at=1785399257 ended_at=1785399288 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1163067|identity:linux-starttime=297235 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1164952 watcher_pid=1164963 origin=started started_at=1785399322 ended_at=1785399354 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1164963|identity:linux-starttime=303731 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1167246 watcher_pid=1167256 origin=started started_at=1785399385 ended_at=1785399420 exit_code=0 signal=none reason=actionable-stale beacon_age=34 lock_before=pid:1167256|identity:linux-starttime=310038 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1171165 watcher_pid=1171175 origin=started started_at=1785399431 ended_at=1785399456 exit_code=0 signal=none reason=actionable-stale beacon_age=6 lock_before=pid:1171175|identity:linux-starttime=314587 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1180829 watcher_pid=1180839 origin=started started_at=1785399480 ended_at=1785399703 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1180839|identity:linux-starttime=319509 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1241588 watcher_pid=1241598 origin=started started_at=1785399737 ended_at=1785399772 exit_code=0 signal=none reason=actionable-stale beacon_age=35 lock_before=pid:1241598|identity:linux-starttime=345178 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1246614 watcher_pid=1246624 origin=started started_at=1785399799 ended_at=1785399829 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1246624|identity:linux-starttime=351357 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1248371 watcher_pid=1248381 origin=started started_at=1785399868 ended_at=1785400038 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1248381|identity:linux-starttime=358247 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1289640 watcher_pid=1289650 origin=started started_at=1785400164 ended_at=1785400199 exit_code=0 signal=none reason=actionable-stale beacon_age=35 lock_before=pid:1289650|identity:linux-starttime=387862 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1295660 watcher_pid=1295670 origin=started started_at=1785400227 ended_at=1785400251 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1295670|identity:linux-starttime=394215 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1304394 watcher_pid=1304404 origin=started started_at=1785400303 ended_at=1785400545 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1304404|identity:linux-starttime=401756 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1485270 watcher_pid=1485280 origin=started started_at=1785400563 ended_at=1785400693 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1485280|identity:linux-starttime=427815 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1572111 watcher_pid=1572121 origin=started started_at=1785400801 ended_at=1785400822 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1572121|identity:linux-starttime=451549 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1579923 watcher_pid=1579933 origin=started started_at=1785400834 ended_at=1785400935 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1579933|identity:linux-starttime=454906 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2831067 watcher_pid=2831077 origin=started started_at=1785405495 ended_at=1785405526 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2831077|identity:linux-starttime=920996 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3254466 watcher_pid=3254476 origin=started started_at=1785407540 ended_at=1785407571 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3254476|identity:linux-starttime=1125481 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3260460 watcher_pid=3260470 origin=started started_at=1785407668 ended_at=1785407810 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3260470|identity:linux-starttime=1138287 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3278725 watcher_pid=3278735 origin=started started_at=1785407931 ended_at=1785407963 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3278735|identity:linux-starttime=1164597 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3281301 watcher_pid=3281311 origin=started started_at=1785408010 ended_at=1785408042 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3281311|identity:linux-starttime=1172448 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3288132 watcher_pid=3288142 origin=started started_at=1785408295 ended_at=1785408325 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3288142|identity:linux-starttime=1200986 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3292589 watcher_pid=3292599 origin=started started_at=1785408426 ended_at=1785408456 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3292599|identity:linux-starttime=1214049 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3295129 watcher_pid=3295139 origin=started started_at=1785408511 ended_at=1785408511 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:3295139|identity:linux-starttime=1222555 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3297974 watcher_pid=3297984 origin=started started_at=1785408569 ended_at=1785408599 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3297984|identity:linux-starttime=1228386 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3306184 watcher_pid=3306194 origin=started started_at=1785408879 ended_at=1785408909 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3306194|identity:linux-starttime=1259406 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3309842 watcher_pid=3309852 origin=started started_at=1785408961 ended_at=1785408991 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3309852|identity:linux-starttime=1267597 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3316804 watcher_pid=3316814 origin=started started_at=1785409109 ended_at=1785409142 exit_code=0 signal=none reason=actionable-signal beacon_age=33 lock_before=pid:3316814|identity:linux-starttime=1282419 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3320606 watcher_pid=3320616 origin=started started_at=1785409205 ended_at=1785409237 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3320616|identity:linux-starttime=1292008 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3322550 watcher_pid=3322560 origin=started started_at=1785409256 ended_at=1785409291 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3322560|identity:linux-starttime=1297053 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3332485 watcher_pid=3332495 origin=started started_at=1785409313 ended_at=1785409316 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3332495|identity:linux-starttime=1302809 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3336735 watcher_pid=3336745 origin=started started_at=1785409371 ended_at=1785409373 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3336745|identity:linux-starttime=1308593 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3341542 watcher_pid=3341552 origin=started started_at=1785409453 ended_at=1785409524 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:3341552|identity:linux-starttime=1316794 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3357935 watcher_pid=3357945 origin=started started_at=1785409737 ended_at=1785409771 exit_code=0 signal=none reason=actionable-signal beacon_age=34 lock_before=pid:3357945|identity:linux-starttime=1345151 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3361170 watcher_pid=3361180 origin=started started_at=1785409791 ended_at=1785409861 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3361180|identity:linux-starttime=1350619 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3372190 watcher_pid=3372200 origin=started started_at=1785409914 ended_at=1785409922 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:3372200|identity:linux-starttime=1362894 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3379293 watcher_pid=3379304 origin=started started_at=1785410040 ended_at=1785410070 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3379304|identity:linux-starttime=1375478 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3382623 watcher_pid=3382633 origin=started started_at=1785410125 ended_at=1785410157 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:3382633|identity:linux-starttime=1383949 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3387965 watcher_pid=3387975 origin=started started_at=1785410250 ended_at=1785410253 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3387975|identity:linux-starttime=1396513 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3390724 watcher_pid=3390734 origin=started started_at=1785410276 ended_at=1785410306 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3390734|identity:linux-starttime=1399045 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3393092 watcher_pid=3393103 origin=started started_at=1785410356 ended_at=1785410357 exit_code=0 signal=none reason=actionable-check beacon_age=1 lock_before=pid:3393103|identity:linux-starttime=1407065 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3396736 watcher_pid=3396746 origin=started started_at=1785410447 ended_at=1785410477 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3396746|identity:linux-starttime=1416152 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3400299 watcher_pid=3400309 origin=started started_at=1785410530 ended_at=1785410550 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3400309|identity:linux-starttime=1424508 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3408666 watcher_pid=3408676 origin=started started_at=1785410659 ended_at=1785410689 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:3408676|identity:linux-starttime=1437384 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3414645 watcher_pid=3414655 origin=started started_at=1785410801 ended_at=1785410803 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:3414655|identity:linux-starttime=1451551 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=3418231 watcher_pid=3418241 origin=started started_at=1785410847 ended_at=1785410850 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:3418241|identity:linux-starttime=1456230 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=27720 watcher_pid=27730 origin=started started_at=1785471664 ended_at=1785471694 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:27730|identity:linux-starttime=75471 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=43771 watcher_pid=43781 origin=started started_at=1785472250 ended_at=1785472284 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:43781|identity:linux-starttime=134124 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=61225 watcher_pid=61235 origin=started started_at=1785472658 ended_at=1785472690 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:61235|identity:linux-starttime=174938 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=65425 watcher_pid=65435 origin=started started_at=1785472748 ended_at=1785473031 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:65435|identity:linux-starttime=183893 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=156808 watcher_pid=156818 origin=started started_at=1785473058 ended_at=1785473089 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:156818|identity:linux-starttime=214938 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=163903 watcher_pid=163914 origin=started started_at=1785473104 ended_at=1785473168 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:163914|identity:linux-starttime=219547 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=177909 watcher_pid=177919 origin=started started_at=1785473321 ended_at=1785473363 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:177919|identity:linux-starttime=241249 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=190818 watcher_pid=190831 origin=started started_at=1785473400 ended_at=1785473706 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:190831|identity:linux-starttime=249107 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=292381 watcher_pid=292392 origin=started started_at=1785473875 ended_at=1785474285 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:292392|identity:linux-starttime=296562 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=392504 watcher_pid=392514 origin=started started_at=1785474458 ended_at=1785474500 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:392514|identity:linux-starttime=354919 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=405343 watcher_pid=405353 origin=started started_at=1785474518 ended_at=1785476086 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:405353|identity:linux-starttime=360854 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=836009 watcher_pid=836019 origin=started started_at=1785476104 ended_at=1785476104 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:836019|identity:linux-starttime=519464 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=837654 watcher_pid=837664 origin=started started_at=1785476119 ended_at=1785476119 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:837664|identity:linux-starttime=520965 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=840158 watcher_pid=840168 origin=started started_at=1785476137 ended_at=1785476138 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:840168|identity:linux-starttime=522820 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=843094 watcher_pid=843104 origin=started started_at=1785476148 ended_at=1785476150 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:843104|identity:linux-starttime=523935 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=846656 watcher_pid=846666 origin=started started_at=1785476157 ended_at=1785476165 exit_code=0 signal=none reason=actionable-stale beacon_age=8 lock_before=pid:846666|identity:linux-starttime=524818 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=852199 watcher_pid=852209 origin=started started_at=1785476184 ended_at=1785477678 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:852209|identity:linux-starttime=527456 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1260655 watcher_pid=1260665 origin=started started_at=1785477703 ended_at=1785477733 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1260665|identity:linux-starttime=679379 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1262019 watcher_pid=1262029 origin=started started_at=1785477741 ended_at=1785478788 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1262029|identity:linux-starttime=683217 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1557737 watcher_pid=1557747 origin=started started_at=1785478798 ended_at=1785478817 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1557747|identity:linux-starttime=788924 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1565183 watcher_pid=1565193 origin=started started_at=1785478847 ended_at=1785478878 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:1565193|identity:linux-starttime=793803 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1566610 watcher_pid=1566620 origin=started started_at=1785478887 ended_at=1785479702 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1566620|identity:linux-starttime=797791 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1790427 watcher_pid=1790437 origin=started started_at=1785479714 ended_at=1785479715 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1790437|identity:linux-starttime=880529 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1792338 watcher_pid=1792348 origin=started started_at=1785479727 ended_at=1785479729 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1792348|identity:linux-starttime=881767 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1795289 watcher_pid=1795299 origin=started started_at=1785479740 ended_at=1785479743 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1795299|identity:linux-starttime=883093 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1798702 watcher_pid=1798712 origin=started started_at=1785479748 ended_at=1785479751 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1798712|identity:linux-starttime=883922 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1802737 watcher_pid=1802747 origin=started started_at=1785479756 ended_at=1785479778 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:1802747|identity:linux-starttime=884698 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1812750 watcher_pid=1812761 origin=started started_at=1785479787 ended_at=1785479924 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1812761|identity:linux-starttime=887823 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1854491 watcher_pid=1854501 origin=started started_at=1785479944 ended_at=1785479946 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1854501|identity:linux-starttime=903545 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1857017 watcher_pid=1857027 origin=started started_at=1785479957 ended_at=1785480086 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:1857027|identity:linux-starttime=904846 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1896265 watcher_pid=1896275 origin=started started_at=1785480097 ended_at=1785480099 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:1896275|identity:linux-starttime=918829 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=1898677 watcher_pid=1898687 origin=started started_at=1785480107 ended_at=1785482625 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:1898687|identity:linux-starttime=919786 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2572002 watcher_pid=2572012 origin=started started_at=1785482662 ended_at=1785482793 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2572012|identity:linux-starttime=1175321 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2597630 watcher_pid=2597642 origin=started started_at=1785482813 ended_at=1785482814 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:2597642|identity:linux-starttime=1190441 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2599084 watcher_pid=2599094 origin=started started_at=1785482829 ended_at=1785482830 exit_code=0 signal=none reason=actionable-stale beacon_age=1 lock_before=pid:2599094|identity:linux-starttime=1192039 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2603000 watcher_pid=2603010 origin=started started_at=1785482879 ended_at=1785483075 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:2603010|identity:linux-starttime=1197024 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2646639 watcher_pid=2646649 origin=started started_at=1785483084 ended_at=1785483149 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:2646649|identity:linux-starttime=1217534 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2667034 watcher_pid=2667044 origin=started started_at=1785483261 ended_at=1785483293 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:2667044|identity:linux-starttime=1235214 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2674488 watcher_pid=2674498 origin=started started_at=1785483323 ended_at=1785483354 exit_code=0 signal=none reason=actionable-stale beacon_age=31 lock_before=pid:2674498|identity:linux-starttime=1241416 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2680363 watcher_pid=2680373 origin=started started_at=1785483386 ended_at=1785483417 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2680373|identity:linux-starttime=1247706 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2686255 watcher_pid=2686265 origin=started started_at=1785483423 ended_at=1785483425 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2686265|identity:linux-starttime=1251439 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2693520 watcher_pid=2693530 origin=started started_at=1785483473 ended_at=1785483504 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2693530|identity:linux-starttime=1256418 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2697838 watcher_pid=2697848 origin=started started_at=1785483513 ended_at=1785483513 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:2697848|identity:linux-starttime=1260361 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2701437 watcher_pid=2701447 origin=started started_at=1785483556 ended_at=1785483588 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:2701447|identity:linux-starttime=1264706 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2703553 watcher_pid=2703563 origin=started started_at=1785483595 ended_at=1785483625 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2703563|identity:linux-starttime=1268599 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2707924 watcher_pid=2707934 origin=started started_at=1785483725 ended_at=1785483725 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:2707934|identity:linux-starttime=1281589 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2709933 watcher_pid=2709943 origin=started started_at=1785483746 ended_at=1785483784 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2709943|identity:linux-starttime=1283681 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2720612 watcher_pid=2720622 origin=started started_at=1785483798 ended_at=1785483801 exit_code=0 signal=none reason=actionable-stale beacon_age=3 lock_before=pid:2720622|identity:linux-starttime=1288927 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2724449 watcher_pid=2724459 origin=started started_at=1785483816 ended_at=1785483918 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:2724459|identity:linux-starttime=1290727 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2742130 watcher_pid=2742140 origin=started started_at=1785483931 ended_at=1785483968 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2742140|identity:linux-starttime=1302157 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2753908 watcher_pid=2753923 origin=started started_at=1785483977 ended_at=1785483995 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:2753923|identity:linux-starttime=1306782 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2762060 watcher_pid=2762070 origin=started started_at=1785484006 ended_at=1785484217 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:2762070|identity:linux-starttime=1309678 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2815758 watcher_pid=2815769 origin=started started_at=1785484227 ended_at=1785484473 exit_code=0 signal=none reason=actionable-stale beacon_age=0 lock_before=pid:2815769|identity:linux-starttime=1331807 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2892951 watcher_pid=2892961 origin=started started_at=1785484856 ended_at=1785484886 exit_code=0 signal=none reason=actionable-signal beacon_age=30 lock_before=pid:2892961|identity:linux-starttime=1394672 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2900230 watcher_pid=2900240 origin=started started_at=1785485029 ended_at=1785485061 exit_code=0 signal=none reason=actionable-signal beacon_age=32 lock_before=pid:2900240|identity:linux-starttime=1411996 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2903166 watcher_pid=2903176 origin=started started_at=1785485120 ended_at=1785485160 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2903176|identity:linux-starttime=1421064 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2914183 watcher_pid=2914193 origin=started started_at=1785485194 ended_at=1785485225 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2914193|identity:linux-starttime=1428539 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2916692 watcher_pid=2916702 origin=started started_at=1785485244 ended_at=1785485246 exit_code=0 signal=none reason=actionable-stale beacon_age=2 lock_before=pid:2916702|identity:linux-starttime=1433497 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2920475 watcher_pid=2920485 origin=started started_at=1785485331 ended_at=1785485335 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:2920485|identity:linux-starttime=1442211 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2924519 watcher_pid=2924529 origin=started started_at=1785485354 ended_at=1785485397 exit_code=0 signal=none reason=actionable-stale beacon_age=4 lock_before=pid:2924529|identity:linux-starttime=1444501 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none +arm_pid=2937720 watcher_pid=2937730 origin=started started_at=1785485436 ended_at=1785485938 exit_code=0 signal=none reason=actionable-signal beacon_age=31 lock_before=pid:2937730|identity:linux-starttime=1452660 cmdline-hex=62617368002f686f6d652f6a616d6164612f636f64652f706572736f6e616c2f66697273746d6174652f62696e2f666d2d77617463682e736800 lock_after=pid:none|identity:none successor=none From a038a5f219cae97ced929d88778804eabac5def8 Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 02:29:08 -0700 Subject: [PATCH 02/14] fix(watch): arm the successor before handling a wake, and give parked lanes a check-in cadence wip checkpoint: implementation only, regression tests still to come. The arm layer never started the next watcher cycle after delivering an actionable wake (successor=none on 499 of 499 captured cycles), so supervision ended on every wake and resumed only if some adapter above it happened to re-arm. Arming is now the first act of consuming a wake. Parked lanes each carried a standing per-cycle trigger, so a fresh watcher died within seconds of every start on whichever lane was next overdue. Due lanes now batch into one home-wide check-in rate-limited by .last-parked-checkin mtime. --- bin/fm-watch-arm.sh | 121 ++++++++++++++++++++++++++++++++++++++++++-- bin/fm-watch.sh | 58 +++++++++++++++++++-- 2 files changed, 173 insertions(+), 6 deletions(-) diff --git a/bin/fm-watch-arm.sh b/bin/fm-watch-arm.sh index 3c2df49c891..0157f5c3331 100755 --- a/bin/fm-watch-arm.sh +++ b/bin/fm-watch-arm.sh @@ -42,6 +42,23 @@ # loud. A live cycle already present means re-arm attaches - do not start a second # watcher. # +# ARMING THE SUCCESSOR IS THE FIRST ACT OF CONSUMING A WAKE, before the wake is +# handled. The watcher is one-shot by design: it exits to deliver one actionable +# reason. Nothing here used to start the next cycle, so supervision ENDED on +# every delivered wake and resumed only when some adapter above this layer +# happened to re-arm - a blind window as wide as the whole handling turn, and +# unbounded whenever that adapter path was inert (a forked Claude session whose +# Stop hook can never claim the home is the observed case). Handling first and +# arming afterwards cannot close that window; only this ordering can. +# The successor is deliberately NOT this arm's child: it must outlive this +# process, which exits as soon as it delivers the wake. Its stdout goes to a +# pid-keyed state/.watch-successor-output. file, so whichever arm later +# attaches to it can still deliver that cycle's real reason instead of reporting +# a genuine wake as an unexplained empty close. +# A successor is armed only where supervision would otherwise end: a delivered +# actionable wake, in a home that still needs supervision and is not away. Typed +# failures stay loud and unarmed so the adapter and the model still repair them. +# # Every observed watcher cycle appends one tab-separated lifecycle record to # state/.watch-cycle-exits.log. The arm layer owns that bounded ledger; it records # arm/watcher identities, timestamps, exit/signal classification, beacon age, @@ -61,6 +78,8 @@ set -u SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck source=bin/fm-wake-lib.sh . "$SCRIPT_DIR/fm-wake-lib.sh" +# shellcheck source=bin/fm-supervision-lib.sh +. "$SCRIPT_DIR/fm-supervision-lib.sh" WATCH="$SCRIPT_DIR/fm-watch.sh" WATCH_LOCK="$STATE/.watch.lock" @@ -79,6 +98,11 @@ CONFIRM_TIMEOUT=${FM_ARM_CONFIRM_TIMEOUT:-$ARM_CONFIRM_DEFAULT} ATTACH_POLL=${FM_ARM_ATTACH_POLL:-0.5} CYCLE_LOG="$STATE/.watch-cycle-exits.log" CYCLE_LOG_LOCK="$STATE/.watch-cycle-exits.lock" +# Where a detached successor's one printed reason lands until an arm claims it. +SUCCESSOR_OUT_PREFIX="$STATE/.watch-successor-output" +# How long an unclaimed successor output survives before it is treated as debris. +SUCCESSOR_OUT_TTL=${FM_WATCH_SUCCESSOR_OUT_TTL:-3600} +case "$SUCCESSOR_OUT_TTL" in ''|*[!0-9]*) SUCCESSOR_OUT_TTL=3600 ;; esac CYCLE_LOG_MAX_BYTES=${FM_WATCH_CYCLE_LOG_MAX_BYTES:-262144} CYCLE_LOG_KEEP_LINES=${FM_WATCH_CYCLE_LOG_KEEP_LINES:-1000} ARM_PID=${BASHPID:-$$} @@ -241,6 +265,78 @@ report_attached() { echo "watcher: attached pid=$HEALTHY_PID (beacon ${age}s)" } +successor_output_path() { # + printf '%s.%s' "$SUCCESSOR_OUT_PREFIX" "$1" +} + +# Drop only successor outputs no live watcher can still be writing to AND that +# no arm plausibly still owes a delivery for. Age is the second condition on +# purpose: pruning purely on a dead pid would race an attached arm that has just +# observed the close and is about to claim that exact file. +prune_successor_outputs() { + local f pid + for f in "$SUCCESSOR_OUT_PREFIX".*; do + [ -e "$f" ] || continue + pid=${f##*.} + case "$pid" in + ''|*[!0-9]*) ;; + *) fm_pid_alive "$pid" && continue ;; + esac + [ "$(fm_path_age "$f")" -ge "$SUCCESSOR_OUT_TTL" ] || continue + rm -f "$f" 2>/dev/null || true + done +} + +# A successor is armed only where supervision would otherwise end. An away home +# is skipped because the daemon owns the cycle there, and a home with no +# in-flight work and no relay poll is skipped so a detached watcher can never +# outlive the work it was supervising. FM_WATCH_ARM_SUCCESSOR=0 is the explicit +# opt-out for a caller that owns continuity itself. +successor_wanted() { + [ "${FM_WATCH_ARM_SUCCESSOR:-1}" != 0 ] || return 1 + [ -e "$STATE/.afk" ] && return 1 + fm_supervision_needed "$STATE" "$GRACE" +} + +# Start one detached watcher and confirm it through the same honesty gate an +# owned child passes. Prints "started:" once confirmed and "none" +# otherwise. It NEVER fails the wake delivery it precedes: a home left without a +# successor is recorded as such in the ledger and still gets its reason. +arm_successor() { # + local closed_pid=${1:-none} tmp deadline pid target + successor_wanted || { printf 'none'; return 0; } + prune_successor_outputs + tmp=$(mktemp "$SUCCESSOR_OUT_PREFIX.pending.XXXXXX" 2>/dev/null) || { printf 'none'; return 0; } + # Double-fork so the watcher is reparented away from this arm: it must survive + # the exit that delivers the wake. setsid additionally detaches the controlling + # terminal where it exists; the bare subshell fallback covers hosts without it. + if command -v setsid >/dev/null 2>&1; then + ( setsid "$WATCH" >"$tmp" 2>/dev/null /dev/null + else + ( "$WATCH" >"$tmp" 2>/dev/null /dev/null + fi + deadline=$(( $(date +%s) + CONFIRM_TIMEOUT + 1 )) + while :; do + if healthy_watcher && [ "$HEALTHY_PID" != "$closed_pid" ]; then + pid=$HEALTHY_PID + target=$(successor_output_path "$pid") + # Another arm may already own this watcher and its output file. Never + # clobber a reason someone else is still owed. + if [ -e "$target" ]; then + rm -f "$tmp" 2>/dev/null || true + else + mv -f "$tmp" "$target" 2>/dev/null || rm -f "$tmp" 2>/dev/null || true + fi + printf 'started:%s' "$pid" + return 0 + fi + [ "$(date +%s)" -ge "$deadline" ] && break + sleep 0.2 + done + rm -f "$tmp" 2>/dev/null || true + printf 'none' +} + # Give a successor the same bounded confirmation window used for a fresh child. # Adapter-owned continuations normally win immediately, but the bound avoids a # false failure when process-close delivery and lock publication cross briefly. @@ -265,7 +361,7 @@ fail_unexplained_cycle() { # to a verified successor. With no successor, fail loudly instead of returning a # clean empty completion that an adapter could mistake for a no-op. attach_and_wait() { - local attached_pid=$1 + local attached_pid=$1 out claimed reason_type successor while :; do if healthy_watcher; then if [ "$HEALTHY_PID" != "$attached_pid" ]; then @@ -277,6 +373,22 @@ attach_and_wait() { sleep "$ATTACH_POLL" continue fi + # The cycle this arm was following has closed. A watcher writes its one + # reason and only then releases the lock, so if that cycle woke for + # something real its reason is already complete on disk. Deliver it - an + # attached close carrying a genuine wake is a wake, not the unexplained + # empty completion this used to report. + out=$(successor_output_path "$attached_pid") + if watch_output_has_wake "$out"; then + reason_type=$(watch_output_reason_type "$out") + claimed="$out.claimed.$ARM_PID" + mv -f "$out" "$claimed" 2>/dev/null || claimed=$out + successor=$(arm_successor "$attached_pid") + cycle_log_append 0 none "$reason_type" "$successor" + print_watch_output "$claimed" + rm -f "$claimed" 2>/dev/null || true + return 0 + fi if wait_for_healthy_successor; then cycle_log_append unknown unknown attached-cycle-ended "attached:$HEALTHY_PID" attached_pid=$HEALTHY_PID @@ -405,11 +517,14 @@ cycle_begin "$child" started child_done=0 owned_child_finished() { - local rc=$1 signal reason_type status + local rc=$1 signal reason_type status successor signal=$(cycle_signal_name "$rc") if [ "$rc" -eq 0 ] && watch_output_has_wake "$child_out"; then reason_type=$(watch_output_reason_type "$child_out") - cycle_log_append "$rc" "$signal" "$reason_type" none + # Arm first, deliver second. Nothing below this line may run before the + # next cycle exists, or the home is blind for the whole handling turn. + successor=$(arm_successor "$cycle_watcher_pid") + cycle_log_append "$rc" "$signal" "$reason_type" "$successor" print_watch_output "$child_out" rm -f "$child_out" 2>/dev/null || true child= diff --git a/bin/fm-watch.sh b/bin/fm-watch.sh index 9f17cbc357b..9b2e4687be8 100755 --- a/bin/fm-watch.sh +++ b/bin/fm-watch.sh @@ -153,6 +153,18 @@ BUSY_TURN_MAX_SECS=${FM_BUSY_TURN_MAX_SECS:-3600} # These cases re-surface once for a recheck every PAUSE_RESURFACE_SECS - far # longer than the wedge threshold, but finite so a forgotten hold cannot rot invisibly. PAUSE_RESURFACE_SECS=${FM_PAUSE_RESURFACE_SECS:-$FM_PAUSE_RESURFACE_SECS_DEFAULT} +# A parked lane - a declared external wait, or a captain hold whose agent has +# confidently exited - cannot clear until something outside this fleet acts, so +# it gets a CHECK-IN CADENCE rather than a standing per-cycle trigger. Each lane +# keeps its own PAUSE_RESURFACE_SECS recheck age, but every lane due in one poll +# is BATCHED into a single wake, and that batch is rate-limited home-wide by the +# .last-parked-checkin mtime - the same restart-surviving, time-based shape the +# slow per-task checks use. Without the batch, parked lanes at independent +# phases each ended a supervision cycle of their own, and a fresh watcher died +# within seconds of every start on whichever lane happened to be next overdue. +# This is cadence, never silence: a parked lane is still re-checked, because a +# declared wait can stop holding. +PARKED_CHECKIN_SECS=${FM_PARKED_CHECKIN_SECS:-$PAUSE_RESURFACE_SECS} # Consecutive event-path failures (fm_backend_wait_transition returning 2 - # connect/subscribe failure) before the push fast-path is disabled for the rest # of this watcher process and the loop reverts to pure polling (report section @@ -333,13 +345,45 @@ handle_paused_stale() { # rf_age=$(age_of "$rf") # 999999 when no prior re-surface if [ "$age" -ge "$PAUSE_RESURFACE_SECS" ] && [ "$rf_age" -ge "$PAUSE_RESURFACE_SECS" ]; then reason="stale: $win (paused ${age}s, awaiting external - declared pause, rechecked on a long cadence not a wedge; confirm the wait still holds)" - fm_wake_append stale "$win" "$reason" || exit 1 - date +%s > "$rf" - wake "$reason" + # Due, but not surfaced here: collect it and let flush_parked_checkin decide + # once, for the whole fleet, whether this poll is a check-in. + parked_due=$(printf '%s%s\t%s\n' "$parked_due" "$win" "$reason") + triage_log "parked check-in due (paused ${age}s): $win" + return 0 fi triage_log "absorbed stale (paused, awaiting external, age ${age}s): $win" } +# Emit at most ONE parked check-in per PARKED_CHECKIN_SECS, carrying every lane +# that came due in this poll. Only the lanes actually included in an emitted +# check-in have their per-lane cadence stamped, so a deferred lane stays due and +# is picked up by the check-in that does fire. +flush_parked_checkin() { + local win reason combined='' first=1 key + [ -n "$parked_due" ] || return 0 + if [ "$(age_of "$STATE/.last-parked-checkin")" -lt "$PARKED_CHECKIN_SECS" ]; then + triage_log "deferred parked check-in to its cadence" + return 0 + fi + while IFS=$(printf '\t') read -r win reason; do + [ -n "$win" ] || continue + fm_wake_append stale "$win" "$reason" || exit 1 + key=$(printf '%s' "$win" | tr ':/.' '___') + date +%s > "$STATE/.paused-resurfaced-$key" + if [ "$first" -eq 1 ]; then + combined="$reason" + first=0 + else + combined="$combined; $reason" + fi + done < local win=$1 key key=${win//:/_} @@ -856,6 +900,9 @@ EOF # signature means the crewmate finished, is waiting, or is wedged. Each distinct # stale hash is surfaced, absorbed, or timed toward escalation once (.stale-* # remembers the hash already classified). + # Parked lanes found in this pass accumulate here instead of each ending the + # cycle on its own; flush_parked_checkin below decides the batch once. + parked_due='' while IFS= read -r w; do kind=$(window_kind "$w") task=$(window_to_task "$w" "$STATE") @@ -1020,6 +1067,11 @@ EOF fi done < <(recorded_windows) + # One check-in for every parked lane that came due in this pass, at most once + # per PARKED_CHECKIN_SECS. Runs after the whole window loop so a check-in + # never truncates the pass that produced it. + flush_parked_checkin + # Heartbeat: the watcher runs a cheap fleet-scan at a regular cadence no matter # what. Time-based via .last-heartbeat mtime; interval doubles per consecutive # no-change heartbeat (idle fleet) up to HEARTBEAT_MAX, and resets on any From 26a63d56e18e58b556d634013c1c1c3d698346c3 Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 02:37:29 -0700 Subject: [PATCH 03/14] test(watch): cover successor arming, attached-cycle delivery, and the parked check-in cadence Six cases across the two suites that already own this behavior: - a delivered wake arms its successor before the wake is handled - an attached arm delivers the wake its successor cycle closed on - no successor is armed for a home with nothing left to supervise - the preserved 499-record capture still shows the defect a fresh cycle no longer reproduces - parked lanes batch into one check-in per cadence window, and the cadence still comes due - a parked lane whose wait has cleared is surfaced at once inside a closed cadence --- tests/fm-watch-triage.test.sh | 142 ++++++++++++++++++++++++++ tests/fm-watcher-lock.test.sh | 183 ++++++++++++++++++++++++++++++++++ 2 files changed, 325 insertions(+) diff --git a/tests/fm-watch-triage.test.sh b/tests/fm-watch-triage.test.sh index c6d7928bb78..f8614a35ac3 100755 --- a/tests/fm-watch-triage.test.sh +++ b/tests/fm-watch-triage.test.sh @@ -677,6 +677,146 @@ test_nonterminal_stale_paused_absorbed_then_resurfaced() { pass "a declared pause is absorbed on first sight, then re-surfaced as a recheck past the threshold, never wedge-escalated" } +# Stage parked lanes that are all individually overdue for a recheck: a +# declared pause whose status file is old, an idle pane already counted stale, +# and a primed .seen-* so the signal scan stays out of the way. +stage_parked_lanes() { # + local state=$1 capture=$2 count=$3 back_secs=$4 i window key sig statusf back + back=$(( $(date +%s) - back_secs )) + i=1 + while [ "$i" -le "$count" ]; do + window="test:fm-park$i" + statusf="$state/park$i.status" + printf 'window=%s\nkind=ship\n' "$window" > "$state/park$i.meta" + printf 'paused: holding for an external decision\n' > "$statusf" + set_mtime "$back" "$statusf" + sig=$(seen_sig "$statusf"); printf '%s' "$sig" > "$state/.seen-park${i}_status" + key=$(printf '%s' "$window" | tr ':/.' '___') + printf '%s' "$(hash_text "$(cat "$capture")")" > "$state/.hash-$key" + printf '1\n' > "$state/.count-$key" + i=$((i + 1)) + done +} + +# Defect 2. A lane parked awaiting a captain decision cannot clear until a human +# acts, so it must not carry a standing per-cycle trigger. In the preserved +# capture (tests/fixtures/watch-cycle-exits.fixture.log) 112 of 499 cycles ended +# within five seconds of starting, every one on a parked lane: independently +# phased lanes each ended a cycle of their own, so a fresh watcher died on +# whichever one happened to be next overdue. Due lanes now batch into one +# check-in, rate-limited home-wide, and the cadence survives a restart because +# it is anchored on a file mtime rather than in-process state. +test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence() { + local dir state fakebin out drain_out capture_file pid i key back + dir=$(make_case parked-checkin-cadence); state="$dir/state"; fakebin="$dir/fakebin" + out="$dir/watch.out"; drain_out="$dir/drain.out"; capture_file="$dir/pane.txt" + printf 'idle, awaiting a decision' > "$capture_file" + stage_parked_lanes "$state" "$capture_file" 3 500 + export FM_FAKE_CREW_STATE='state: paused · source: status-log · awaiting an external decision' + + # Phase A: every lane is overdue and no check-in has ever run, so one cycle + # surfaces one wake carrying all three - not three cycles carrying one each. + PATH="$fakebin:$PATH" FM_FAKE_TMUX_WINDOW="test:fm-park1" FM_FAKE_TMUX_CAPTURE="$capture_file" \ + FM_FAKE_TMUX_CURRENT_COMMAND=zsh \ + FM_STATE_OVERRIDE="$state" FM_CREW_STATE_BIN="$fakebin/fm-crew-state.sh" \ + FM_PAUSE_RESURFACE_SECS=240 FM_POLL=1 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH" > "$out" & + pid=$! + wait_for_exit "$pid" 60 || fail "no parked check-in fired for three overdue lanes" + i=1 + while [ "$i" -le 3 ]; do + grep -F "test:fm-park$i" "$out" >/dev/null || fail "lane park$i was left out of the batched check-in" + i=$((i + 1)) + done + [ "$(grep -c '^stale:' "$out")" -eq 1 ] || fail "the check-in printed more than one wake reason"$'\n'"$(cat "$out")" + [ -e "$state/.last-parked-checkin" ] || fail "the shared check-in cadence marker was not recorded" + FM_STATE_OVERRIDE="$state" "$DRAIN" > "$drain_out" 2>/dev/null || fail "drain after the parked check-in failed" + i=1 + while [ "$i" -le 3 ]; do + grep "$(printf '\tstale\t')" "$drain_out" | grep -F "test:fm-park$i" >/dev/null \ + || fail "lane park$i was not queued by the batched check-in" + i=$((i + 1)) + done + + # Phase B: the churn case. Clear every per-lane throttle so all three are + # individually due again - exactly the independently-phased fleet the capture + # recorded - and confirm the shared cadence, not the per-lane one, keeps the + # cycle alive. This is the sub-5s exit that must no longer happen. + i=1 + while [ "$i" -le 3 ]; do + key=$(printf '%s' "test:fm-park$i" | tr ':/.' '___') + rm -f "$state/.paused-resurfaced-$key" + i=$((i + 1)) + done + : > "$out" + PATH="$fakebin:$PATH" FM_FAKE_TMUX_WINDOW="test:fm-park1" FM_FAKE_TMUX_CAPTURE="$capture_file" \ + FM_FAKE_TMUX_CURRENT_COMMAND=zsh \ + FM_STATE_OVERRIDE="$state" FM_CREW_STATE_BIN="$fakebin/fm-crew-state.sh" \ + FM_PAUSE_RESURFACE_SECS=240 FM_POLL=1 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH" > "$out" & + pid=$! + if ! wait_live "$pid" 50; then + reap "$pid"; fail "a fresh cycle died again on parked lanes inside the check-in cadence: $(cat "$out")" + fi + [ ! -s "$out" ] || fail "a parked lane surfaced inside the shared cadence: $(cat "$out")" + reap "$pid" + + # Phase C: cadence, not silence. Age the shared marker past the window and the + # same parked lanes get their next check-in. + back=$(( $(date +%s) - 500 )) + set_mtime "$back" "$state/.last-parked-checkin" + : > "$out" + PATH="$fakebin:$PATH" FM_FAKE_TMUX_WINDOW="test:fm-park1" FM_FAKE_TMUX_CAPTURE="$capture_file" \ + FM_FAKE_TMUX_CURRENT_COMMAND=zsh \ + FM_STATE_OVERRIDE="$state" FM_CREW_STATE_BIN="$fakebin/fm-crew-state.sh" \ + FM_PAUSE_RESURFACE_SECS=240 FM_POLL=1 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH" > "$out" & + pid=$! + wait_for_exit "$pid" 60 || fail "the parked check-in never fired again once its cadence came due" + grep -F 'awaiting external' "$out" >/dev/null || fail "the next check-in was not labeled a parked recheck" + grep -F 'possible wedge' "$out" >/dev/null && fail "a parked check-in was mislabeled a possible wedge" + pass "parked lanes batch into one check-in per cadence window, and the cadence still comes due" +} + +# The other half of the contract: a cadence must not become silence. A parked +# lane whose wait has ACTUALLY cleared has to be noticed on the spot, even deep +# inside a closed check-in window - the pause is a reason to re-check on a +# cadence, never a reason to stop watching the lane. +test_a_cleared_park_is_noticed_promptly_inside_a_closed_cadence() { + local dir state fakebin out capture_file pid key sig statusf back + dir=$(make_case parked-clears-promptly); state="$dir/state"; fakebin="$dir/fakebin" + out="$dir/watch.out"; capture_file="$dir/pane.txt" + printf 'idle, awaiting a decision' > "$capture_file" + stage_parked_lanes "$state" "$capture_file" 1 500 + statusf="$state/park1.status" + key=$(printf '%s' "test:fm-park1" | tr ':/.' '___') + # Already parked and already checked in: both throttles are fully closed. + : > "$state/.paused-$key" + printf '%s' "$(hash_text "$(cat "$capture_file")")" > "$state/.stale-$key" + date +%s > "$state/.paused-resurfaced-$key" + touch "$state/.last-parked-checkin" + # The wait cleared. Keep .seen-* primed to the NEW signature so the signal + # scan cannot be what notices it: the parked stale path itself must. + printf 'done: the external decision landed\n' > "$statusf" + back=$(( $(date +%s) - 500 )) + set_mtime "$back" "$statusf" + sig=$(seen_sig "$statusf"); printf '%s' "$sig" > "$state/.seen-park1_status" + export FM_FAKE_CREW_STATE='state: unknown · source: none · agent stopped' + + PATH="$fakebin:$PATH" FM_FAKE_TMUX_WINDOW="test:fm-park1" FM_FAKE_TMUX_CAPTURE="$capture_file" \ + FM_FAKE_TMUX_CURRENT_COMMAND=zsh \ + FM_STATE_OVERRIDE="$state" FM_CREW_STATE_BIN="$fakebin/fm-crew-state.sh" \ + FM_PAUSE_RESURFACE_SECS=240 FM_POLL=1 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH" > "$out" & + pid=$! + wait_for_exit "$pid" 60 \ + || fail "a parked lane whose wait had cleared stayed silent inside the check-in cadence: $(cat "$out")" + grep -F 'stale: test:fm-park1' "$out" >/dev/null || fail "the cleared lane did not surface its own stale wake" + grep -F 'awaiting external' "$out" >/dev/null && fail "a cleared lane was still reported as a parked recheck" + assert_absent "$state/.paused-$key" "a cleared lane kept its parked marker" + pass "a parked lane whose wait has cleared is surfaced at once, even inside a closed check-in cadence" +} + # A captain-held crew can leave a stable backend endpoint after its agent exits. # fm-crew-state then authoritatively reports stopped rather than paused, but the # confirmed-dead agent plus the declared wait or captain-held transfer must retain @@ -1578,6 +1718,8 @@ test_busy_pane_repeated_escalation_reaches_demand_deep_inspection test_busy_pane_default_turn_age_bound_is_3600s test_nonterminal_stale_not_working_surfaced test_nonterminal_stale_paused_absorbed_then_resurfaced +test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence +test_a_cleared_park_is_noticed_promptly_inside_a_closed_cadence test_exited_declared_pause_is_bounded_but_live_gate_surfaces test_secondmate_paused_resurfaces_in_normal_mode test_secondmate_nonpaused_stale_remains_suppressed diff --git a/tests/fm-watcher-lock.test.sh b/tests/fm-watcher-lock.test.sh index e741ec21e8e..6d7be98480d 100755 --- a/tests/fm-watcher-lock.test.sh +++ b/tests/fm-watcher-lock.test.sh @@ -857,6 +857,185 @@ SH pass "cycle-exit ledger links a verified successor and remains size-capped" } +# Stage a home that needs supervision and has exactly one actionable signal +# waiting: a captain-relevant status, no recorded window (so the stale loop has +# nothing to scan), and no check or heartbeat cadence. One arm cycle therefore +# surfaces exactly one "signal:" wake and closes. Echoes " ". +stage_one_signal_home() { # + local dir state fakebin + dir=$(make_case "$1") + state="$dir/state" + fakebin="$dir/fakebin" + mark_pr_check_migration_complete "$state" + # A meta with no window= keeps fm_supervision_needed true (in-flight work) + # while recorded_windows stays empty, so nothing but the signal can wake. + printf 'kind=ship\n' > "$state/task.meta" + printf 'done: ready for review\n' > "$state/task.status" + printf '%s\n' "$dir" +} + +# Defect 1. A delivered wake must arm the next cycle BEFORE it is handled. +# The captured evidence in tests/fixtures/watch-cycle-exits.fixture.log shows +# what the other ordering costs: 499 of 499 real cycles closed with +# successor=none, so supervision ended on every single delivered wake and came +# back only if something above this layer happened to re-arm. The window that +# opens is exactly as wide as the handling turn, which is why arming has to +# happen first rather than afterwards. +test_delivered_wake_arms_its_successor_before_it_is_handled() { + local dir state fakebin armout armpid i lock_at_wake successor_pid status + dir=$(stage_one_signal_home wake-arms-successor) + state="$dir/state" + fakebin="$dir/fakebin" + armout="$dir/arm.out" + + PATH="$fakebin:$PATH" FM_HOME="$dir" FM_STATE_OVERRIDE="$state" FM_POLL=5 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH_ARM" > "$armout" & + armpid=$! + + # Sample the lock the instant the wake first becomes visible. Arming completes + # before the reason is printed, so a healthy successor must already hold the + # singleton at that moment; the reverse ordering leaves this empty. + lock_at_wake= + i=0 + while [ "$i" -lt 600 ]; do + if grep -q '^signal:' "$armout" 2>/dev/null; then + lock_at_wake=$(cat "$state/.watch.lock/pid" 2>/dev/null || true) + break + fi + sleep 0.01 + i=$((i + 1)) + done + grep -q '^signal:' "$armout" || fail "arm never surfaced the staged signal wake" + is_live_non_zombie "$lock_at_wake" \ + || fail "no live successor held the watcher lock when the wake was delivered (got '$lock_at_wake')" + + wait_for_exit "$armpid" 120 + status=$? + [ "$status" -eq 0 ] || fail "arm did not exit cleanly after delivering its wake (status $status)" + + successor_pid=$(cat "$state/.watch.lock/pid" 2>/dev/null || true) + is_live_non_zombie "$successor_pid" \ + || fail "supervision ended with the arm: no live watcher remains (lock pid '$successor_pid')" + [ "$successor_pid" = "$lock_at_wake" ] || fail "the watcher armed before the wake is not the one that survived it" + grep -q "arm_pid=$armpid.*reason=actionable-signal.*successor=started:$successor_pid" "$state/.watch-cycle-exits.log" \ + || fail "the delivered wake's ledger record did not name its armed successor" + + kill -TERM "$successor_pid" 2>/dev/null || true + pass "a delivered wake arms its successor before the wake is handled, and supervision survives the arm" +} + +# The successor outlives the arm that started it, so a LATER arm attaches to it +# rather than owning it as a child. When that attached cycle closes on a real +# wake, the arm must deliver that reason. Before this, an attached close could +# only be reported as "cycle ended without an actionable reason" - a genuine +# wake rendered as a failure, and a third exit shape observed in the field. +test_attached_arm_delivers_its_successor_cycle_wake() { + local dir state fakebin armout armpid successor_pid attach_out attach_pid i status + dir=$(stage_one_signal_home attached-delivers-wake) + state="$dir/state" + fakebin="$dir/fakebin" + armout="$dir/arm.out" + attach_out="$dir/attach.out" + + PATH="$fakebin:$PATH" FM_HOME="$dir" FM_STATE_OVERRIDE="$state" FM_POLL=5 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH_ARM" > "$armout" & + armpid=$! + wait_for_exit "$armpid" 120 || true + successor_pid=$(cat "$state/.watch.lock/pid" 2>/dev/null || true) + is_live_non_zombie "$successor_pid" || fail "no successor was left running to attach to" + + # A second arm now finds that live successor and follows it. + PATH="$fakebin:$PATH" FM_HOME="$dir" FM_STATE_OVERRIDE="$state" FM_POLL=5 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH_ARM" > "$attach_out" & + attach_pid=$! + i=0 + while [ "$i" -lt 120 ]; do + grep -qF "watcher: attached pid=$successor_pid" "$attach_out" 2>/dev/null && break + sleep 0.1 + i=$((i + 1)) + done + grep -qF "watcher: attached pid=$successor_pid" "$attach_out" || fail "second arm did not attach to the successor" + + # Give the attached cycle something actionable, so it closes on a real wake. + printf 'blocked: needs a decision\n' > "$state/second.status" + wait_for_exit "$attach_pid" 300 + status=$? + [ "$status" -eq 0 ] || fail "attached arm reported a failure for a cycle that woke for a real reason (status $status)" + grep -q '^signal:' "$attach_out" || fail "attached arm did not deliver its successor cycle's wake" + ! grep -qF 'watcher: FAILED - cycle ended without an actionable reason' "$attach_out" \ + || fail "a genuine attached-cycle wake was reported as an unexplained empty close" + + kill -TERM "$(cat "$state/.watch.lock/pid" 2>/dev/null || echo 0)" 2>/dev/null || true + pass "an attached arm delivers the wake its successor cycle closed on, never a false empty-close failure" +} + +# An idle or away home must NOT be left with a detached watcher: the successor +# exists to cover a handling turn, not to outlive the work it supervises. +test_successor_is_not_armed_without_supervision_need() { + local dir state fakebin armout armpid status leftover + dir=$(stage_one_signal_home successor-need-gate) + state="$dir/state" + fakebin="$dir/fakebin" + armout="$dir/arm.out" + rm -f "$state/task.meta" # no in-flight work and no relay poll: nothing to supervise + + PATH="$fakebin:$PATH" FM_HOME="$dir" FM_STATE_OVERRIDE="$state" FM_POLL=5 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH_ARM" > "$armout" & + armpid=$! + wait_for_exit "$armpid" 120 + status=$? + [ "$status" -eq 0 ] || fail "arm on an idle home did not deliver its wake cleanly (status $status)" + grep -q '^signal:' "$armout" || fail "arm on an idle home swallowed the staged wake" + grep -q "arm_pid=$armpid.*successor=none" "$state/.watch-cycle-exits.log" \ + || fail "an idle home recorded a successor it should not have armed" + leftover=$(cat "$state/.watch.lock/pid" 2>/dev/null || true) + if is_live_non_zombie "$leftover"; then + kill -TERM "$leftover" 2>/dev/null || true + fail "an idle home was left with a detached watcher still running" + fi + pass "no successor is armed for a home with nothing left to supervise" +} + +# The preserved capture is the reason this contract exists, so it is checked as +# evidence rather than trusted as prose: if the fixture ever stops showing the +# defect it recorded, these tests are guarding nothing and must say so. +test_preserved_capture_still_shows_the_defect_a_fresh_cycle_no_longer_has() { + local fixture total no_successor short_stale dir state fakebin armout armpid successor_pid + fixture="$ROOT/tests/fixtures/watch-cycle-exits.fixture.log" + [ -s "$fixture" ] || fail "the preserved cycle-exit capture is missing" + total=$(grep -c '^arm_pid=' "$fixture") + no_successor=$(grep -c 'successor=none$' "$fixture") + [ "$total" -ge 400 ] || fail "the preserved capture shrank below its recorded size ($total records)" + [ "$no_successor" -eq "$total" ] \ + || fail "the preserved capture no longer shows successor=none on every record ($no_successor/$total)" + # The same file is the parked-lane evidence: cycles that closed within five + # seconds of starting, all on actionable-stale. + short_stale=$(awk -F '\t' ' + { split($4, s, "="); split($5, e, "="); if (e[2] - s[2] < 5 && $8 == "reason=actionable-stale") n += 1 } + END { print n + 0 } + ' "$fixture") + [ "$short_stale" -ge 100 ] \ + || fail "the preserved capture no longer shows its sub-5s parked-lane churn ($short_stale records)" + + # Same field, same format, opposite verdict on a freshly produced cycle. + dir=$(stage_one_signal_home fixture-contrast) + state="$dir/state" + fakebin="$dir/fakebin" + armout="$dir/arm.out" + PATH="$fakebin:$PATH" FM_HOME="$dir" FM_STATE_OVERRIDE="$state" FM_POLL=5 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH_ARM" > "$armout" & + armpid=$! + wait_for_exit "$armpid" 120 || true + grep -q 'reason=actionable-signal.*successor=started:' "$state/.watch-cycle-exits.log" \ + || fail "a fresh actionable cycle still closes with no armed successor, exactly as the capture recorded" + ! grep -q 'reason=actionable-.*successor=none$' "$state/.watch-cycle-exits.log" \ + || fail "a fresh actionable cycle reproduced the captured successor=none defect" + + successor_pid=$(cat "$state/.watch.lock/pid" 2>/dev/null || true) + kill -TERM "$successor_pid" 2>/dev/null || true + pass "the preserved 499-record capture still shows the defect, and a fresh cycle no longer reproduces it" +} + test_stopped_watcher_is_live_but_stale_then_exit_is_classified() { local dir state fakebin armout armpid watcher_pid i status dir=$(make_case stopped-watcher) @@ -1038,4 +1217,8 @@ test_arm_propagates_immediate_wake_before_confirmation test_arm_waits_for_peer_beacon_after_child_stands_down test_arm_fails_loud_when_no_fresh_watcher_confirmable test_cycle_exit_ledger_links_successor_and_stays_bounded +test_delivered_wake_arms_its_successor_before_it_is_handled +test_attached_arm_delivers_its_successor_cycle_wake +test_successor_is_not_armed_without_supervision_need +test_preserved_capture_still_shows_the_defect_a_fresh_cycle_no_longer_has test_stopped_watcher_is_live_but_stale_then_exit_is_classified From 8d5ccd38d431eeb3bccaef3553620717df53e49b Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 02:40:38 -0700 Subject: [PATCH 04/14] docs: record the arm-layer continuity floor and the parked check-in cadence Corrects the ownership claim that continuity lives only in the per-harness adapters, and records the forked-session case where Claude's Stop hook is inert by design because state/.lock still names the live pre-fork harness. --- AGENTS.md | 2 +- docs/architecture.md | 4 ++++ docs/configuration.md | 3 +++ docs/watcher-continuity.md | 10 +++++++++- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 8e1cb9ec058..5017bff7966 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -111,7 +111,7 @@ state/ volatile runtime signals; gitignored .afk durable away-mode flag; present = sub-supervisor may inject escalations (set by /afk, cleared on user return) .watch.lock .wake-queue.lock watcher singleton and queue serialization locks .claude-autoarm.lock .claude-autoarm-epoch .turnend-claude-blocks Claude Stop auto-arm single-flight, epoch, and guard-budget records; never touch - .hash-* .count-* .stale-* .stale-since-* .paused-* .wedge-escalations-* .seen-* .hb-surfaced-* .last-* .heartbeat-streak watcher internals; never touch + .hash-* .count-* .stale-* .stale-since-* .paused-* .wedge-escalations-* .seen-* .hb-surfaced-* .last-* .heartbeat-streak .watch-successor-output.* watcher internals; never touch .watch-triage.log watcher's absorbed-wake debug log (size-capped); never relied on, safe to delete .last-watcher-beat watcher liveness beacon, touched every poll (including while absorbing benign wakes); guard scripts read it .subsuper-* .supervise-daemon.* sub-supervisor internals; never touch diff --git a/docs/architecture.md b/docs/architecture.md index 8682cfe95c9..531c2a90d27 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -19,6 +19,8 @@ A concurrent replacement remains armed, every non-merged or invalid observation `bin/fm-pr-lib.sh` owns the receipt format and strict identity mechanics, while `bin/fm-watch.sh` owns queue-before-retirement ordering. No-verb wakes, such as `working:` notes and bare turn-ended signals, are benign only when `bin/fm-crew-state.sh` reports positive evidence that the crew is still working: an actively running no-mistakes step attributed to that crew's current code, or an exact busy verdict from the semantic busy-state contract. A crew that declares `paused:` for a known external wait is separately absorbed while idle and re-surfaced only on the longer pause cadence, rather than being treated as a possible wedge. +Every parked lane due for that recheck in one poll is batched into a single check-in wake, rate-limited home-wide by `FM_PARKED_CHECKIN_SECS` through the restart-surviving `state/.last-parked-checkin` mtime, so parked lanes at independent phases cost one wake per window instead of one cycle each. +A parked lane whose declared wait actually stops holding leaves the parked classification and surfaces at once, independent of that cadence. For an ordinary crew that has stopped, the normal-mode watcher first surfaces one stale wake, then applies that same cadence to an unchanged `paused:` or durable `captain-held` endpoint only when the backend confidently reports its agent dead. Live or inconclusive liveness remains fail-open at that initial surface, and the secondmate idle-endpoint exemption is unchanged. Its initial normal-mode status signal still surfaces through the no-verb path, while away mode self-handles that routine signal and owns the later recheck. @@ -58,6 +60,8 @@ At session start, `bin/fm-session-start.sh` emits exactly one primary-harness su That block owns the live wait shape for the running primary harness: Claude's Stop `asyncRewake` hook owns tokenless re-arm cycles, Grok uses background-notify cycles, Codex uses bounded foreground checkpoints, Pi and pi-signed use the same two tracked primary extensions, and OpenCode uses its TUI plugin. `bin/fm-watch-arm.sh` remains the verified arm wrapper for protocols that call it; it forks the watcher as a tracked child, verifies it is genuinely alive with a fresh liveness beacon, and prints an honest `started`, `attached`, or nonzero `FAILED` status. On `attached` it stays live across identity-matched successors, and an unexplained clean child close either attaches to a verified healthy successor or becomes the typed nonzero `watcher: FAILED - cycle ended without an actionable reason` result. +Arming the successor is the arm layer's first act of consuming an actionable wake, before that wake is delivered, so continuity no longer depends on whichever adapter sits above it re-arming afterwards. +An attached cycle that closes on a real wake delivers that wake from the successor's own recorded output rather than reporting an unexplained empty close. The arm layer records one bounded lifecycle row per observed cycle in `state/.watch-cycle-exits.log`; `state/.watch-triage.log` remains exclusively the absorbed-wake debug log. Pi and OpenCode verify session-lock ownership and launch one singleton successor from their child-close handlers before delivering an actionable wake prompt, with bounded exponential retry for failed restoration. Claude's `bin/fm-claude-stop-autoarm.sh` hook fires on every Stop and, when the home is eligible and still needs supervision, claims one home-scoped cycle, foregrounds the arm wrapper, and translates an actionable close or typed failure into one exit-2 rewake. diff --git a/docs/configuration.md b/docs/configuration.md index e0358709708..5a6c2f19171 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -466,6 +466,8 @@ FM_WATCH_REARM_RETRY_MAX_MS=4000 # Pi/OpenCode adapter cap for exponential con FM_WATCH_REARM_RETRY_LIMIT=5 # Pi/OpenCode adapter launch-failure retries before surfacing restoration failure FM_WATCH_CYCLE_LOG_MAX_BYTES=262144 # size cap for the arm-owned watcher lifecycle ledger FM_WATCH_CYCLE_LOG_KEEP_LINES=1000 # newest complete lifecycle rows considered when the ledger is capped +FM_WATCH_ARM_SUCCESSOR=1 # set to 0 to stop the arm layer arming a successor before it delivers a wake; only for a caller that owns continuity itself +FM_WATCH_SUCCESSOR_OUT_TTL=3600 # seconds an unclaimed state/.watch-successor-output. file survives before the arm layer treats it as debris FM_WATCHER_STALE_GRACE=300 # defaults to FM_GUARD_GRACE; seconds a live watcher lock may have a stale beacon before re-arm errors FM_SIGNAL_GRACE=30 # seconds to coalesce nearby status and turn-end signals into one wake FM_CAPTAIN_RE='done:|needs-decision:|blocked:|failed:|PR ready|checks green|ready in branch|merged' # captain-relevant status regex; nonterminal progress verbs remain excluded even when their prose matches @@ -473,6 +475,7 @@ FM_CLASSIFY_PAUSED_VERB=paused # leading status verb for a declared external FM_STALE_ESCALATE_SECS=240 # idle seconds before a provably-working stale pane escalates; stale panes whose crew is not provably working surface immediately unless they declare the pause verb FM_BUSY_TURN_MAX_SECS=3600 # maximum age of a busy pane's latest state/.turn-ended marker, or its state/.meta spawn record before any turn completes, before the same wedge escalation used for a provably-working non-busy stale takes over; inspection-only, never an automatic interrupt or restart FM_PAUSE_RESURFACE_SECS=3600 # seconds before an idle declared external wait re-surfaces for a recheck in the watcher or away-mode daemon +FM_PARKED_CHECKIN_SECS= # defaults to FM_PAUSE_RESURFACE_SECS; minimum seconds between the watcher's batched parked check-ins, so N parked lanes cost one wake per window instead of N FM_WEDGE_DEMAND_INSPECT_COUNT=3 # consecutive provably-working stale escalations on the same unchanged pane before demand-deep-inspection is added FM_WATCH_TRIAGE_LOG_MAX_BYTES=262144 # size cap for the watcher's absorbed-wake debug log FM_FLEET_SYNC_BOOTSTRAP_TIMEOUT= # optional seconds allowed for bootstrap's best-effort clone refresh; unset/blank defaults to max(20, 5 + 3 * origin-backed-project-count) diff --git a/docs/watcher-continuity.md b/docs/watcher-continuity.md index 52b3a9eec3a..549238de19b 100644 --- a/docs/watcher-continuity.md +++ b/docs/watcher-continuity.md @@ -5,6 +5,9 @@ Must-work continuity now lives above that process boundary instead of depending ## Ownership +`bin/fm-watch-arm.sh` owns the harness-independent floor: on an actionable close it arms and verifies one detached successor BEFORE it delivers the wake, so a home that still needs supervision is never blind for the handling turn no matter which adapter sits above it. +The adapters below layer their own restoration on top of that floor rather than being the only thing standing between a delivered wake and no supervision at all. + Pi's `.pi/extensions/fm-primary-pi-watch.ts` and OpenCode's `.opencode/plugins/fm-primary-watch-arm.js` own continuous re-arm after an actionable child close. Each adapter starts the next arm before delivering the wake prompt, checks current session-lock ownership at launch, preserves one child or scheduled retry at a time, and applies bounded exponential retry after an unexpected or failed close. A failed follow-up never cancels continuity restoration. @@ -24,7 +27,8 @@ When that retained arm later closes, its actual close is classified as a new sup After the configured retry bound is exhausted, it delivers the original wake with a typed continuity-restoration failure even if every successor arm hung without reporting readiness. This is deliberate Option B ordering: the fleet is protected before the model handles the wake whenever restoration succeeds, but the model is never left blind when it does not. -Claude's Stop hook starts the successor arm at the next Stop after the handling turn, rather than before notification as Pi and OpenCode do. +Claude's Stop hook still starts its own arm at the next Stop after the handling turn rather than before notification, but that is no longer what covers the turn: the arm layer has already armed a detached successor before the wake reached the model, and the next Stop's arm attaches to it instead of starting cold. +This matters most where the hook cannot run at all - a forked session leaves `state/.lock` naming the still-live pre-fork harness, so the forked session's hook stays inert by design and no adapter re-arm ever happens. The durable wake queue preserves actionable events during the residual active-turn window, and the unchanged bounded turn-end guard enforces recovery at Stop when no watcher or auto-arm claim is present. No PreToolUse hook denies fleet commands based on watcher status. The model no longer re-arms after ordinary wakes. @@ -41,6 +45,8 @@ The turn-end guard remains the final backstop rather than the normal continuity An actionable child output returns that reason normally. A zero/empty child return rechecks the home lock and beacon, attaches to a verified healthy successor when one exists, or emits `watcher: FAILED - cycle ended without an actionable reason` and exits nonzero. An attached arm follows verified identity-matched successors and reports the same typed failure if that chain ends without one. +An attached cycle that closes on a genuine wake is not that case: the successor writes its one reason to `state/.watch-successor-output.` before releasing the singleton, and the attached arm claims and delivers it, arming the next successor first. +A successor is armed only for a delivered actionable wake in a home that still needs supervision and is not away, so a typed failure stays loud and unarmed and an idle home is never left with a detached watcher. The arm layer appends one tab-separated record per observed cycle to `state/.watch-cycle-exits.log`. Each record includes arm and watcher PIDs, start and end timestamps, exit code and signal, classified reason, beacon age, lock identity before and after close, and successor disposition. @@ -55,6 +61,8 @@ Only the watcher process touches `state/.last-watcher-beat`; no helper process c `tests/fm-pi-watch-extension.test.sh` checks Pi's first-cycle-or-explicit-repair tool metadata and ownership-based redundant-call no-ops, then simulates actionable and empty child closes against the actual Pi and OpenCode close handlers, blocks prompt delivery to prove the successor launches first, verifies single-flight behavior, changes the session lock before close to prove ownership is rechecked, and hangs each successor arm to prove bounded fallback delivery includes the typed restoration failure. The same suite covers ordinary same-process session replacement for `/new`, `/resume`, and `/fork`, same-instance shutdown-plus-start, stale prior-generation callbacks, repeated transitions with exactly one live cycle, disappearance of the shutting-down refusal after a valid replacement activates, and terminal quit still refusing late rearm. `tests/fm-watcher-lock.test.sh` covers verified-successor attach, the typed self-eviction failure, bounded and successor-linked lifecycle rows, and a SIGSTOP counterfactual that distinguishes a live PID from a stale beacon before classifying termination. +The same suite proves the arm layer's own floor: a delivered wake has a live successor holding the singleton at the moment it is delivered, an attached arm delivers its successor cycle's wake instead of a false empty-close failure, an idle home is left with no detached watcher, and the preserved 499-record capture in `tests/fixtures/watch-cycle-exits.fixture.log` still shows the `successor=none` defect that a fresh cycle no longer reproduces. +`tests/fm-watch-triage.test.sh` proves the parked check-in cadence: overdue lanes batch into one wake per window, a fresh cycle inside that window no longer dies on them, the cadence still comes due, and a lane whose declared wait has actually cleared surfaces at once regardless. `tests/fm-subagent-pretool-check.test.sh` proves Claude retains only the non-status Bash seatbelts. `tests/fm-claude-stop-autoarm.test.sh` covers the auto-arm's scope, stale and live session owners, unchanged AFK and need boundaries, single-flight, and exit-2 translation. `FM_CLAUDE_LIVE_E2E=1 tests/fm-claude-stop-autoarm-live-e2e.test.sh` starts with the reproduced stale-lock state, runs session start first, completes two tokenless cycles, and checks the competing-live-owner negative control. From 67a58d7f235f6784df5305e2fc07dedcaa00bc83 Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 03:08:03 -0700 Subject: [PATCH 05/14] fix(tests): register temp roots so a suite cannot leak its own processes fm_test_tmproot is called through a command substitution, so its array append landed in the subshell and every suite leaked its entire temp root. Registration now goes to a file that survives the subshell, and only the sourcing shell may run the cleanup. This became load-bearing once an arm can leave a detached successor: a leaked temp root kept a live watcher supervising a home no test owned any more, and the accumulated processes destabilised timing-sensitive cases in the same suite. Also keep the away-mode daemon on the unbatched parked wake form, since it classifies one window per printed reason. --- bin/fm-watch.sh | 7 +++++++ docs/verification/supervision.md | 36 ++++++++++++++++++++++++++++++++ docs/watcher-continuity.md | 1 + tests/lib.sh | 24 ++++++++++++++++++--- 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/bin/fm-watch.sh b/bin/fm-watch.sh index 9b2e4687be8..5598678c954 100755 --- a/bin/fm-watch.sh +++ b/bin/fm-watch.sh @@ -345,6 +345,13 @@ handle_paused_stale() { # rf_age=$(age_of "$rf") # 999999 when no prior re-surface if [ "$age" -ge "$PAUSE_RESURFACE_SECS" ] && [ "$rf_age" -ge "$PAUSE_RESURFACE_SECS" ]; then reason="stale: $win (paused ${age}s, awaiting external - declared pause, rechecked on a long cadence not a wedge; confirm the wait still holds)" + if afk_present; then + # The away-mode daemon owns triage and classifies one window per printed + # reason, so it keeps the unbatched one-shot form it was built to read. + fm_wake_append stale "$win" "$reason" || exit 1 + date +%s > "$rf" + wake "$reason" + fi # Due, but not surfaced here: collect it and let flush_parked_checkin decide # once, for the whole fleet, whether this poll is a check-in. parked_due=$(printf '%s%s\t%s\n' "$parked_due" "$win" "$reason") diff --git a/docs/verification/supervision.md b/docs/verification/supervision.md index d2fdd5a09c9..fc332f545cd 100644 --- a/docs/verification/supervision.md +++ b/docs/verification/supervision.md @@ -198,6 +198,42 @@ tests/fm-claude-stop-autoarm.test.sh tests/fm-turnend-guard.test.sh ``` +### Arm-layer successor and parked check-in cadence + +Captured 2026-07-31 from a live home's `state/.watch-cycle-exits.log`, preserved verbatim at `tests/fixtures/watch-cycle-exits.fixture.log` because the file accumulates over days and cannot be regenerated. + +```text +records 499 +exit_code=0 499 / 499 +signal=none 499 / 499 +successor=none 499 / 499 +reason=actionable-stale 293 +reason=actionable-signal 198 +reason=actionable-check 8 +sub-5s exits, actionable-stale 112 (22% of all cycles) +``` + +Every cycle completed normally and delivered a wake; none armed a successor. +Supervision therefore ended on each delivered wake and resumed only when an adapter above the arm layer happened to re-arm. +The sub-5s exits are parked lanes at independent phases, each ending a cycle of its own. + +Guard-class mutation results, one mutation per protection. +A failing case aborts its suite, so each mutation was run twice: once to see which case it kills, and once with that case's invocation removed to prove nothing else in the suite breaks. + +| Mutation | Case killed | Rest of suite | +| --- | --- | --- | +| Deliver the wake before arming the successor | `test_delivered_wake_arms_its_successor_before_it_is_handled` | 33 cases clean | +| Drop the successor-output claim in `attach_and_wait` | `test_attached_arm_delivers_its_successor_cycle_wake` | 33 cases clean | +| Arm a successor regardless of supervision need | `test_successor_is_not_armed_without_supervision_need` | 33 cases clean | +| Ignore the shared parked check-in cadence | `test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence` | 41 cases clean | + +Deterministic entry points for this contract: + +```sh +tests/fm-watcher-lock.test.sh +tests/fm-watch-triage.test.sh +``` + ## Wedge-alarm channels The two real notification channels were bounded manually on 2026-07-10 on macOS 26.5.2 with Herdr 0.7.3. diff --git a/docs/watcher-continuity.md b/docs/watcher-continuity.md index 549238de19b..a3cada4a2de 100644 --- a/docs/watcher-continuity.md +++ b/docs/watcher-continuity.md @@ -36,6 +36,7 @@ Terminal arm-output classification (`started`, `attached`, or `FAILED`) remains Codex retains its bounded foreground checkpoint protocol. Grok retains its tracked background-task notification protocol. No adapter starts a replacement with shell `&`. +The arm layer's own successor is not that pattern: it is deliberately double-forked so it outlives the arm that delivers the wake, and it is then verified through the same live-process-plus-fresh-beacon gate as an owned child, so it is never reported off a process that is already dying. The turn-end guard remains the final backstop rather than the normal continuity mechanism and cooperates with the auto-arm in its `--claude` mode. diff --git a/tests/lib.sh b/tests/lib.sh index ee3b1d1476c..0c8cf3ca680 100644 --- a/tests/lib.sh +++ b/tests/lib.sh @@ -58,20 +58,38 @@ pass() { # call fm_test_cleanup from inside it so registered dirs are still removed. FM_TEST_CLEANUP_DIRS=() +# fm_test_tmproot is almost always called through a command substitution, and a +# subshell cannot write back to the array above - so registration also goes to a +# file, which does survive. Registering only in the array meant every suite +# leaked its entire temp root, and once a suite could leave a detached process +# inside one (a watcher successor), the process leaked with the directory. +FM_TEST_CLEANUP_REGISTRY=$(mktemp "${TMPDIR:-/tmp}/fm-test-cleanup.XXXXXX") +# Only the shell that sourced this file may run the cleanup. A subshell that +# inherits the EXIT trap must never delete a root its parent is still using - +# the exact hazard that made registering from inside the subshell unusable. +FM_TEST_CLEANUP_OWNER=${BASHPID:-$$} fm_test_cleanup() { local d + [ "${BASHPID:-$$}" = "$FM_TEST_CLEANUP_OWNER" ] || return 0 for d in "${FM_TEST_CLEANUP_DIRS[@]:-}"; do [ -n "$d" ] && rm -rf "$d" done + if [ -f "$FM_TEST_CLEANUP_REGISTRY" ]; then + while IFS= read -r d; do + case "$d" in + /*) rm -rf "$d" ;; + esac + done < "$FM_TEST_CLEANUP_REGISTRY" + rm -f "$FM_TEST_CLEANUP_REGISTRY" + fi } +trap fm_test_cleanup EXIT fm_test_tmproot() { local prefix=${1:-fm-test} root root=$(mktemp -d "${TMPDIR:-/tmp}/${prefix}.XXXXXX") - if [ "${#FM_TEST_CLEANUP_DIRS[@]}" -eq 0 ]; then - trap fm_test_cleanup EXIT - fi + printf '%s\n' "$root" >> "$FM_TEST_CLEANUP_REGISTRY" FM_TEST_CLEANUP_DIRS+=("$root") printf '%s\n' "$root" } From 397ed827b25b75ed9ec79aecc697452bb87fa30c Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 03:16:43 -0700 Subject: [PATCH 06/14] docs(verification): record the captured defect and the guard-class mutation matrix --- docs/verification/supervision.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/verification/supervision.md b/docs/verification/supervision.md index fc332f545cd..8e991089b34 100644 --- a/docs/verification/supervision.md +++ b/docs/verification/supervision.md @@ -226,6 +226,13 @@ A failing case aborts its suite, so each mutation was run twice: once to see whi | Drop the successor-output claim in `attach_and_wait` | `test_attached_arm_delivers_its_successor_cycle_wake` | 33 cases clean | | Arm a successor regardless of supervision need | `test_successor_is_not_armed_without_supervision_need` | 33 cases clean | | Ignore the shared parked check-in cadence | `test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence` | 41 cases clean | +| Flip 200 `successor=none` rows in the preserved capture | `test_preserved_capture_still_shows_the_defect_a_fresh_cycle_no_longer_has` | 33 cases clean | +| Stop releasing a lane whose pause verb has gone | `test_a_cleared_park_is_noticed_promptly_inside_a_closed_cadence` | `test_secondmate_unpause_clears_pause_tracking` next, then 40 cases clean | + +The last row is the one mutation two cases share: both guard the same pause release, one for an ordinary parked lane inside a closed cadence and one for a secondmate, and no unrelated case fails once both are removed. + +An earlier pass of this matrix failed instead at `test_watch_restart_attaches_to_healthy_peer`, whose TERM-resistant peer must install its signal handler before `--restart` signals it. +The cause was host load from watcher successors left behind by leaked test temp roots, not the peer contract; with `fm_test_tmproot` registration repaired, both suites run with zero stray watcher processes and zero leftover temp roots, and the mutation matrix reproduces the table above. Deterministic entry points for this contract: From d6d8fd6ad0f535e3c85835fee04d2ec6842b38c6 Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 03:22:19 -0700 Subject: [PATCH 07/14] test(fixtures): key the cycle-exit capture on its consumer directory tests/fixtures// is the repo's fixture convention: the changed-test selector resolves a fixture through the directory its consuming suite names, and a file sitting directly under tests/fixtures/ has no mapping at all. --- docs/verification/supervision.md | 2 +- docs/watcher-continuity.md | 2 +- .../README} | 0 .../cycle-exits.log} | 0 tests/fm-watch-triage.test.sh | 2 +- tests/fm-watcher-lock.test.sh | 4 ++-- 6 files changed, 5 insertions(+), 5 deletions(-) rename tests/fixtures/{watch-cycle-exits.fixture.README => watch-cycle-exits/README} (100%) rename tests/fixtures/{watch-cycle-exits.fixture.log => watch-cycle-exits/cycle-exits.log} (100%) diff --git a/docs/verification/supervision.md b/docs/verification/supervision.md index 8e991089b34..ae7d5a32c52 100644 --- a/docs/verification/supervision.md +++ b/docs/verification/supervision.md @@ -200,7 +200,7 @@ tests/fm-turnend-guard.test.sh ### Arm-layer successor and parked check-in cadence -Captured 2026-07-31 from a live home's `state/.watch-cycle-exits.log`, preserved verbatim at `tests/fixtures/watch-cycle-exits.fixture.log` because the file accumulates over days and cannot be regenerated. +Captured 2026-07-31 from a live home's `state/.watch-cycle-exits.log`, preserved verbatim at `tests/fixtures/watch-cycle-exits/cycle-exits.log` because the file accumulates over days and cannot be regenerated. ```text records 499 diff --git a/docs/watcher-continuity.md b/docs/watcher-continuity.md index a3cada4a2de..d3c34f7bc1e 100644 --- a/docs/watcher-continuity.md +++ b/docs/watcher-continuity.md @@ -62,7 +62,7 @@ Only the watcher process touches `state/.last-watcher-beat`; no helper process c `tests/fm-pi-watch-extension.test.sh` checks Pi's first-cycle-or-explicit-repair tool metadata and ownership-based redundant-call no-ops, then simulates actionable and empty child closes against the actual Pi and OpenCode close handlers, blocks prompt delivery to prove the successor launches first, verifies single-flight behavior, changes the session lock before close to prove ownership is rechecked, and hangs each successor arm to prove bounded fallback delivery includes the typed restoration failure. The same suite covers ordinary same-process session replacement for `/new`, `/resume`, and `/fork`, same-instance shutdown-plus-start, stale prior-generation callbacks, repeated transitions with exactly one live cycle, disappearance of the shutting-down refusal after a valid replacement activates, and terminal quit still refusing late rearm. `tests/fm-watcher-lock.test.sh` covers verified-successor attach, the typed self-eviction failure, bounded and successor-linked lifecycle rows, and a SIGSTOP counterfactual that distinguishes a live PID from a stale beacon before classifying termination. -The same suite proves the arm layer's own floor: a delivered wake has a live successor holding the singleton at the moment it is delivered, an attached arm delivers its successor cycle's wake instead of a false empty-close failure, an idle home is left with no detached watcher, and the preserved 499-record capture in `tests/fixtures/watch-cycle-exits.fixture.log` still shows the `successor=none` defect that a fresh cycle no longer reproduces. +The same suite proves the arm layer's own floor: a delivered wake has a live successor holding the singleton at the moment it is delivered, an attached arm delivers its successor cycle's wake instead of a false empty-close failure, an idle home is left with no detached watcher, and the preserved 499-record capture in `tests/fixtures/watch-cycle-exits/cycle-exits.log` still shows the `successor=none` defect that a fresh cycle no longer reproduces. `tests/fm-watch-triage.test.sh` proves the parked check-in cadence: overdue lanes batch into one wake per window, a fresh cycle inside that window no longer dies on them, the cadence still comes due, and a lane whose declared wait has actually cleared surfaces at once regardless. `tests/fm-subagent-pretool-check.test.sh` proves Claude retains only the non-status Bash seatbelts. `tests/fm-claude-stop-autoarm.test.sh` covers the auto-arm's scope, stale and live session owners, unchanged AFK and need boundaries, single-flight, and exit-2 translation. diff --git a/tests/fixtures/watch-cycle-exits.fixture.README b/tests/fixtures/watch-cycle-exits/README similarity index 100% rename from tests/fixtures/watch-cycle-exits.fixture.README rename to tests/fixtures/watch-cycle-exits/README diff --git a/tests/fixtures/watch-cycle-exits.fixture.log b/tests/fixtures/watch-cycle-exits/cycle-exits.log similarity index 100% rename from tests/fixtures/watch-cycle-exits.fixture.log rename to tests/fixtures/watch-cycle-exits/cycle-exits.log diff --git a/tests/fm-watch-triage.test.sh b/tests/fm-watch-triage.test.sh index f8614a35ac3..06d49cec529 100755 --- a/tests/fm-watch-triage.test.sh +++ b/tests/fm-watch-triage.test.sh @@ -700,7 +700,7 @@ stage_parked_lanes() { # # Defect 2. A lane parked awaiting a captain decision cannot clear until a human # acts, so it must not carry a standing per-cycle trigger. In the preserved -# capture (tests/fixtures/watch-cycle-exits.fixture.log) 112 of 499 cycles ended +# capture (tests/fixtures/watch-cycle-exits/cycle-exits.log) 112 of 499 cycles ended # within five seconds of starting, every one on a parked lane: independently # phased lanes each ended a cycle of their own, so a fresh watcher died on # whichever one happened to be next overdue. Due lanes now batch into one diff --git a/tests/fm-watcher-lock.test.sh b/tests/fm-watcher-lock.test.sh index 6d7be98480d..66551e1c217 100755 --- a/tests/fm-watcher-lock.test.sh +++ b/tests/fm-watcher-lock.test.sh @@ -875,7 +875,7 @@ stage_one_signal_home() { # } # Defect 1. A delivered wake must arm the next cycle BEFORE it is handled. -# The captured evidence in tests/fixtures/watch-cycle-exits.fixture.log shows +# The captured evidence in tests/fixtures/watch-cycle-exits/cycle-exits.log shows # what the other ordering costs: 499 of 499 real cycles closed with # successor=none, so supervision ended on every single delivered wake and came # back only if something above this layer happened to re-arm. The window that @@ -1001,7 +1001,7 @@ test_successor_is_not_armed_without_supervision_need() { # defect it recorded, these tests are guarding nothing and must say so. test_preserved_capture_still_shows_the_defect_a_fresh_cycle_no_longer_has() { local fixture total no_successor short_stale dir state fakebin armout armpid successor_pid - fixture="$ROOT/tests/fixtures/watch-cycle-exits.fixture.log" + fixture="$ROOT/tests/fixtures/watch-cycle-exits/cycle-exits.log" [ -s "$fixture" ] || fail "the preserved cycle-exit capture is missing" total=$(grep -c '^arm_pid=' "$fixture") no_successor=$(grep -c 'successor=none$' "$fixture") From 55a5c2d5176f01a24a514b596c033798ad49e8e3 Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 03:22:54 -0700 Subject: [PATCH 08/14] docs(scripts): note that the arm wrapper arms the next cycle before delivering a wake --- docs/scripts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/scripts.md b/docs/scripts.md index 767980b75af..a6a49b01bdb 100644 --- a/docs/scripts.md +++ b/docs/scripts.md @@ -55,7 +55,7 @@ The shared no-mistakes gate refusal for fleet lifecycle entrypoints is summarize | `fm-pending-reply-lib.sh` | Parent-owned secondmate pending-reply expectations, recovery, and one-shot escalation | | `fm-secondmate-report.sh` | Optional helper to append a correlated parent status or document-pointer report | | `fm-gate-refuse-lib.sh` | Shared no-mistakes gate-context refusal for fleet lifecycle entrypoints | -| `fm-watch-arm.sh` | Verified home-scoped watcher arm wrapper with loud cycle endings and bounded lifecycle ledger | +| `fm-watch-arm.sh` | Verified home-scoped watcher arm wrapper; arms the next cycle before delivering a wake, with loud cycle endings and a bounded lifecycle ledger | | `fm-watch-checkpoint.sh` | Run one bounded foreground watcher checkpoint for Codex-style supervision | | `fm-watch.sh` | Singleton-safe always-on watcher: absorb benign wakes, queue and exit on actionable ones | | `fm-afk-start.sh` | Run the common sourceable away-mode daemon entry in the foreground | From f3cdbcc8ab95155dea09bb6c31267f233b1b3958 Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 03:46:05 -0700 Subject: [PATCH 09/14] fix(tests): create the cleanup registry only when a suite takes a temp root A named per-owner path is also what lets the command-substitution subshell append to the registry its parent will read, and a suite that never takes a temp root now leaves nothing behind. --- tests/lib.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/lib.sh b/tests/lib.sh index 0c8cf3ca680..02b0c637e25 100644 --- a/tests/lib.sh +++ b/tests/lib.sh @@ -63,11 +63,15 @@ FM_TEST_CLEANUP_DIRS=() # file, which does survive. Registering only in the array meant every suite # leaked its entire temp root, and once a suite could leave a detached process # inside one (a watcher successor), the process leaked with the directory. -FM_TEST_CLEANUP_REGISTRY=$(mktemp "${TMPDIR:-/tmp}/fm-test-cleanup.XXXXXX") # Only the shell that sourced this file may run the cleanup. A subshell that # inherits the EXIT trap must never delete a root its parent is still using - # the exact hazard that made registering from inside the subshell unusable. FM_TEST_CLEANUP_OWNER=${BASHPID:-$$} +# Named rather than mktemp'd, so the path is known to the subshell that appends +# to it AND nothing is created for a suite that never takes a temp root. A +# recycled pid must not inherit a previous run's entries. +FM_TEST_CLEANUP_REGISTRY="${TMPDIR:-/tmp}/fm-test-cleanup.$FM_TEST_CLEANUP_OWNER" +rm -f "$FM_TEST_CLEANUP_REGISTRY" fm_test_cleanup() { local d From d2152a770a8da4e7e4a579e66247dd213a9632da Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 04:21:15 -0700 Subject: [PATCH 10/14] no-mistakes(review): fix parked check-in batching and successor output binding --- bin/fm-watch-arm.sh | 70 +++++++++++++------ bin/fm-watch.sh | 5 +- docs/verification/supervision.md | 3 + tests/fm-afk-launch.test.sh | 1 + tests/fm-afk-pi-herdr-return-e2e.test.sh | 1 + .../fm-backend-herdr-eventwait-smoke.test.sh | 1 + .../fm-backend-herdr-presentation-e2e.test.sh | 1 + tests/fm-documentation-audiences.test.sh | 2 +- tests/fm-grok-stop-live-e2e.test.sh | 2 + tests/fm-kimi-harness.test.sh | 1 + ...m-send-secondmate-marker-herdr-e2e.test.sh | 1 + tests/fm-tmux-submit-busy.test.sh | 2 +- tests/fm-watch-triage.test.sh | 27 +++++-- tests/lib.sh | 13 ++-- 14 files changed, 95 insertions(+), 35 deletions(-) diff --git a/bin/fm-watch-arm.sh b/bin/fm-watch-arm.sh index 0157f5c3331..a9ff48bc22c 100755 --- a/bin/fm-watch-arm.sh +++ b/bin/fm-watch-arm.sh @@ -299,41 +299,64 @@ successor_wanted() { } # Start one detached watcher and confirm it through the same honesty gate an -# owned child passes. Prints "started:" once confirmed and "none" -# otherwise. It NEVER fails the wake delivery it precedes: a home left without a -# successor is recorded as such in the ledger and still gets its reason. +# owned child passes. Prints "started:" once confirmed, "attached:" +# when another watcher won the singleton instead, and "none" otherwise. It NEVER +# fails the wake delivery it precedes: a home left without a successor is +# recorded as such in the ledger and still gets its reason. arm_successor() { # - local closed_pid=${1:-none} tmp deadline pid target + local closed_pid=${1:-none} tmp pidfile forked deadline pid target successor_wanted || { printf 'none'; return 0; } prune_successor_outputs tmp=$(mktemp "$SUCCESSOR_OUT_PREFIX.pending.XXXXXX" 2>/dev/null) || { printf 'none'; return 0; } + pidfile=$(mktemp "$SUCCESSOR_OUT_PREFIX.forkpid.XXXXXX" 2>/dev/null) || { + rm -f "$tmp" 2>/dev/null || true + printf 'none' + return 0 + } # Double-fork so the watcher is reparented away from this arm: it must survive # the exit that delivers the wake. setsid additionally detaches the controlling # terminal where it exists; the bare subshell fallback covers hosts without it. + # The double fork hides the watcher's pid from $!, so the forked shell records + # its own pid and then execs the watcher into it: the pid it wrote IS the + # watcher's, whether or not setsid inserted a fork of its own. + # shellcheck disable=SC2016 # $$ and $1/$2 must expand in the forked shell, not here. if command -v setsid >/dev/null 2>&1; then - ( setsid "$WATCH" >"$tmp" 2>/dev/null /dev/null + ( setsid "${BASH:-bash}" -c 'printf "%s" "$$" > "$1"; exec "$2"' fm-successor "$pidfile" "$WATCH" \ + >"$tmp" 2>/dev/null /dev/null else - ( "$WATCH" >"$tmp" 2>/dev/null /dev/null + ( "${BASH:-bash}" -c 'printf "%s" "$$" > "$1"; exec "$2"' fm-successor "$pidfile" "$WATCH" \ + >"$tmp" 2>/dev/null /dev/null fi deadline=$(( $(date +%s) + CONFIRM_TIMEOUT + 1 )) while :; do if healthy_watcher && [ "$HEALTHY_PID" != "$closed_pid" ]; then pid=$HEALTHY_PID - target=$(successor_output_path "$pid") - # Another arm may already own this watcher and its output file. Never - # clobber a reason someone else is still owed. - if [ -e "$target" ]; then - rm -f "$tmp" 2>/dev/null || true - else - mv -f "$tmp" "$target" 2>/dev/null || rm -f "$tmp" 2>/dev/null || true + forked=$(cat "$pidfile" 2>/dev/null || true) + if [ -n "$forked" ] && [ "$forked" = "$pid" ]; then + target=$(successor_output_path "$pid") + # Another arm may already own this watcher and its output file. Never + # clobber a reason someone else is still owed. + if [ -e "$target" ]; then + rm -f "$tmp" 2>/dev/null || true + else + mv -f "$tmp" "$target" 2>/dev/null || rm -f "$tmp" 2>/dev/null || true + fi + rm -f "$pidfile" 2>/dev/null || true + printf 'started:%s' "$pid" + return 0 fi - printf 'started:%s' "$pid" + # Someone else's watcher holds the singleton, so our fork stood down and + # its stdout is a "already running" note, not that cycle's reason. The + # winner's reason lands under its own arm's file; publishing ours there + # would make a later attached arm read a genuine wake as an empty close. + rm -f "$tmp" "$pidfile" 2>/dev/null || true + printf 'attached:%s' "$pid" return 0 fi [ "$(date +%s)" -ge "$deadline" ] && break sleep 0.2 done - rm -f "$tmp" 2>/dev/null || true + rm -f "$tmp" "$pidfile" 2>/dev/null || true printf 'none' } @@ -378,16 +401,21 @@ attach_and_wait() { # something real its reason is already complete on disk. Deliver it - an # attached close carrying a genuine wake is a wake, not the unexplained # empty completion this used to report. + # The rename is the claim: with two arms attached to the same watcher only + # one can win it. The loser did NOT get the reason, so it must not report a + # delivery - it falls through to the successor path and either follows the + # cycle the winner armed or fails loudly, never exits clean and empty. out=$(successor_output_path "$attached_pid") if watch_output_has_wake "$out"; then reason_type=$(watch_output_reason_type "$out") claimed="$out.claimed.$ARM_PID" - mv -f "$out" "$claimed" 2>/dev/null || claimed=$out - successor=$(arm_successor "$attached_pid") - cycle_log_append 0 none "$reason_type" "$successor" - print_watch_output "$claimed" - rm -f "$claimed" 2>/dev/null || true - return 0 + if mv -f "$out" "$claimed" 2>/dev/null; then + successor=$(arm_successor "$attached_pid") + cycle_log_append 0 none "$reason_type" "$successor" + print_watch_output "$claimed" + rm -f "$claimed" 2>/dev/null || true + return 0 + fi fi if wait_for_healthy_successor; then cycle_log_append unknown unknown attached-cycle-ended "attached:$HEALTHY_PID" diff --git a/bin/fm-watch.sh b/bin/fm-watch.sh index 5598678c954..ded569d0db4 100755 --- a/bin/fm-watch.sh +++ b/bin/fm-watch.sh @@ -353,8 +353,9 @@ handle_paused_stale() { # wake "$reason" fi # Due, but not surfaced here: collect it and let flush_parked_checkin decide - # once, for the whole fleet, whether this poll is a check-in. - parked_due=$(printf '%s%s\t%s\n' "$parked_due" "$win" "$reason") + # once, for the whole fleet, whether this poll is a check-in. One line per + # lane: flush_parked_checkin reads this back a record at a time. + parked_due="${parked_due}${win}"$'\t'"${reason}"$'\n' triage_log "parked check-in due (paused ${age}s): $win" return 0 fi diff --git a/docs/verification/supervision.md b/docs/verification/supervision.md index ae7d5a32c52..0b91c72c921 100644 --- a/docs/verification/supervision.md +++ b/docs/verification/supervision.md @@ -226,10 +226,13 @@ A failing case aborts its suite, so each mutation was run twice: once to see whi | Drop the successor-output claim in `attach_and_wait` | `test_attached_arm_delivers_its_successor_cycle_wake` | 33 cases clean | | Arm a successor regardless of supervision need | `test_successor_is_not_armed_without_supervision_need` | 33 cases clean | | Ignore the shared parked check-in cadence | `test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence` | 41 cases clean | +| Accumulate the due parked lanes without their record separator | `test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence` | 41 cases clean | | Flip 200 `successor=none` rows in the preserved capture | `test_preserved_capture_still_shows_the_defect_a_fresh_cycle_no_longer_has` | 33 cases clean | | Stop releasing a lane whose pause verb has gone | `test_a_cleared_park_is_noticed_promptly_inside_a_closed_cadence` | `test_secondmate_unpause_clears_pause_tracking` next, then 40 cases clean | The last row is the one mutation two cases share: both guard the same pause release, one for an ordinary parked lane inside a closed cadence and one for a secondmate, and no unrelated case fails once both are removed. +The two parked check-in rows are the inverse pairing: one case carries both protections, because a batched check-in has to fire on the shared cadence *and* carry every lane that came due, and each is killed by its own mutation. +The second of those was added after review found the accumulator concatenating its lanes into a single glued record, which the case as first written passed over. An earlier pass of this matrix failed instead at `test_watch_restart_attaches_to_healthy_peer`, whose TERM-resistant peer must install its signal handler before `--restart` signals it. The cause was host load from watcher successors left behind by leaked test temp roots, not the peer contract; with `fm_test_tmproot` registration repaired, both suites run with zero stray watcher processes and zero leftover temp roots, and the mutation matrix reproduces the table above. diff --git a/tests/fm-afk-launch.test.sh b/tests/fm-afk-launch.test.sh index de6b827aa85..73720f62e85 100755 --- a/tests/fm-afk-launch.test.sh +++ b/tests/fm-afk-launch.test.sh @@ -37,6 +37,7 @@ GLOBAL_CLEANUP() { for s in $TRACK_TMUX_SESSIONS; do tmux kill-session -t "$s" 2>/dev/null || true done + fm_test_cleanup } trap GLOBAL_CLEANUP EXIT diff --git a/tests/fm-afk-pi-herdr-return-e2e.test.sh b/tests/fm-afk-pi-herdr-return-e2e.test.sh index 98c826085f7..62b6f55a33f 100755 --- a/tests/fm-afk-pi-herdr-return-e2e.test.sh +++ b/tests/fm-afk-pi-herdr-return-e2e.test.sh @@ -57,6 +57,7 @@ cleanup() { rc=1 fi rm -rf "$TMP_ROOT" + fm_test_cleanup exit "$rc" } trap cleanup EXIT diff --git a/tests/fm-backend-herdr-eventwait-smoke.test.sh b/tests/fm-backend-herdr-eventwait-smoke.test.sh index b383176d7d1..65408324f0e 100755 --- a/tests/fm-backend-herdr-eventwait-smoke.test.sh +++ b/tests/fm-backend-herdr-eventwait-smoke.test.sh @@ -36,6 +36,7 @@ SCRATCH= cleanup_all() { [ -n "$SCRATCH" ] && rm -rf "$SCRATCH" herdr_safe_stop_and_delete "$SESSION" + fm_test_cleanup } trap cleanup_all EXIT fm_herdr_lab_prepare "$SESSION" || fail "could not prepare the isolated Herdr lab session" diff --git a/tests/fm-backend-herdr-presentation-e2e.test.sh b/tests/fm-backend-herdr-presentation-e2e.test.sh index 7a4cc5e944f..fee371ad869 100755 --- a/tests/fm-backend-herdr-presentation-e2e.test.sh +++ b/tests/fm-backend-herdr-presentation-e2e.test.sh @@ -287,6 +287,7 @@ EOF LAB_READY=0 fi rm -rf "$TMP_ROOT" + fm_test_cleanup } trap cleanup_all EXIT diff --git a/tests/fm-documentation-audiences.test.sh b/tests/fm-documentation-audiences.test.sh index 90222802f6a..e6b6561c4fc 100755 --- a/tests/fm-documentation-audiences.test.sh +++ b/tests/fm-documentation-audiences.test.sh @@ -8,7 +8,7 @@ set -u CHECK="$ROOT/bin/fm-doc-audience-check.sh" INVENTORY="$ROOT/docs/documentation-audiences.json" TMP_ROOT=$(mktemp -d "${TMPDIR:-/tmp}/fm-doc-audiences.XXXXXX") -trap 'rm -rf "$TMP_ROOT"' EXIT +trap 'rm -rf "$TMP_ROOT"; fm_test_cleanup' EXIT run_expect_failure() { local expected=$1 diff --git a/tests/fm-grok-stop-live-e2e.test.sh b/tests/fm-grok-stop-live-e2e.test.sh index c9d4bcc9a64..0fd5484628d 100755 --- a/tests/fm-grok-stop-live-e2e.test.sh +++ b/tests/fm-grok-stop-live-e2e.test.sh @@ -75,6 +75,7 @@ preserve_on_failure() { if [ "$rc" -ne 0 ] && [ -n "$ACTIVE_LAB" ]; then echo "blocked: preserving failed isolated Grok cell at $ACTIVE_LAB" >&2 fi + fm_test_cleanup exit "$rc" } trap preserve_on_failure EXIT @@ -215,5 +216,6 @@ EOF run_cell native "$NATIVE_BIN" run_cell legacy "$LEGACY_BIN" +fm_test_cleanup trap - EXIT echo "ok - Grok adaptive Stop real-process matrix passed with exact target cleanup and control-window survival" diff --git a/tests/fm-kimi-harness.test.sh b/tests/fm-kimi-harness.test.sh index b9f84803459..a8ac9e5fcd9 100755 --- a/tests/fm-kimi-harness.test.sh +++ b/tests/fm-kimi-harness.test.sh @@ -18,6 +18,7 @@ BASE_PATH=${FM_TEST_BASE_PATH:-$PYTHON_BIN_DIR:/usr/bin:/bin:/usr/sbin:/sbin} cleanup_kimi_harness() { [ -z "$KIMI_RUNTIME_TASK_TMP" ] || rm -rf "$KIMI_RUNTIME_TASK_TMP" rm -rf "$TMP_ROOT" + fm_test_cleanup } trap cleanup_kimi_harness EXIT diff --git a/tests/fm-send-secondmate-marker-herdr-e2e.test.sh b/tests/fm-send-secondmate-marker-herdr-e2e.test.sh index 5e28b9aaf8d..14f649e2a90 100755 --- a/tests/fm-send-secondmate-marker-herdr-e2e.test.sh +++ b/tests/fm-send-secondmate-marker-herdr-e2e.test.sh @@ -51,6 +51,7 @@ cleanup() { rc=1 fi rm -rf "$TMP_ROOT" + fm_test_cleanup exit "$rc" } trap cleanup EXIT diff --git a/tests/fm-tmux-submit-busy.test.sh b/tests/fm-tmux-submit-busy.test.sh index f3eb49a7eb7..2ed20e233b2 100755 --- a/tests/fm-tmux-submit-busy.test.sh +++ b/tests/fm-tmux-submit-busy.test.sh @@ -10,7 +10,7 @@ set -u . "$ROOT/bin/fm-tmux-lib.sh" TMP_ROOT=$(mktemp -d "${TMPDIR:-/tmp}/fm-tmux-submit-busy.XXXXXX") -trap 'rm -rf "$TMP_ROOT"' EXIT +trap 'rm -rf "$TMP_ROOT"; fm_test_cleanup' EXIT # Override fm_pane_is_busy for testing: FM_FAKE_PANE_BUSY=1 means busy. fm_pane_is_busy() { diff --git a/tests/fm-watch-triage.test.sh b/tests/fm-watch-triage.test.sh index 06d49cec529..1df5cbc4e1e 100755 --- a/tests/fm-watch-triage.test.sh +++ b/tests/fm-watch-triage.test.sh @@ -707,7 +707,7 @@ stage_parked_lanes() { # # check-in, rate-limited home-wide, and the cadence survives a restart because # it is anchored on a file mtime rather than in-process state. test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence() { - local dir state fakebin out drain_out capture_file pid i key back + local dir state fakebin out drain_out capture_file pid i key back lanes joins queued dir=$(make_case parked-checkin-cadence); state="$dir/state"; fakebin="$dir/fakebin" out="$dir/watch.out"; drain_out="$dir/drain.out"; capture_file="$dir/pane.txt" printf 'idle, awaiting a decision' > "$capture_file" @@ -723,18 +723,35 @@ test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence() { FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH" > "$out" & pid=$! wait_for_exit "$pid" 60 || fail "no parked check-in fired for three overdue lanes" + # One printed wake, and it must CARRY every due lane: three "stale: " reasons + # joined by exactly two "; " separators. Substring-matching a window name is + # not enough - a batch that lost its record separator still contains all three + # names on one glued line while delivering only the first lane. + [ "$(grep -c '^stale:' "$out")" -eq 1 ] || fail "the check-in printed more than one wake reason"$'\n'"$(cat "$out")" + lanes=$(grep -o 'stale: test:fm-park[0-9]* (paused ' "$out" | wc -l | tr -d '[:space:]') + [ "$lanes" -eq 3 ] || fail "the batched check-in carried $lanes parked reasons, not 3: $(cat "$out")" + joins=$(grep -o '; stale: ' "$out" | wc -l | tr -d '[:space:]') + [ "$joins" -eq 2 ] || fail "the batched reasons were not joined by '; ' ($joins separators): $(cat "$out")" i=1 while [ "$i" -le 3 ]; do - grep -F "test:fm-park$i" "$out" >/dev/null || fail "lane park$i was left out of the batched check-in" + [ "$(grep -o "stale: test:fm-park$i (paused " "$out" | wc -l | tr -d '[:space:]')" -eq 1 ] \ + || fail "lane park$i was left out of the batched check-in: $(cat "$out")" + key=$(printf '%s' "test:fm-park$i" | tr ':/.' '___') + [ -e "$state/.paused-resurfaced-$key" ] \ + || fail "lane park$i was carried by the check-in but its cadence was never stamped" i=$((i + 1)) done - [ "$(grep -c '^stale:' "$out")" -eq 1 ] || fail "the check-in printed more than one wake reason"$'\n'"$(cat "$out")" [ -e "$state/.last-parked-checkin" ] || fail "the shared check-in cadence marker was not recorded" FM_STATE_OVERRIDE="$state" "$DRAIN" > "$drain_out" 2>/dev/null || fail "drain after the parked check-in failed" + # One durable record PER LANE, keyed on that lane's own window. The key field + # is matched whole so a lane's name buried inside another lane's payload + # cannot stand in for its own record. + queued=$(awk -F'\t' '$3 == "stale"' "$drain_out" | wc -l | tr -d '[:space:]') + [ "$queued" -eq 3 ] || fail "the batched check-in queued $queued stale records, not one per lane: $(cat "$drain_out")" i=1 while [ "$i" -le 3 ]; do - grep "$(printf '\tstale\t')" "$drain_out" | grep -F "test:fm-park$i" >/dev/null \ - || fail "lane park$i was not queued by the batched check-in" + [ "$(awk -F'\t' -v w="test:fm-park$i" '$3 == "stale" && $4 == w' "$drain_out" | wc -l | tr -d '[:space:]')" -eq 1 ] \ + || fail "lane park$i was not queued by the batched check-in: $(cat "$drain_out")" i=$((i + 1)) done diff --git a/tests/lib.sh b/tests/lib.sh index 02b0c637e25..cb0c26abb38 100644 --- a/tests/lib.sh +++ b/tests/lib.sh @@ -67,11 +67,14 @@ FM_TEST_CLEANUP_DIRS=() # inherits the EXIT trap must never delete a root its parent is still using - # the exact hazard that made registering from inside the subshell unusable. FM_TEST_CLEANUP_OWNER=${BASHPID:-$$} -# Named rather than mktemp'd, so the path is known to the subshell that appends -# to it AND nothing is created for a suite that never takes a temp root. A -# recycled pid must not inherit a previous run's entries. -FM_TEST_CLEANUP_REGISTRY="${TMPDIR:-/tmp}/fm-test-cleanup.$FM_TEST_CLEANUP_OWNER" -rm -f "$FM_TEST_CLEANUP_REGISTRY" +# Created here, at source time, because a subshell can only append to a path it +# already inherited. mktemp rather than a pid-derived name: this file's contents +# drive rm -rf, and a predictable path in a shared sticky /tmp can be +# pre-created as a symlink that the appends would then follow. mktemp's atomic +# 0600 create closes that and cannot inherit a recycled pid's entries. +# fm_test_cleanup removes it, so it leaves nothing behind. +FM_TEST_CLEANUP_REGISTRY=$(mktemp "${TMPDIR:-/tmp}/fm-test-cleanup.XXXXXX") +export FM_TEST_CLEANUP_REGISTRY fm_test_cleanup() { local d From 0921b11c2d436956dae8fb871a5564e4d1538413 Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 04:52:12 -0700 Subject: [PATCH 11/14] no-mistakes(test): wait for TERM-resistant peer handler before restarting arm --- tests/fm-watcher-lock.test.sh | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/fm-watcher-lock.test.sh b/tests/fm-watcher-lock.test.sh index 66551e1c217..c55bb7d642f 100755 --- a/tests/fm-watcher-lock.test.sh +++ b/tests/fm-watcher-lock.test.sh @@ -438,14 +438,27 @@ test_watch_restart_rejects_reused_pid() { } test_watch_restart_attaches_to_healthy_peer() { - local dir state fakebin out peer identity armpid status i + local dir state fakebin out peer ready identity armpid status i dir=$(make_case restart-healthy-peer) state="$dir/state" fakebin="$dir/fakebin" out="$dir/restart.out" + ready="$dir/peer.ready" mark_pr_check_migration_complete "$state" - node -e 'process.on("SIGTERM", () => {}); setTimeout(() => {}, 300000)' & + # The peer only resists TERM once its handler is installed, and --restart + # signals it as soon as the arm starts. Node's startup is not instant, so the + # peer publishes a readiness marker from inside the handler-installed process + # and nothing signals it before that lands - otherwise the very first TERM + # kills the peer and the arm correctly starts a fresh watcher instead of + # attaching, which reads as a failure of a contract that was never exercised. + node -e 'process.on("SIGTERM", () => {}); require("fs").writeFileSync(process.argv[1], "ready"); setTimeout(() => {}, 300000)' "$ready" & peer=$! + i=0 + while [ "$i" -lt 200 ] && [ ! -e "$ready" ]; do + sleep 0.05 + i=$((i + 1)) + done + [ -e "$ready" ] || fail "the TERM-resistant peer never installed its signal handler" identity=$(FM_STATE_OVERRIDE="$state" bash -c '. "$1"; fm_pid_identity "$2"' _ "$LIB" "$peer") || fail "could not identify peer pid" mkdir "$state/.watch.lock" printf '%s\n' "$peer" > "$state/.watch.lock/pid" From 58dae2b35baf2c5a11c58745c8ab0e19081216d1 Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 05:28:16 -0700 Subject: [PATCH 12/14] no-mistakes(document): dedupe cycle-exit capture summary and fix stale watcher comments --- bin/fm-watch.sh | 11 +++++---- docs/verification/supervision.md | 6 +++-- tests/fixtures/watch-cycle-exits/README | 13 +++++------ tests/fm-watcher-lock.test.sh | 31 +++++++++++++++++++++++++ tests/lib.sh | 3 ++- 5 files changed, 50 insertions(+), 14 deletions(-) diff --git a/bin/fm-watch.sh b/bin/fm-watch.sh index ded569d0db4..4286b371b13 100755 --- a/bin/fm-watch.sh +++ b/bin/fm-watch.sh @@ -322,15 +322,18 @@ busy_turn_over_age() { # } # Absorb a stale pane under a declared external-wait pause (paused:) or a -# dead-agent captain-held transfer, and re-surface it once every -# PAUSE_RESURFACE_SECS for a recheck so it cannot rot invisibly. Called on any +# dead-agent captain-held transfer, and mark it due for a recheck once every +# PAUSE_RESURFACE_SECS so it cannot rot invisibly. Called on any # stale poll once pause_state_class permits the bounded cadence, so it must be # cheap: it NEVER re-reads crew state. The re-surface age is anchored on the # status file mtime, not a per-hash marker, so a churny idle pane (a ticking # clock, a token counter) cannot keep resetting the cadence the way a hash-tied # timer would. A .paused-resurfaced- throttle marker records the last -# re-surface epoch so, once past the window, it fires once per window rather than -# every poll. Advances the stale suppressor to and flags the key paused. +# re-surface epoch so, once past the window, a lane comes due once per window +# rather than every poll. A due lane is surfaced here only in away mode; in +# normal mode it is collected for flush_parked_checkin, which owns the home-wide +# batch and stamps that marker for exactly the lanes it carries. +# Advances the stale suppressor to and flags the key paused. handle_paused_stale() { # local win=$1 task=$2 h=$3 key statusf mtime age rf rf_age reason key=$(printf '%s' "$win" | tr ':/.' '___') diff --git a/docs/verification/supervision.md b/docs/verification/supervision.md index 0b91c72c921..e49871fc7fc 100644 --- a/docs/verification/supervision.md +++ b/docs/verification/supervision.md @@ -210,12 +210,14 @@ successor=none 499 / 499 reason=actionable-stale 293 reason=actionable-signal 198 reason=actionable-check 8 -sub-5s exits, actionable-stale 112 (22% of all cycles) +exits within 5s 117 (23% of all cycles) + of those, actionable-stale 112 (22% of all cycles) + of those, actionable-check 5 ``` Every cycle completed normally and delivered a wake; none armed a successor. Supervision therefore ended on each delivered wake and resumed only when an adapter above the arm layer happened to re-arm. -The sub-5s exits are parked lanes at independent phases, each ending a cycle of its own. +The 112 actionable-stale sub-5s exits are parked lanes at independent phases, each ending a cycle of its own. Guard-class mutation results, one mutation per protection. A failing case aborts its suite, so each mutation was run twice: once to see which case it kills, and once with that case's invocation removed to prove nothing else in the suite breaks. diff --git a/tests/fixtures/watch-cycle-exits/README b/tests/fixtures/watch-cycle-exits/README index dec0fc32587..8dffecb0b1c 100644 --- a/tests/fixtures/watch-cycle-exits/README +++ b/tests/fixtures/watch-cycle-exits/README @@ -1,8 +1,7 @@ -# Fixture: watcher cycle exits, captured 2026-07-31 from state/.watch-cycle-exits.log -# Records: 499 Captured because this log accumulates over days and cannot be regenerated. +# cycle-exits.log: 499 watcher lifecycle records captured 2026-07-31 verbatim from +# a live home's state/.watch-cycle-exits.log. Preserved because that log accumulates +# over days and cannot be regenerated, so it is raw evidence, not a generated input. # -# successor=none : 499 / 499 -# exit_code=0 : 499 / 499 -# signal=none : 499 / 499 -# reasons : 8 reason=actionable-check 198 reason=actionable-signal 293 reason=actionable-stale -# sub-5s exits : 112 actionable-stale, 5 actionable-check (22% of all cycles) +# The record breakdown it shows, and the contract that breakdown drove, are owned by +# docs/verification/supervision.md, section "Arm-layer successor and parked check-in +# cadence". Do not restate them here; a second copy would drift. diff --git a/tests/fm-watcher-lock.test.sh b/tests/fm-watcher-lock.test.sh index c55bb7d642f..569e7342422 100755 --- a/tests/fm-watcher-lock.test.sh +++ b/tests/fm-watcher-lock.test.sh @@ -1009,6 +1009,36 @@ test_successor_is_not_armed_without_supervision_need() { pass "no successor is armed for a home with nothing left to supervise" } +# The other half of the same gate. In away mode the supervise-daemon owns the +# cycle, so an arm that armed a successor here would leave a second watcher +# competing with the daemon for the home it is already driving. This home still +# has in-flight work and still delivers its wake, so .afk is the only thing +# standing between this cycle and a successor. +test_successor_is_not_armed_in_away_mode() { + local dir state fakebin armout armpid status leftover + dir=$(stage_one_signal_home successor-away-gate) + state="$dir/state" + fakebin="$dir/fakebin" + armout="$dir/arm.out" + date +%s > "$state/.afk" # away mode: the supervise-daemon owns this cycle + + PATH="$fakebin:$PATH" FM_HOME="$dir" FM_STATE_OVERRIDE="$state" FM_POLL=5 FM_SIGNAL_GRACE=1 \ + FM_CHECK_INTERVAL=999999 FM_HEARTBEAT=999999 "$WATCH_ARM" > "$armout" & + armpid=$! + wait_for_exit "$armpid" 120 + status=$? + [ "$status" -eq 0 ] || fail "arm in away mode did not deliver its wake cleanly (status $status)" + grep -q '^signal:' "$armout" || fail "arm in away mode swallowed the staged wake" + grep -q "arm_pid=$armpid.*successor=none" "$state/.watch-cycle-exits.log" \ + || fail "an away home recorded a successor the daemon-owned cycle should not have armed" + leftover=$(cat "$state/.watch.lock/pid" 2>/dev/null || true) + if is_live_non_zombie "$leftover"; then + kill -TERM "$leftover" 2>/dev/null || true + fail "an away home was left with a detached watcher competing with the daemon" + fi + pass "no successor is armed in away mode, where the supervise-daemon owns the cycle" +} + # The preserved capture is the reason this contract exists, so it is checked as # evidence rather than trusted as prose: if the fixture ever stops showing the # defect it recorded, these tests are guarding nothing and must say so. @@ -1233,5 +1263,6 @@ test_cycle_exit_ledger_links_successor_and_stays_bounded test_delivered_wake_arms_its_successor_before_it_is_handled test_attached_arm_delivers_its_successor_cycle_wake test_successor_is_not_armed_without_supervision_need +test_successor_is_not_armed_in_away_mode test_preserved_capture_still_shows_the_defect_a_fresh_cycle_no_longer_has test_stopped_watcher_is_live_but_stale_then_exit_is_classified diff --git a/tests/lib.sh b/tests/lib.sh index cb0c26abb38..235c1675611 100644 --- a/tests/lib.sh +++ b/tests/lib.sh @@ -53,7 +53,8 @@ pass() { # --- self-cleaning temp root ------------------------------------------------ # # fm_test_tmproot echoes a fresh temp dir and registers it for removal -# on EXIT. The first call installs the cleanup trap. A test file that needs +# on EXIT. Sourcing this file installs the cleanup trap, so a root registered +# from inside a command substitution is still removed. A test file that needs # extra teardown (e.g. killing a daemon) should define its own EXIT trap and # call fm_test_cleanup from inside it so registered dirs are still removed. From 076cbbf6a4c9bf5796894be5be32969570eb5936 Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 13:21:45 -0700 Subject: [PATCH 13/14] no-mistakes(document): re-measure guard-class mutation matrix and add away-mode row --- docs/verification/supervision.md | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/docs/verification/supervision.md b/docs/verification/supervision.md index e49871fc7fc..413a0cb152f 100644 --- a/docs/verification/supervision.md +++ b/docs/verification/supervision.md @@ -219,20 +219,28 @@ Every cycle completed normally and delivered a wake; none armed a successor. Supervision therefore ended on each delivered wake and resumed only when an adapter above the arm layer happened to re-arm. The 112 actionable-stale sub-5s exits are parked lanes at independent phases, each ending a cycle of its own. -Guard-class mutation results, one mutation per protection. -A failing case aborts its suite, so each mutation was run twice: once to see which case it kills, and once with that case's invocation removed to prove nothing else in the suite breaks. +Guard-class mutation results, one mutation per protection, measured in full on 2026-07-31 against this tree. +The clean baseline it is read against: `tests/fm-watcher-lock.test.sh` reports 35 `ok -` lines and `tests/fm-watch-triage.test.sh` 42, both exiting 0. +Counts below are `ok -` lines rather than test functions, because a few lock cases report more than one. + +A failing case aborts its suite, so each mutation was run at least twice: once to see which case it kills, and once with that case's invocation removed to prove nothing else in the suite breaks. +Where a further case then failed, its invocation was removed too and the suite re-run until it went clean, so a mutation several cases depend on is reported as such instead of forced into a one-to-one claim. +Each mutation was applied to its own copy of the tree, never to a working checkout. | Mutation | Case killed | Rest of suite | | --- | --- | --- | -| Deliver the wake before arming the successor | `test_delivered_wake_arms_its_successor_before_it_is_handled` | 33 cases clean | -| Drop the successor-output claim in `attach_and_wait` | `test_attached_arm_delivers_its_successor_cycle_wake` | 33 cases clean | -| Arm a successor regardless of supervision need | `test_successor_is_not_armed_without_supervision_need` | 33 cases clean | -| Ignore the shared parked check-in cadence | `test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence` | 41 cases clean | -| Accumulate the due parked lanes without their record separator | `test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence` | 41 cases clean | -| Flip 200 `successor=none` rows in the preserved capture | `test_preserved_capture_still_shows_the_defect_a_fresh_cycle_no_longer_has` | 33 cases clean | -| Stop releasing a lane whose pause verb has gone | `test_a_cleared_park_is_noticed_promptly_inside_a_closed_cadence` | `test_secondmate_unpause_clears_pause_tracking` next, then 40 cases clean | - -The last row is the one mutation two cases share: both guard the same pause release, one for an ordinary parked lane inside a closed cadence and one for a secondmate, and no unrelated case fails once both are removed. +| Deliver the wake before arming the successor | `test_delivered_wake_arms_its_successor_before_it_is_handled` | 34 clean | +| Drop the successor-output claim in `attach_and_wait` | `test_attached_arm_delivers_its_successor_cycle_wake` | 34 clean | +| Arm a successor regardless of supervision need | `test_successor_is_not_armed_without_supervision_need` | 34 clean | +| Arm a successor while away mode is active | `test_successor_is_not_armed_in_away_mode` | 34 clean | +| Ignore the shared parked check-in cadence | `test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence` | 41 clean | +| Accumulate the due parked lanes without their record separator | `test_parked_lanes_batch_into_one_checkin_on_a_shared_cadence` | 41 clean | +| Flip 200 `successor=none` rows in the preserved capture | `test_preserved_capture_still_shows_the_defect_a_fresh_cycle_no_longer_has` | 34 clean | +| Never release a lane's pause markers, in `clear_pause_state` | `test_a_cleared_park_is_noticed_promptly_inside_a_closed_cadence` | then `test_secondmate_unpause_clears_pause_tracking`, `test_nonterminal_stale_pause_transitions_reclassify_unchanged_hash`, `test_nonterminal_paused_rechecks_authoritative_state`, then 38 clean | + +The last row is the one mutation more than one case shares, and it is four, not the two an earlier pass of this matrix recorded. +`clear_pause_state` is the single release primitive behind every exit from a declared pause - an ordinary parked lane inside a closed cadence, a resumed secondmate, a pause-to-working reclassification, and an authoritative recheck - so each of those four guards it from its own direction. +Nothing beyond that release depends on it: with all four removed the suite is clean. The two parked check-in rows are the inverse pairing: one case carries both protections, because a batched check-in has to fire on the shared cadence *and* carry every lane that came due, and each is killed by its own mutation. The second of those was added after review found the accumulator concatenating its lanes into a single glued record, which the case as first written passed over. From 32b26f1edc256bd0a6c6d137792d6bb4af8da7ec Mon Sep 17 00:00:00 2001 From: mattadams-dev Date: Fri, 31 Jul 2026 13:24:18 -0700 Subject: [PATCH 14/14] no-mistakes(document): record surviving mutant at redundant pause-release site --- docs/verification/supervision.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/verification/supervision.md b/docs/verification/supervision.md index 413a0cb152f..3d38d48c276 100644 --- a/docs/verification/supervision.md +++ b/docs/verification/supervision.md @@ -244,6 +244,11 @@ Nothing beyond that release depends on it: with all four removed the suite is cl The two parked check-in rows are the inverse pairing: one case carries both protections, because a batched check-in has to fire on the shared cadence *and* carry every lane that came due, and each is killed by its own mutation. The second of those was added after review found the accumulator concatenating its lanes into a single glued record, which the case as first written passed over. +One surviving mutant is known, at the redundant release site in `surface_nonterminal_stale`: the `else` branch that drops `.paused-`, `.paused-rechecked-` and `.paused-resurfaced-` when the lane's declared pause verb has gone. +Replacing that branch with `:` leaves `tests/fm-watch-triage.test.sh` entirely green, 42 `ok -` lines and exit 0, killing no case. +The cleared-park protection itself is proven at `clear_pause_state`, the single release primitive behind all four exits from a declared pause, which is why this second path can be neutered without a case noticing. +The site predates this change - it arrives with `ab8cea6` `fix(watcher): bound stale wakes for parked crew (#743)` - and closing it needs a case that does not exist yet, so it is recorded here as a known gap rather than claimed as covered. + An earlier pass of this matrix failed instead at `test_watch_restart_attaches_to_healthy_peer`, whose TERM-resistant peer must install its signal handler before `--restart` signals it. The cause was host load from watcher successors left behind by leaked test temp roots, not the peer contract; with `fm_test_tmproot` registration repaired, both suites run with zero stray watcher processes and zero leftover temp roots, and the mutation matrix reproduces the table above.