Release notes
What changed in the package, grouped by the part of the product it touches, with the date each change landed.
On this page
Package io.bitquirky.behavior is at 0.6.0, and everything on this page is in it. Dates are the day the change landed, newest first inside each group. The package’s own CHANGELOG.md carries the same history in date order with the engineering detail.
Changing versions? Upgrading has the order of operations.
Authoring on the canvas
Section titled “Authoring on the canvas”- 2026-09-22: Keyboard focus stays on the control you were using when an edit rebuilds the inspector, so arrowing a Repeat policy or tabbing off Count no longer leaves the rail with nothing focused.
- 2026-09-21: Every explanatory line on the member binding rail fits on one line, and every text field on it uses the product’s dark field chrome.
- 2026-09-18: A disabled node’s card draws its dashed frame, which a malformed style rule had been suppressing.
- 2026-09-10: A dragged branch lands where the append preview said it would, and a decorator drag gives quiet feedback instead of repainting the row.
- 2026-09-10: The inspector follows your selection, so selecting a node shows that node, and a decorator selection clears cleanly.
- 2026-09-10: Toolbar search and node navigation work as one gesture: find a node, press Enter, land on it centered.
- 2026-09-01: A created child appends at the end of its row, and the add-child action appears on hover instead of taking permanent canvas space.
- 2026-08-28: Nodes place freely. Horizontal position sets sibling order, wires share one bus, and the first placement freezes the picture so a later reflow cannot rearrange your graph.
- 2026-08-28: Every reorder path keeps the picture and the execution order identical, and a drop changes the graph rather than only its drawing.
- 2026-08-27: Rename a node where its name is shown: click the name on the identity header at the top of the rail, or press F2.
- 2026-08-25: Insert actions use one deterministic wire anchor, so the button stops sliding away from the pointer.
- 2026-08-03: Static mode moves an existing branch or decorator by dragging it, preserving authored identity.
Blackboard and values
Section titled “Blackboard and values”- 2026-09-16: The Blackboard panel collapses, maximizes, restores, and fills the rail width while it does it.
- 2026-09-03: Declaring a variable starts with its name, then its type as the next step. A Component variable is declared holding the None it must hold, and the field explains itself on hover.
- 2026-09-02: The blackboard is one graph-wide band beneath both editor rails, and every type selector orders its search by relevance.
- 2026-07-28: Dictionaries get a real entry editor, one editor per shape at rail width in both graph windows.
- 2026-07-28: Declared lists and arrays run on the entity path when their whole element shape is representable.
- 2026-07-27: Editing a blackboard variable is one undo step, and member roles offer only the variables that fit them.
- 2026-07-26: Managed blackboard values generate exact typed companions, so your own classes reach a graph without hand-written glue.
- 2026-07-25: Blackboard variables store the value shapes your game already uses.
Binding to your C#
Section titled “Binding to your C#”- 2026-09-22: A
refparameter that writes back to its own Read variable reads Same variable, and choosing the Read variable as the destination keeps the two linked. - 2026-09-22: Binding one argument to a project value keeps the node’s own member on its card, so its remaining arguments stay authorable.
- 2026-09-21: A void ref condition names the parameter it tests. The Comparison card’s Tested value row lists every
refparameter, a method with exactly one fills it in, and validation blocks a condition that names none. The picker says which parameter avoidmethod would test, and rules out one with norefparameter. - 2026-09-18: A member card keeps its content when an edit remounts its view, so binding an argument or
refparameter to a blackboard variable no longer leaves a bare card. - 2026-09-17: Changing where an argument gets its value keeps the graph valid. The old projected value is removed only when nothing else reads it, and undo restores the choice with its ownership.
- 2026-09-14: Output destination fields line up with the arguments they belong to.
- 2026-09-12: Racing Line’s
CpuRacegraph binds a private method end to end, passing four arguments in and connecting the returned context to the next node’s input. - 2026-08-15: Indexed properties keep one exact ordered identity from the graph file through to the generated call.
- 2026-08-12: A
paramsparameter takes individually authored values, an existing array, or an existing list, and it saves before you have chosen which. - 2026-08-10:
refparameter methods bind directly, with one linked read and write row, and work as member conditions, including avoidmethod that adjusts a value in place. - 2026-08-07: Output-only parameters bake and execute through a real destination or fail closed.
- 2026-08-05: A single non-public field opts in beside the other member kinds, without widening its declaring type.
- 2026-08-03: Optional parameters keep their compile-time defaults instead of asking you to retype them.
- 2026-07-31: Generic methods become selectable with constrained type recovery, close into ordinary authoring, and run through the same direct-call path as everything else.
- 2026-07-24: Existing developer APIs bind without behavior-specific wrappers.
Behavior trees
Section titled “Behavior trees”- 2026-08-09: Reactive interruption works from a member-backed condition, and a Repeat no longer skips its restart on a zero-length frame.
- 2026-08-05: A Random Selector can end its pass without running a child, through Direct failure.
- 2026-08-02: Random Selector is authorable branch by branch, weight by weight.
- 2026-07-31: Repeat’s end policies are fully authorable, and their runtime contract is complete.
- 2026-07-18: Self abort scope, the Conditional decorator, and until-failure repetition arrive together.
- 2026-07-16: Reactive Lower Priority interruption and deterministic weighted selection arrive.
- 2026-07-14: Visual behavior tree authoring with GameObject execution: the first release anyone could use.
State machines
Section titled “State machines”- 2026-09-08: Transition identity and routing are stable across renames and re-authoring, and creating a machine starts with its name.
- 2026-09-05: Machines compose with each other and author real operations, without placeholder actions in between.
- 2026-09-04: State cards lead with lifecycle and action information.
- 2026-08-04: A transition predicate compares against a constant or a same-type graph value, and it executes the same way on every surface.
- 2026-08-03: A state’s hosted behavior tree is assigned and triggered from the rail, and a transition condition reads a declared blackboard variable.
- 2026-08-02: The editor authors Entry, Active Update, and Exit groups, and the runtime runs all three from the graph file.
- 2026-07-18: State-hosted trees arrive with transition weights and grouped conditions.
- 2026-07-17: Action state machines are authorable, with the execution core behind them.
Live debugging
Section titled “Live debugging”- 2026-09-23: A Live member card edits more kinds: enums, vectors (including
Vector3andQuaternion), strings, and Unity object references, alongside numbers,bool, andchar. AVector3value reads as its components and its Type row namesUnityEngine.Vector3, where it had readUnmanaged16; a string reads as its text instead ofNone. - 2026-09-23: A card tells the truth in every state. A paused edit reads
Edit accepted · waiting for Step;Source differsappears only when both values exist and differ; a detached card’s no instance chip no longer borrows the read-only lock, and its details stay open. When an attachment is lost, the Blackboard values rows readclearedinstead of their last numbers. - 2026-09-23: At narrow widths the toolbar fits its row: it drops the tick reading, then shows the verdict chips as glyphs with their words on the tooltip, so no control paints over another.
- 2026-09-22: The Live rail resolves an attached graph’s blackboard variables again, so bound argument rows stop reporting a variable as missing while the Bindings chip reads valid.
- 2026-09-16: Live attaches to an initialized agent whose component is disabled because your own code ticks it. Attaching adds no ticks of its own.
- 2026-09-16: A live member’s value keeps updating while the game is paused, and a live object payload is refused before a read-only direction can be violated.
- 2026-09-15: Live member health reasons stay stable instead of flickering between readings. Static and Live present a value the same way in the right rail.
- 2026-09-09: Live reattaches after you restart Play Mode, with the identity checks that keep an old runtime from being drawn as a new one.
- 2026-08-09: Dungeon Heist’s guard exposes its patrol speed as a two-way live binding you can edit mid-game.
- 2026-08-07: One member-bound value can be inspected and edited on a running agent from the editor rail.
- 2026-07-27: The live chrome and the durable console record arrive together, and the inspector reports the evaluation just run.
- 2026-07-24: An entity can be inspected from Unity’s integrated Hierarchy while paused.
Entity runtime
Section titled “Entity runtime”- 2026-08-10: A static method with
refparameters binds on the entity path under the same read and write rules.out,in, andparamsstay refused there, each named in the refusal. - 2026-08-02: An entity target that does not resolve reads as a live reading instead of a graph fault.
- 2026-07-31: Entity graphs bind existing ECS game logic and run it in a Windows player.
- 2026-07-29: Entity member execution uses memory-safe typed dispatch.
- 2026-07-27: Entity member nodes read and write your existing game code and call into it, including enabled state and exact buffer entries.
- 2026-07-26: Entity graphs generate direct Burst member accessors.
Reference Scan
Section titled “Reference Scan”- 2026-08-25: Reference Scan repairs stale identities atomically, so a remap either lands everywhere or nowhere.
- 2026-08-04: Grouped results match the evidence they were approved against.
- 2026-07-29: A member rename keeps Reference Scan available rather than blocking it.
- 2026-07-28: Reference Scan finds every stale graph reference in the project, closed graphs included, and generated member artifacts follow a deleted graph out.
Saving and building
Section titled “Saving and building”- 2026-09-22: Save regenerates the member provider again. Cmd/Ctrl+S and the toolbar Save bake the graph, so saving a changed binding no longer leaves Play running against a stale provider, and Save stays enabled after an autosave until that bake has run.
- 2026-09-13: Provider references survive an invalid graph edit, so a half-finished repair does not cost you the generated binding.
- 2026-09-12: Graph context is restored after a domain reload, and retained authoring transactions keep the canvas current.
- 2026-09-10: Saved graph files import reliably, and type selection stays responsive while they do.
- 2026-09-09: Saving a graph and Unity’s asset database agree on what happened.
- 2026-08-05: Double-clicking a graph file with parse errors reports the path, the exact line, and the parser message in Unity’s console, and opens no half-initialized editor window.
- 2026-07-25: Generated member providers use Windows-safe paths.
- 2026-07-23: The Platformer graphs migrated forward, with member calls proven in an IL2CPP player.
- 2026-07-08: Addressables support ships as an optional assembly.
Sample games
Section titled “Sample games”- 2026-09-23: Platformer’s player jumps after standing still. Once he had rested for about half a second, a jump press was ignored until he moved again.
- 2026-09-23: Platformer’s slimes collide at their drawn height, so a stomp lands on the slime’s dome instead of a fifth of a tile above it. The Platformer clip was recaptured one physics step per frame, so it shows the moment the player’s feet touch the enemy.
- 2026-09-22: Racing Line’s
CpuRacegraph advances its catch-up pressure once per tick, inside the surge condition that tests it. It had also bound the same method on a separate node, which moved the pressure at twice the configured rates. - 2026-09-18: New page, how the samples are built: the game logic assets, the runner-driven lifecycle, and the composition root the GameObject samples share.
- 2026-09-17: Platformer patrols cross floor joins without stalling at a tile seam.
- 2026-08-04: Horde Survival’s director reads its surge population from a declared graph value,
surge_live_enemy_limit, starting at 2,200, instead of a literal buried in a predicate. - 2026-08-03: Horde Survival states its hosted surge lifetime explicitly.
- 2026-07-30: Platformer’s multi-point patrol uses an authored route with a profile and a tag.
Documentation
Section titled “Documentation”- 2026-09-18: The C# API reference covers every assembly you receive: the product’s runtime, editor, and optional Addressables assemblies, plus the Bit Quirky Graph, Core, Command, and Tile libraries that ship with it. Every public symbol carries a summary.
- What it does not do yet: the honest list of what is still missing.
- Sample games: the four projects these changes were built and verified against.