feat(infra): VPS generation orchestrator — systemd timer drives prod generation over SSH (#27)

infra/vps/: orchestrate-generation.sh (reaper sweep + wp prautoblogger generate --sync over a held-open SSH session, lock-aware, bounded, structured logging, accept-new host-key) + install-orchestrator.sh + prab-generation.{service,timer}. Code only — install/enable is the gated cutover step. Companion to prautoblogger v0.22.1.

QA: APPROVE @ f3f579f (qa-reviews/peptide-e2e/2026-06-23-f3f579f.md). CEO greenlight 2026-06-22.

Agent-Session: prab-reliability-merge-20260622
This commit was merged in pull request #27.
This commit is contained in:
peptiderepo
2026-06-23 00:54:36 +07:00
committed by GitHub
parent 988ff07ff0
commit 59099e1135
6 changed files with 296 additions and 1 deletions

View File

@@ -1,5 +1,22 @@
# Changelog
## [1.8.0] - 2026-06-23
### Added
- **`infra/vps/` PRAB generation orchestrator**: systemd timer + service + bash
script that SSHes from the Coolify KVM8 VPS to Hostinger and drives
`wp prautoblogger generate --sync` in a held-open SSH session. Sidesteps
Hostinger's ~10-min background-PHP-process kill that was blocking full
generation runs. Components:
- `orchestrate-generation.sh`: main script with DRY_RUN mode, structured
logging, reaper pre-sweep, failure email alert, and shellcheck-clean quoting.
- `prab-generation.service` / `prab-generation.timer`: systemd oneshot service
(2h timeout, no auto-restart) + daily 06:00 UTC timer with 5-min jitter.
- `install-orchestrator.sh`: one-time setup script; installs units but does NOT
enable the timer (requires explicit CEO greenlight post-QA).
- Security: `StrictHostKeyChecking=accept-new` with pre-seeded known_hosts for
the Hostinger IP; no hardcoded secrets; SSH key referenced by env-var path.
## [1.7.2] - 2026-06-17
### Fixed