Tracked the problem down. It appears to have regressed in the recent CompScreen class cleanup.
The problem is that CompAction::KeyBinding::fromString fails for CoreOptions, because CoreOptions is being constructed before ::screen is initialized (it only needs the dpy member of ::screen).
This is a tricky problem because CoreOptions is now always constructed before PrivateScreen::init. However a fix for the bug requires that at least the dpy initialization of PrivateScreen::init needs to happen BEFORE CoreOptions construction.
Fundamentally, I think the bigger design issue is that *Options is doing way too much initialization in its constructor(s). This bug could also be fixed by separating CoreOptions construction from initialization, and ensure the initialization happens after PrivateScreen::init.
Tracked the problem down. It appears to have regressed in the recent CompScreen class cleanup.
The problem is that CompAction: :KeyBinding: :fromString fails for CoreOptions, because CoreOptions is being constructed before ::screen is initialized (it only needs the dpy member of ::screen).
This is a tricky problem because CoreOptions is now always constructed before PrivateScreen: :init. However a fix for the bug requires that at least the dpy initialization of PrivateScreen::init needs to happen BEFORE CoreOptions construction.
Fundamentally, I think the bigger design issue is that *Options is doing way too much initialization in its constructor(s). This bug could also be fixed by separating CoreOptions construction from initialization, and ensure the initialization happens after PrivateScreen: :init.