(!Trigger ramp: !Attack s)
and the ramp down (from 1 to 0) could be done by:
((((!Trigger turnOnAfter: !Attack s for: !Release s) ramp: !Release s) * -1) + 1)
If you change the first expression to (!Trigger ramp00: !Attack s) then it will return to 0 after !Attack s. Then, if you take the max of your two expressions, you will get the up-down behavior you are aiming for. So
<expr1> vmax: <expr2>
Now, regarding the artifacts you are hearing: if an amplitude envelopes is not updating at the sample rate, you will perceive quantization in the envelope as a kind of "zipper" noise (the artefacts you are hearing).
The good news is that there are multiple ways to apply an envelope that updates at the sample rate. The Envelope parameter of the Oscillator, for example, is an audio rate parameter field (indicated by the light tan background color), so you can paste an AR or ADSR or other Sound into that field and remove the "L" to have a sample rate envelope.
Alternatively, you can multiply any Sound by an AR (or any other Sound) to apply an amplitude envelope. If the frequency or changing rate of one Sound is much faster than that of the other Sound, you perceive it as a (slower) amplitude envelope on the (faster) Sound.
Another trick you can use is to paste your Sound (and remove the L) into the Scale field of the AR or ADSR. The Scale field also updates at the sample rate.