Skip to content

feat(transcribe): name who said each line; Master.csv of any size; limits in plain words - #25

Merged
leemour merged 2 commits into
mainfrom
feat/limits-and-plain-docs
Nov 14, 2026
Merged

leemour merged 2 commits into
mainfrom
feat/limits-and-plain-docs

Conversation

@leemour

@leemour leemour commented Nov 14, 2026

Copy link
Copy Markdown
Member

Task

Remove the size caps that exist only because files were read whole, label the two channels of a stereo recording with the real people, and rewrite the README limits and the overview's "What it does not do yet" so a reader sees first what works.

Why

  • Master.csv over 512 MB was refused, because it was read into memory whole.
  • A one-hour 48 kHz stereo WAV (about 690 MB) was refused by the 256 MB recording cap, although cli-core accepts an hour of audio.
  • Stereo transcripts said Channel 1 / Channel 2, which nobody can act on.
  • The owner could not understand the Limits lines: they read as weaknesses ("CEL, AMI and ARI are not read", "mono … no speakers") when they describe what is supported.

What

  • Master.csv streamed (src/cdr/csv.ts, src/cdr/reader.ts, src/files.ts): FileAccess.stream; the CSV parser keeps its state across pieces (quote, doubled quote, CRLF, quoted newline), UTF-8 decoded with stream: true, and rows older than the sync are dropped by their start time before the full row is read. Stream errors name no path (WC-SECR-6). Over SFTP, cli-core's client reads only whole files, so stream yields one read capped at 512 MB (src/sftp-files.ts).
  • Recordings (src/transcribe-calls.ts): what ffmpeg decodes (WAV, GSM, M4A, SLN) up to 2 GiB − 1 byte; MP3/Ogg/FLAC stay at 256 MB, since the bundled decoders decode the whole file before cli-core checks the hour. The local read no longer copies the buffer.
  • recordings_channels (caller,employee | employee,caller), validated in src/config.ts: stereo lines name the caller (name + number) and the employee (extension + name) from the stored call; without it, Channel N. Not declared with a default: absence means something no value says (WC-CMD-30). Meeting metadata gains client.
  • Docs (WC-DOC-8): README Limits, docs/index.md (H1 # Asterisk, new "What it does not do yet"), docs/installation.md (Desktop's Countries of your phone lines field, sizes, channel labels), docs/configuration.md, docs/roadmap.md.
  • Changelog fragment changes/feat-limits-and-plain-docs.md (Added, Fixed; WC-DOC-15).

Testing

  • pnpm lint, pnpm typecheck, pnpm test (152 passed, one worker), pnpm docs:check, generate:check, contracts:check, lint:commands, audit:commands, test:matrix:check, security:no-leak, version:check, package:check.
  • New tests: the parser gives the same rows for every split of a tricky text; a generated 4 MB Master.csv (more than one 1 MB read piece, Cyrillic names, CRLF inside a field) keeps only new rows; a missing file names no path; stereo labels with and without the setting; a bad value is refused; per-format recording caps.
  • Built CLI with throwaway HOME/XDG and DBUS_SESSION_BUS_ADDRESS=disabled:: a generated 629 MB Master.csv synced with a 458 MB peak RSS (old code refused it). A generated one-hour 48 kHz stereo WAV (690 MB) through cli-core's decodeChannels peaked at 1.43 GB RSS.

🤖 Generated with Claude Code

leemour and others added 2 commits November 14, 2026 08:05
…e; plain-word limits

- Master.csv on this computer or a mounted folder is read as a stream, line by
  line: the CSV parser keeps its state across pieces (a quote, a doubled quote,
  CRLF or a quoted newline split between pieces), and a row older than the sync
  is dropped by its start time before the whole row is read. The 512 MB cap is
  gone for local files. cli-core's SFTP client only reads a file whole, so over
  SFTP the file is still read whole, up to 512 MB. A stream error names no path
  (WC-SECR-6). A generated 600 MB Master.csv synced with a 458 MB peak.
- Recordings that ffmpeg decodes (WAV, GSM, M4A, SLN) can be up to 2 GB: its
  output stops at an hour, and a 690 MB hour of 48 kHz stereo WAV peaked at
  1.4 GB. MP3, Ogg and FLAC stay at 256 MB, since the bundled decoders decode
  the whole file before the hour is checked. A local read no longer copies the
  file's buffer.
- recordings_channels (caller,employee or employee,caller) names each channel
  of a stereo recording: the caller by name and number, the employee by
  extension and name, from the stored call. Without it, Channel 1 and Channel 2
  as before. Not a declared setting: its absence means something no value says
  (WC-CMD-30). A call's metadata keeps the caller's number as client.
- README Limits, the overview's "What it does not do yet", install and connect
  (the Desktop connect form's Countries of your phone lines field) and the
  roadmap say first what the reader can do, in plain words (WC-DOC-8). The
  overview's H1 is "Asterisk", for the site's sidebar.
- Changelog fragment under Added and Fixed (WC-DOC-15).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…recordings under 2 GiB

- The connect form's Countries of your phone lines hint quoted as Desktop has it.
- M4A goes through ffmpeg too, so it loses the speakers like WAV and GSM.
- SFTP explained in each sentence that names it.
- The recording cap is one byte under 2 GiB, the most Node's readFile reads.
- The changelog says a call imported earlier needs one sync before --replace
  gives its caller's number.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@leemour
leemour merged commit e13f178 into main Nov 14, 2026
26 of 27 checks passed
@leemour leemour mentioned this pull request Nov 14, 2026
leemour added a commit that referenced this pull request Nov 14, 2026
* chore(release): 0.5.0

Collects the two changes/ fragments into ## 0.5.0 — 14.11.2026 and raises the version: who said each line, Master.csv of any size (#25), cli-core 0.663.0 and cli-base 0.100.0 (#26).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(release): live check of 0.5.0 passed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant