Skip to content

Dynamic CSS enqueue fatals when Frontend generator is unavailable #4599

Description

@pirate-bot

Summary

Neve frontend requests can terminate while generating dynamic CSS when the frontend style generator cannot be loaded.

Expected behavior: The page request continues and enqueues the CSS that remains available.

Actual behavior: An uncaught Class "Neve\Core\Styles\Frontend" not found error is raised during dynamic CSS enqueueing.

Impact: Affected frontend page views return a fatal error instead of rendering.

Customer context

  • Product / area: Neve dynamic CSS on the frontend
  • Version: 4.2.11
  • Environment: PHP 8.3.33; WordPress versions reported by telemetry: 6.9.7 and 7.1
  • Integration / third party: Not provided
  • Reported error / symptom: Class "Neve\Core\Styles\Frontend" not found at inc/core/dynamic_css.php:71
  • Impact: 2 telemetry occurrences across 2 distinct sites between 2026-08-20 and 2026-08-24.

Reproduction notes

  1. Use Neve 4.2.11 on a frontend request that triggers wp_enqueue_scripts.
  2. Make the mapped Neve\Core\Styles\Frontend class unavailable to the Neve autoloader, for example through an incomplete or unreadable theme file.
  3. Observe that dynamic CSS enqueueing reaches the direct frontend-generator construction and raises the reported class-not-found error.

Production reproduction is confirmed by telemetry; an isolated local reproduction was not run.

Diagnosis

Conclusion

Production telemetry grounds the frontend fatal at Dynamic_Css::enqueue() in Neve 4.2.11. That release directly instantiates Neve\Core\Styles\Frontend with no availability check. Commit f71438636 (2026-08-21) adds an availability check around this generator path and describes the change as preventing class-loading errors. This is strong evidence of a Neve crash defect when the mapped generator cannot be loaded.

Where this likely occurs

  • inc/core/dynamic_css.phpNeve\Core\Dynamic_Css::enqueue() lines 65-84 selects Frontend for wp_enqueue_scripts and directly constructs it at line 71 in 4.2.11.
  • inc/core/styles/frontend.phpNeve\Core\Styles\Frontend is declared at lines 8-25, confirming the expected class is part of the release tree.
  • autoloader.phpNeve\Autoloader::load_mapped_file() lines 114-160 maps a class to a lowercased PHP path and returns false when that file is absent or unreadable.
  • start.php — bootstrap lines 44-60 registers the Neve namespace against inc/ before core loading.
  • Release tag v4.2.11 resolves to c3c4ad6746b71e15e4bc9373848332afb7d2028b; f71438636ab80af15fa2581888826c4be79309a0, following e1b889db2, is later than that release and is not contained in it.

Engineering notes

The inspected release includes the expected Frontend class and namespace mapping, so the telemetry does not establish why the class was unavailable on the affected installations. The released enqueue path nevertheless turns an unavailable mapped class into a frontend fatal. Neve Pro was inspected only for an override of this generator and does not define Neve\Core\Styles\Frontend; its dynamic-style subscribers do not explain the missing-class error.

Test coverage status

tests/test-neve-autoloader.php contains coverage for Neve\Autoloader::load_class() missing-file behavior at lines 63-108. No relevant coverage was found during inspection for Dynamic_Css::enqueue() continuing when the selected generator class is unavailable.

What to verify or explore next

  • May be worth reproducing with a Neve installation where inc/core/styles/frontend.php is unavailable or unreadable and invoking the wp_enqueue_scripts path.
  • May be worth running the dynamic CSS test coverage, if present in CI, against the 4.2.11 release tree and the follow-up commit.
  • Verify whether the subsequent guard has shipped in a Neve release and whether telemetry continues after that release.

Unknowns / follow-up

  • The telemetry does not include the affected theme directory contents, file permissions, or deployment mechanism.
  • No evidence establishes a previously working release for either affected site, so regression status is unconfirmed.

Confidence

Confidence: 94/100

Production telemetry records the frontend fatal twice on Neve 4.2.11, and the released code directly instantiates the missing class without a guard. A subsequent Neve commit explicitly adds the corresponding class-existence check, confirming a product-side crash path.

Crash telemetry

Occurrences 2
Distinct sites 2
First seen 2026-08-20 17:03 UTC
Last seen 2026-08-24 12:54 UTC
Crash location product:inc/core/dynamic_css.php:71
Request context frontend
Inside Themeisle SDK no
Product versions 4.2.11
WP versions 6.9.7, 7.1
PHP versions 8.3.33
SDK versions 3.3.59

Source: automated crash report — neve, fingerprint 5fab41cf25c417fcbb7ecc829c0720df
Generated by bug-report-triage (ID: bug-report-triage_6a8d2fc1649822.90371526)

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions