Codeinwp / Codeinwp/otter-blocks
Otter 3.2.1 fatals when loading `FSE_Onboarding` during frontend startup
Nobody has claimed this yet.
- 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_Onboardingclass-not-found fatal atinc/class-main.php:97. - Impact: 3 occurrences across 1 production site in the reporting window; frontend context.
Reproduction notes
- Install Otter Blocks 3.2.1 in a WordPress environment using PHP 8.4.23.
- Load a frontend request so WordPress runs Otter's
initcallbacks. - Confirm whether startup reaches
Main::autoload_classes()withFSE_Onboardingunavailable.
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.php—ThemeIsle\GutenbergBlocks\Main::autoload_classes()lines 66-102; 3.2.1 includesFSE_Onboardingat line 76 and directly instantiates each listed class at line 97, matching the telemetry location.inc/plugins/class-fse-onboarding.php—ThemeIsle\GutenbergBlocks\Plugins\FSE_Onboardinglines 8-15; the expected class declaration is present in tagv3.2.1.composer.json—autoloadlines 61-65; the product declaresinc/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.ymllines 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
aa3e24edfadc794ef447ff3b7430f3179abb8970and remains present in tagv3.2.1. FSE_Onboardingcontains mainly admin/editor hooks, but it is placed in the unconditionalinit-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.phpfor theFSE_Onboardingmapping and confirm thatinc/plugins/class-fse-onboarding.phpis 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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