<p dir="auto">Since the first PR (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="506351426" data-permission-text="Title is private" data-url="https://github.com/openstreetmap/openstreetmap-website/issues/2390" data-hovercard-type="pull_request" data-hovercard-url="/openstreetmap/openstreetmap-website/pull/2390/hovercard" href="https://github.com/openstreetmap/openstreetmap-website/pull/2390">#2390</a>) was too large, this is "take two".</p>
<p dir="auto">This is the first of four PRs.  Here we focus on just the microcosm resource.</p>
<p dir="auto">To see the partitioning of the entire feature, see <a href="https://wiki.openstreetmap.org/wiki/Microcosms" rel="nofollow">https://wiki.openstreetmap.org/wiki/Microcosms</a>.  Feedback welcome on both this PR and the wiki page.</p>
<p dir="auto">Mostly standard Rails stuff, but here are some highlights:</p>
<ul dir="auto">
<li>micrososms have a friendly url (aka slug)  /microcosm/greater_dc_area based on the name of the microcosm</li>
<li>microcosms have 1 organizer at this time</li>
<li>access control for updating your microcosm is controlled by cancancan</li>
<li>area of influence is established by zooming in on a map</li>
<li>some code is already factored out because later stages will also use the same functions</li>
<li>spammy microcosms may be reported</li>
</ul>
<p dir="auto">This PR does not yet have the UI for creating links to external resources.</p>

<hr>

<h4>You can view, comment on, or merge this pull request online at:</h4>
<p>  <a href='https://github.com/openstreetmap/openstreetmap-website/pull/3683'>https://github.com/openstreetmap/openstreetmap-website/pull/3683</a></p>

<h4>Commit Summary</h4>
<ul>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/f3c913937927a9336aa633e38ccd21e83257e78e" class="commit-link">f3c9139</a>  Add microcosm model and controller (show, show_by_key) and tests.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/32927d9e518967b1a326c91d7a7bce67bdf68189" class="commit-link">32927d9</a>  Create the edit handler, but it doesn't do anything yet.  Guests may not edit.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/a017d735940ec1664203c6da1274ae7bdfe05591" class="commit-link">a017d73</a>  Guest can also show_by_key.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/598dd1cfb499d9ab7dcccc073ac68cf40668e723" class="commit-link">598dd1c</a>  Remove trailing space.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/45b88e0e0b4b047c90e3814c2fa6b888f8ce00e0" class="commit-link">45b88e0</a>  Add a list of all miccrocosms.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/21233efd106e32894fc3469cafc746fbc55dea99" class="commit-link">21233ef</a>  bundle install friendly_id for slugs.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/ca3f1aa8679054bd3a451ba56970afd9e5d4b44d" class="commit-link">ca3f1aa</a>  Replace show_by_key with using friendly_id slugs.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/599152d42b0e8564fa3bc1b9f520611eea4d97bc" class="commit-link">599152d</a>  Convert Facebook and Twitter links into has_many links.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/04e39a87304de0f7b0ca555b2533cc661f6f2664" class="commit-link">04e39a8</a>  Add location to microcosms.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/2814d642efc00bf7b4f9655df215576f6ee6a9ca" class="commit-link">2814d64</a>  Admins can create and edit microcosms.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/88a4b51c735770153773102cf803202f9fe76915" class="commit-link">88a4b51</a>  Move the "new" microcosm link to the header.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/493c88a2ad74f5513dcfa2b3594e8926fb3fdc1f" class="commit-link">493c88a</a>  Microcosm row layout</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/0909c35030f8a2ddba965e2882bda0664938c7d2" class="commit-link">0909c35</a>  Remove empty files.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/e54abd8d864375a4570c198dc87e0990397893c3" class="commit-link">e54abd8</a>  Removed disabled code.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/9f4eb4bd82aa0b4d56a33210a9bba6948b0791c5" class="commit-link">9f4eb4b</a>  When the creation save fails, send the user back to the form.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/698e2a6c7a868d9bca6c845e3b7d3b85fe426d81" class="commit-link">698e2a6</a>  StrongMigrations is a module.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/5af9ff3a99e74fdaa4708617a246a12958f2a57b" class="commit-link">5af9ff3</a>  erblint</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/b8263b77cfc4b579f447cc3e95f79d5013b1478d" class="commit-link">b8263b7</a>  Forgot to commit this file.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/e2f136d2c7559365dd4486180247ace56e727d93" class="commit-link">e2f136d</a>  Set not null on microcosm.{description,slug} and link attributes.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/e2d0ad2d23edb87615536719d8b6d2d7d83a4015" class="commit-link">e2d0ad2</a>  Move styles to stylesheets.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/52ad17bb5f3226d31676f3ee2c500e0a4c125ac4" class="commit-link">52ad17b</a>  Remove disabled code.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/107d26d2513ab1df653b79cdb4befc2c9295f09b" class="commit-link">107d26d</a>  Replace link to geofabrik with TODO item.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/bc528aed58966c8cb64cc8f01366ccb278ba19e5" class="commit-link">bc528ae</a>  rubocop</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/0c07660100591f257c150c649a85dd5a53aec9d8" class="commit-link">0c07660</a>  Use save not save!.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/ef4bb44f61b5f42b6ef720da83aca99871306835" class="commit-link">ef4bb44</a>  find_or_initialize! should be find_or_initialize.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/4534f9dfddb19b5164153228bf1be4b0b820ebb3" class="commit-link">4534f9d</a>  Add missing NOT NULL constraints FK constraints.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/c38e767b3e62d2a592adf98a925220b9fa074e98" class="commit-link">c38e767</a>  Translate all the things.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/de01c8f529a0a470f653fcdf63e632fe0f47ef3a" class="commit-link">de01c8f</a>  Correcting a mistake.  This table should have been created with min/max lat/lon as integer.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/dd17ef85c7bdef46a06dbcf778453b8662067cbb" class="commit-link">dd17ef8</a>  Change lat and lon from decimal to integer.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/8b5d44a199676b040be461776ab213500c0b8793" class="commit-link">8b5d44a</a>  Replace hardcoded image of map with a leaflet map.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/5c11fb934a1a1a8706d3908959d03486c342e2a5" class="commit-link">5c11fb9</a>  Replace .flex_row with bootsrap row which is also flex-based.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/7676f426d9c0d47e93b5a86d5b3d351076994032" class="commit-link">7676f42</a>  erblint fix</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/1fa33adbe32d31b91d37e4e614004a90c561c342" class="commit-link">1fa33ad</a>  Header should contain the name of the microcosm.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/29f70d6b0ca7af4c6e19889eb2d1e66c75ac993d" class="commit-link">29f70d6</a>  Rename lat to latitude, lon to longitude, convert all coords to floats.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/56850abf0e9e0fad5d9beb8939c9fabeccbe138a" class="commit-link">56850ab</a>  Replace hard coded changesets with real ones.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/c2c0769c76ebfdb6ec5f9bddd86102294dc03d58" class="commit-link">c2c0769</a>  Add some validation and model testing for microcosms.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/a2a9d9965143719b2fce40cff13d7e963eb2343b" class="commit-link">a2a9d99</a>  Rename microcosm_valid() to validate() in order to bring out the similarity of this method.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/1b8c87d8c0832b6d16e70004dd9d913510f23be3" class="commit-link">1b8c87d</a>  whitespace</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/e7b8d932ca2bc7f725b6e3f9f555dea741462400" class="commit-link">e7b8d93</a>  Add validation and model test for microcosm_link.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/f2b14f9ac731a6498c397347516e0549f9bde29a" class="commit-link">f2b14f9</a>  Add validation for microcosm locations.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/105b3f090362a4dffb25025265eeff5fecf52b42" class="commit-link">105b3f0</a>  Microcosm descriptions are not allowed to be nil/empty.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/daeac84fb2ebc1ff9752e884bc55231ea04a9bc7" class="commit-link">daeac84</a>  Add missing entry for microcosms in compact-secondary-nav</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/5ad12abf910cf3759d4ac9fb0172374a78634197" class="commit-link">5ad12ab</a>  allow anyone to create a microcosm.  For now?</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/787fb0ebcaaeceff7a170d43b302e71d2ce418bb" class="commit-link">787fb0e</a>  rubocop got pissy about indentation</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/85184e02b85dfc02cb55a9c89914c218e56cda8e" class="commit-link">85184e0</a>  Move microcosm :new, :create to non-admin.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/4ffb3fb81695bc176b5b688925994a049ba2d0ec" class="commit-link">4ffb3fb</a>  Add instruction, all fields are required.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/32f4ae685523a5a5305167bf4d2b0d7d1b70744a" class="commit-link">32f4ae6</a>  add hint for location</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/faa834368d7a50ab4bf91b6d6b8993d8c53df334" class="commit-link">faa8343</a>  Order microcosms by longitude.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/549e2612f524411b2d1bd6fa45b324709297bbcb" class="commit-link">549e261</a>  Remove inline javascript to comply with CSP.  Move that logic to microcosms.js.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/78b1330eb62765c639bbff587a1b14e4ea4675fd" class="commit-link">78b1330</a>  Add a bunch of tests for microcosm_controller.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/9ae9df52968113888724f77f3f2f7f1a53e6e132" class="commit-link">9ae9df5</a>  test microcosm update</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/cb26872698fe76562e3c8f5d1eb27ef6fd0b1012" class="commit-link">cb26872</a>  Add more tests.  I prefer @title so templates don't need to call functions like t().</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/0370ccb663d260ba12c248ecd49c9439e703ffba" class="commit-link">0370ccb</a>  This test can now run as plain user not administrator.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/466e4feaa4d0673c3f5ff222c3df105bf4c4c190" class="commit-link">466e4fe</a>  Make the forms look like the rest of the website.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/73a0c79289bcc3ab0de29f46e698b9d4b90e41ae" class="commit-link">73a0c79</a>  Make microcosm index look better.  Move edit link</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/390d27447217f9e598cf2c33b06ef833d2d350d6" class="commit-link">390d274</a>  Factor out showMap code which will be used on multiple pages.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/0fc417ecd67fd4dbd76c926f5bb9114e7d9dce38" class="commit-link">0fc417e</a>  Modify UI for mobile.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/bf627fcdc0f329369f4d5db120aee9cd72ea7e74" class="commit-link">bf627fc</a>  Factor out formMapInput.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/9b0cfc666c881d189ed41bc15a581978d5b23c88" class="commit-link">9b0cfc6</a>  Display if the changeset has review_requested.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/2267dd4d79fae31d425bb3cdc55cbbb347f95cd7" class="commit-link">2267dd4</a>  Sort by longitude and time of day</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/6f8c853ae854263e8bd2d4496f5290da1559ad64" class="commit-link">6f8c853</a>  Rubocop said replace content_tag with tag.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/132bbfe14f7f507025137d07761ef0aa91965652" class="commit-link">132bbfe</a>  Use tag (in place of content_tag) correctly.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/ea30d2d9880e4e04d07549cdbd2524d71a0575c2" class="commit-link">ea30d2d</a>  Don't pollute the global namespace.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/72d9b12779d5154de8b34247dab4a55447f602fa" class="commit-link">72d9b12</a>  Subject: [PATCH 208/280] Improve error messages for microcosm controller and</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/4ebffaeacb31874be9b5d27e489e645c1c1d04c4" class="commit-link">4ebffae</a>  Add tests for controller when failures happen.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/4b948015d3272f2286aaea0b61dbd4fa6398e0b8" class="commit-link">4b94801</a>  Adapt to rubocop.  In tests factor out some WET code into helper methods.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/0a136610bdb09f12acbd0efcdbae6e344c6df733" class="commit-link">0a13661</a>  Format these coords better.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/04fcca793eae543211e4d18ae4d38cac466f1740" class="commit-link">04fcca7</a>  Rubocop cleanups</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/70a8d45cd828701b073021fa2787a6e693f959b7" class="commit-link">70a8d45</a>  Subject: [PATCH 237/280] Normalize longitude input before using it.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/cef312d0e26e758313ae4b2b738df592a583254e" class="commit-link">cef312d</a>  Add an organizer to the microcosm.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/f1a76891dbf57c27fe067056bf363b9e1303c595" class="commit-link">f1a7689</a>  Allow users to report a microcosm.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/9872ec5544365fba63c75d0760ae5fcf5df8e340" class="commit-link">9872ec5</a>  Get tests working by not using :controller/:action in tests.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/e533141738f04469b4150db09f54ef74a390d39a" class="commit-link">e533141</a>  Should hav added organizer_id a while ago.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/0cfcbd6cb976e8c560f0a69373e417be7b4d97ea" class="commit-link">0cfcbd6</a>  Show the microcosms a user is an organizer of.</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/2d9c844497bf8071cd34df5c7cdc0eff45cf9707" class="commit-link">2d9c844</a>  Merge remote-tracking branch 'upstream/master' into microcosms-microcosms</li>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/commits/d0385382696e2e4ce78cb33fd0463b7a34b8b018" class="commit-link">d038538</a>  Non-admins can create and edit their own microcosms.</li>
</ul>

<h4 style="display: inline-block">File Changes </h4> <p style="display: inline-block">(<a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files">46 files</a>)</p>
<ul>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-d09ea66f8227784ff4393d88a19836f321c915ae10031d16c93d67e6283ab55f">Gemfile</a>
    (4)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-89cade48462044ee1b672dc5f4c3ec250fbd29effcd8932096a23c1283c6731f">Gemfile.lock</a>
    (7)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-debf59904131dc89a88ab44cbb1d6deaaa5a7d70c0507f674080df62f7c8e41f">app/abilities/ability.rb</a>
    (3)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-0e145ba000e96b1a45d230275e350e4e8514efb4db7dbcfa228fe1003896c9b4">app/assets/javascripts/application.js</a>
    (74)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-145a1423313be2fdf9457c855f57ab99b290e6062b402c0b893aa33b0cec9aae">app/assets/javascripts/microcosms.js</a>
    (18)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-9176a493f531b10e1f9af033686b3a53492b1437f0c05b0392a63d41cfdc4655">app/assets/stylesheets/microcosms.scss</a>
    (22)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-cc7acbfb990b45e6f8cb1fe65cbd081a7819b596b03e0ac2ef2e82a9537d3278">app/controllers/issues_controller.rb</a>
    (2)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-68bd0c4c8a20cda09ccb7dc64081ddd997ad741ebd69e6291cd2905361fc656f">app/controllers/microcosms_controller.rb</a>
    (93)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-40c889bfec2f4677ca340d48772b56107986ba517a9cdf5b5852ee1c192f913d">app/controllers/reports_controller.rb</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-96b07570f5f45323f09b0d3d1aa6b3250067e22fcafdc92a00190697adb50a44">app/helpers/issues_helper.rb</a>
    (4)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-2ca3a978e5b6e4fee47713d116f75573a7768194f4b0f111deadd08f7a23dc04">app/models/client_application.rb</a>
    (1)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-cd75dd8ea34b8e05a215a3f3f8eb0627a26357293ffe415244f30d7a7b7c60e3">app/models/issue.rb</a>
    (2)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-e616b3348f5c9ba3d3ddf1d5359440faed1e7611c95f69254c0ead8189fc9643">app/models/microcosm.rb</a>
    (50)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-65dd56065f6e95de452b1c7a6e6f5aeca941d73a32003950e8aa510081586c2f">app/models/microcosm_link.rb</a>
    (21)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-d276df626ef0e97e1f84661e93ed03fec2c8d90297f99c2dc2a85eb5a2337b6a">app/models/report.rb</a>
    (1)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-9802ca3c9c4cf89904fd44bc114e35ebdf2c5dd3d5b645491e2b253e1afef29b">app/models/user.rb</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-6d2ef58207c92d1533287af551a075122ba98240a861819047a2ae77b7674f0b">app/views/layouts/_header.html.erb</a>
    (4)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-3b7a6d2232f5a4bde40e72bc3190c18acb2bf0d020d5b76a8ada70c1110d9e95">app/views/microcosms/_empty_list.html.erb</a>
    (1)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-e02b78b1877977fe585668a7ed5638121b71db51bf3942e80eec3a2f1bc4bb7c">app/views/microcosms/_form.html.erb</a>
    (33)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-d2bf93292d021baaa777d2c818c2e69d434e6aa61d94658e0a344a3a72027fa6">app/views/microcosms/_index_list.html.erb</a>
    (25)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-f449476813692469e28a9746c9dabb4072bd1a96a403680ffa44bacad10c3dfb">app/views/microcosms/edit.html.erb</a>
    (3)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-c74b7b0320a6e122dfc75324ce9bde0126a471bafbb9d2fbc7abb2cea2a6956d">app/views/microcosms/index.html.erb</a>
    (16)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-39d443a4aad2fa5e3d2f36216c57bcaace57fecb29e9d37904722cdd700b5bd0">app/views/microcosms/new.html.erb</a>
    (5)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-90d47ca4cdd2f95a1a13abd8f0d1531b477d2aaf51e9eb889b0768c8f5112566">app/views/microcosms/of_user.html.erb</a>
    (7)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-0edfec145a0a1c988449babc2f07779655ac721454d154c3d867447df017983e">app/views/microcosms/show.html.erb</a>
    (69)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-78ff736409d758722403cce31873ba803b3fb526d37398ca21caa557b54dfd95">app/views/users/show.html.erb</a>
    (6)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-b02af7d018b5e62d122886a31af8d464102468343d0c1236d230942816fe47ed">config/initializers/friendly_id.rb</a>
    (107)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-44438ce218f5287c58d0017f965d888715635d94280669896f75841fbd7b4cd7">config/locales/en.yml</a>
    (64)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-959bc9abc46a55332bb64d5155a79323afa75a50ec1a2137ddd22d926f62c6c5">config/routes.rb</a>
    (4)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-5ccd0ab31e23acf47b866178ab6e02c93ced6f91112f3ec5d5d4e00b1dc8eeef">db/migrate/20210517030520_create_microcosms.rb</a>
    (14)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-66cacf808c18a9f392b9325d63282db570e2eef5a796f3c3f795f5067bf58f91">db/migrate/20220820220545_create_friendly_id_slugs.rb</a>
    (14)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-816eeea5ad87cf94938ba9ad990f53fac70b665a12c7924d2e0c9c766424e021">db/migrate/20220820220849_add_slug_to_microcosms.rb</a>
    (16)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-31845228c0346ee9cffa7e0d5488e444459dcc27e3e70fb28c3fa322920ea334">db/migrate/20220820221326_remove_key_from_microcosms.rb</a>
    (5)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-52c00dca6ae253a8a04fc42b4f930a4308cbeef986465bbe0814054a1f13d828">db/migrate/20220821143545_create_microcosm_links.rb</a>
    (11)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-ff83fb4c0fdb3594688327846440e4cabd6b3c7aa9e71c502e32a53b2a1c3557">db/migrate/20220821144427_remove_facebook_and_twitter_from_microcosms.rb</a>
    (6)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-31752241cfb49b1a921abffac33f71fd088f3caf0a927c2fd2ce4135bf1aa764">db/migrate/20220821154547_add_location_to_microcosms.rb</a>
    (17)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-1dd5a8f580b9615769ddc19a64a98f455d9d20eb149c443f41d9d3c797d39b12">db/structure.sql</a>
    (217)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-66914b664fcadd6ba28bd16a44eb853ca3fd4e1f9ea1e4be390f12aeea2a0697">test/abilities/abilities_test.rb</a>
    (21)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-d40982bfa876e8844dc0c5881b52e9a7e71ae0b80175da9b9d1b833e6e88b377">test/controllers/microcosms_controller_test.rb</a>
    (269)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-2482813e25f516f67fa8306a8e075db64046da9238f709a122cee35e2b65cd28">test/factories/microcosm_links.rb</a>
    (7)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-103e32fd7ce23de7b2b8bfbd071ab96f4553b843023249fb53f5c1f82850b25b">test/factories/microcosms.rb</a>
    (14)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-7fbf0e6c10deff5d707995df2d2d9d1eced8fd6d9d23a1fac4818aae7e28bd2f">test/models/issue_test.rb</a>
    (5)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-d49b4d76b3caa7ff5f9a617e3f8f0e5125df12ecc3764284ebadce96d41e9988">test/models/microcosm_link_test.rb</a>
    (21)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-4c2a91c89b6e172ea7e051206d944adb0246c899babb190049c95905acbdada0">test/models/microcosm_test.rb</a>
    (84)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-dbc9245ad0a03c07e853f721129875f30b77b2423949587810730e63b0fa6e74">test/system/report_microcosm_test.rb</a>
    (33)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683/files#diff-ba37813ca277c227a74a372479b7b05b7f3ff085d890ab708f80d62573efdb7a">test/test_helper.rb</a>
    (13)
  </li>
</ul>

<h4>Patch Links:</h4>
<ul>
  <li><a href='https://github.com/openstreetmap/openstreetmap-website/pull/3683.patch'>https://github.com/openstreetmap/openstreetmap-website/pull/3683.patch</a></li>
  <li><a href='https://github.com/openstreetmap/openstreetmap-website/pull/3683.diff'>https://github.com/openstreetmap/openstreetmap-website/pull/3683.diff</a></li>
</ul>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />Reply to this email directly, <a href="https://github.com/openstreetmap/openstreetmap-website/pull/3683">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AAK2OLOBAVEIIQNZX6RPQALV5TVUPANCNFSM6AAAAAAQJPEGAY">unsubscribe</a>.<br />You are receiving this because you are subscribed to this thread.<img src="https://github.com/notifications/beacon/AAK2OLI57ORHT24XDUECMILV5TVUPA5CNFSM6AAAAAAQJPEGA2WGG33NNVSW45C7OR4XAZNFJFZXG5LFVJRW63LNMVXHIX3JMTHFDFISBU.gif" height="1" width="1" alt="" /><span style="color: transparent; font-size: 0; display: none; visibility: hidden; overflow: hidden; opacity: 0; width: 0; height: 0; max-width: 0; max-height: 0; mso-hide: all">Message ID: <span><openstreetmap/openstreetmap-website/pull/3683</span><span>@</span><span>github</span><span>.</span><span>com></span></span></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/openstreetmap/openstreetmap-website/pull/3683",
"url": "https://github.com/openstreetmap/openstreetmap-website/pull/3683",
"name": "View Pull Request"
},
"description": "View this Pull Request on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>