In 07-peptide-news-admin (Articles + LLM Costs) and 08-pr-vision-admin
(Costs + Call Log), the hard expect(body).not.toContain('Invalid plugin page')
assertion fired BEFORE the isPluginAbsent() skip guard. If either plugin is
absent from staging, those tests would hard-fail — gating prod for all apps.
Fix: move isPluginAbsent() + test.skip() above the Invalid-plugin-page assert
in all four affected tests, mirroring the Dashboard/Settings guard-first pattern
already used in the same files.
- 07 Articles: skip guard now before Invalid plugin page check
- 07 LLM Costs: skip guard now before Invalid plugin page check
- 08 Costs: skip guard now before Invalid plugin page check
- 08 Call Log: skip guard now before Invalid plugin page check
Validated: npx playwright test --list lists all 38 tests cleanly.
Agent-Session: engineer-infra-e2e-guardfix-20260617
Covers dashboard (HTTP 200, no fatal, heading + summary cards + date filter),
settings (form present), articles, and LLM costs sub-pages.
Skip-if-absent guard on all tests: when plugin is not installed on the
environment, tests skip loudly instead of hard-failing.
Selectors sourced from:
admin/class-pn-admin-menu.php (slugs)
admin/partials/dashboard.php (.pn-summary-cards, .pn-date-filter, h1)
Agent-Session: claude/e2e-news-vision-admin-20260617
Skip-if-absent Playwright spec for the board New Article / Generate Now control; now live with prautoblogger v0.21.0. Gates future deploys.
Agent-Session: m4-generate-now-smoke-20260614
Merged ahead of the v0.19.3 dossier fix so staging smoke gates it.
QA: APPROVE qa-reviews/peptide-e2e/2026-06-12-0c5c301.md (re-head after conflict resolution)
Agent-Session: cto-dossier-403-hotfix-20260612
Guards the submenu-before-parent 404 class in the deploy gate.
QA: APPROVE-W-P2 qa-reviews/peptide-e2e/2026-06-12-113bb17.md
Agent-Session: cto-board-404-hotfix-merge-20260612
The peptide CPT menu was restructured (no top-level 'Peptides' label), so the
text=Peptides assertion failed. Assert the CPT's admin link by href
(a[href*='post_type=peptide']) and toBeAttached — robust to label changes and
submenu (hidden-until-hover) placement.
Agent-Session: cto smoke-green
Co-authored-by: peptiderepo <peptiderepo@users.noreply.github.com>
- 02 search: target the visible .hero-search instance; the old .first()
selector matched the hidden header search-overlay (instance 1).
- 01 calculator: it auto-computes from the peptide preset; select the peptide
and assert #prc-results, scoped to .prc-calculator (the old broad
button[type=submit] selector clicked the PSA search button).
- 03 admin: 'const nav' had been swallowed into a comment (ReferenceError).
- 04 rest-api: PSA /search returns {results:[]} with no 'status' key; drop it.
Auth fixed separately via a dedicated staging CI admin (ci-smoke) + corrected
STAGING_WP_ADMIN_* secrets; the global.setup failure was cascading into these.
Agent-Session: cto smoke-green
Co-authored-by: peptiderepo <peptiderepo@users.noreply.github.com>
- 01 calculator: page lives at /calculator/ (confirmed live), not
/reconstitution-calculator/ — the 404 failed all 3 calc tests.
- 00 homepage: brand title is 'Peptide Repo' (with space); regex /peptiderepo/i
never matched. Broadened to /peptide ?repo/i.
- 03 admin: required-plugin slug is 'prautoblogger' (WP dir), not 'pr-autoblogger'.
These were test bugs, not site regressions — the site serves all three correctly.
Agent-Session: cto smoke-triage
Co-authored-by: peptiderepo <peptiderepo@users.noreply.github.com>
03-admin-plugins.spec.ts and 04-rest-api.spec.ts were cut off mid-test,
causing Playwright TypeScript parse failures and the smoke gate to show
0 jobs. Added the missing test bodies, assertions, and closing braces.
New tests added:
- PR Core Settings page loads (03)
- Peptide CPT verified via /wp-json/wp/v2/types/peptide (04)
Fixes smoke gate for all future deploys.