Codeinwp / Codeinwp/otter-blocks

Otter 3.2.1 fatals when loading `FSE_Onboarding` during frontend startup

Open
#2,959 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug-report bug-report-triage crash-report
Dominant language
JavaScript
Stars
198
Forks
36
Avg merge
3d 4h
Merged PRs (30d)
30

Description

Summary

Otter 3.2.1 can terminate a frontend request during plugin startup when the onboarding class cannot be loaded.

Expected behavior: Frontend requests load without requiring the onboarding class to be unavailable.

Actual behavior: Startup ends with an uncaught Class ".../FSE_Onboarding" not found fatal error.

Impact: The affected site's frontend request cannot complete while this startup path is reached.

Customer context

  • Product / area: Otter Blocks startup and FSE onboarding
  • Version: 3.2.1
  • Environment: WordPress 7.0.2; PHP 8.4.23
  • Integration / third party: Themeisle SDK 3.3.58 was present; the telemetry location is outside SDK code.
  • Reported error / symptom: Uncaught FSE_Onboarding class-not-found fatal at inc/class-main.php:97.
  • Impact: 3 occurrences across 1 production site in the reporting window; frontend context.

Reproduction notes

  1. Install Otter Blocks 3.2.1 in a WordPress environment using PHP 8.4.23.
  2. Load a frontend request so WordPress runs Otter's init callbacks.
  3. Confirm whether startup reaches Main::autoload_classes() with FSE_Onboarding unavailable.

Telemetry confirms the fatal in production; an exact packaged-artifact reproduction has not been run.

Diagnosis

Conclusion

Production telemetry provides a direct frontend fatal at the new $classname() call. In the 3.2.1 tag, the loader includes ThemeIsle\GutenbergBlocks\Plugins\FSE_Onboarding in its unconditional startup list, so an unavailable autoload target terminates the request. The source class exists and Composer declares inc/ as a classmap, making the fatal evidence of a shipped/install autoload inconsistency rather than an absent source declaration.

Where this likely occurs
  • inc/class-main.phpThemeIsle\GutenbergBlocks\Main::autoload_classes() lines 66-102; 3.2.1 includes FSE_Onboarding at line 76 and directly instantiates each listed class at line 97, matching the telemetry location.
  • inc/plugins/class-fse-onboarding.phpThemeIsle\GutenbergBlocks\Plugins\FSE_Onboarding lines 8-15; the expected class declaration is present in tag v3.2.1.
  • composer.jsonautoload lines 61-65; the product declares inc/ as a Composer classmap and loads the Themeisle SDK bootstrap separately.
  • bin/dist.sh — distribution workflow lines 26-37; the release archive is assembled from the filtered tree, after dependencies are installed by the tag deployment workflow in .github/workflows/deploy.yml lines 24-33.
Engineering notes
  • The telemetry explicitly marks the location as outside Themeisle SDK code, so routing is Codeinwp/otter-blocks.
  • The class was added to the loader in commit aa3e24edfadc794ef447ff3b7430f3179abb8970 and remains present in tag v3.2.1.
  • FSE_Onboarding contains mainly admin/editor hooks, but it is placed in the unconditional init-time class list. The fatal therefore affects frontend bootstrap before its feature-specific hooks determine whether onboarding is used.
  • The repository checkout does not contain the built vendor/ directory or the deployed ZIP, so the generated classmap and archive contents for the failing installation were not directly inspected.
Test coverage status

No relevant coverage was found during inspection. A search of tests/ found no tests covering FSE_Onboarding loading or Main::autoload_classes() with the production Composer autoloader.

What to verify or explore next
  • May be worth reproducing with the exact 3.2.1 WordPress.org or product ZIP on PHP 8.4.23 and checking frontend bootstrap.
  • Inspect the packaged vendor/composer/autoload_classmap.php for the FSE_Onboarding mapping and confirm that inc/plugins/class-fse-onboarding.php is in the archive.
  • If the packaged mapping is present, compare enabled-plugin and autoloader interactions on the affected WordPress/PHP versions.
Unknowns / follow-up
  • The telemetry report contains no full resolved class name, deployed archive hash, or installed-file inventory.
  • It is unknown whether this occurred after a partial update or with an unmodified 3.2.1 distribution.

Confidence

Confidence: 88/100

Production telemetry records three frontend fatal errors on one site running Otter 3.2.1. The tagged source unconditionally instantiates FSE_Onboarding at the exact reported line, while the class is expected to be Composer-classmapped; the reported class-not-found condition therefore prevents normal frontend startup and warrants investigation of the shipped artifact/autoload state.

Crash telemetry

Occurrences 3
Distinct sites 1
First seen 2026-08-02 16:48 UTC
Last seen 2026-08-02 16:48 UTC
Crash location product:inc/class-main.php:97
Request context frontend
Inside Themeisle SDK no
Product versions 3.2.1
WP versions 7.0.2
PHP versions 8.4.23
SDK versions 3.3.58

Source: automated crash report — otter-blocks, fingerprint 2a9815a6dadd574b66ac18f7bfdc4b45
Generated by bug-report-triage (ID: bug-report-triage_6a717ffb8fd588.54732445)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in inc/class-main.php at Main::autoload_classes(), then inspect inc/plugins/class-fse-onboarding.php, composer.json, and bin/dist.sh. Reproduce the exact 3.2.1 package on the stated WordPress and PHP versions, checking the generated Composer classmap and archive contents. Done means the cause is confirmed and a frontend startup no longer ends in this fatal, with regression coverage identified or added.

Written by the indexing model from the issue text.

Assessment

Tech stack
php, wordpress
Domain
backend, build-system
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.