New in ShotBase
shot adopt <folder> runs the shot tools on a Roblox game mirrored to disk as plain Luau, converting nothing.
event ItemSold(...) on ShopBus puts an event on a bus module of your own instead of EventBus.
event CoinsGiven(...) published by Wallet, Shop names the systems that publish it; shot check flags any other publish.
invariant WalletServer.CoinsInRange names a function that checks a rule, and shot run checks it after every frame of every scenario.
shot savelock records each saved section's shape; shot check flags a change that no Version bump and Migrate step covers.
function Start() after Wallet.Start says which start runs first, and shot check checks the order of the start calls.
owns Purse.Coins via WalletServer.Grant: a write to the field from another system is an error naming that function.
id ProductId declares a kind of string id, and shot check catches a misspelt one and names the id you meant.
Declare an event once in a system's Types.shot, and shot check checks every publish and every listener against it.
shot needs Bank.Give lists the state it reads and who writes it, and shot show lists what a member connects to.
shot brief takes what you are about to do and prints one page: the systems it touches, their rules and members.
A use that finds nothing or an unknown type says how to fix it, and a mistyped command suggests the nearest one.
Keep .luau files beside your .shot files: they build as they are, are type checked, and use reaches them.
In a class that extends another, super.new(...) and super:Name(...) call the parent's constructor and methods.
shot graph writes one page of every system, what it uses and its events, and marks events nobody sends or hears.
List a system's uses in its Types.shot, and shot check flags every link you didn't plan and every pair that would use each other.
implements and required are promises shot check keeps: every member an interface lists, every function the game must call.
Branch on a string union's value with match, and shot check names every value a match doesn't handle yet.
shot trace Bank.Give shows what runs after it, through calls, events and remotes. --up shows what leads to it.
shot rename Wallet.Add Deposit renames a member and every real use of it, then checks the project.
use Bank requires the nearest module named Bank, looking up through the folders.
doc and rootdoc take Rules and Extend sections, and shot check flags a backticked name that no longer exists.
shot map, outline, show, find, refs and wiring answer with the file and line of what you asked for.
shot check reports parse errors, ShotScript's rules and Luau type errors at the .shot line and column.
