Gestion des rôles dans les deux sens

Je tourne en rond sur la gestion des rôles.
J’ai fait un proto rapide avec la fabrique, j’ai un objet A qui déclare des rôles dans sa liaison avec un objet B, par une table de liaison spip_A_liens.

Dans la déclaration de A, j’ai bien :

	'roles_colonne' => 'role',
	'roles_titres' => [
		'role1'=>'A:role_role1',
		'role2'=>'A:role_role2',
	],
	'roles_objets' => [
		'B' => [
			'choix' => ['role1', 'role2'],
			'defaut' => 'role1'],
	],

Dans le pipeline affiche_milieu, la fabrique a bien généré

	// A sur les B
	if (
		$e
		and !$e['edition']
		and in_array($e['type'], ['B'])
	) {
		$texte .= recuperer_fond('prive/objets/editer/liens', [
			'table_source' => 'A',
			'objet' => $e['type'],
			'id_objet' => $flux['args'][$e['id_table_objet']]
		]);
	}

Et sur la vue d’un B, je peux donc associer des A avec leurs rôles.

Mais je tourne en rond pour faire l’inverse, avec une déclaration dans le pipeline, pour associer des B sur la vue des A :

	// B sur les A
	if (
		$e
		and !$e['edition']
		and in_array($e['type'], ['A'])
	) {
		$texte .= recuperer_fond('prive/objets/editer/liens', [
			'table_source' => 'B',
			'objet' => $e['type'],
			'id_objet' => $flux['args'][$e['id_table_objet']],
			'lien' => $e['type']
		]);
	}

J’ai bien une interface pour l’association de B sur la vue d’un A, mais sans les rôles.

J’ai suivi le code : c’est parce que dans le cas de B sur A roles_presents ne renvoie rien :
https://git.spip.net/spip/prive/-/blob/2.x/formulaires/editer_liens.php?ref_type=heads#L123
et c’est donc le squelette objets/liste/A_lies.html qui est appelé au lieu de objets/liste/A_roles_lies.html

J’ai l’impression qu’il y a un manque et que ce n’est pas possible à faire en restant dans les clous.
Me trompe-je ?