_  _    __    ___  __    ___  _____  _  _
 ( \( )  /__\  / __)(  )  / __)(  _  )( \( )
  )  (  /(__)\( (__  )(__( (__  )(_)(  )  (
 (_)\_)(__)(__)\___)(____)\___)(_____)(_)\_)

The History of Hacking  ·  May 31 – June 2, 2026  ·  Carolina Beach, NC

Connect from your terminal: telnet naclconbbs.net 23  |  ssh naclconbbs.net -p 2222

  • .claude/skills/jsexec/SKILL.md

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Fri May 29 00:55:34 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/3302985c18d7e05422f1249d
    Modified Files:
    .claude/skills/jsexec/SKILL.md
    Log Message:
    .claude/skills/jsexec: per-user ARS check pattern + stdout buffering gotcha

    Two findings from chat-index work and regression-suite debugging:

    1. Checking access against a specific user under jsexec.
    The natural-looking accessors (sub.can_read, dir.can_download)
    evaluate against the implicit session user -- which under jsexec
    doesn't exist, so they return true for everything. Document the
    reliable pattern: instantiate User(N) and walk the ownership
    chain calling u.compare_ars() on each ARS string conjunctively.
    Also note that the global "user" lowercase = useron in C++ -- it
    is undefined under jsexec, distinct from the User constructor.

    2. stdout / stderr / stdin are global File instances. They have a
    .flush() method that fflushes the underlying FILE*. The gotcha:
    print() goes through C stdio, which block-buffers (~4KB) when
    stdout is redirected to a file or pipe. A long-running script
    looks stalled under tail -f even though it's progressing. Route
    output through stdout.writeln() + stdout.flush() to make it
    line-buffered against the redirected FD.

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

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