chore(release): wire perf-asset-policy bootstrap, bump v1.6.0, update docs

Round 2 follow-up to 6da83981 — wires the perf module into the theme,
bumps style.css + PEPTIDE_STARTER_VERSION constant to 1.6.0, and adds
[1.6.0] CHANGELOG section + ARCHITECTURE listing + CONVENTIONS how-to.

Without this commit the perf-asset-policy.php file from Round 1 is
dead code; the bootstrap require + after_setup_theme action are added
in functions.php.

Co-authored-by: Engineer Theme (in-session subagent) <engineer-theme@peptiderepo.users.noreply.github.com>
This commit is contained in:
peptiderepo
2026-04-23 05:55:00 +00:00
parent 6da83981b4
commit 4a506e1c56
5 changed files with 125 additions and 120 deletions

View File

@@ -47,6 +47,8 @@ peptide-starter/
│ ├── newsletter-admin.php # Subscriber viewer + CSV-safe export +
│ │ # /newsletter-unsubscribe route.
│ ├── mail-diagnostic.php # [v1.5.1] Tools → Mail Test — wp_mail probe.
│ ├── perf-asset-policy.php # [v1.6.0] Mobile perf: dequeue + font slim
│ │ # + preconnect + defer.
│ └── page-setup.php # Auto-create pages on activation +
│ # v1.5.0 user migration (enrol into verify).
│
@@ -261,11 +263,4 @@ control in the theme.
`inc/cloudflare-ips.php` holds a static snapshot of CF ranges. Refresh
quarterly. Override via `peptide_starter_cloudflare_ip_ranges` filter
for out-of-band updates.
## Version
**Current:** v1.5.2 (2026-04-14)
Bump `style.css` header line 7 and `PEPTIDE_STARTER_VERSION` in
`functions.php` together on release.
for out-of-band update

View File

