The thing, though, is that cross-realm guilds require a new approach to managing the contents of guild banks.
In the early days of WoW, realms were independent, and instances of items had unique IDs on those realms. An item belonged to its realm and would never move.
Adding cross-realm functionality requires allowing items to be “rehomed” by atomically destroying them on one realm while recreating them on another. By “atomic” I mean that this operation must either complete in its entirety, or fail in its entirety. Otherwise you have items vanishing, or, worse, being duplicated.
A cross-realm guild bank is from this perspective potentially a big, chaotic mess.
Which realm owns the items in the bank? Are they all assigned to a particular realm, say, the GM’s realm? Or do they live on the realms of whoever deposited them? The latter is unlikely, because there are a fair number of instanced items on a server (let’s say, 1 million), and a region-wide DB would have ballpark 70 times that, and would not necessarily be as responsive as desired. So DBs handling items are probably separate per realm, and having items from multiple realms in a vault would require hitting a bunch of different DBs just to display contents, so, anyway, nahhh probably not.
And more to the point, which account owns them. A warband bank is one thing but at least everything in it belongs to a single account. A cross-realm guild bank, on the other hand, has to deal with multiple accounts and items from multiple realms. Is ownership transferred to the GM when items are deposited?
Like moving items from realm to realm, moving items from one account to another also provides opportunities for inadvertent destruction and duplication, so the coding involved has to be rock-solid and impervious to network shenanigans, server hiccups, DB hiccups, and so on. This kind of code is tremendously difficult to write in a way such that it handles all imaginable edge cases. What happens with a DC? What happens when some enterprising hacker fiddles with the packets in the client-server connection? What happens when the DB server fails, or hangs for a minute? What happens when code on a server crashes?
None of this directly provides a basis to explain spontaneous vanishing of guild bank contents. But if the realm or account affinity of items is somehow being corrupted, maybe they are being yanked into limbo or simply destroyed.
Why some slots become unusable and/or items are “frozen” in them, I wouldn’t necessarily assume this is the same bug; it might be two.
Of course it could be simpler.
We don’t know how the visual representation of a guild bank maps to an internal representation. Is there a table somewhere with item UIDs, tab, row, column, and whatever is necessary to associate a guild vault? What happens if some aspect of that is corrupted? Well, for sure, it won’t be displayed correctly.
Is there client-side caching of guild vault contents that could be corrupted? What if there was a back-end change but the client side code doesn’t match it? People often assert that the client is “dumb” but when you stop and think about it, you quickly realize that it is extremely complex. Much of the communication from client to server is “here’s what happened, just so you know,” and the server has the opportunity to roll that back if something isn’t right. If it didn’t work this way, the game would crawl under the very best of network conditions.
Anyway, I worry that the no doubt complex coding needed to reliably support cross-server guild vaults necessitated changes that have unexpected side effects that were somehow not caught either by testing or careful “what if?” thinking.
I also think that this expansion was (and is) not ready for release, but the decision to go GM at X date was made a while ago and was set in stone by management, perhaps while high on hopium.