bca862ca01
- Add engine.Execute() that searches AD, iterates matches, runs actions, honors StopOnError and PreviewOnly, and supports context cancellation - Resolve base DN and search scope from rule override then connection defaults - Add actionExecutor covering AddToGroup, AddGroupToGroup, EnsureGroupExists, MoveToOu, and RemoveFromGroupIfNoLongerMatched with dynamic DN expansion - Add RuleRunRepository persisting rule_runs and rule_run_actions - Add Runner coordinator that loads rule+connection, builds an LDAP client, invokes the engine, and records the run + per-action outcomes - Expose ConnectionService.BuildClient / BuildLDAPConfig for reuse - Scheduler now accepts a RuleRunner and invokes it when a scheduled rule fires