@@ -2,6 +2,51 @@
All notable changes to the Peptide Starter Theme are documented in this file.
## [1.6.0] - 2026-04-23 — Mobile Performance Phase 1
Mobile optimization targeting LCP reduction through conditional asset dequeue,
font weight slimming, and font server preconnect. Measured baseline LCP on
Moto G Power (Slow 4G): 5.4s; target: sub-4s after Phase 1 deployment.
### Performance improvements
- **Conditional asset dequeue**: WooCommerce, Elementor, and USMI assets now
dequeue on pages that don't use them. Removes ~100KB from non-shop pages.
- **Google Fonts slimming**: Roboto and Roboto Slab trimmed from 72 faces to 5
(400/500/700 weights, no italics). Font CSS shrinks ~6KB → <1KB; woff2 payload
reduced ~80%.
- **Preconnect hints**: `fonts.googleapis.com` and `fonts.gstatic.com` now
preconnect in `<head>`, eliminating separate TLS handshake latency on cold cache.
- **Cookie-notice defer**: Cookie banner script deferred to unblock initial render.
### Technical
- New module `inc/perf-asset-policy.php` (~245 lines, PHPUnit tested).
- Kill-switch constant `PEPTIDE_STARTER_PERF_DEQUEUE` (default true) allows
disable via `wp-config.php` for rollback.
- All dequeue lists and font weights exposed as filters for customization.
- Production handle verification: WC (layout/smallscreen/general), Elementor
(frontend/frontend-legacy + per-post CSS), USMI (SFSImainCss + 4 scripts).
### Tests
- `test-perf-asset-policy.php` — 8 new unit cases covering dequeue conditions
(shop/non-shop/Elementor/USMI), font rewrite happy path and edge cases,
preconnect addition, defer application, and kill-switch disable.
### Out of scope
- Critical CSS inline (Phase 2 candidate after measuring Phase 1 lift).
- jQuery dequeue (WC/PSA/Elementor compat risk too high).
- Image optimizations (no images on homepage critical path).
- LiteSpeed Cache settings (CTO tunes post-deploy if Phase 1 insufficient).
### Breaking changes
None. All optimizations are transparent to plugin authors; dequeues use
standard WordPress APIs and can be overridden via filters or re-enqueued by
plugins if needed.
## [1.5.2] - 2026-04-14 — Security
Same-day follow-up to v1.5.1. Closes four issues the v1.5.1 post-merge
@@ -277,62 +322,4 @@ ADR-0001.
- Focus indicators (2px outline) on all interactive elements
- 4.5:1+ contrast ratio on all text
- Semantic HTML with proper landmarks
- `aria-label` and `aria-expanded` attributes on buttons
- Keyboard navigation support (Escape closes overlays, Tab through elements)
- **Responsive Breakpoints:**
- Mobile: 320px - 479px
- Tablet: 480px - 767px
- Desktop: 768px - 1023px
- Large: 1024px - 1439px
- Extra Large: 1440px+
- **Design System:**
- Typography: Inter font with 1.125x modular scale, 8px grid base
- Colors: Blue primary (#0066CC light, #3B82F6 dark)
- Component library: buttons, cards, forms, badges, alerts, pagination
- CSS custom properties for all design tokens
- No `!important` on global elements (plugin harmony)
- **Navigation & Mobile Menu:**
- Primary navigation with active state detection
- Mobile hamburger menu with overlay
- Custom Nav Walker for WordPress theme integration
- Keyboard navigation (Escape closes menu, arrow keys work)
- Responsive: hides on desktop, appears on mobile (< 768px)
### Technical Details
- **Architecture:** Classic WordPress theme (non-block/FSE)
- **Styling:** Single 44KB `style.css` with no build step
- **JavaScript:** Vanilla ES6+ in 2 files (navigation.js, theme.js)
- **Plugin Namespaces:** `.pn-*` (Peptide News), `.psa-*` (Peptide Search AI), `.prab-*` (PRAutoBlogger)
- **Browser Support:** Chrome, Firefox, Safari (latest 2), iOS Safari 12+
- **Requires:** WordPress 6.0+, PHP 7.4+
### Initial Release
- All core features implemented and tested
- Full dark mode support with ecosystem coordination
- Production-ready for peptiderepo.com launch
---
## Version Numbering
- Versions follow semantic versioning: MAJOR.MINOR.PATCH
- Current: v1.3.2
- Defined in: `style.css` header (line 7) and `functions.php` (line 14 constant)
- Update both locations when releasing a new version
---
## Deployment
Push to `main` branch triggers automatic deployment to peptiderepo.com via GitHub Actions.
**Process:**
1. Push to `main`
2. GitHub Actions workflow `deploy.yml` runs
3. Files synced via rsync to Hostinger
4. LiteSpeed cache purged
No manual FTP uploads needed.
- `a

View File

@@ -221,6 +221,75 @@ do_action( 'peptide_starter_hero_before' );
**Important:** Always wrap shortcodes in `shortcode_exists()` checks so theme doesn't break if plugin is missing.
### How to Add a Performance Policy Rule
**Scenario:** Dequeue or transform an asset on certain page conditions
Performance optimizations live in `inc/perf-asset-policy.php` and hook into
WordPress's enqueue/style-loading pipeline. The module supports conditional
dequeue (WC, Elementor, USMI), font weight slimming, preconnect hints, and
script deferral.
1. **For conditional dequeue**, add a block in `peptide_starter_perf_dequeue_plugin_assets()`:
```php
if ( /* your condition */ ) {
$handles = apply_filters( 'peptide_starter_perf_yourplugin_handles',
array( 'handle-1', 'handle-2' )
);
foreach ( $handles as $handle ) {
wp_dequeue_style( $handle ); // or wp_dequeue_script
}
}
```
2. **For style-src rewrites** (e.g., URL parameter slimming), extend
`peptide_starter_perf_slim_google_fonts()` with a new loop iteration:
```php
foreach ( $font_weights_config as $config_family => $weights ) {
if ( 0 === strcasecmp( $family, $config_family ) ) {
// Rewrite and return
}
}
```
3. **For preconnect hints**, add URLs to the filter in
`peptide_starter_perf_resource_hints()`:
```php
$font_urls = apply_filters(
'peptide_starter_perf_font_preconnect_urls',
array( 'https://fonts.googleapis.com', 'https://fonts.gstatic.com' )
);
```
4. **For script deferral**, add a new handle check in
`peptide_starter_perf_defer_cookie_notice()`:
```php
if ( 'my-script-handle' !== $handle ) {
return $tag;
}
$tag = str_replace( '<script ', '<script defer ', $tag );
return $tag;
```
5. **Test on production** using the kill-switch to verify zero regression:
- Add `define( 'PEPTIDE_STARTER_PERF_DEQUEUE', false );` to `wp-config.php`
- Curl the affected pages and verify assets still load
- Remove the define, reload, and verify assets are dequeued/transformed
6. **Document** in CHANGELOG.md and ARCHITECTURE.md with the dequeue conditions
and expected asset reductions (file size, count, LCP delta if measured).
**Best practices:**
- Always expose dequeue lists and thresholds as filters for customization
- Use production handle names verified via `wp eval` (not guesses)
- Test with the kill-switch ON to ensure no regression on opt-out
- Document the expected impact in CHANGELOG (file size, LCP delta, etc.)
### How to Add a New CSS Component
**Scenario:** Create a new "pill" button style (small, rounded, inline)
@@ -699,46 +768,4 @@ numbers in handler files.
## Git Workflow — PR-Gated, Soft-Enforced
This repo is private on GitHub's free plan, which does not support branch protection or rulesets. The review gate is enforced at the agent layer, not server-side. Every agent and human contributor follows these rules; the `.github/workflows/main-push-audit.yml` tripwire opens an audit issue on any direct push to `main` that did not come from a merged PR.
### Rules
1. **Never push to `main` directly.** Every change lands via a pull request that the maintainer merges. No self-merging. No force-pushing to `main`.
2. **Branch naming**: `claude/<scope>-<YYYYMMDD>` for agent-authored work, `fix/<scope>` or `feat/<scope>` for human-authored. The scope is a 1–3 word kebab-case description.
3. **Commit trailer**: every commit authored by an agent must end with an `Agent-Session:` trailer so commits can be correlated back to the conversation that produced them, even though all commits share the `peptiderepo` bot identity.
```
feat: add per-request cost tracking
Agent-Session: cowork-2026-04-14-cost-audit
```
4. **PR description template**: every PR description covers
- **What changed** (one paragraph)
- **Why** (motivation or incident link)
- **Risk flags** (schema changes, API contract changes, cost impact, compatibility)
- **Test plan** (what was run locally, what to smoke-test after merge)
5. **Emergency push exception**: if a situation genuinely requires pushing to `main` without a PR (site down, CI broken, one-line hotfix), surface it in the chat before doing it. Every emergency push gets a follow-up PR that commits the same changes through the normal flow so git stays the source of truth. The tripwire will open an audit issue — close it with a comment explaining why.
### Opening a PR from an agent session
The `gh` CLI is not installed in the Cowork sandbox. Use `curl` with the PAT from the workspace `.env.credentials`:
```bash
GH_TOKEN=$(grep "^GITHUB_PAT=" "$WORKSPACE/.env.credentials" | cut -d= -f2)
git push -u origin HEAD
curl -s -X POST -H "Authorization: token $GH_TOKEN" \
-H "Content-Type: application/json" \
"https://api.github.com/repos/peptiderepo/<repo>/pulls" \
-d "$(jq -cn --arg title "<title>" --arg head "<branch>" --arg body "<body>" \
'{title:$title, head:$head, base:"main", body:$body}')"
```
### When this changes
If the peptiderepo GitHub account is ever upgraded to Pro (or the repo goes public), replace this soft-enforcement section with a note pointing to the real branch protection rules in repo settings.
This repo is private on GitHub's free plan, which does not support branch protection or rulesets. The review gate is enforced at the agent layer, not server-sid

View File

@@ -15,6 +15,7 @@
* @see inc/page-setup.php — auto-create pages + v1.5.0 user migration
* @see inc/mail-diagnostic.php — admin deliverability test tool
* @see inc/helpers.php — nav walker, menu fallback, gates, utilities
* @see inc/perf-asset-policy.php — asset dequeue + font slim + preconnect + defer
*
* @package peptide-starter
*/
@@ -25,7 +26,7 @@ if ( ! defined( 'ABSPATH' ) ) {
}
// Theme constants.
define( 'PEPTIDE_STARTER_VERSION', '1.5.2' );
define( 'PEPTIDE_STARTER_VERSION', '1.6.0' );
define( 'PEPTIDE_STARTER_DIR', get_template_directory() );
define( 'PEPTIDE_STARTER_URI', get_template_directory_uri() );
@@ -42,6 +43,7 @@ require_once PEPTIDE_STARTER_DIR . '/inc/contact-handler.php';
require_once PEPTIDE_STARTER_DIR . '/inc/page-setup.php';
require_once PEPTIDE_STARTER_DIR . '/inc/newsletter-admin.php';
require_once PEPTIDE_STARTER_DIR . '/inc/mail-diagnostic.php';
require_once PEPTIDE_STARTER_DIR . '/inc/perf-asset-policy.php';
/**
* Set up theme defaults and register support for WordPress features.
@@ -69,6 +71,7 @@ function peptide_starter_setup() {
load_theme_textdomain( 'peptide-starter', PEPTIDE_STARTER_DIR . '/languages' );
}
add_action( 'after_setup_theme', 'peptide_starter_setup' );
add_action( 'after_setup_theme', 'peptide_starter_perf_asset_policy_init' );
/**
* Register and enqueue stylesheets and scripts.
@@ -230,11 +233,4 @@ function peptide_starter_inline_dark_mode_script() {
var html = document.documentElement;
var stored = localStorage.getItem('peptide-starter-theme');
var defaultTheme = <?php echo wp_json_encode( $default_dark ); ?>;
var systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
var theme = stored || (systemDark ? 'dark' : defaultTheme);
html.setAttribute('data-theme', theme);
})();
</script>
<?php
}
add_action( 'wp_head', 'peptide_starter_inline_dark_mode_script' );
var systemDark = window.matchMedia('(prefers-col

View File

@@ -4,7 +4,7 @@ Theme URI: https://github.com/peptiderepo/peptide-starter
Description: Premium, accessible WordPress theme for scientific peptide reference database
Author: Peptide Repo
Author URI: https://peptiderepo.com
Version: 1.5.2
Version: 1.6.0
License: GPL v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: peptide-starter