Repository navigation
Development tools can now edit data through the Studio bridge, safely, and see more of what happens while a game runs.
Added
Studio bridge
- Tools can edit profiles during a playtest with the bridge's
applyrequest. Every edit is one op run through the normal transaction pipeline with apluginsource and a required note, so guards judge it and it lands in the commit record and the audit log - An edit to a profile held by another server is sent to that server, which applies it once even if the message arrives twice. When no answer comes back in time the result is
unknownwith the last saved revision, so a tool can look before trying again opslists the ops a tool may call with their arguments, andschemaAtdescribes the schema at a path, so tools can build edit formsapplywithdryRun = trueruns the edit and every guard on a copy and keeps nothing. It answers with the paths that would change, every guard that would complain, and whether the edit would go throughhellolists the bridge's features, and the bridge folder carries a protocol range (BridgeMinVersiontoBridgeVersion), so tools use what a game offers instead of guessing from version numbers- The
profilesanswer says where each store keeps its Studio data:mock,scopeorreal guardBrokentelemetry carries the whole violation: guard kind, path, source, player, the ops that ran, and the value before and after (left out above 1 KB, with its size). Shared stores send it tooprofileCommittedtelemetry for every profile commit: revision, source, player, note, ops and changed paths. It's only built while something listens
Writes
transacttakesdryRun = true. Everything runs on a draft that's thrown away: no commit, no listeners, noguardBroken, and rate guards don't count it. Guards report every violation instead of stopping at the first rejection- Custom ops can declare their arguments with schemas:
Geode.op(name, handler, { args = { ... } }). Every call is checked before the handler runs, whoever made it, and a mismatch fails withinvalidArgs - A guard's rejection names the guard in
error.guard, next to the message
Docs
- New pages: installation, getting started, how it works, developer products, troubleshooting, and a mapping for anyone coming from ProfileStore, ProfileService or Lapis
Changed
- A Studio playtest on live data (
studio = "real") never steals a lease and never asks a live server to release a profile. With the default steal policy the load fails atstealAfterand says why, and withstealPolicy = "wait"it waits for the live server to let go. Nobody has confirmed that Studio's messages can't reach live servers, and a release request could kick a player - Rate guards don't count edits from development tools, so fixing a profile doesn't use up the player's limits
- A shorter README that points to the docs site
Fixed
- A tool edit refused by a guard still releases the profile it loaded to make the edit