+ my $watcherr = "$tmpdir/watcherr";
+ open my $err_wr, '>>', $watcherr or BAIL_OUT $!;
+ open my $err, '<', $watcherr or BAIL_OUT $!;
+ my $w = start_script(['-watch'], undef, { 2 => $err_wr });
+
+ diag 'waiting for initial fetch...';
+ PublicInbox::DS::event_loop();
+ diag 'inbox unlocked on initial fetch, waiting for IDLE';
+
+ tick until (grep(/I: \S+ idling/, <$err>));
+ open my $fh, '<', 't/iso-2202-jp.eml' or BAIL_OUT $!;
+ $old_env->{ORIGINAL_RECIPIENT} = $addr;
+ ok(run_script([qw(-mda --no-precheck)], $old_env, { 0 => $fh }),
+ 'delivered a message for IDLE to kick -watch') or
+ diag "mda error \$?=$?";
+ diag 'waiting for IMAP IDLE wakeup';
+ PublicInbox::DS->SetPostLoopCallback(undef);
+ PublicInbox::DS::event_loop();
+ diag 'inbox unlocked on IDLE wakeup';
+
+ # try again with polling
+ xsys(qw(git config), "--file=$home/.public-inbox/config",
+ 'imap.PollInterval', 0.11) == 0
+ or BAIL_OUT "git config $?";
+ $w->kill('HUP');
+ diag 'waiting for -watch reload + initial fetch';
+ tick until (grep(/I: will check/, <$err>));
+
+ open $fh, '<', 't/psgi_attach.eml' or BAIL_OUT $!;
+ ok(run_script([qw(-mda --no-precheck)], $old_env, { 0 => $fh }),
+ 'delivered a message for -watch PollInterval');
+
+ diag 'waiting for PollInterval wakeup';
+ PublicInbox::DS->SetPostLoopCallback(undef);
+ PublicInbox::DS::event_loop();
+ diag 'inbox unlocked (poll)';