|
| 1 | +# Phase 1 — Runbook Agent Findings |
| 2 | + |
| 3 | +Single-model, multi-agent focused review of [WP-Operations-Runbook.md](/Users/danknauss/Documents/GitHub/wordpress-runbook-template/WP-Operations-Runbook.md). |
| 4 | + |
| 5 | +| Severity | File:line | Finding | Recommendation | Verification | |
| 6 | +|---|---|---|---|---| |
| 7 | +| Critical | `WP-Operations-Runbook.md:2460-2461` | The full-restore procedure deletes the web root and raw MySQL data directory with `rm -rf`, which is unsafe, assumes a local self-managed MySQL layout, and can corrupt a running database. | Replace direct datadir deletion with a controlled restore sequence: stop services, verify target paths, recreate the database through MySQL or WP-CLI, and restore onto a clean host or verified empty target. | Rehearse Section 11.2 on staging or a disposable host and confirm the restore succeeds without touching the raw MySQL datadir. | |
| 8 | +| High | `WP-Operations-Runbook.md:808-830`, `WP-Operations-Runbook.md:892-937`, `WP-Operations-Runbook.md:1712-1723` | Rollback guidance is incomplete for procedures that use runtime WordPress.org updates. Database restore plus `git checkout previous-release-tag` does not reliably revert core, plugin, or theme files fetched outside the release artifact. | Require rollback from a known-good deployment artifact or filesystem backup that includes core, plugins, and themes. | In staging, perform the documented update and rollback, then verify the exact prior versions return with `wp core version`, `wp plugin list`, and `wp theme list`. | |
| 9 | +| High | `WP-Operations-Runbook.md:348-349`, `WP-Operations-Runbook.md:385-389`, `WP-Operations-Runbook.md:1545-1546` | Deployment workflows perform live plugin and theme updates during code deploys, which introduces uncontrolled version drift and expands blast radius during release windows. | Remove plugin and theme updates from deployment procedures and keep them in dedicated patching workflows, or require pinned artifacts that already contain the intended versions. | Compare `git rev-parse HEAD`, `wp plugin list`, and `wp theme list` before and after a staging deploy. | |
| 10 | +| High | `WP-Operations-Runbook.md:230`, `WP-Operations-Runbook.md:375`, `WP-Operations-Runbook.md:803`, `WP-Operations-Runbook.md:830`, `WP-Operations-Runbook.md:886`, `WP-Operations-Runbook.md:1723`, `WP-Operations-Runbook.md:3178` | Backup paths are inconsistent across the runbook: environment reference uses `/home/wordpress/backup/`, but procedures also use relative `backup/` and `backups/` paths. | Standardize on one explicit absolute backup directory outside the web root and use it consistently in backup, rollback, and quick-reference commands. | Execute the affected procedures from their stated working directories and confirm every backup is created and restored from the same location. | |
| 11 | +| High | `WP-Operations-Runbook.md:1386-1401`, `WP-Operations-Runbook.md:1448` | The automated backup script never sets a WordPress path or changes into the WordPress root before calling `wp db export`, which makes cron execution brittle. | Add an explicit `WP_PATH` and run `wp --path=\"$WP_PATH\" ...` or `cd \"$WP_PATH\"` before any WP-CLI command. | Run the script under a cron-like environment and confirm it can locate the installation without relying on the caller's current directory. | |
| 12 | +| High | `WP-Operations-Runbook.md:1418`, `WP-Operations-Runbook.md:1465`, `WP-Operations-Runbook.md:2470`, `WP-Operations-Runbook.md:2491`, `WP-Operations-Runbook.md:2583` | The backup workflow writes to an S3 site prefix, but restore commands fetch from the bucket root. Restores will miss the artifacts produced by the documented backup job. | Make the restore and verification commands use the same site prefix as the backup workflow, or redefine the object layout consistently everywhere. | Run the backup workflow, list the bucket contents, and then execute the restore commands exactly as written. | |
| 13 | +| High | `WP-Operations-Runbook.md:1402`, `WP-Operations-Runbook.md:2488` | The backup workflow compresses database backups to `.sql.gz`, but the full-restore procedure expects an uncompressed `.sql` file. | Make restore procedures consume `.sql.gz` directly or add an explicit decompression step before import. | Produce a backup with Section 7.2 and then run the local restore steps verbatim on staging. | |
| 14 | +| High | `WP-Operations-Runbook.md:2594` | `wp db reset --yes` drops all tables in the database, not just WordPress tables, which is unsafe on shared databases. | Restrict this step to dedicated WordPress databases and use a safer prefix-scoped alternative for shared databases. | Compare `wp db tables --all-tables` before recovery and confirm the reset method preserves non-WordPress tables where required. | |
| 15 | +| Medium | `WP-Operations-Runbook.md:129`, `WP-Operations-Runbook.md:473`, `WP-Operations-Runbook.md:2039`, `WP-Operations-Runbook.md:2456` | Several procedures assume self-managed Linux access (`ufw`, `systemctl`, direct MySQL, full filesystem control) even though the runbook still frames itself as usable for managed hosting. | Mark host-level procedures as self-managed Linux only and add managed-hosting/provider-escalation variants where equivalent access is unavailable. | Check the target environment against the required capabilities before using the procedure. | |
0 commit comments