{"version":"2.1.200","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.200\/e\/bug-fixes","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.200","markdown":"- `isDirEmptySync` was replaced with an async `opendir`-based empty-check, removing a synchronous I\/O call from the directory scan path (search for `\"isDirEmptySync\"` is now absent)\n- TeammateTool member removal now guards against stale removals: if a member re-joined between when a removal was initiated and when it executes, the removal is skipped with a log message `\"Skipped stale removal\"` (search for `\"re-added after removal was initiated\"`)\n- Observer pairing is now retired when a session resumes (`lir()` called on session start), preventing a stale observer from a previous run from being reused across sessions\n- `plansDirectory` validation now correctly handles the case where the configured path resolves to exactly the project root (previously the check `!s.startsWith(o + sep)` would incorrectly reject root-equal paths)\n- The `Cd(...)` rule check for paths containing control or invisible characters now suppresses the path from the error message to avoid terminal injection (search for `\"The rule text contains control or invisible characters, so it is not echoed here\"`)"}