# United Pets 1.0.3 — Runtime Hardening Verification Report

Date: 2026-08-22

## Release purpose

1.0.3 addresses the same runtime defects that remained visible after 1.0.2: unequal blue Quality Services Owl cards, demo pages falling back to Default template, Import Demo not being a complete reset, and permalink rules not being guaranteed immediately on activation.

## Import Demo reset

**Appearance → Import Demo** has one action: **Delete existing content and import demo**. There is no replace/upsert checkbox. The screen warns that all existing site content is deleted before the bundled demo is rebuilt.

The reset discovers stored post types directly from the database so content left by inactive plugins is deleted as well as Pages, Posts, United Pets records, media, comments and menus. Stored taxonomy rows are also cleared so terms from inactive plugins do not survive merely because their taxonomy is no longer registered. Users and installed code are not deleted.

A fresh PHP 8.3 WordPress fixture contained junk core content plus a custom post type/taxonomy supplied by a test plugin. The plugin was disabled before Import Demo. Raw database checks after reset showed 0 foreign custom posts, 0 foreign taxonomy rows and 0 foreign terms. Running Import Demo again produced the identical canonical state: 8 Pages, 4 Posts, 8 Pets, 6 Services, 6 Events, 5 Team members, 31 media items, 0 comments/signups, one primary menu, and all eight demo pages assigned dedicated templates. Evidence: `docs/evidence/united-pets/runtime-hardening-1.0.3/`.

## Dedicated template invariant

1.0.3 no longer relies only on a one-time migration. Recognized United Pets demo pages continuously enforce their dedicated template. Adoption Stories was deliberately written to `_wp_page_template=default` directly in the database; the raw value was confirmed as `default`, then repaired to `page-templates/adoption-stories.php` on the next WordPress load. A normal attempt to save `default` was also corrected.

Authenticated Gutenberg QA confirms **United Pets · Adoption Stories**, not Default template, with no JSON-response, block-loading or invalid-block errors. All eight dedicated pages pass their expected template/block composition, the layout loader works, and zero United Pets block-renderer REST requests are made. The iframe-based advanced source-field workflow also passes edit → save → frontend → reload → restore while preserving the dedicated template.

## Quality Services card invariant

The runtime equalizer now applies to both the visible `.serviceBox1` shell and its `.owl-item`. Before every measurement it removes the prior imposed geometry, forces layout, measures natural heights, and reapplies the current maximum. It reruns for Owl lifecycle events, images, fonts, DOM mutations and resizing.

The acceptance test targets the actual homepage **Quality Services** cards shown in the owner screenshot. All 12 rendered/cloned cards and Owl items initially measured 441px, delta 0. One description was then expanded dramatically at runtime; all 12 re-equalized to 3327px, delta 0, with no clipping/overflow. The invariant remained correct after resize.

## Immediate permalinks

Fresh activation enables `/%postname%/`, registers the United Pets CPT/taxonomy rewrite rules in the activation path, and flushes immediately. Before any frontend request, rewrite rules for `adoption`, `services`, `events`, `team` and `pet-type` were present and the pending-flush flag was absent.

## Regression status

The corrected source build passes:

- 41 theme-authored PHP files linted; custom JS/JSON parse cleanly; no source PHP/PHPMailer or theme symlinks; `git diff --check` passes;
- all-eight-page Gutenberg QA;
- advanced source-field persistence QA;
- runtime card/template/import UI QA;
- **176/176** responsive/browser checks across 16 routes × 11 widths;
- **32/32** axe checks with zero configured A/AA violations.

The exact 1.0.3 candidate ZIP passed fresh WordPress/PHP 8.3 activation, immediate rewrite verification, inactive-plugin destructive reset twice, persistent template enforcement, runtime Quality Services equalization, all-eight-page Gutenberg QA, advanced source editing, 176/176 responsive checks and 32/32 axe checks. The immutable final archive is rebuilt only after this converged ledger/report is included, then reaccepted from those exact bytes. Its SHA-256 and final acceptance receipt are stored outside the ZIP to avoid self-referential package mutation.
