Myth-Weavers Help Generators Sign in
Community announcement

Sixth Week Site Updates

Myth-Weavers · posted by Eric · September 6, 2026

Six weeks in, and 124 changes. This was a busy period, and the first one in a while where most of the work is pointed at you rather than at the floorboards.

The short version: eleven reported bugs are fixed, every one of them something a member took the time to write up. Profile pages and the user search box went from seconds to instant. Unread badges stopped timing out. 88,000 images (and counting) from the oldest posts have been preserved into our own storage to prevent them from fading into the dark reaches of the lost internet. And we did key database maintenance to eliminate 27 GB of non-content bloat, which everything on the site benefits from.

We also broke “Mark All Read” for about fifty minutes on Saturday. Sorry about that mistake, and the full explanation is below.

But before any of it, a thank you that’s overdue.

Thank You, Supporters

Since the cutover, your monthly contributions to site operations have very nearly doubled.

Measured against the twelve months of giving that preceded the move (August 2025 – July 2026), the site’s recurring monthly support is now running at close to twice what it was. 113 members currently hold an active supporter status, 108 of them on a recurring plan, and 19 of you started contributing since July 25.

Prior to Idunn, Myth-Weavers was running more or less break-even. We had been fairly ruthless in trimming our hosting costs to get to the point where we were going to be able to handle monthly variations in costs and contributions. Now, thanks to you, the site is on the most solid financial footing it has been on in years.

That margin is the whole reason the last six weeks could look like they did. Rescuing a hundred thousand images costs storage. Keeping the database on hardware that can quickly resolve unread indications while protecting private content is double the price of what we ran for OGMW and Baldr. Being able to say “yes, do what’s best for the community” without a spreadsheet is a superpower that you paid for.

And we remain ad-free. Your contributions make that possible, too.

Supporting the site is not mandatory. We’re always going to be a free-to-play site, and playing here is contribution to the community in and of itself. But to the 113 who are giving financially, and anyone who’s considering pitching in, know that your generosity is making a difference. Thank you!

(A quick note about plans: we pay a little bit more for PayPal than Stripe, and a lot more in fees for monthly contributions due to fixed per-transaction costs. If you’re a monthly supporter, about 18% of your monthly contribution pays the payment provider, not us. If switching to an annual plan works for your finances, your dollars will go further.)

Eleven Reported Bugs, Fixed

Every one of these came from a member filing a report. Several turned out to be worse than the report that found them.

  • The card deck page crashed, every single time. Three of you reported the “Something went wrong” error; the deck library was simply unreachable. Found and fixed.

  • Opening a topic from an email link ignored your posts-per-page setting. Following a cold link from an email, or a hard refresh of the page, could put your browser in a condition where your preferences hadn’t loaded, and so the page sat at the 20-post default and never caught up, giving the reported “the thread reshuffles when I middle-click a page link”. Fixed.

  • “Update chips to current” did nothing. The button had never worked for anyone. A refresh call was being made on a component that didn’t forward it, and because of how it was written it failed silently rather than erroring. Members were working around our error by hand-editing their chips and choosing “Post anyway”. Fixed, and it now reports itself when it fails, so it can’t go quiet again.

  • Marking a thread unread didn’t stick. The unread gate was keyed on when you last visited a topic rather than on your actual read position, so an explicit “mark unread” got overwritten. Fixed properly, with a new column that records the moment you asked — see the honest bit below, because the first attempt at this went badly.

  • A deleted post still showed as a forum’s most recent. Forum statistics weren’t recalculated when a topic was deleted, or on either of the two restore paths. Fixed on all three. The last-poster avatar also wasn’t travelling with the name it belonged to; also fixed.

  • Table cell widths didn’t apply reliably. Setting one column’s width let the others absorb the difference — that part is deliberate — but the absorbing columns kept their old stored width, so they rendered at a size the dialog didn’t report. Fixed, and the widths are rounded now instead of carrying eleven decimal places.

  • Options on floating containers applied to the wrong container. The properties dialog walked the document and grabbed the first floating block rather than the one you had selected. The reporter’s “but just changing the position works” was the clue that cracked it — position changes went through a different path that was always correct.

  • Group mentions rendered as @@gm. The label already carried the @. Small, visible, fixed.

  • Character colours were missing on a new topic’s first post, though they were present on every reply. Fixed.

  • Your email verification status never refreshed from the server — the third field this particular list had silently frozen. Mainly affecting new users, but still annoying. Fixed.

  • Sheets and the help pages were showing two different favicons, neither transparent. Aligned to use the same image as the forums.

Things That Were Slow And Now Are Not

Profile pages. Loading a member’s profile was taking 1.7 seconds at the median, and had been seen at 18 seconds. Measuring each piece of the page separately, one query — the shared-games-and-topics list — accounted for 93% of page load time. The other six queries together totalled 11 milliseconds. It now loads after the page rather than blocking it, and profiles are lightning-fast.

The user search box. The typeahead you use to find someone — for a mention, an invite, a whisper — was hitting 13.8 seconds at the 99th percentile, with a worst case of 22 seconds, on 876 uses a day. It was reading through all 610,000 member accounts on every keystroke, because of a subtle mismatch between how the search was written and how its index was built. The index was sitting right there the whole time. Fixed: 33,926 disk reads became 923.

