Retry listen(0)/bind(0) when the preferred port is taken, gated by
BARE_OS_BIND_FALLBACK (default on; set 0/false for strict bind).
- Add lib/bare-os-bind-fallback.js and use it from bare-os-www-initd and
bare-openssh (including privilege-path + holesail actual port).
- POSIX socket bridge in index.js: TCP listen and UDP bind fallbacks.
- bare-holesail + bare-holesail-managed: retry Holesail ready(); persist
resolved listen port in managed state when it changes.
- Add test.bare-os-bind-fallback.js.
holesail called run*(ctx, argv) with the boot-time closure ctx, so work
done from SSH used the REPL console while Object.assign child ctx had the
PTY stream. Add exeCtxForStockCli() (prefer this when this.vfs is set) and
delegate stock CLIs through it.
BARE_OS_SHELL_STREAMING=1, BARE_OS_SHELL_STREAMING_MULT=2,
BARE_OS_PIPELINE_MAX_BYTES (512 MiB), and BARE_OS_PIPELINE_MAX_LINES
(2M) so the high-throughput ~512 MiB burst profile does not require
pre-launch exports.
Align getconf Tier-1 statics with those bases; note legacy rc.profile
exports; refresh handbook, environment appendix, cookbook, and
bare-os-booter CHANGELOG.
Raise simulated pipeline absolute caps (defaults 512 MiB / 2 M lines) via
BARE_OS_PIPELINE_ABS_MAX_BYTES and BARE_OS_PIPELINE_ABS_MAX_LINES so large
BARE_OS_PIPELINE_MAX_* values take effect after streaming multiplier.
Copy missing host env into the guest (BARE_OS_IPC_MAX_CHANNELS, POSIX MQ
defaults, abs caps, BARE_OS_VFS_MAX_OPEN). Add aliases:
BARE_OS_STREAMING_MULTIPLIER → BARE_OS_SHELL_STREAMING_MULT,
BARE_OS_TIMER_BUDGET_MS → BARE_OS_EXEC_LINE_BUDGET_MS,
BARE_OS_TELEMETRY_OTEL=1 → default OTL JSONL path.
Extend POSIX mq_open defaults and maxmsg ceiling; mirror BARE_OS_VFS_MAX_OPEN
to RLIMIT_NOFILE in /proc/bare_os/rlimits.json.
Document the profile in the Pear cookbook and refresh pipeline limits in the
handbook; extend runtime caps env key list.
source via build.mjs). Ship lib/baresay-engine.js for wrapping, balloons,
and cowfile parsing; default character is bear under /share/baresay/.cow.
Register commands, man pages, rebuild man/completion/posix index, sync
kernel to seeder, bump Tier-1 command count in docs to 155, and add a
test that say and baresay bundles match.
views; gate legacy JSON with BARE_TOP_PROC_DETAIL_JSON.
Render nested snapshot fields via bareTopFormatNestedBrief instead of compact
JSON snippets (features, net helpers, overview).
Retitle help/initd copy and soften catalog quotas hint; document new env in
-h and F2 setup. Regenerate kernel baretop/btop bundles.
Shallow object lines format *Bytes and *Ms with existing formatters.
Enable xterm bracketed paste (?2004h/?2004l), parse ESC[200~…201~ as a single
paste event, insert paste in the buffer with one undo step, and replace
prompt input with first-line sanitized text capped by BARE_EDIT_MAX_PROMPT.
Cap typed prompt length for terminals without bracketed paste. Extend tests and
rebuild kernel /bin edit and nano bundles.
handles; use f.buf == null instead of !f.buf so empty buffers/strings do not
force SSH_FX_FAILURE on READ. READ accepts Buffer, typed views, or string after
WRITE.
Earlier in this branch: enqueueSftpReply(reqid) + FAILURE on errors; REQUEST.READ
validation in vendor bare-ssh2; coerce typed arrays to Buffer in SFTP.data and
Protocol.channelData/channelExtData. CHANGELOG notes.
Buffer.isBuffer or treated payloads as UTF-8, corrupting packets and risking
native aborts (bad_optional_access). Normalize ArrayBuffer views in
SFTP.prototype.data and Protocol channelData/channelExtData; align READ shim.
Also includes earlier SFTP hardening: REQUEST.READ/WRITE/FSETSTAT guards,
enqueueSftpReply(reqid) + FAILURE on handler error, CHANGELOG.
- Document interactive shell vs /bin/sh in bare-os-shell man, handbook §9,
kill(1), and shell-completion guide
- Resolve kill %n and %% to synthetic PIDs via shellBackgroundJobs
- Add disown builtin; jobs -p (pgid-only) and -l (pid column); set -o/+o to
print errexit/nounset/pipefail/noglob
- Expand completion-engine fallback flags for common utilities
- Persist lines to /.bare/repl_history_<USER> when BARE_OS_REPL_HISTORY=1
and Fish REPL is off (repl-session + cli-readline)
- Tests: kill job specs, set -o output, jobs -p
Queue all outbound SFTP responses (including READ/CLOSE) so async handlers
(REALPATH, STAT, OPENDIR, READDIR, …) cannot reorder packets vs strict clients.
Handle EXTENDED/SETSTAT/FSETSTAT via the same queue instead of bare-ssh2’s
immediate OP_UNSUPPORTED fallback.
Allow SFTP clients to reach the same logical paths as the shell (system
image, pseudo, home, mounts), deny mutating OPEN on typical read-only
prefixes, merge file/dir handle IDs to avoid collisions, implement FSTAT,
stat-based READDIR NAME attrs/longnames, and improve REALPATH.
Add brittle tests for path policy and wire test.bare-openssh-sftp.js into
npm test.
Fish and bare-readline end the edited line with LF only; many SSH PTYs do not
return the cursor to column 0, so ls/man and other command output started
mid-row. Write `\r` after releasing the line editor and before execShellLine
to align output with the peer terminal.
completion) when BARE_OS_FISH is not 0, matching the in-app terminal.
Keep bare-readline + per-command recycle only as fallback. Wire
suspendReplForSubprocess / resumeReplAfterSubprocess on the SSH child ctx to
suspendFishStdinForSubprocess / resume on the channel stream so baretop and
edit release the correct stdin.
Teardown: disableFishRawMode + releaseFishStdin when the session ends.
PTY env sync now only updates COLUMNS and LINES. Writing the client TERM
(e.g. xterm-256color) into the forked session env enabled baretop’s default
incremental line-diff, which mis-renders over SSH. Inherited guest TERM is
unchanged, matching in-app terminal behavior.
multiline output (e.g. man, bare-slice pager) matches real PTY behavior and
avoids misaligned lines vs the peer terminal.
Mirror pty-req TERM and dimensions into forked session vfs.env (COLUMNS,
LINES) when bareOsForkShellEnv is used; clear target on session end.
Add bare-openssh-pty-console helper module and brittle tests; re-export
formatter from bare-openssh for API parity.
AsyncFunction bodies used global console.log, so ./script.js output over SSH
went to Pear instead of the session TTY. Prepend var console = ctx.console
when ctx.console is present.
bare-readline treats empty prompt as falsy and defaults to ">"; each SSH
readline recycle painted that before setPrompt. Pass initialPrompt from
the real PS1, defer first attach until after profile/barerc, and skip the
extra \\r\\n after recycled bare-readline.
Close bare-readline before each execShellLine and attach a new session
afterward so fullscreen apps own stdin; avoids a corrupted KeyDecoder
and a frozen prompt when baretop/edit exit.
Wire pty-req and window-change to set columns/rows on the session
stream so /bin/edit (nano) and similar apps use the real terminal
geometry instead of defaulting to 80x24.