<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Managing Communities — Banner Title Adam</title>
        <link>https://forum.charron.dev/</link>
        <pubDate>Tue, 30 Jun 2026 03:58:38 +0000</pubDate>
        <language>en</language>
            <description>Managing Communities — Banner Title Adam</description>
    <atom:link href="https://forum.charron.dev/categories/managing-communities/feed.rss" rel="self" type="application/rss+xml"/>
    <item>
        <title>We need to improve our documentation for features flags</title>
        <link>https://forum.charron.dev/discussion/1092/we-need-to-improve-our-documentation-for-features-flags</link>
        <pubDate>Fri, 14 Aug 2020 20:56:15 +0000</pubDate>
        <category>Managing Communities</category>
        <dc:creator>LaurenK</dc:creator>
        <guid isPermaLink="false">1092@/discussions</guid>
        <description><![CDATA[<p>I'm starting this discussion with the goal to come up with a protocol to document <strong>feature flags</strong>.</p><p>A good example is I just spent the last 30 minutes trying to figure it out how to have the <a href="https://success.vanillaforums.com/kb/articles/315-release-2020-014#user-cards" rel="nofollow noopener ugc">user cards</a> on my local. I went to <a href="https://success.vanillaforums.com/" rel="nofollow noopener ugc">success</a> looking for a release note, found some client facing documentation, nothing technical.</p><p>Came here and found nothing...</p><p>Finally I looked directly <a href="https://github.com/search?q=org%3Avanilla+usercards&amp;type=Code" rel="nofollow noopener ugc">for the code</a> to find out some references that it might be behind a feature flag. (No readme though). </p><p>In my honest opinion, releasing a feature with no documentation is the same as the feature not existing at all.</p><p>Whenever I do some product related development I try documenting the feature I'm releasing in a readme or so. I'm not saying we should do exactly this but since we have been releasing a lot of feature flags recently I think it's becoming more pressing to have some sort of documentation protocol in place.</p>]]>
        </description>
    </item>
    <item>
        <title>We have a nice assertion library in core now.</title>
        <link>https://forum.charron.dev/discussion/1085/we-have-a-nice-assertion-library-in-core-now</link>
        <pubDate>Fri, 24 Jul 2020 03:24:13 +0000</pubDate>
        <category>Managing Communities</category>
        <dc:creator>[Deleted User]</dc:creator>
        <guid isPermaLink="false">1085@/discussions</guid>
        <description><![CDATA[<p>Hi all. I want to let everyone know about a composer package we recently brought into core.</p><div data-embedjson="{&quot;body&quot;:&quot;Assertions to validate method input\/output with nice error messages.&quot;,&quot;url&quot;:&quot;https:\/\/packagist.org\/packages\/webmozart\/assert&quot;,&quot;embedType&quot;:&quot;link&quot;,&quot;name&quot;:&quot;webmozart\/assert - Packagist&quot;}">
    <a href="https://packagist.org/packages/webmozart/assert" rel="nofollow noopener ugc">
        https://packagist.org/packages/webmozart/assert
    </a>
</div><p>We brought this in because we wanted to be able to do type-hint like safety checks in old code. You usually want to call assertions as the first thing in a method. That way below them you know your data is correct and can proceed with cleaner code.</p><p>A little gotcha. There is a method called <code spellcheck="false" tabindex="0">Assert::integer()</code> which is not usually what you want to call. Instead call <code spellcheck="false" tabindex="0">Assert::integerish()</code> as an alternative that will work with string representations of integers. This is safer for old code and also data that comes from the database.</p>]]>
        </description>
    </item>
    <item>
        <title>Updated docs on localization and translation strings</title>
        <link>https://forum.charron.dev/discussion/1077/updated-docs-on-localization-and-translation-strings</link>
        <pubDate>Sun, 12 Jul 2020 21:52:32 +0000</pubDate>
        <category>Managing Communities</category>
        <dc:creator>[Deleted User]</dc:creator>
        <guid isPermaLink="false">1077@/discussions</guid>
        <description><![CDATA[<p>Hi all. I just spent the better part of the weekend adding some tests and fixes to our translation strings. This ended up being a LOT of work. This got me to thinking about a couple of things:</p><ol><li>Most people don't know how our app ends up getting translated. I kind of just quietly order translations and put in the odd fix here and there and our translations just sort of magically happen.</li><li>Because of this black box process there are a few inefficiencies that cause me and other to end up having to do a lot of extra needless work.</li></ol><p>To this end I decided to beef up our localization developer docs and I'm hoping you'll all give a read. I'm hoping that this article and articles like this can also help us onboard new developers better so if you don't understand something please leave a comment here or add a clarification directly to the article.</p><p>First, read <a href="https://staff.vanillaforums.com/discussion/1076/i-made-some-translation-changes-here-is-what-you-need-to-watch-out-for#latest" rel="nofollow noopener ugc">the post I left to support</a>. Then read the <a href="https://staff.vanillaforums.com/kb/articles/225-guide-for-adding-and-editing-locale-translation-strings" rel="nofollow noopener ugc">article on localization</a>.</p><p>All devs should read and understand the article. My hope is for us to always strive towards a more streamlined development process, and handoffs between teams is often one of the biggest chokepoints. Understanding what other people have to do and what the repercussions of your work will really help with this.</p>]]>
        </description>
    </item>
    <item>
        <title>Static Analysis Has Come To Vanilla</title>
        <link>https://forum.charron.dev/discussion/1065/static-analysis-has-come-to-vanilla</link>
        <pubDate>Sat, 27 Jun 2020 01:17:48 +0000</pubDate>
        <category>Managing Communities</category>
        <dc:creator>[Deleted User]</dc:creator>
        <guid isPermaLink="false">1065@/discussions</guid>
        <description><![CDATA[<p>Hi devs! I just wanted to inform you that the static analyzer known as <a href="https://psalm.dev/" rel="nofollow noopener ugc">Psalm</a> has come to Vanilla!</p><h2>What is static analysis?</h2><p>Static analysis is an automated tool that is run on code that analyzes it for potential errors. It follows code paths to see if there are any easily identifiable errors in our code. What kinds of errors you may ask? There are too many to list, but here are some good ones.</p><ul><li>Calling functions with the wrong number of parameters.</li><li>Using undeclared variables.</li><li>Improper subclassing.</li><li>Type mismatches</li></ul><p>From detecting typos, to bugs that may take down a site, static analysis can help find things that humans often miss.</p><h2>Why static analysis?</h2><p>Static analysis is just another tool in our toolbox of code quality. It detects probable bugs. It helps keep our code clean and consistent. And the best part: we get this all essentially for free. We don't have to write specific tests for static analysis to work. It just runs in our code and tells us about problems.</p><h2>What's the catch?</h2><p>There isn't really much of a catch. However, there are a few strings attached with static analysis.</p><ul><li>Static analysis can report some false positives. This means it will tell us there is something wrong when we know there isn't. In these cases there are ways to address this (hint: read the docs). That being said: you may find addressing these issues a little tedious.</li><li>We are not quite at the point where we have full code coverage with psalm. Turning on a tool like this on a mature code base always reports a tonne of errors. In our case this amounts to hundreds of errors. Not to worry though: I've dialed down the strictness of the tool to start in order to give us time to address some issues at least. I'll dial it up slowly over time as I am able to fix things. If you want to help with this then come talk to me.</li></ul><h2>What should I do to be ready?</h2><p>In order to not get your knuckles wrapped by Psalm it’s best to code cleanly. Luckily code sniffer already detects a lot of what psalm needs to do its thing. Other than that I suggest the following:</p><ul><li>Read Psalm's docs! They explain the tool better than I can and are not too long of a read.</li><li>Make sure you type hint as much as possible and make sure they are correct. Type hints allow for code analysis more than anything else. You can use <code spellcheck="false" tabindex="0">@param</code> hints or real type hints. Psalm will use both.</li><li>For new functions avoid multiple allowed types for parameters. This is manifested a lot in our codebase where we take an array parameter or result, but default it to <code spellcheck="false" tabindex="0">false</code>. This is a bad habit that we should avoid going forward.</li><li>Pay attention to PHPStorm's inspections. PHPStorm already does a measure of static analysis. If you fix its errors then you are one step closer to a clean bill of health from Psalm.</li></ul><p>Anyway, you will start seeing Psalm as part of our build process. You can also run it locally from your vanilla directory with:</p><pre spellcheck="false" tabindex="0">./vendor/bin/psalm
</pre><p>Happy coding!</p>]]>
        </description>
    </item>
    <item>
        <title>Upcoming changes to vanilla repositories</title>
        <link>https://forum.charron.dev/discussion/1064/upcoming-changes-to-vanilla-repositories</link>
        <pubDate>Fri, 26 Jun 2020 13:15:07 +0000</pubDate>
        <category>Managing Communities</category>
        <dc:creator>Shauna</dc:creator>
        <guid isPermaLink="false">1064@/discussions</guid>
        <description><![CDATA[<p>We've got some upcoming changes in vanilla's repository structure. Mainly moving from multiple product repos used by vanilla employees to just 2.</p><p>There's been a lot of person to person discussion about this over the last year, but I'm finally getting the ball rolling on it.</p><h2>Whats's changing?</h2><p>The <code spellcheck="false" tabindex="0">internal</code>, <code spellcheck="false" tabindex="0">multisite</code>, <code spellcheck="false" tabindex="0">knowledge</code>, and <code spellcheck="false" tabindex="0">analytics</code> repos will be retired. In the future the <code spellcheck="false" tabindex="0">addons</code> repo may be considered as well.</p><p>All cloud plugins that were previously in these repositories will now live in a new private repository <code spellcheck="false" tabindex="0">vanilla-cloud</code> along with the codebase of the existing <code spellcheck="false" tabindex="0">vanilla/vanilla</code> repo.</p><p>The repository is still being configured but you can find it here. <a href="https://github.com/vanilla/vanilla-cloud" rel="nofollow noopener ugc">vanilla/vanilla-cloud</a></p><p><strong>New Structure</strong></p><ul><li>A direct fork of <code spellcheck="false" tabindex="0">vanilla/vanilla</code>.</li><li>All cloud addons now reside in either the <code spellcheck="false" tabindex="0">/cloud/plugins</code>, <code spellcheck="false" tabindex="0">/cloud/themes</code>, or <code spellcheck="false" tabindex="0">/cloud/applications</code> directories.</li><li><code spellcheck="false" tabindex="0">vanilla-patches</code> will go away. Instead PRs can be made directly to <code spellcheck="false" tabindex="0">vanilla-cloud</code>.</li></ul><h2>Why now?</h2><p>The long and short of this is that as our product gets more integrated (larger more fully featured addons instead of small 1-2 week projects), maintaining them has become far more complicated. Often times a single feature can require multiple PRs across multiple repos with a complex chain of dependencies. This can make review, CI, and locally checking out changes a lot more complicated.</p><p>More detailed reasons can be found<a href="https://staff.vanillaforums.com/kb/articles/254-repository-differences-vanilla-vanilla-cloud#multi-repo-pitfalls" rel="nofollow noopener ugc"> in this article.</a></p><h2>What about my PRs?</h2><p>It is possible to synchronize code back and forth between the old repos and the new repo, although a bit tedious.</p><p>Guides are available for <a href="https://staff.vanillaforums.com/kb/articles/254-repository-differences-vanilla-vanilla-cloud#how-do-i-switch-my-existing-installation" rel="nofollow noopener ugc">switching your localhost to use the new repository</a>.</p><p>There are also <a href="https://staff.vanillaforums.com/kb/articles/254-repository-differences-vanilla-vanilla-cloud#what-do-i-do-with-existing-prs" rel="nofollow noopener ugc">guides for moving existing PRs</a>.</p><h2>Timeline of Changes</h2><p>The timeline of changes is planned as follows.</p><p><strong>Fri Jun 26</strong> - Release 2020.013 will be branched from the old repositories. This will be the last cloud release to use these repositories.</p><p><strong>Mon Jun 29 - </strong>Team supreme will begin using the new vanilla-cloud repository.</p><p>During this time other teams may continue to make PRs against existing repositories.</p><p><strong>Friday July 5 - </strong>I will sync any changes from <code spellcheck="false" tabindex="0">master</code> branch in the old repositories to the new one.</p><p><strong>Mon July 6 - </strong>Other teams should being using the new vanilla-cloud repository.</p><p><strong>Fri July 11 - </strong>Release 2020.014 is branched from the new repository. I will provide a script to adjust infrastructure for the new structure and assistance will be given during the staging deploy.</p>]]>
        </description>
    </item>
    <item>
        <title>Let&#39;s talk about our PHP support schedule</title>
        <link>https://forum.charron.dev/discussion/1058/lets-talk-about-our-php-support-schedule</link>
        <pubDate>Thu, 18 Jun 2020 01:16:46 +0000</pubDate>
        <category>Managing Communities</category>
        <dc:creator>[Deleted User]</dc:creator>
        <guid isPermaLink="false">1058@/discussions</guid>
        <description><![CDATA[<p>With the <a href="https://github.com/vanilla/vanilla-docker/pull/80" rel="nofollow noopener ugc">merging</a> of PHP 7.4 into our docker container earlier today, it got <a data-username="Adam Charron" data-userid="48" rel="nofollow" href="https://forum.charron.dev/profile/Adam%20Charron">@Adam Charron</a> and I to talking about our product's own PHP support.</p><p>For those not in the know, we currently support PHP right up until that version is no longer supported itself. This is for some good reason. Most servers don't update major software every year. There needs to be a buffer of support. Our operations team is on a two year cycle, for example.</p><p>This also means that we are currently on PHP 7.2. That's two versions behind current PHP. It will be three years passed release by the time we sunset support. That's a lot of time. With that wait we miss out on incremental improvements to our productivity and software quality that are essentially "free" to us.</p><p>What I think we should do this year is jump to PHP 7.4 support rather than moving to PHP 7.3. That will be the same amount of effort for ops since they are upgrading to PHP 7.4 anyway.</p><p>After that, we wouldn't be upgrading to PHP 8.0 in its release year and are likely again to jump to PHP 8.1 the following year instead. So two versions every two years instead of one version every year. Not super different.</p>]]>
        </description>
    </item>
    <item>
        <title>Dependabot is now running on vanilla/vanilla</title>
        <link>https://forum.charron.dev/discussion/1053/dependabot-is-now-running-on-vanilla-vanilla</link>
        <pubDate>Sun, 07 Jun 2020 12:32:31 +0000</pubDate>
        <category>Managing Communities</category>
        <dc:creator>[Deleted User]</dc:creator>
        <guid isPermaLink="false">1053@/discussions</guid>
        <description><![CDATA[<p>I finally figured out how to properly configure dependabot and am trying it out on vanilla/vanilla for our PHP dependencies. Expect to see some pull requests like <a href="https://github.com/vanilla/vanilla/pull/10722" rel="nofollow noopener ugc">this one</a>.</p><p>If you want to enable it for our javascript dependencies, you can make a PR to the config file <a data-username="Adam Charron" data-userid="48" rel="nofollow" href="https://forum.charron.dev/profile/Adam%20Charron">@Adam Charron</a>. I recommend doing a manual update first though.</p>]]>
        </description>
    </item>
    <item>
        <title>RFC: Adding A Global Autoloader For Testing</title>
        <link>https://forum.charron.dev/discussion/1037/rfc-adding-a-global-autoloader-for-testing</link>
        <pubDate>Wed, 13 May 2020 15:46:33 +0000</pubDate>
        <category>Managing Communities</category>
        <dc:creator>[Deleted User]</dc:creator>
        <guid isPermaLink="false">1037@/discussions</guid>
        <description><![CDATA[<p>I have a PR out for adding a global autoloader for the purposes of testing.</p><div data-embedjson="{&quot;body&quot;:&quot;This PR makes all applications and plugin classes available during testing. This should aid addon tests that can be run without enabling the addon and reduce the need for extraneous require stateme...&quot;,&quot;photoUrl&quot;:&quot;https:\/\/repository-images.githubusercontent.com\/232390\/f547c780-78d5-11e9-9e85-d538e5dcd2b6&quot;,&quot;url&quot;:&quot;https:\/\/github.com\/vanilla\/vanilla\/pull\/10576&quot;,&quot;embedType&quot;:&quot;link&quot;,&quot;name&quot;:&quot;Add a global autoloader for testing by tburry · Pull Request #10576 · vanilla\/vanilla&quot;}">
    <a href="https://github.com/vanilla/vanilla/pull/10576" rel="nofollow noopener ugc">
        https://github.com/vanilla/vanilla/pull/10576
    </a>
</div><p>The idea is to make all classes available in unit tests, regardless of whether or not addons are enabled.</p><p>My reasoning for this is that I think it will make writing addon unit tests easier. You can write your tests and know that all of your classes are there. Ideally, we write more unit tests than other tests and usually those don't need an extra installation of Vanilla. I see some tests manually requiring files; this change would make that unnecessary.</p><p>On the downside, this could lead to scenarios where tests pass, but production fails because of specific autoloading issues. This is something we'll have to decide on whether or not the benefits outweigh the side effects.</p><p>Another thing I encountered when making this change is problems with duplicate classes. If you look at my PR, I specifically exclude some plugins that caused this problem. These issues stemmed from two places:</p><ol><li>Plugins that have their own composer.json that include a duplicate vendor directory. In this case, we have changes in the works to bring these composer dependencies into the main vendor directory. If/when we make that change then this problem will go away.</li><li>Some plugins just define duplicate classes. To me, this is a bad practice that we should work to avoid. Having this global autoloader will help us avoid this issue in the future as tests will now fail if we define duplicate classes. As we move towards everything being in a namespace then this type of issue should go away.</li></ol><p>Anyway, let me know if you have any specific questions or objections about this proposal. You can react to this post, comment below, or even review the PR.</p>]]>
        </description>
    </item>
    <item>
        <title>Welcome To Core Vanilla</title>
        <link>https://forum.charron.dev/discussion/1035/welcome-to-core-vanilla</link>
        <pubDate>Wed, 13 May 2020 14:55:50 +0000</pubDate>
        <category>Managing Communities</category>
        <dc:creator>[Deleted User]</dc:creator>
        <guid isPermaLink="false">1035@/discussions</guid>
        <description><![CDATA[<p>I decided to create this category as a place for people to find out about new small features we've added to core Vanilla that can be taken advantage of for any new development, whether it be services, core addons, or even other core features.</p><p>I find that often we add a lot of things that people aren't aware of and I would like that to change. I want our platform to be one that is continuously improving which means there will be "old" ways to do certain things, and "new" ways to do those things.</p><p>Here are some examples of things I would like to see in this category:</p><ul><li>Announcements of new composer packages that have been brought into core. Generally, we like to use mature libraries that have already been written, rather than write our own.</li><li>New ways to help write unit tests more easily. Usually, when I write a new unit test I will often add a new trait or utility method somewhere that will help others.</li><li>Requests for comment on new ideas for core. If you have an idea post it here. Let me ask though that you give ideas that are specific and actionable. Changes that involve us changing code across every repo are not likely to get done, while making small incremental improvements are better.</li><li>Deprecation announcement and discussion. We deprecate code from time to time. When you do deprecate something, try and announce it here. More importantly, tell the developers the new way to do things. We should never deprecate without another way of doing things.</li></ul><p>Try and avoid lengthy documentation here as that is better suited for the knowledge base. However, if you do write a new piece of documentation, consider writing a discussion and linking out to it.</p>]]>
        </description>
    </item>
   </channel>
</rss>
