{"version":"2.1.86","anchor":"bug-fixes","canonical_anchor":"bug-fixes","heading":"","tier":null,"area":null,"scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.86\/e\/bug-fixes","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.86","markdown":"- Directory removal is now more robust \u2014 uses a single `rmdir` call and handles `ENOTDIR`\/`ENOENT`\/`ENOTEMPTY` errors gracefully instead of manually checking if a directory is empty first (search for `\"Could not remove directory at\"`)\n- Lock acquisition failure logging simplified \u2014 always wraps errors with a `cause` chain instead of conditionally stringifying (search for `\"NON-FATAL: Lock acquisition failed\"`)\n- Skill usage tracking now debounces writes with a minimum interval, preventing rapid config updates when a skill is invoked repeatedly (search for `\"skillUsage\"` in `bI8()`)\n- SwarmPermissionPoller now validates and drops malformed permission update entries with a warning instead of crashing (search for `\"[SwarmPermissionPoller] Dropping malformed permissionUpdate\"`)\n- Advisor feedback message wording corrected: \"will apply the feedback\" (was: \"will now apply the feedback.\") (search for `\"Advisor has reviewed the conversation and will apply the feedback\"`)"}