1.80.8169.333-live — April 17, 2026 (Live hotfix)
DEV=8169, Live=333. Hotfix to eliminate
@compiled-lua: Touched not valid member (Workspace._N)errors (~150 entries on the dashboard) affecting student-coded games.
Code Builder
- Touched-on-Model fix: The "when touched by a player" and "when touched by an object" blocks now work on Models, not just Parts. If the Model has a PrimaryPart, the Touched event attaches to it automatically. Models without a PrimaryPart produce a helpful in-game error message instead of a runtime crash. Only newly-saved scripts benefit immediately — existing compiled buffers continue to error until the student re-saves.
1.80.8169.332-live — April 17, 2026 (Live hotfix)
DEV=8169, Live=332. Hotfix applied directly to Live in response to live camp outage. Must be merged back to DEV before next publish.
Stability & Performance
- Save UTF-8 sanitizer:
BuildService.SaveBuildsnow strips control bytes and replaces invalid UTF-8 byte sequences with?before passing data toSerializer.Encrypt,HttpService:JSONEncode, andModelData:SetAsync. Fixes104: Cannot store Dictionary in data store. Data stores can only accept valid UTF-8 characters.which was blocking all autosaves for any student whose build contained an emoji, smart quote, or non-UTF-8 pasted character — causing their work to appear lost on rejoin. Covers part names, attribute keys/values, template names, and nested build data. Reported live from camp870194(also seen on745775).
1.80.8169-live — April 17, 2026 (major DEV → LIVE deploy)
DEV=8169, Live=335. First full DEV→Live publish since 329 — closes a 13-month gap of accumulated DEV work (96 changed files + 21 new files) and reunifies PlaceVersions with the 332/333 hotfixes. Most new features ship behind the new feature flag system and are OFF by default; most new fixes ship always-on and take effect immediately.
Feature Flag System (new)
- API-controlled feature gates: New features now ship OFF by default behind flags fetched from
api.buzzy.gg/feature-flags. Toggleable per-server, per-user, or per-version without a redeploy. - Admin UI at
api.buzzy.gg/admin/feature-flagsfor managing flag defaults and overrides. - New
ReplicatedStorage.FeatureFlagsmodule andServerScriptService.FeatureFlagsInitscript — server fetches flags on startup, replicates to clients via Attributes. - Gated features (all OFF unless noted):
EnableBlueprintChecker,EnableBuildPermissions,EnablePlayAllGames,UseAPIBots,EnableLobbyBuildMode.EnableAdminUnclaimdefaults ON.
Error Monitoring
- ErrorCapture (new, always-on): Server runtime errors relay to the API dashboard as
server-log:RuntimeErrorwith full stack, script, and server/user context. Rate-limited per unique error. - Client-side error capture: Client runtime errors relay as
server-log:ClientRuntimeErrorwith player attribution. NewErrorCapture.local.luauin StarterPlayerScripts hooksLogService.MessageOut, fires throughReportErrorRemoteEvent, forwarded to D1 byErrorRelay.server.luau. Rate-limited per unique error (60s) and per player (1/sec). - Caught-error plumbing: New
BuzzyServer.logError(context, err, extras)helper serializes and rate-limits pcall'd errors, firing them asserver-log:CaughtError. Six high-value sites instrumented:BuildService:LoadGameData,BuildService:SaveForPlayer,BuzzyCodeServiceteleports (both sites),BuzzyServer:postAPIEvent, and the SLVMFiOnecompile/wrap path (student Scratch code). These used to be swallowed by pcalls; they now land in D1 within 60s. - Rate-limit key widened from 100→250 chars so errors that differ only in a trailing UUID, model name, or line number no longer collapse into a single event.
Stability & Performance
- ContextActionService fix in Build Tools Targeting — cached the
GetCore()require and fixed a Toggle method name mismatch. Eliminates ~3,300 errors previously flooding the dashboard. - Bot CollisionPart guard:
MoveBotnow usesFindFirstChild("CollisionPart")with a nil guard. FixesCollisionPart is not a valid member of Model "Workspace.Bots.Buzzy"atBot:233. Bot movement continues safely when CollisionPart is absent. - Spawn nil-guards: Missing
CodedSpawnpart or missingSettingsModuleScript no longer crash the spawn flow. Targets the "CodedSpawn missing in Area3/4/6" errors (~125 occurrences) and "Settings is not a valid member of Part 'CodedSpawn'". - DonationBoard fix and spawn fall-through fix in DEV builder.
- PlotDataStillLoading dialog now auto-closes correctly.
- Teleport throttle + GetEngineFeature errors fixed in BuzzyCodeService with debouncing.
- BuildService pcall wrapper around
LoadGameDataprevents save corruption from transient failures. - PlayerMarketplace zero-size guard prevents divide-by-zero crash when marketplace items have zero size.
- Resize upper bound clamp — props can no longer be scaled beyond 100x.
- UTF-8 sanitizer merged back from 332 hotfix —
BuildService.SaveBuildsstrips control bytes and replaces invalid UTF-8 before encoding, preventing "Cannot store Dictionary" errors on emoji/smart-quote/pasted characters. - Touched-on-Model fix merged back from 333 hotfix — Code Builder
when touchedblocks work on Models with a PrimaryPart, not just Parts. - Log noise reduction: ~80 scripts cleaned from
warn()to silent logging (or--print). Error dashboard is now dramatically easier to read. - SyncModule: emoji removed from logs.
Bot System (DEV-only, gated via UseAPIBots)
- LLM-powered bot system with Tier 1 actions — API-backed bot brain with conversation memory, player perception, and action dispatch. Currently gated OFF; can be enabled per-user via feature flags.
- Help flare fix: Moved
BotBrainModulerequire to the top ofBuzzyBotServersoaddBotActionis in scope when a help flare fires. - Bot memory leak fix:
PlayerRemovinghandler inBuzzyBotServernow callsclearHistoryvia the correct module path; previously the require was swallowed by a pcall, leaking conversation history across sessions. - Admin plot tools: Plot unclaim via
EnableAdminUnclaim(ON by default) lets group admins free stuck plots.
Code Builder
- Dialog quote fix extended to
DLG_CHCEandDLG_CHCE_TREEblocks (extends the 1.79 fix forDLG_DIAL). Quotes now auto-wrap at save time for all dialog block types. - Orphaned dialog-block validation: Using "prompt choice" or "prompt choice tree" without a parent "prompt dialogue" now shows a friendly error instead of a silent failure.
- Validation timing fix so errors surface on the correct save pass.
Build Tools
- ToolButton disabled state for UI clarity when a tool is unavailable.
Performance Profiler
- Per-place profiler now runs in Studio playtests across all places. Relay via MessagingService so clients receive profiler state changes.
- Profiler report endpoint on the API worker for querying aggregated snapshots.
Client Cleanup
- Orphaned weapons deleted;
BuzzymoduleInitnow nil-guarded to prevent cascade failures on incomplete instances.
Diagnostic API (supporting)
- New diagnostic endpoints for technical support self-service — player events, server events, blast-radius scope analysis, DataStore proxy via Open Cloud. Backs the Slack bot's tool-use flow. Fully server-side; no Roblox client impact.
Shipped but gated OFF (available via feature flags when ready)
The 13-month DEV backlog included several large feature lines that now sit in LIVE code, gated OFF by the new feature flag system. They can be enabled per-server, per-user, or globally via the admin UI when we're ready to release them. Until enabled, they have no effect on LIVE players.
- Lobby Build Mode (
EnableLobbyBuildMode): Brock's lobby blueprint system — players can load custom lobby data from a server key pointing to Regions Data, save custom data to specified slots, and run the lobby-blueprint-ready flow. IncludesLobbyUpdater,LobbyBuildModeProvider(server + workspace),BuildAnywhereModeHandler, and the newLobbySettingsDataStore. - Build Permissions (
EnableBuildPermissions): Per-user build permission system withBuildPermissionsLoader,BuildPermissionsService, and a newBuildPermissionsDataStore (with{userId}_Blueprintkeys). Unlocks "Build Everywhere" toggle for whitelisted users. - Blueprint Checker (
EnableBlueprintChecker): Percentage-complete calculator, region readiness checker, blueprint progress UI, andBuildBlueprintPromptListener. Supports airtable-scaled blueprints and bot-built blueprints with boost functionality. - Play All Games (
EnablePlayAllGames): Queue system for starting "play all games" sessions with admin requirements, countdown timer, and cross-player coordination. - API Bots (
UseAPIBots): LLM-powered bot system with Tier 1 actions, conversation memory (BotBrain), player perception, and admin plot tools. Bot brain running against the API endpoint. Help flares can open bot dialog with contextual responses. - Admin Plot Unclaim (
EnableAdminUnclaim, ON by default): Group admins (rank ≥ 200) can press F on any claimed pad to free it — useful for classroom management and stuck plots.
Long-standing builder improvements (ungated — active now)
These are smaller fixes and additions that accumulated in DEV over the past year and ship always-on with this publish:
- Pivot offset code block — Code Builder can now use pivot offsets in scripts.
- Build tools fixes: Gizmo rendering fixes, inability to modify objects when zoomed out of plot bounds resolved, drag prevention in edit-mode blueprints.
- Blueprint edits: Lock/unlock now works correctly on blueprints being edited and on blueprint pivot changes.
- Boost parts out-of-bounds prevention — prevents boost parts from being placed outside plot boundaries.
- Blueprint scaling from Airtable — blueprints now apply airtable-driven scaling correctly.
- Creative flight updates.
- BuildService save edge cases — extensive handling of edge cases from Brock's 2025 save reliability work.
- Variable quote handling in plugin + builder (predecessor to the 1.79 dialog quote fix).
1.80.8164-live — April 15, 2026
DEV=8163, Live=329.
Code Builder - Dialog Blocks
Quotes are now automatic: No need to wrap dialog text in quotes anymore — just type your text normally and the Code Builder handles it. Previously added quotes will be cleaned up on your next save. Read more: How to code an interactive conversation with an NPC
Helpful error for wrong block order: Using "prompt choice" or "prompt choice tree" without a "prompt dialogue" block now shows a clear message explaining the fix. Remember: place "prompt dialogue" first, then put your choices inside it. Read more: How to Make Conversational Choices and Answers with NPCs