So here's the thing. Once I knew where to look, I found the documentation for this. But the "call routing" part of your manual is not in the heading. The heading "Call Handling: Call queues, IVR & Ring Groups" caused me to gloss over that section because I didn't need a call queue, IVR or Ring Group. I'm one person.
"Setup your Team" has a section on creating users but says nothing about the office hours.
The fact that there's a direct DID assignment for the user implies to someone who's creating/setting up the user that they can just assign the DID to the user and they're done. In fact, it actually works correctly, which implies to the user that they did it right when they do a test call.
For the system to silently un-set the DID simply because the user is not assigned to an office hours ring group is EXTREMELY frustrating. For the free version to have zero logs, no way to intelligently understand what is going on with the system - even just basic logs here if that's all you want to give us and reserve detailed call logs for the paid group - is honestly a turn-off. I really like 3CX, especially the fact that I was up and running with minimal effort - an enough so that I'm trying to sell it to my customers. Someone who's trying out the software as an evaluation for going to a paid version is not likely to have the patience I have had. (And for what it's worth, I was very, very close to pulling the trigger and moving to another system which is probably more expensive, simply due to the bad experience I was having)
Two suggestions here:
1) You need to set up your UI to allow users to fail gracefully (yes even those damned free users who haven't decided to pay you yet). If the user-direct DID assignment isn't the _usual_ way to configure that, then put an info-dot or a notification. Or maybe better yet, put up a notification if the only call group / office hours doesn't yet have a DID assigned to it or doesn't have a user assigned.
2) Supply basic error logs - enough to troubleshoot a simple routing issue, inbound/outbound call failure, etc. The lack of any logs of any kind is insanely frustrating.
Lastly, stop assuming in your UI design that the user of the interface automatically knows what they need to do. It's very easy to overlook something, and when you're frustrated you're going to be even more prone to do so.