When you include the same topic in more than one place in the output, to pull in content from that topic via conref, you must be able to designate the correct instance; you do this by specifying the map branch. To resolve a conref, DITA2Go applies the same rules as for cross references (see §9.6.4 Directing a cross reference to the correct branch):
<?dtall conrefbranch="branchname"
?>
A conref branch PI applies only to the very next element that has a conref.
If neither of these rules applies, the conref pulls content from the first instance of the topic.
So, to reuse descriptions from the duplicated topics, you can set up the <shortdesc> elements in product_intro.dita as follows:
<concept id="prodintro">
<title>Name of product with conditional ph
elements as needed</title>
<shortdesc><ph id="description">Text here, with
conditional ph elements.</ph></shortdesc>
...
</concept>
<p>The following products are
described here:
<ul>
<?dtall xrefbranch="productA" conrefbranch="productA"
?>
<li><xref href="product_intro.dita" />: <ph
conref="product_intro.dita#prodintro/description"/></li>
<?dtall xrefbranch="productB" conrefbranch="productB"
?>
<li><xref href="product_intro.dita" />: <ph
conref="product_intro.dita#prodintro/description"/></li>
</ul>
</p>
The two <li> elements are identical; the PIs direct each one to its own branch, so they pull in different content based on the conditions applied to those branches.