Codeinwp / Codeinwp/otter-blocks
Otter Pro fatals when the Modal renderer file is absent from the deployed artifact
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 198
- Forks
- 36
- Avg merge
- 3d 4h
- Merged PRs (30d)
- 30
Description
Summary
Otter Pro can terminate frontend block registration when the Modal block's renderer file is unavailable.
Expected behavior: If a dynamic block renderer cannot be loaded from a deployed artifact, block registration continues through its metadata-only path.
Actual behavior: Loading the Modal renderer triggers a fatal "Failed opening required .../class-modal-block.php" error.
Impact: Affected sites return a frontend fatal during WordPress initialization instead of completing block registration.
Customer context
- Product / area: Otter Pro dynamic Modal block registration
- Version: 3.2.3
- Environment: Frontend requests; PHP 8.1.34 and 8.3.33; WordPress 6.9.7 and 7.1
- Reported error / symptom:
Failed opening required .../class-modal-block.php - Impact: 2 telemetry occurrences across 2 distinct sites in the observed window.
Reproduction notes
- Install Otter Pro 3.2.3 with the Modal block registered.
- Make the mapped Modal renderer file unavailable or unreadable in the deployed plugin files.
- Trigger WordPress block registration during a frontend request.
Reported result: the autoloader fatals while opening class-modal-block.php.
Reproduction status: confirmed from production stack telemetry and the inspected autoloader path; the artifact condition that made the file unavailable has not been reproduced locally.
Diagnosis
Conclusion
Telemetry records a fatal at the Otter Pro autoloader's require call while WordPress registers blocks and attempts to load the Modal renderer. The inspected autoloader directly requires its calculated path without first establishing that the file is available. The repository's registration tests define an unavailable deployed renderer as a case that degrades to metadata-only registration, but that test uses a different autoloader behavior. This confirms the fatal failure path when the renderer file is absent or inaccessible; the reason it was unavailable on the two reported deployments remains unverified.
Where this likely occurs
plugins/otter-pro/autoloader.php—Autoloader::load_mapped_file()lines 108-134 derivesinc/render/class-modal-block.phpfromThemeIsle\OtterPro\Render\Modal_Blockand delegates torequire_file().plugins/otter-pro/autoloader.php—Autoloader::require_file()lines 147-150 executes an unconditionalrequire, matching the production crash location at line 148.plugins/otter-pro/inc/class-main.php—Main::register_dynamic_blocks()lines 125-148 mapsmodaltoThemeIsle\OtterPro\Render\Modal_Blockat line 143.inc/class-registration.php—Registration::register_blocks()lines 855-971 applies the Pro dynamic-block mapping and callsclass_exists()at line 971, which reaches the registered Pro autoloader.plugins/otter-pro/inc/render/class-modal-block.php—Modal_Blocklines 8-17 exists in the inspectedv3.2.3source tree. The mapping and renderer were introduced together ince610a5fe(2024-07-23); no changes to the affected paths were found betweenv3.2.2andv3.2.3.
Engineering notes
- The telemetry stack is a frontend initialization path, not an editor-only invocation.
- The autoloader's docblock states it requires a file "if a file exists," but the inspected implementation has no availability check before
require. v3.2.3contains the renderer at the expected lowercase repository path. The observed missing or inaccessible runtime file therefore suggests a deployed-artifact, filesystem, or installation-state condition that is not established by the available evidence.- The product code path is in the bundled Pro plugin, not the Themeisle SDK; telemetry also marks the crash as outside SDK code.
Test coverage status
tests/test-registration.phpcontainstest_register_blocks_survives_dynamic_renderer_class_with_no_autoload_entry()at lines 177-180 andtest_register_blocks_survives_dynamic_renderer_class_whose_file_is_missing()at lines 203-215.- The missing-file test's helper,
Registration_Test::register_composer_like_loader()at lines 146-155, usesincluderather than the Pro autoloader's unconditionalrequire. It does not exerciseplugins/otter-pro/autoloader.phpor the Modal mapping.
What to verify or explore next
- Reproduce registration with the Pro Modal renderer mapped but absent or unreadable, using the production Pro autoloader.
- Inspect the generated 3.2.3 distribution artifact and installation/update flow for the presence and readability of
plugins/otter-pro/inc/render/class-modal-block.php. - Run the relevant PHP registration tests and add a runtime reproduction that reaches the Pro autoloader path.
Unknowns / follow-up
- The available telemetry redacts the full filesystem path and does not establish why the file was unavailable on the affected sites.
- No release artifact from either affected deployment was available for comparison.
Confidence
Confidence: 92/100
Production telemetry from two sites records a frontend fatal in Otter Pro 3.2.3 when the modal renderer file cannot be opened. The inspected production autoloader unconditionally requires that mapped file, while the registration test suite explicitly defines missing renderer files as a non-fatal fallback case; this is strong evidence of a product defect.
Crash telemetry
| Occurrences | 2 |
| Distinct sites | 2 |
| First seen | 2026-08-20 16:16 UTC |
| Last seen | 2026-08-20 21:08 UTC |
| Crash location | product:autoloader.php:148 |
| Request context | frontend |
| Inside Themeisle SDK | no |
| Product versions | 3.2.3 |
| WP versions | 6.9.7, 7.1 |
| PHP versions | 8.1.34, 8.3.33 |
| SDK versions | 3.3.59 |
Source: automated crash report — otter-pro, fingerprint 1b008f8ddcd75d2bf0bc5b46dae1ae9b
Generated by bug-report-triage (ID: bug-report-triage_6a87e98e2308b7.23267161)
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 with plugins/otter-pro/autoloader.php, especially Autoloader::load_mapped_file() and require_file(), then trace the Modal mapping in plugins/otter-pro/inc/class-main.php and registration through inc/class-registration.php. Run the relevant cases in tests/test-registration.php and add coverage that reaches the Pro autoloader when class-modal-block.php is unavailable. Done means frontend block registration falls back without a fatal.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php, wordpress
- Domain
- backend, testing-qa
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 72/100