30 days free. No credit card. Full access from the moment you connect your site.

Start free trial

v0.9.1 — Critical hotfix: exclude tests/ from Jetpack Autoloader classmap

Critical fix — 0.9.0 sites with MemberPress (and other membership plugins) fatal-error on bootstrap

Users on 0.9.0 with MemberPress installed observed a fatal at plugin bootstrap:

Failed opening required '.../acrossai-pro/tests/Unit/AccessControl/bootstrap.php' in vendor/jetpack-autoloader/class-php-autoloader.php

All 0.9.0 users are strongly advised to upgrade to 0.9.1 immediately.

Root cause

The Brain/Monkey unit-test bootstrap added in 0.9.0 declares plain global-namespace stub classes (MeprUser, RcpTestCustomer, and function shims for the 10 dependency plugins) that the unit-test fixtures rely on. Jetpack Autoloader scans the entire plugin tree at composer dump-autoload time to build its cross-plugin conflict-resolution classmap — that scan ignores composer's PSR-4 boundaries by design and picked up the test-stub MeprUser, mapping it to tests/Unit/AccessControl/bootstrap.php. The deployed vendor/ shipped that classmap. When MemberPress asked to autoload MeprUser on production, the autoloader tried to require the test bootstrap — which isn't part of the distribution → fatal.

Fix

Adds "exclude-from-classmap": ["/tests/"] to composer.json's autoload block. Jetpack Autoloader honors this and skips tests/ entirely during the classmap scan. Verified locally after composer dump-autoload --no-dev -o — zero test-stub classes leaked into vendor/composer/jetpack_autoload_classmap.php.

See PR #44.

Operator action required after upgrading

composer.json ships in this update, but vendor/ is gitignored. Rebuild the plugin's vendor/ before deploying:

composer install --no-dev -o

Immediate mitigation for an already-affected live site (before deploying 0.9.1)

Either:

  • Delete vendor/composer/jetpack_autoload_classmap.php on production — Jetpack regenerates it on the next request.
  • Or run composer dump-autoload --no-dev -o on the server directly.

Either resolves the fatal within a single request.

Upgrade notes

  • Drop-in replacement for 0.9.0. No schema change, no data migration.
  • All 10 access-control providers shipped in 0.9.0 remain functional post-upgrade.
  • No behavior change beyond the fatal fix.

Keep reading