77888c1a9c
Four invariants the comments claimed and the code did not hold. The recording lived in mavend's heap as one growing []byte, doubled at Stop when the WAV was built. Frames now go to a spool file and the transcript is read back off disk one window at a time, so memory is flat whatever the length. A store failure returned before transcription ran, so a meeting over the blob cap produced no transcript, no summary and no note. It now records the failure and keeps going, and the spool file survives until the words have been read off it. The session had no owner. Any module on the write rung could call stop on a recording it did not start and receive the verbatim words of everyone in the room. Start hands back a token and append, stop and abort require it. The duration cap was only checked when a frame arrived, so a phone whose tab was closed left the slot occupied and every later start answered ErrBusy with a meeting from last week. The wall clock is checked in start, status, append and stop. Smaller things in the same pass. Append compares the frame format against the session format, so a client that switches sample rate mid meeting no longer has its frames concatenated under a header that lies. One failed STT window leaves a marker instead of discarding the other twenty four. Summarize is separate from Stop and assigns the salvaged per chunk text before it reports the error. Found in review of #73.