BBS:      TELESC.NET.BR
Assunto:  .claude/skills/jsexec/SKILL.md
De:       Rob Swindell (on Windows 11)
Data:     Fri, 29 May 2026 00:55:34 -0700
-----------------------------------------------------------
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) 
n
---
  mSynchronetn  hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net

-----------------------------------------------------------
[Voltar]