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