<h2>Direct answer</h2>
<p>There is no standard Rexx built-in that lists all qualifiers assigned to a stem. The most efficient portable configuration is an external index maintained alongside the stem: a count variable such as <code>stem.index.0</code> and one entry per assigned qualifier, for example <code>stem.index.1 = 'customer42'</code>. Iterate the index, not the stem, to guarantee complete coverage after additions and deletions.</p>
<h2>Established behavior versus likely explanation</h2>
<p>Established behavior: Classic Rexx and Object Rexx provide per-name existence tests such as <code>SYMBOL('stem.qualifier')</code>, but they do not expose a registry or <code>keys()</code> equivalent for stems. Deleted qualifiers leave no discoverable trace in the stem itself. Object Rexx <code>Directory</code> and <code>Map</code> classes can iterate keys, but they are collection objects, not stem variables, and require rewriting stem-based code.</p>
<p>Likely explanation: the uncertainty comes from treating a stem as an introspectable associative array. Rexx stems are compound variables; the interpreter may track assigned qualifiers internally, but that internal table is not part of the portable language interface.</p>
<h2>Steps for this case</h2>
<ol>
<li>Create an index stem, for example <code>track.</code>, parallel to your data stem <code>data.</code>.</li>
<li>On every assignment, append the qualifier: <code>track.0 = track.0 + 1; track.track.0 = qualifier</code>.</li>
<li>On every deletion, remove the qualifier from <code>track.</code> and compact the index, or mark it as deleted and skip tombstones during iteration.</li>
<li>Iterate <code>1</code> through <code>track.0</code>, read each stored name, then access <code>data.qualifier</code>.</li>
</ol>
<h3>Example pattern</h3>
<pre>
data.customer42 = 'active'
track.0 = track.0 + 1
track.track.0 = 'customer42'
do i = 1 to track.0
q = track.i
say q data.q
end
</pre>
<h2>Assumptions and uncertainty</h2>
<p>This assumes you control every write path to the stem. If a library or legacy module assigns <code>data.q</code> without updating <code>track.</code>, the index goes stale and iteration misses qualifiers or reads phantom entries. I have not verified your Rexx implementation, so implementation-specific internals or source parsing are not recommended; they are not portable.</p>
<h2>Verification</h2>
<p>Run a small script in your target interpreter:</p>
<pre>
data.a = 1
data.b = 2
say symbol('data.a')
say symbol('data.z')
</pre>
<p>Expect per-name existence results only; no standard call should return both <code>a</code> and <code>b</code>. Then confirm your external index matches the stem after an interleaved insert and delete.</p>
<h3>Missing diagnostic detail</h3>
<p>Are all assignments to the stem performed in code you can modify, or do external modules also write to it? This changes whether a manual index is sufficient or whether you should switch to an Object Rexx collection.</p>