The sensitive volume is not optional, it is a mandatory volume. Therefore, I find it more convenient to force its definition inside <storage.
I am open to other ways to define the XML, however, we should try to keep the nomenclature fixed. Here you are changing sensitiveVolume by triggerStore, people will be confused by this change because they are already used to the concept of sensitiveVolume.
I believe we should try to keep as close to the actual definition as possible.
Please, notice that we may have the option to define a sensitive volume where hits are not stored. Thus, in your second proposal.
<storage sensitiveVolume="gas" energyRange="(0,10)keV">
<addOn volume="shielding" energyRange="(0,1)MeV" />
<addOn volume="veto" energyRange="(500,0)eV" />
</storage>
the hits inside the gas volume will not be stored.
So, the sensitive volume may need to be re-defined as an active volume. The only inconvenience of my proposal is that I define 2 energyRanges (0,10)keV for the gas volume, one as sensitive volume, and other as active volume.
If energyRange is not defined we should leave it without any constrain. So, I could just do.
<storage sensitiveVolume="gas" energyRange="(0,10)keV" />
<activeVolume name="gas" />
<activeVolume name="shielding" energyRange="(0,1)MeV" />
<activeVolume name="veto" energyRange="(500,0)eV" />
</storage>
Here I see no inconvenience. If I remove the <activeVolume name="gas" line I will just do not register the hits on that volume. But I will require an energy deposit in the gas volume between 0 and 10keV to register the event.
If energyRange is not defined for the volume the default energyRange will be set to (0,0). which means from 0 to infinite.