AO3 News

Post Header

2019-12-21 07:16:00 -0500

The last several code deploys introduced some exciting changes to work posting: a big update to our rich text editor, support for the HTML5 audio and video tags, a little tweak in how we handle language selection, and some less confusingly labeled buttons! In addition, a whole lot of challenge improvements and behind-the-scenes infrastructure upgrades.


  • Coders: Alix R, cosette, Elz, Enigel, james_, redsummernight, Sarken, Tal, tickinginstant
  • Code reviewers: Ariana, bingeling, Enigel, james_, redsummernight, Sarken, Scott, tickinginstant
  • Testers: bingeling, Briar, CJ Record, GoldenFalls, Izzy, james_, Lady Oscar, lydia-theda, MagnusIsMyRock, McBangle, Nary, nimadge, Paula, Rebecca Sentance, redsummernight, Relle, Sarken


Rich Text Editor

  • [AO3-5191] - We upgraded the version of TinyMCE that we use for our Rich Text Editor.
  • [AO3-5809], [AO3-5811] - The new version of TinyMCE overrides the browser's default context menu, which prevents desktop users from right-clicking to copy, paste, spell check, etc. We disabled this behavior.
  • [AO3-5812] - The same new version of TinyMCE defaults to a reduced interface for users on mobile devices. We disabled this behavior too.

Collections and Challenges

  • [AO3-4353] - Some inconvenient caching was affecting the display of tag set content (e.g. Character or Relationship tags) on challenge sign-up pages. Now the correct tags are shown.
  • [AO3-5786] - Trying to access the list of allowed tags from a challenge sign-up would throw an error 500, which is now fixed as well!
  • [AO3-5785] - Owners of collections were previously able to add works in other, anonymous collections to their own, which enabled them to see the work's creator. We've now made it impossible to add anonymous works to your collection.
  • [AO3-5101] - Trying to save a challenge with sign-ups open and a closing date set, but no opening date, would throw an error 500. Now the challenge profile correctly states that you can sign-up and until what date.
  • [AO3-5102] - If you closed sign-ups for a challenge before the set closing date, the challenge profile would show that sign-ups were closed, but ~in the future~~~ (i.e. the set closing date). Now the date just isn't displayed anymore, to avoid any confusion.
  • [AO3-5593] - When fetching a list of all collections a work had been approved to be in, we used an unnecessary query, which was not good for database performance. Much better now!
  • [AO3-4571] - You have two open assignments, and they both happen to be for the same recipient. You post a work fulfilling one of the assignments. However, the other assignment's ticky box is also checked in the posting form. If you don't notice this, you post the work and suddenly your other assignment is fulfilled as well. But it's really not! (Aww.) We now make sure only the correct ticky is ticked and you still have to write a second work for the other assignment. *\o/*


  • [AO3-5702] - We previously had English set as the default language when posting a new work. This led to a lot of miscategorized works, since creators often wouldn't notice the language selection when posting non-English works. We now require all users to manually set the language their work is in.
  • [AO3-4605] - The form used for work imports now sports a mandatory "Choose a language" field as well.
  • [AO3-5790] - We accidentally broke filtering for works in português brasileiro or português europeu, so we intentionally fixed it.
  • [AO3-5616] - In our lists of FAQ categories available in Arabic or Hebrew, the first category name was misaligned. We've put it back in line.


  • [AO3-5693] - Posting audio or video fanworks? Now you can use the HTML5 audio and video tags!
  • [AO3-4080] - We had a very peculiar bug where our devs weren't able to use multiple CSS box shadows on their development environments despite it being possible on the Archive itself. Turns out we had a broken regular expression in our code, but the fact that we had box-shadow in the wrong part of the production configuration file was hiding the issue. The bug has been fixed and the production config file updated, so now box-shadow works the same for everyone.
  • [AO3-4560] - We renamed the buttons for posting works: "Post Without Preview" becomes "Post", and "Save Without Posting" becomes "Save As Draft".
  • [AO3-5632] - When you follow a link from the Archive to another site or go to a page with the Twitter widget (e.g. a work), some information is automatically sent to the site (or Twitter). We have now limited referrer information and won't tell the site you clicked on (or Twitter) which page you were on.
  • [AO3-5761] - We have added the Rack::Attack gem, which enables us to control how many requests to the database an IP address can send before we firmly tell it to not (and serve an error page instead).
  • [AO3-5639] - Trying to visit an unrevealed work (and getting a helpful message instead) or accessing a hidden work (as an admin) would increase that work's hit count, potentially giving the creator of said work quite the scare. We have removed that particular source of panic now.
  • [AO3-3617] - Tags that begin with a capital letter with an accent or other diacritical mark (e.g. Éomer) wouldn't show up in the autocomplete if no fandom was entered in the posting form. Now they should!
  • [AO3-5825] - Dashboard sidebars retrieve work and bookmark counts from Elasticsearch, which ties up Elasticsearch in long queries, making everyone sad. We are now caching those counts, creating a little less work for the search engine every time a page with the sidebar is loaded. \o/ (Note: This means the count will no longer go up immediately when you add or delete a work or bookmark. The delay should currently be about half an hour, but we may adjust it in the future.)


  • [AO3-5789] - Updated Database Cleaner and other test-only gems.
  • [AO3-5795] - Updated MySQL2 to 0.5.2 to support libmariadb and Debian 10.
  • [AO3-5798] - Updated Loofah from 2.2.3 to 2.3.1.
  • [AO3-5749] - Updated Elasticsearch to 6.8.5 and its gem to 6.8.0.
  • [AO3-5826] - Updated Nokogiri to 1.10.5.
  • [AO3-5797], [AO3-5800] - Updated the staging server names in our deploy script.
  • [AO3-5194] - Updated schema and structure files.
  • [AO3-5787] - We've put the code for the public site skins Reversi, Snow Blue, and Low Vision Default in our code repository for safe keeping and better tracking of changes.


  • [AO3-5788] - We had previously been using Ubuntu Xenial for tests on our CI service, but now we've switched to Bionic, which is closer to our production environment.
  • [AO3-5814] - Sometimes we make changes that we don't need our automated tests to check. We've made it so we can include a note in the commit message that will tell one of our CI services to skip running the tests and deploy the changes straight to our staging environment.
  • [AO3-5815] - The automated tests for our emails had a lot of redundancy, so we reduced that.
  • [AO3-5758] - We changed some settings on our automated code style checker to make its formatting suggestions more useful.
  • [AO3-5772] - We've stopped running automated code style checks on JavaScript files for third-party plugins, since we didn't write them and aren't going to address style violations found in them. We've also stopped checking minified JavaScript files because, seriously, we know it's one giant long line without spaces or indentation -- that's the whole point.