• src/ssh/TODO.md design-channel-io-api.md

    From Deuc¨@VERT to Git commit to main/sbbs/master on Sat Mar 28 21:46:23 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/e15d0a14b8c4bbca3b9d7781
    Modified Files:
    src/ssh/TODO.md design-channel-io-api.md
    Log Message:
    Revise channel I/O design: dssh_chan_ API, RFC 4254 analysis, OpenSSH audit

    Major revision of design-channel-io-api.md based on deep-diving the
    RFC and reading the OpenSSH source. Key changes:

    - Document RFC 4254's underspecification: no ordering, multiplicity,
    or lifecycle constraints on channel requests; conventions are the
    de facto spec, not the protocol
    - Audit OpenSSH server (LARVAL state, initial_window=0, strict request
    gating) and client (non-zero window, no LARVAL, trusts server)
    - Both sides use initial_window=0 Ä safer than OpenSSH client behavior
    - Rename to dssh_chan_ prefix; zero-copy API uses dssh_chan_zc_
    - Channel type (shell/exec/subsystem) as parameter with union, not
    separate open functions; NULL params means defaults
    - dssh_chan_close() takes int64_t exit_code: negative means no
    exit-status, preserving full uint32 wire range (documents OpenSSH's
    exit-status truncation bug)
    - dssh_chan_shutwr() for half-close (EOF) with unambiguous naming
    - Signal, window-change, AND break delivered as stream-position
    callbacks during dssh_chan_read() Ä window-change is SIGWINCH
    - Zero-copy send: app writes directly into tx_packet buffer
    - Document current allocation costs and path to zero-malloc I/O

    Add TODO item 101: eliminate per-packet malloc in channel send path
    via scatter write into tx_packet.

    Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net