Skip to content

Conversation

justin808
Copy link
Member

@justin808 justin808 commented Oct 14, 2025

Summary

  • Moved stylesheet_pack_tag from bottom of <body> to <head> section in application.html.erb
  • Fixes flash of unstyled content (FOUC) visible on https://staging.reactrails.com/ and other pages

Problem

The stylesheet was loading at the end of the body (line 23), after React components had already started rendering. This caused a noticeable FOUC where:

  • Navigation bar and content appeared unstyled initially
  • Tailwind CSS classes weren't applied until after page load
  • User experience was poor with visible style flashing

Solution

Stylesheets should always be loaded in the <head> to ensure styles are available before any content renders. The stylesheet_pack_tag is now loaded in the head alongside other pack tags, while JavaScript remains deferred at the bottom for optimal performance.

Test Plan

🤖 Generated with Claude Code


This change is Reviewable

Summary by CodeRabbit

  • Bug Fixes

    • Prevents flashes of unstyled content and inconsistent styling during page transitions by ensuring styles load earlier in the document head.
    • Improves visual stability and reduces layout shifts when navigating between views.
  • Refactor

    • Moved stylesheet loading to the document head for more predictable rendering while leaving script loading behavior unchanged.

Copy link

coderabbitai bot commented Oct 14, 2025

Walkthrough

Moved stylesheet_pack_tag calls from the <body> into the <head> in two layout templates so CSS is emitted earlier; JavaScript pack tags and other asset declarations unchanged.

Changes

Cohort / File(s) Summary
Layout assets placement
app/views/layouts/application.html.erb, app/views/layouts/stimulus_layout.html.erb
Relocated stylesheet_pack_tag into <head> (added with media: 'all', 'data-turbolinks-track': true / 'reload' as present) and removed the body-level stylesheet tag(s). javascript_pack_tag/stimulus bundle left unchanged.

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant RailsView as Layout ERB
  Note over RailsView: Before — stylesheet_pack_tag emitted in <body>
  Browser->>RailsView: GET /
  RailsView-->>Browser: HTML (CSS tag in <body>)
  Note over Browser: CSS loads late (possible FOUC)

  par After change
    Note over RailsView: Now emits stylesheet_pack_tag in <head>
    Browser->>RailsView: GET /
    RailsView-->>Browser: HTML (CSS tag in <head>)
    Note over Browser: CSS loads earlier during head parse
  end
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related issues

Poem

I hopped a line from tail to crown,
Pushed styles up so pages gown;
Turbolinks whispers, scripts stay kind—
A smoother paint for every mind. 🐇✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title succinctly summarizes the primary change—moving stylesheet loading to the head to fix the flash of unstyled content—and directly reflects the pull request’s objective without extraneous detail.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix-fouc

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9e89bf4 and fcaf7f1.

📒 Files selected for processing (2)
  • app/views/layouts/application.html.erb (1 hunks)
  • app/views/layouts/stimulus_layout.html.erb (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • app/views/layouts/application.html.erb
🔇 Additional comments (2)
app/views/layouts/stimulus_layout.html.erb (2)

9-9: LGTM! Correctly fixes FOUC.

Moving the stylesheet pack tag to the <head> ensures styles load before content renders, which directly addresses the flash of unstyled content issue described in the PR objectives.


10-10: Verify append_javascript_pack_tag deferral and placement

  • Confirm whether Shakapacker’s append_javascript_pack_tag helper automatically defers or buffers scripts for execution at the end of the body.
  • If it doesn’t, add defer: true or move the call below the existing <%= javascript_pack_tag … defer: true %> to meet the PR’s performance objectives.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

claude bot commented Oct 14, 2025

Code Review - PR #684: Fix FOUC by moving stylesheet to head

Summary

This PR moves the stylesheet_pack_tag from the bottom of the body to the head section to fix Flash of Unstyled Content (FOUC). The change is well-justified and technically correct.

Strengths

  1. Problem Correctly Identified: Moving stylesheets to the head is a web development best practice that prevents FOUC.

  2. Minimal, Surgical Change: The PR touches only what's necessary - a single line move. This reduces risk.

  3. Clear Documentation: The PR description clearly explains the problem, solution, and includes a test plan.

  4. Performance Considerations: The change maintains proper performance patterns by keeping JavaScript deferred at the bottom.

Code Quality Review

File: app/views/layouts/application.html.erb:9

  • ✅ Correct placement in the head section
  • ✅ Maintains consistency with other stylesheet tags
  • ✅ Preserves attributes

Potential Issues and Questions

  1. Missing pack name parameter: Line 9 has stylesheet_pack_tag without an explicit pack name. Typically this takes a pack name as first parameter. Verify this works as intended with your Shakapacker setup.

  2. Turbolinks/Turbo consideration: The attribute uses data-turbolinks-track: true. Consider if this should be data-turbo-track: reload for Turbo (Hotwire) since you have @hotwired/turbo-rails in dependencies.

  3. No regression tests: Consider adding an automated test that verifies stylesheet placement in the head section.

Security Considerations

✅ No security concerns - only moves an existing tag.

Performance Considerations

Positive impact: Moving CSS to head improves perceived performance. Browsers can parse CSS before rendering content, preventing reflows and repaints.

Test Coverage

⚠️ Manual testing only. Consider adding automated view specs.

Recommendations

Before merging:

  1. Verify stylesheet_pack_tag works without explicit pack name
  2. Consider updating Turbolinks syntax to Turbo
  3. Update PR title to remove TBD

Nice to have:

  1. Add automated view spec for stylesheet placement
  2. Consider performance budget test or Lighthouse CI

Verdict

LGTM with minor verification needed

The core change is correct and follows best practices. Please verify the pack name parameter behavior and consider the Turbolinks/Turbo syntax update. Once confirmed, this is ready to merge.

Great work identifying and fixing this FOUC issue!

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
app/views/layouts/application.html.erb (1)

9-9: Use "reload" for data-turbolinks-track
Update to the documented standard in app/views/layouts/application.html.erb:9:

- <%= stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': true) %>
+ <%= stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': 'reload') %>
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ec52aa1 and fa9361a.

📒 Files selected for processing (1)
  • app/views/layouts/application.html.erb (1 hunks)
🔇 Additional comments (1)
app/views/layouts/application.html.erb (1)

9-9: Good approach to fix FOUC.

Moving the stylesheet loading to the <head> is the correct solution to prevent flash of unstyled content. This ensures styles are loaded and parsed before content renders, which should eliminate the FOUC issues described in the PR objectives.

After fixing the pack name issue, verify the fix by visiting the staging URLs mentioned in the PR objectives and confirming no FOUC occurs.

<title>RailsReactTutorial</title>

<%= append_stylesheet_pack_tag('stimulus-bundle') %>
<%= stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': true) %>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Missing pack name in stylesheet_pack_tag.

The stylesheet_pack_tag helper requires a pack name as the first positional argument. The current syntax stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': true) is missing this required argument, which will likely cause a runtime error or fail to load any stylesheets.

Apply this diff to add the pack name (assuming 'application' is the main pack):

-  <%= stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': true) %>
+  <%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': true %>

If a different pack name should be used, please adjust accordingly. Verify this matches the pack name used in your Webpack/Shakapacker configuration.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<%= stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': true) %>
<%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': true %>
🤖 Prompt for AI Agents
In app/views/layouts/application.html.erb around line 9, the stylesheet_pack_tag
call is missing the required pack name; update the helper to pass the main pack
(e.g., "application") as the first argument so it reads stylesheet_pack_tag
'application', media: 'all', 'data-turbolinks-track': true (or replace
"application" with the correct pack name used in your
Webpack/webpacker/shakapacker config), ensuring the pack name matches your build
configuration.

Copy link

🚀 Quick Review App Commands

Welcome! Here are the commands you can use in this PR:

/deploy-review-app

Deploy your PR branch for testing

/delete-review-app

Remove the review app when done

/help

Show detailed instructions, environment setup, and configuration options.


@justin808
Copy link
Member Author

/deploy-review-app

Copy link

github-actions bot commented Oct 15, 2025

🎉 ✨ Deploy Complete! 🚀

🌐 ➡️ Open Review App

Deployment successful for PR #684, commit fa9361a

🎮 Control Plane Console
📋 View Completed Action Build and Deploy Logs

Copy link

github-actions bot commented Oct 15, 2025

🎉 ✨ Deploy Complete! 🚀

🌐 ➡️ Open Review App

Deployment successful for PR #684, commit aecf463

🎮 Control Plane Console
📋 View Completed Action Build and Deploy Logs

Copy link

claude bot commented Oct 15, 2025

Pull Request Review - PR #684

Summary

This PR moves the stylesheet_pack_tag from the bottom of the <body> to the <head> section in application.html.erb to fix Flash of Unstyled Content (FOUC). This is a good and necessary change that follows web best practices.


✅ Positive Aspects

1. Correct Solution to FOUC

Moving stylesheets to the <head> is the standard and correct approach to prevent FOUC. This ensures CSS is loaded and parsed before the browser starts rendering content.

2. Clear Problem Description

The PR description clearly explains:

  • The problem (FOUC visible on staging)
  • The root cause (stylesheet loading after React components)
  • The solution (move to head)

3. Performance Best Practice Maintained

JavaScript remains deferred at the bottom of the body with defer: true, which is optimal for page load performance.

4. Minimal Change

The change is surgical - only one line moved, reducing risk of introducing bugs.


⚠️ Issues Found

Critical: Inconsistent Fix Across Layouts

The fix was applied to app/views/layouts/application.html.erb (line 8), but there's another layout file that has the same problem:

File: app/views/layouts/stimulus_layout.html.erb

Current state (line 22):

  <%= react_component "Footer" %>

  <%= stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': true) %>
  <%= javascript_pack_tag('data-turbolinks-track': true, defer: true) %>
</body>

The stylesheet is still at the bottom of the body in this layout!

Recommendation: Apply the same fix to stimulus_layout.html.erb:

  • Move line 22's stylesheet_pack_tag to the head section (after line 8)
  • This ensures FOUC is fixed for all pages using this layout

💡 Code Quality & Best Practices

Good:

  • ✅ Follows web standards for stylesheet loading
  • ✅ Maintains proper separation: CSS in head, JS deferred at bottom
  • ✅ Uses Rails helper methods correctly
  • ✅ Preserves Turbolinks tracking attributes

No Issues Found:

  • No security concerns
  • No performance regressions (actually improves perceived performance)
  • No breaking changes to functionality

🧪 Test Coverage

Observation:

The PR includes a manual test plan in the description, but there are no automated tests to verify FOUC is fixed.

Recommendation:

While FOUC is difficult to test automatically, consider:

  1. System/Integration Test Enhancement: The existing spec/system/pages_spec.rb could be extended to verify stylesheet loading order:

    it "loads stylesheets in head section" do
      visit root_path
      expect(page).to have_css('head link[rel="stylesheet"]', visible: false)
    end
  2. Layout Test: Add a view spec to verify tag order:

    # spec/views/layouts/application.html.erb_spec.rb
    it "loads stylesheets before body content" do
      render template: "layouts/application"
      # Verify stylesheet_pack_tag appears in head
    end

However, manual visual verification is still essential for FOUC issues.


🔒 Security Considerations

No security concerns. The change only affects load order, not content or behavior.


📊 Performance Considerations

Positive Impact:

  • Faster perceived load time - Content renders with styles immediately
  • Better user experience - No visual "flash" of unstyled content
  • No negative performance impact - Stylesheets should always be in head

Note on Render-Blocking:

While CSS in the head is render-blocking by design, this is intentional and correct behavior. The browser needs CSS parsed before rendering to avoid FOUC. The small delay is worth the improved visual stability.


📝 Recommendations Summary

Must Fix (Blocking):

  1. Apply the same fix to stimulus_layout.html.erb - Move the stylesheet tag from line 22 to the head section

Should Consider (Nice to Have):

  1. Add basic automated test to verify stylesheet loading order
  2. Update test plan in PR description to include testing routes that use stimulus_layout.html.erb

Optional:

  1. Consider documenting this pattern in project documentation to prevent regression

✅ Approval Status

Status:Approve with Required Changes

The core fix is correct and necessary, but the inconsistent application across layout files needs to be addressed before merging.

Once stimulus_layout.html.erb is updated with the same fix, this PR will be ready to merge.


Great work identifying and fixing this FOUC issue! The solution is spot-on, just needs to be applied consistently across all layouts.

@justin808
Copy link
Member Author

/deploy-review-app

Copy link

github-actions bot commented Oct 15, 2025

🎉 ✨ Deploy Complete! 🚀

🌐 ➡️ Open Review App

Deployment successful for PR #684, commit 9e89bf4

🎮 Control Plane Console
📋 View Completed Action Build and Deploy Logs

Copy link

github-actions bot commented Oct 15, 2025

🎉 ✨ Deploy Complete! 🚀

🌐 ➡️ Open Review App

Deployment successful for PR #684, commit 9e89bf4

🎮 Control Plane Console
📋 View Completed Action Build and Deploy Logs

Copy link

claude bot commented Oct 15, 2025

PR Review: Fix FOUC by moving stylesheet loading to head

Summary

This PR addresses a Flash of Unstyled Content (FOUC) issue by moving the stylesheet_pack_tag from the bottom of <body> to the <head> section in application.html.erb. The change is well-motivated and follows web best practices.


✅ Code Quality & Best Practices

Excellent:

  • ✅ The change follows the fundamental web development best practice of loading CSS in <head> to ensure styles are available before content renders
  • ✅ JavaScript remains deferred at the bottom for optimal performance (non-blocking)
  • ✅ The fix is minimal, surgical, and easy to understand
  • ✅ Clear and descriptive PR description with problem statement, solution, and test plan
  • ✅ Consistent with modern web performance optimization patterns

Recommendation:
Consider applying the same fix to app/views/layouts/stimulus_layout.html.erb, which still has the same FOUC issue on line 22:

<%= stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': true) %>

🐛 Potential Issues

Critical - Duplicate Layout:

  • stimulus_layout.html.erb has the same problem but was not updated in this PR
  • This will cause inconsistent behavior across different parts of the application
  • Action Required: Update stimulus_layout.html.erb with the same fix

Minor - Parameter Syntax:

  • The stylesheet_pack_tag call uses positional arguments for options, which may cause issues
  • Current: stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': true)
  • This syntax is non-standard - typically the first argument should be the pack name
  • Consider: Verify this is the intended syntax for your Shakapacker version (9.1.0)
  • Standard syntax would be: stylesheet_pack_tag('application', media: 'all', 'data-turbolinks-track': true)

⚡ Performance Considerations

Positive Impact:

  • ✅ Eliminates FOUC, significantly improving perceived performance and user experience
  • ✅ Styles load and parse before DOM rendering begins
  • ✅ Reduces Cumulative Layout Shift (CLS) - a Core Web Vital
  • ✅ JavaScript remains deferred, maintaining non-blocking script loading

Potential Trade-off:

  • Moving CSS to <head> is render-blocking, but this is the correct trade-off
  • The alternative (CSS at bottom) causes worse UX issues (FOUC) than the minimal blocking from CSS parsing
  • Given Tailwind CSS usage, ensure production builds are minified and purged of unused styles

Recommendations:

  1. Monitor initial page load times before/after deployment
  2. Consider adding preload hints if CSS bundles are large
  3. Verify Tailwind CSS purging is configured correctly to minimize CSS bundle size

🔒 Security Concerns

No Issues Found:

  • ✅ Change only affects asset loading order
  • data-turbolinks-track and CSRF meta tags remain properly configured
  • ✅ No new dependencies or external resources introduced

🧪 Test Coverage

Missing:

  • ❌ No automated tests for layout rendering behavior
  • ❌ No visual regression tests to catch FOUC issues
  • ❌ Test plan relies on manual verification only

Recommendations:

  1. Integration Test: Add a system/integration test that verifies stylesheets are loaded in <head>:

    # spec/views/layouts/application.html.erb_spec.rb
    require 'rails_helper'
    
    RSpec.describe "layouts/application" do
      it "loads stylesheets in head section" do
        render
        expect(rendered).to match(/<head>.*stylesheet_pack_tag.*<\/head>/m)
        expect(rendered).not_to match(/<body>.*stylesheet_pack_tag.*<\/body>/m)
      end
    end
  2. Visual Regression: Consider using a tool like Percy or Chromatic for visual regression testing

  3. Manual Test Checklist: The PR includes a good manual test plan - ensure all items are checked before merging:

    • Visit staging.reactrails.com and verify no FOUC
    • Navigate to /no-router and verify no FOUC
    • Test with slow network throttling to ensure styles load early

📋 Action Items

Before Merging:

  1. Critical: Apply the same fix to app/views/layouts/stimulus_layout.html.erb
  2. Verify the stylesheet_pack_tag syntax is correct for your Shakapacker version
  3. Complete manual testing checklist
  4. Consider adding automated test coverage

Post-Merge:

  1. Monitor production metrics for any performance regressions
  2. Verify FOUC is resolved on production
  3. Consider backporting to other branches if applicable

🎯 Overall Assessment

Verdict: Approve with Required Changes

This is a well-intentioned fix that addresses a real UX issue. The approach is correct and follows best practices. However, the PR is incomplete because it only fixes one of two layout files.

Score: 8/10

  • Code Quality: 9/10
  • Completeness: 6/10 (missing stimulus_layout.html.erb)
  • Testing: 5/10 (manual only, no automation)
  • Documentation: 10/10 (excellent PR description)

Great work identifying and fixing this issue! Once you address the duplicate layout file and verify the syntax, this will be ready to merge.

@justin808
Copy link
Member Author

/deploy-review-app

The stylesheet_pack_tag was loading at the bottom of the body,
causing a flash of unstyled content (FOUC) as React components
rendered before CSS loaded. Moving it to the head ensures styles
are loaded before content renders.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
Copy link

github-actions bot commented Oct 15, 2025

🎉 ✨ Deploy Complete! 🚀

🌐 ➡️ Open Review App

Deployment successful for PR #684, commit fcaf7f1

🎮 Control Plane Console
📋 View Completed Action Build and Deploy Logs

Copy link

github-actions bot commented Oct 15, 2025

🎉 ✨ Deploy Complete! 🚀

🌐 ➡️ Open Review App

Deployment successful for PR #684, commit fcaf7f1

🎮 Control Plane Console
📋 View Completed Action Build and Deploy Logs

Copy link

claude bot commented Oct 15, 2025

Pull Request Review - PR #684

Overview

This PR moves stylesheet_pack_tag from the bottom of <body> to the <head> section to fix Flash of Unstyled Content (FOUC). This is a well-documented issue with a straightforward solution.


✅ Positive Findings

1. Code Quality & Best Practices

  • Excellent problem identification: Moving stylesheets to <head> is the correct and standard solution for FOUC
  • Consistent changes: Both layout files (application.html.erb and stimulus_layout.html.erb) are updated consistently
  • Minimal scope: The change is focused and doesn't introduce unnecessary modifications
  • Good documentation: PR description clearly explains the problem, solution, and test plan

2. Performance Considerations

  • Optimal placement: Stylesheets in <head> prevent FOUC while JavaScript remains deferred at bottom with defer: true attribute
  • Render-blocking is intentional: Stylesheets should be render-blocking to prevent FOUC - this is the correct behavior
  • No performance regression: The change improves perceived performance by eliminating visual flashing

3. Security

  • No security concerns: The change is purely positional and doesn't introduce new security vectors
  • Existing security attributes preserved: data-turbolinks-track: true and csrf_meta_tags remain in place

🔍 Observations & Suggestions

1. Testing Considerations
The test plan mentions manual testing on staging, but I notice this repository has system specs in spec/system/. Consider:

  • Adding a system spec to verify stylesheets are present in <head> before content renders
  • Example location: spec/system/pages_spec.rb could include a check for stylesheet presence in the head

2. Minor: Turbolinks Attribute Syntax
Current syntax:

<%= stylesheet_pack_tag(media: 'all', 'data-turbolinks-track': true) %>

This works, but you might consider the more explicit Turbolinks helper pattern if available:

<%= stylesheet_pack_tag(media: 'all', data: { turbolinks_track: 'reload' }) %>

(Only if your Rails/Turbolinks version supports this pattern - the current syntax is perfectly valid)

3. Consistency Check
Both modified layouts follow the same pattern:

  • append_stylesheet_pack_tag('stimulus-bundle') - line 8
  • stylesheet_pack_tag (main stylesheet) - line 9
  • ✅ JavaScript pack tags follow
  • csrf_meta_tags at end of head

This ordering looks correct and consistent.


📊 Test Coverage Assessment

  • Existing tests: Repository has system specs that test page rendering
  • Recommendation: Consider adding a spec to assert stylesheet loading order, especially since FOUC was a production issue
  • Example assertion: Check that stylesheet_pack_tag appears in response body before <body> tag

🎯 Overall Assessment

Verdict: ✅ LGTM (Looks Good To Me)

This is a solid, well-documented fix for a common web performance issue. The changes are:

  • ✅ Correct implementation of FOUC prevention
  • ✅ Consistent across affected files
  • ✅ No security or performance regressions
  • ✅ Clear PR description with test plan

Recommendation: Approve and merge after:

  1. Manual verification on staging (as outlined in test plan)
  2. (Optional) Consider adding a regression test

Great work on identifying and fixing this issue!


Review generated by Claude Code - focusing on code quality, security, performance, and best practices

@justin808
Copy link
Member Author

Closing this PR. The original layout structure was correct - moving stylesheet_pack_tag to the head causes errors because react_component calls internally use append_stylesheet_pack_tag, which must be called before the main stylesheet_pack_tag is rendered.

FOUC needs to be addressed through alternative approaches like server-side rendering, inline critical CSS, or webpack/rspack configuration optimizations.

@justin808 justin808 closed this Oct 15, 2025
Copy link

github-actions bot commented Oct 15, 2025

✅ Review app for PR #684 was successfully deleted

View Completed Delete Logs

Control Plane Organization

@justin808
Copy link
Member Author

Reopening with proper fix: disabled auto_load_bundle to prevent react_component from calling append_stylesheet_pack_tag during render, allowing us to safely move stylesheet_pack_tag to the head.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant