• src/syncterm/Wren.adoc src/syncterm/scripts/syncterm.wren wrentest.wre

    From Deuc¿@VERT to Git commit to main/sbbs/master on Tue Apr 28 17:47:40 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/9f1ed0221b7e8d4c67967ede
    Modified Files:
    src/syncterm/Wren.adoc src/syncterm/scripts/syncterm.wren wrentest.wren src/syncterm/wren_bind.c
    Log Message:
    SyncTERM: File.sha1 / File.md5 + missing docs and tests

    File.sha1 and File.md5 hash the file's full content via xpmap and
    the existing src/hash sha1.c / md5.c. Zero-length files are
    special-cased to an empty buffer because xpmap rejects 0-sized
    maps. Returned as raw digest bytes (Wren strings are byte-safe)
    so they compare directly against SFTPEntry.hash from the
    sha1s@syncterm.net / md5s@syncterm.net SFTP extensions; format hex
    yourself if you need it for display.

    Also catches Wren.adoc + wrentest.wren up to recent work that
    shipped without docs / tests:

    - New Wren.adoc sections for Platform, Timer (+ TimerElapsed), SFTP
    (+ FileFlag, SFTPEntry, SFTPStat, SFTPHandle, SFTPError, and the
    shared async-op pattern used by Timer / SFTP / Input.nextEvent).
    File doc gets the sha1 / md5 row added.

    - wrentest.wren coverage:
    Platform.name returns non-empty String.
    File.sha1 / File.md5 of an empty file (exercises the
    zero-length code path) and of "hello" (exercises xpmap).
    Timer.trigger(ms=0) parks a fiber, the doterm sweep marks it
    past-due, the drain resumes with a TimerElapsed.

    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net