- GenerationCheckpointRunnerSyncModeTest.php (new, 246 lines): three tests that
genuinely exercise the sync-mode guards --
test_orchestrate_tick_in_sync_mode_does_not_schedule_background_event:
orchestrate_only() now returns 1 idea so execution reaches the guard at
line ~181 (was vacuous -- empty-ideas stub triggered early return at ~148).
Asserts GENERATE_ACTION NOT scheduled, spawn_cron NOT called.
test_generate_tick_sync_mode_suppresses_reschedule (new):
2-idea queue, set_sync_mode(true), on_generate_tick() -- asserts
GENERATE_ACTION NOT in scheduled events, spawn_cron NOT called.
test_generate_tick_async_mode_schedules_generate_action:
async regression guard moved from original file.
- GenerationCheckpointRunnerTest.php (233 lines): removed the two sync-mode
tests to stay under 300-line rule; added docblock pointer to SyncModeTest.
- CHANGELOG.md: merged duplicate [0.22.1] headings into one entry (NF-2).
Production code unchanged. Version stays 0.22.1.
Agent-Session: prab-reliability-test-fix-20260622
P1-A: wrap wp_schedule_single_event(GENERATE_ACTION) + fire_cron_now() in
on_orchestrate_tick() with 'if ( ! self::$sync_mode )' guard.
Mirrors the existing guard in on_generate_tick(). Prevents a background
wp-cron process spawning in parallel with the VPS --sync loop and
prematurely finalizing the run lock before Article_Worker completes.
P1-B: add two unit tests to GenerationCheckpointRunnerTest.php:
- test_orchestrate_tick_in_sync_mode_does_not_schedule_background_event:
asserts sync_mode=true suppresses GENERATE_ACTION schedule + spawn_cron.
- test_generate_tick_async_mode_schedules_generate_action:
asserts sync_mode=false (async path) still reschedules GENERATE_ACTION.
P1-C: create root CONTEXT.md with domain glossary (run, run_stages,
checkpoint, idea queue, Generation_Lock) and execution mode reference
(async wp-cron vs --sync VPS-driven).
P2: update ARCHITECTURE.md §25 Entry Points table with the
'wp prautoblogger generate --sync' VPS path row.
Agent-Session: prab-reliability-remediation-20260622