Observing that filenames in the 'l' listing have the / slashes translated to \ format, but the subdir/ entry still has the slash as forward. Keeping a slash at the tail of a subdir entry is useful, identifying it as different from a zero size file.
Observing that the .size property for N=0 is being ignored, and would be useful if it returned total filesize instead of total item count.
This may be a limitation of the zip library, but it would be useful to have a parameter to alter the default compression level. For example specifying method=store when it's expected that the file can't be compressed, but is being zipped for either the password or for the crc32 verification of integrity.
Observing that the zip library isn't doing a fallback to storage when the file can't be compressed. This simplistic example creates a zip which compresses a 256-byte file to 261 bytes instead of storing as 256.
//var %size 256 | bset &v 1 $regsubex($str(x,%size),/x/g,$calc(\n -1) $chr(32)) | bwrite ascii.dat 0 %size &v | echo -a $zip(ascii.zip,c,ascii.dat)
Before $zip becomes established, it could be useful for the success to be the N number added to the zip instead of copying $compress which only compresses 1 file or not.
Conforming that 'e' is doing as you said, it's not extracting anything from a zip containing ../ or ..\. Not sure if it's intentional that in this case 'l' with N=0 reports 0. Not sure if 'l' should at least report filenames so people know why it failed.