Unread badges were timing out. The little counts next to your games were producing real errors for members in a lot of games — a dozen of them over September 4 and 5, every one traced to the same query. The count had to check every post’s visibility individually, which meant reaching into a 13 GB table one post at a time. Since 99.993% of posts are perfectly ordinary — not deleted, not whispered — we now index only the rare ones and ask a single cheap question instead. Speed improved about 3x worst case, and typically much better than that. ⚠️ This hasn’t run for long enough to be 100% sure, and a related operation (Mark All Read) still times out for the biggest games on the site; this is next on our find-and-fix list.

We Broke Mark All Read For Fifty Minutes

On Saturday, a fix for the mark-unread bug above went out and broke “Mark All Read” for every active member. A member reported it in Discord 24 minutes after the deploy, and it was reverted about 25 minutes later. The correct fix shipped later the same day.

Why it happened is worth explaining, because it’s a good illustration of a kind of mistake that’s easy to make and hard to catch. The change made the site-wide “read everything” marker apply only to topics you’d individually opened. But marking the whole site read deliberately doesn’t write a row per topic — it writes one marker, which is what makes it instant instead of a 56,000-row operation. So the sweep could no longer clear anything.

We did our homework on measuring the query and the impact of the change, but we didn’t do the next important thing: figure out what else depends on that data in its current form. The test suite covered marking unread, and covered marking the site read, but never the two in that order. The replacement tests now lead with exactly that.

Apologies to everyone who hit it. The reporting was fast and specific and it’s the reason the window was fifty minutes rather than a weekend.

Rescuing Your Images From The Rest Of The Internet

When you hotlink an image into a post — from Imgur, from Discord, from anywhere — that image is only in your post for as long as somebody else’s website decides to keep it. About 29% of the hot-linked images in the community’s collective post history have already rotted away. We’ve been copying the survivors onto our own storage so this stops being true going forward.

The first stage finished this week: OGMW content up to 2015. Five hours, no errors, and:

  • 90,968 images successfully fetched, and 87,943 objects stored — 8.7 GB of pictures that were one server decommissioning away from being gone.
  • 99,133 were already permanently dead — 404, domain gone, or hotlink-blocked. That’s the floor, not a gap in our work: there was nothing left to fetch, so those posts keep pointing at a URL whose image genuinely no longer exists anywhere.

The second stage covers 2015 to today, and it’s eight times bigger: 1.5 million candidate images. A prediction we made about it was wrong, and it’s a nice example of confident reasoning losing to measurement: we assumed hotlinking would tail off after 2015 as members used our own uploader more. It didn’t. Density rose through 2018 and is still running at about 100,000 a year in 2024–25. So it’s a 40–60 hour job rather than a 5 hour one, and it’ll be run in measured chunks rather than all at once.

Under The Floorboards

  • The database shed 27 GB. A full repack ran overnight on September 3 — total size 58 GB → 31 GB, with the posts table itself going 19 GB → 13 GB and each row shrinking from 1,159 to 822 bytes. All 17,050,710 rows verified present afterwards. Smaller means more of it fits in memory, and everything on the site is faster when it does. This also completed the last of the search privacy remediation described in last week’s update.

  • Character sheets got their presentation layer, and printing works properly. The first part of this isn’t fully visible to you yet, but we’ve made strides toward retiring the 2012-era sheet viewer by rebuilding those templates with our Anvil sheet engine. Figuring out a systematic way of reconstructing those templates has been a worthy challenge, but we’ll have more to share soon. Meanwhile, sheet printing was the bigger one for most of you. Chrome won’t paginate inside a zoomed element, so every page of a multi-page sheet was landing on page one, and the page header was showing up to boot. We fixed both, and sheet artwork also now survives having “Background graphics” turned off in your print dialog.

  • We locked in hosting savings. Having a whole month of data under our belt allowed us to validate the correct size for our database and web servers. We’ve reserved those now so they cost less than on-demand. We also made a lot of additional optimizations to keep costs down.

Every Site Update So Far

  1. Site Updates — April 17 to April 26

  2. Site Updates — April 27 to May 6

  3. Site Updates — May 7 to May 16

  4. Site Updates — May 17 to May 26

  5. Site Updates — May 27 to June 5

  6. Site Updates — June 6 to June 15

  7. Site Updates — June 16 to June 25

  8. Site Updates — Feature Freeze & the Road to Cutover, June 26 to June 30

  9. Site Updates — The First Week on Idunn, July 25 to August 1

  10. Site Updates — Two Weeks on Idunn, August 2 to August 8

  11. Site Updates — August 9 to August 15

  12. Site Updates — August 16 to August 22

  13. Site Updates — August 23 to August 29

  14. This announcement

What’s Next

  1. If you reported one of the eleven, check it. Every reporter has a comment on their issue explaining the cause and what to verify. If it’s still wrong, say so on the same issue — a reopened report is much more useful to us than a new one.

  2. Try the card deck page again. It was broken 100% of the time since August 23, so if you gave up on it, it wasn’t you.

  3. Print a sheet. Multi-page sheets now actually paginate. If yours still comes out wrong, we want to know which template.

  4. Tell us if Mark All Read is slow in a big game. We know it fails above roughly two thousand threads and we’re fixing it, but a report tells us which games actually matter.

  5. Keep filing. Every fix in the first section came from a report. That’s not a platitude — it’s the actual pipeline.

Keep on weaving those myths!

Open on Myth-Weavers Join the discussion Log in