btFixedConstraint freeze objects

I am trying to ‘freeze objects together’ using Bullet (via JavaScript + Three.JS)

Here is my scene
https://codepen.io/PartyPants2/pen/emYLRPX?editors=0010

Here we see a Merry-go-round simulation, in which 8 horses are generated above a turntable/disc.

a 3d simulation of horses on a Merry-go-round

This GIF illustrates the system working as expected – the 8 horses (instances of bodyA) are frozen-in-place to the turntable/disc (bodyB)

However a problem becomes apparent when the disc (bodyB) has different rotation applied: the horses are being rotated by a factor of bodyB‘s rotation, knocking them off of their target axis.

a 3d simulation of horses on a Merry-go-round has tilted turntable and the horses are being tilted a disproportionally when constraints are activated2

When we turn on the physics, the FixedConstraints activate. Because the constraints are being misconfigured (in some way I am trying to determine) the horses are rotating disproportionately to the turntable.

I have tried every combination of absolute and relative rotations that I can think of (to the point of making an interface to trial different combinations), but the horses never adhere correctly to the turntable.

Here’s a simplified version of my btFixedConstraint implementation

// bodyA = the rigidBody being attached
// bodyB = what bodyA is being attached to
const applyFixedConstraint = (bodyA, bodyB) => {
    const relRotationAB = getRelativeRotation(bodyA, bodyB);
    const relPosBA = getRelativePosition(bodyB, bodyA);
    // FRAME IN A
    const frameInA = new Ammo.btTransform();
    frameInA.setIdentity();
    frameInA.getOrigin().setValue(0, 0, 0);
    frameInB.setRotation(new Ammo.btQuaternion(0,0,0,1)); // i.e. 'none'
    // FRAME IN B
    const frameInB = new Ammo.btTransform();
    frameInB.setIdentity();
    frameInB.getOrigin().setValue(relPosBA.x, relPosBA.y, relPosBA.z); 
    frameInB.setRotation(new Ammo.btQuaternion(relRotationAB.x, relRotationAB.y, relRotationAB.z, relRotationAB.w));
    // RESULT
    const fixedConstraint = new Ammo.btFixedConstraint(bodyA,bodyB,frameInA,frameInB); // this line doesn't "freeze items in the air" like it should
    physicsWorld.addConstraint(fixedConstraint, true);
    return fixedConstraint;
}

btFixedConstraint only has one constructor: new Ammo.btFixedConstraint(bodyA,bodyB,frameInA,frameInB); and since bodyA and bodyB are certain to be correct, only frameInA or frameInB could have the problem…

How can I calculate the correct frameInA and frameInB for freezing objects together using btFixedConstraint ?