Finally, I found it because my imapd.conf was set altnamespace: on
I searched the repository in GitHub by keyword "shared account", then found Cassandane and a new keyword "$session->{accounts}".
Searching "$session->{accounts}", get Cassandane/Cyrus/JMAPCore.pm. But the setacl is the same as my operation.
After that, I built cassandane and try Cassandane::Cyrus::JMAPCore to get it passing. Subsequently, I noticed the test instance's imapd.conf set altnamespace: no
With altnamespace-off, `user.*` is used to match "other users" accounts. And with altnamespace-on, we need `Other Users.*` here.
Since `altnamespace` has been defaulted set to on from off since 3.0. Now I think it is a bug need to be fixed.