First of all, thank you for continuing to test these builds. I know that repeatedly installing a new driver and then waiting more than ten minutes to see whether anything changed is becoming frustrating.
The important point is that the driver is working correctly: the valve can be opened and closed, water consumption is reported, and the SmartThings timer works. The remaining problem is the valve’s own internal manual-watering limit, which is stored in SONOFF’s private Zigbee attribute 0x501D.
Unfortunately, this is not a normal numeric Zigbee setting. It is part of a complete 12-byte manual_default_settings configuration containing the watering mode, duration, interval, volume unit, volume and fail-safe timeout. The valve appears to reject the entire write when even the framing or array serialization differs slightly from what its firmware expects.
The repeated test versions have therefore not been random changes. Each one tested a different interpretation of the private protocol:
test11 standard Zigbee frame, simplified array
test12 manufacturer-specific frame, simplified array
test13 manufacturer-specific frame, private SONOFF-style array
test14 manufacturer-specific frame, complete Z2M-style configuration
test15 standard Zigbee frame, complete Z2M-style configuration
The logs from the earlier versions showed that the normal On command was accepted, while the 0x501D configuration write was rejected. That is why the valve opened normally but still closed itself after approximately ten minutes.
SmartThings is not the only integration having trouble. Zigbee2MQTT currently has an open issue specifically about the SWV-ZFE because its documented timed-control methods are unreliable on real hardware. Users there report that on_time may not open the valve at all, which is the same behaviour we observed when testing OnWithTimedOff on SmartThings. The only repeatedly successful Zigbee2MQTT sequence reported there was to write the complete manual settings first and then send a normal On command.
Zigbee2MQTT also recently had to revert changes to these settings after it became clear that fields such as the duration and fail-safe cannot safely be written independently. The complete configuration has to be sent atomically in one transaction, which confirms that this device protocol is more complicated than it initially appears.
ZHA support for the Hydro ONE and Hydro DUO family is also still being developed in an open pull request. It adds device identification and sensor support, but it does not currently provide a hardware-verified solution for changing this internal manual-watering limit.
A Home Assistant user did confirm that changing the Manual Default Settings through Zigbee2MQTT raised the valve’s limit from around 10 minutes to 15 minutes. That proves that 0x501D is the correct setting, but it does not tell us exactly how SmartThings must serialize the write on the Zigbee wire.
Test15 is currently the most evidence-based implementation. It mirrors the current Zigbee2MQTT code as closely as SmartThings Edge allows:
standard, non-manufacturer-specific Write Attributes frame
standard Zigbee Array with Uint8 elements
complete 12-byte manual_default_settings configuration
normal On command after the settings write
It is therefore not simply another speculative variation. It tests the combination that the current Zigbee2MQTT source appears to use.
I do not intend to keep asking for endless tests of versions that merely rearrange bytes. If test15 is also rejected, the next meaningful step will be to capture a known-working raw Zigbee2MQTT transaction and compare it byte for byte with the SmartThings packet. That would require to buy a device and test it on a different platform. At that point the problem is most likely SmartThings’ low-level array serialization rather than the logical values being sent.
One final test15 test, preferably with logs, would therefore give me a clear answer about whether this approach works or whether we need to move to a raw packet comparison. 
Thank you again for the time and patience you have already invested. Even the unsuccessful tests have narrowed the problem considerably and prevented unverified behaviour from being released as a finished solution.
CC: @Pajacyk0v