9ff09dceaf
Three concurrent refinements from the same work batch: 1. sessiond/manager.rs + runtime_state.rs: switch inhibitor_fds from HashMap<u64, StdOwnedFd> to HashMap<i32, TrackedInhibitorFd> so each inhibitor carries both its numeric id and the OwnedFd that needs to be closed when the caller FD vanishes. The TrackedInhibitorFd newtype wraps (inhibitor_id, _fd) and lets reap-on-vanish use the keyed fd handle to take() out of the map cleanly. The dead_senders code path now collects daemon_fd() values directly instead of round-tripping through Vec<u64>. 2. wifictl/dbus_nm.rs: introduce AccessPointExport type alias (OwnedObjectPath, AccessPointInterface) and rename access_point_interfaces -> access_point_exports returning the same shape. access_point_paths now derives from the exports list (avoiding the parse-then-rebuild cycle) and a new all_access_point_paths() passes through. All call sites in serve_on_thread get a single coherent exports() call instead of duplicate path/interface computations. 3. recipes/wip/wayland/qt6-wayland-smoke: correct the relative symlink target from ../../../local/recipes/wayland/qt6-wayland-smoke to ../../../../local/recipes/wayland/qt6-wayland-smoke. The symlink resolves correctly either way (filesystem lookup succeeds) but the git tree now records a path that is one level more explicit and matches the canonical Red Bear recipe symlink convention used elsewhere in recipes/wip/. Verified via grep that no callers of the old HashMap<u64, StdOwnedFd> shape remain; all switched to the new TrackedInhibitorFd type. The sessiond-vs-dead_senders race that motivated the FD tracking is now correctly closed by taking the daemon_fd handle out of the map under the same Mutex that updates runtime.inhibitors.