No new features today. We renamed the entire framework from LibPureFiction to Warren.

Why rename

"LibPureFiction" was a working title — the library for Pure Fiction Records' games. It was descriptive and nobody outside the team ever saw it. But the framework is becoming a real product under the AlphaRabbit brand, and "LibPureFiction" doesn't fit that identity. It's long, it's a mouthful, and it screams "internal tool."

Warren fits. A warren is an interconnected network of tunnels — which is what the node/signal architecture literally is. It's also a rabbit reference for AlphaRabbit. Short, memorable, easy to type in a require path.

The scope of a "simple" rename

This is the kind of task that sounds trivial and isn't. Here's what actually changed:

  • 2 GitHub repos renamed (Warren, Warren-Core)
  • 2 Rojo project files updated (name + tree path)
  • 2 source directories renamed (src/Libsrc/Warren)
  • ~82 require paths in Lua files (game.ReplicatedStorage.Lib.Warren)
  • ~36 WaitForChild calls updated
  • 100+ file headers changed
  • 1 DataStore name (LibPureFiction_LogsWarren_Logs)
  • 30+ documentation files across both repos
  • 21 HTML files on this website
  • 1 Wally package config
  • 3 AlphaRabbit summary/manifest files
  • 2 git remotes, 2 local directories

Total: 232 files changed across three commits.

Execution order matters

You can't just find-and-replace everything at once. The order was deliberate:

  1. GitHub repos first. GitHub keeps redirects from the old URL, so anything that fetches during the rename window still works.
  2. Core repo second. Smaller surface area, faster to validate.
  3. Game repo third. The big one — 181 files.
  4. Website fourth. Directory rename + text replacement in HTML.
  5. Local directory renames last. Everything else needs to commit first while the paths still match.

The gotcha

The initial sed pass targeted game.ReplicatedStorage.Lib — the canonical require path. But about 20 test and demo files use a shorthand where ReplicatedStorage is assigned to a local variable first:

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Node = require(ReplicatedStorage.Lib.Node)

No game. prefix, so the first pass missed them. Caught it with a post-replacement grep before committing. Always grep after a bulk rename.

Clean break

No backwards compatibility shims. No Warren = Lib aliases. No comments explaining what things used to be called. The old name is gone. A final grep across all four locations — repos, website, AlphaRabbit — returns zero hits for "LibPureFiction."

If you're reading old devlog posts that mention "LibPureFiction," that's Warren. Same framework, better name.