|
2 | 2 | Changelog for package behaviortree_cpp |
3 | 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
4 | 4 |
|
| 5 | +Forthcoming |
| 6 | +----------- |
| 7 | +* Feature: advanced xml validation (`#1146 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1146>`_) |
| 8 | +* add Finally control node for guaranteed cleanup (`#1229 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1229>`_) |
| 9 | + * Behavior change: "Finally" is now a built-in node ID, so an application that |
| 10 | + registers its own node with that ID gets a duplicate-registration error. |
| 11 | +* Add _onlyIf and _onStart preconditions (`#820 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/820>`_, `#895 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/895>`_) (`#1261 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1261>`_) |
| 12 | + * Behavior change: the attribute names `_onlyIf` and `_onStart` are now reserved. |
| 13 | + Before, they were stored silently as non-port attributes and did nothing. |
| 14 | +* test: don't assume a tick rate in Reactive.TestLogging (`#1285 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1285>`_) |
| 15 | +* null-check the entry in ImportBlackboardFromJSON after createEntry (`#1284 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1284>`_) |
| 16 | +* Restore 4.10.0 ABI of Sleep/Delay/Timeout nodes; ignore stale timer handlers (`#1283 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1283>`_) |
| 17 | +* add unit test for subtree with default values and autoremap enabled (`#1272 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1272>`_) |
| 18 | + * Behavior change: for a modelled input port with a literal default that is not |
| 19 | + explicitly remapped, the default is now set in the SubTree blackboard if no entry with |
| 20 | + that name exists in the parent blackboard when the tree is created (creation-time |
| 21 | + rule, documented in PORT_CONNECTION_RULES.md). A parent key created only at runtime |
| 22 | + (e.g. by a Script) is shadowed by the default. |
| 23 | +* bound the AST height of flat script expressions (`#1259 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1259>`_) |
| 24 | + * Behavior change: a single script expression with more than ~255 chained operators is |
| 25 | + now rejected when the tree is created. |
| 26 | +* reset a child's status when its halt() throws in ControlNode::haltChild (`#1273 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1273>`_) |
| 27 | +* OSS-Fuzz: Add new fuzzer/corpus/dict targets tree exec (`#1277 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1277>`_) |
| 28 | +* fix: bad_expected_access::what() returns the error message (`#1269 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1269>`_) |
| 29 | +* Propagate skipped conditions in IfThenElse and WhileDoElse (`#1276 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1276>`_) |
| 30 | +* Reset Precondition state between activations (`#1275 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1275>`_) |
| 31 | +* forget a rejected XML document in XMLParser (`#1266 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1266>`_) |
| 32 | +* ignore aborted timer handler in SleepNode (`#1267 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1267>`_) |
| 33 | +* fix stack overflow on nested JSON in JsonToInteger and fromJson (`#1274 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1274>`_) |
| 34 | +* make wildcards_match iterative to avoid stack overflow (`#1270 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1270>`_) |
| 35 | +* use the locked entry in script assignment string conversion (`#1265 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1265>`_) |
| 36 | +* Sort ports in the TreeNodesModel XML (`#851 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/851>`_) (`#1260 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1260>`_) |
| 37 | +* fix: keep the name of SubTree nodes in WriteTreeToXML (`#1262 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1262>`_) (`#1268 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1268>`_) |
| 38 | +* Bump prefix-dev/setup-pixi from 0.11.2 to 0.11.3 (`#1280 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1280>`_) |
| 39 | +* feat: write the library version as BTCPP_version in the <root> of generated XML (`#1264 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1264>`_) |
| 40 | +* test: a reactive node must not restart its RUNNING child (`#1258 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1258>`_) |
| 41 | +* Add input port update subscriptions (`#1247 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1247>`_) |
| 42 | +* store SubTree literals as strings again; coerce numeric strings in script arithmetic (`#1246 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1246>`_) (`#1254 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1254>`_) |
| 43 | + * Behavior change compared to 4.9.1 - 4.10.0, back to pre-4.9.1 behavior: two literal |
| 44 | + operands are strings ("1" + "2" is "12", "10" < "2" compares text), and compound |
| 45 | + assignment, unary minus, bitwise and logic operators on such a literal require an |
| 46 | + explicit number again. |
| 47 | +* Allow a custom "__type" name in the JsonExporter lambda converters (`#1255 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1255>`_) |
| 48 | +* Document the MSVC timer resolution caveat of Tree::sleep (`#1257 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1257>`_) |
| 49 | +* Include emscripten/fiber.h at global scope before minicoro.h (`#1256 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1256>`_) |
| 50 | +* clang-format: never split string literals (`#1253 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1253>`_) |
| 51 | +* Warn when a BehaviorTree ID replaces one registered from another source (`#1133 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1133>`_) |
| 52 | + * Behavior change: a new "Warning: BehaviorTree ID [...] replaces ..." line on stdout in |
| 53 | + the cases above; no other change. |
| 54 | +* Fix Reactive Sequence async control node validation (`#1183 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1183>`_) |
| 55 | + * Behavior change: a ReactiveSequence with two or more direct children among |
| 56 | + AsyncSequence / AsyncFallback, at least one of them an AsyncFallback, now fails to |
| 57 | + load, like two AsyncSequence already did. |
| 58 | +* pixi: bound the parallel build on Linux (`#1252 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1252>`_) |
| 59 | +* reject non-integer JSON numbers where an integer is expected (`#1240 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1240>`_) |
| 60 | + * Behavior change: int-vector elements, async_delay and Groot2 hook fields that are |
| 61 | + fractional, NaN, boolean or out of range now throw instead of being silently truncated |
| 62 | + or wrapped. |
| 63 | +* reject out-of-range values in the double to float conversions (`#1249 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1249>`_) |
| 64 | + * Behavior change: reading a finite double with |x| >= FLT_MAX + half an ulp as float |
| 65 | + now throws instead of returning an infinity. |
| 66 | +* throw instead of wrapping the 16-bit UID counter in Tree::getUID (`#1244 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1244>`_) |
| 67 | + * Behavior change: creating a tree with more than 65535 nodes now throws instead of |
| 68 | + succeeding with duplicate UIDs. |
| 69 | +* fix overflow in the integer to floating point safe-cast checks (`#1238 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1238>`_) |
| 70 | +* range-check uint16_t in the Any string to number fallback (`#1242 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1242>`_) |
| 71 | +* fix null _p access in the TestNode async_delay timer handler (`#1243 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1243>`_) |
| 72 | +* fix TimeoutNode halting the child concurrently with its timer thread (`#1241 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1241>`_) |
| 73 | +* Bump prefix-dev/setup-pixi from 0.10.1 to 0.11.2 (`#1245 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1245>`_) |
| 74 | +* Groot2Publisher: add a constructor that takes the bind address (`#1251 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1251>`_) |
| 75 | +* XMLParser: detect cyclic <include> instead of overflowing the stack (`#1250 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1250>`_) |
| 76 | +* TreeObserver: don't throw when two nodes have the same path (`#1234 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1234>`_) |
| 77 | +* fix data race in SetBlackboardNode copying a blackboard entry (`#1236 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1236>`_) |
| 78 | +* fix data race in SqliteLogger::callback (`#1237 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1237>`_) |
| 79 | +* fix undefined double to int64 cast in the script complement operator (`#1239 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1239>`_) |
| 80 | +* Add USE_VENDORED_JSON option to use the system nlohmann_json (fixes `#959 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/959>`_) (`#1235 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1235>`_) |
| 81 | +* Validate model names in explicit XML node syntax (fixes `#1220 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1220>`_) (`#1231 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1231>`_) |
| 82 | + * Behavior change: the ID of explicit <Action>, <Condition>, <Decorator> and <Control> |
| 83 | + elements is now checked with the same model-name rules as the compact form, so an ID |
| 84 | + with a forbidden character (e.g. ID="My.Action") or the reserved name Root, which |
| 85 | + loaded before, now throws. |
| 86 | +* fuzzing: don't return 1 from bb_fuzzer on unexpected exceptions (fixes `#1224 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1224>`_) (`#1233 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1233>`_) |
| 87 | +* apply type checks in Blackboard::set when the key is remapped (`#1232 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1232>`_) |
| 88 | + * Behavior change: writes through a SubTree remapping now follow the same type rules as |
| 89 | + local writes. An unconvertible string written into a strongly typed parent entry |
| 90 | + throws instead of being stored as a std::string, and a remapped write locks the type |
| 91 | + of a weakly typed (AnyTypeAllowed) parent entry, as a local write already did. |
| 92 | +* Report a declared port whose name cannot be bound (fixes `#1215 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1215>`_) (`#1216 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1216>`_) |
| 93 | +* match subtrees by name in ImportTreeFromJSON (`#1227 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1227>`_) |
| 94 | +* fix SimpleString equality for content with embedded NUL bytes (`#1230 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1230>`_) |
| 95 | +* check from_chars result for integer literals in script parser (`#1214 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1214>`_) |
| 96 | +* clamp snprintf result before using it as fwrite length (`#1185 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1185>`_) |
| 97 | +* fix locale-dependent std::stod fallback in Any and SwitchNode (`#1218 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1218>`_) |
| 98 | +* Say that duplicate SubTree names are checked across the whole tree (fixes `#1219 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1219>`_) (`#1222 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1222>`_) |
| 99 | +* Name the forbidden character in the port name error (fixes `#1221 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1221>`_) (`#1223 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1223>`_) |
| 100 | +* Bump actions/setup-python from 6 to 7 (`#1179 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1179>`_) |
| 101 | +* DecoratorNode: don't discard the result of an asynchronous child (`#1206 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1206>`_) |
| 102 | +* CI: run the Windows tests through ctest with --repeat until-pass (`#1205 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1205>`_) |
| 103 | +* docs: clarify that Precondition is evaluated once per activation, not every tick (`#1204 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1204>`_) |
| 104 | +* add Blackboard::getKeyNames() and deprecate getKeys() (`#1203 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1203>`_) |
| 105 | +* fix use-after-free of a blackboard entry held by getAnyLocked (alternative to `#1181 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1181>`_) (`#1202 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1202>`_) |
| 106 | +* Bump prefix-dev/setup-pixi from 0.10.0 to 0.10.1 (`#1190 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1190>`_) |
| 107 | +* haltTree() from another thread now stops tickWhileRunning() (fixes `#686 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/686>`_) (`#1201 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1201>`_) |
| 108 | +* fix FileLogger2: drain the transition queue in the destructor after joining the writer thread (`#1198 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1198>`_) |
| 109 | +* fix TimerQueue shutdown race that left cancelled items in the queue (`#1200 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1200>`_) |
| 110 | +* validate substituted node type in instantiateTreeNode (`#1193 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1193>`_) |
| 111 | +* fix: typo Slop->Slot and mark Signal::subscribe() [[nodiscard]] (`#1199 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1199>`_) |
| 112 | +* Fix logical not for string-backed booleans (`#1191 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1191>`_) |
| 113 | +* preserve integer width in JsonExporter::fromJson (`#1186 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1186>`_) |
| 114 | +* fix use-after-free of the timer node mutex on destruction (`#1180 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1180>`_) |
| 115 | +* fix unbounded recursion in the script expression parser (`#1174 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1174>`_) |
| 116 | +* Fix library version in CMake subprojects (`#1188 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1188>`_) |
| 117 | +* fix @ root remapping in Blackboard::createEntryImpl (`#1192 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1192>`_) |
| 118 | +* validate backup size in BlackboardRestore (`#1182 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1182>`_) |
| 119 | +* Contributors: Arthur Chan, Aysha Afrah Ziya, Azer Ben Ali, DV (David Vadovszki), Davide Faconti, Golitsin Vyacheslav, Igor Stadnyk, Jonas Otto, KImanalieva, Lim Jooyoung, Nikola Kachmaryk, Varun Kumar, Victor Voronin, dependabot[bot], ktyang, simobenziane |
| 120 | + |
5 | 121 | 4.10.0 (2026-07-24) |
6 | 122 | ------------------- |
7 | 123 | * reject trailing characters in SwitchNode numeric comparison (`#1178 <https://github.com/BehaviorTree/BehaviorTree.CPP/issues/1178>`_) |
|
0 commit comments