Files
bare-operating-system/packages/bare-os-seeder/kernel/share/man/man.json
T
Raven Scott f63a3a8054
Release rolling / release (push) Failing after 3m42s
update
2026-08-13 02:03:06 -04:00

2 lines
1.3 MiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"schemaVersion":1,"generatedAt":"2026-08-13T06:02:34.432Z","pages":[{"name":"agent","section":1,"title":"agent","synopsis":["agent [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of agent. Full behavior is defined in packages/bare-os-coreutils/src/agent.js.","options":[],"keywords":["agent","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"appctl","section":1,"title":"appctl","synopsis":["appctl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of appctl. Full behavior is defined in packages/bare-os-coreutils/src/appctl.js.","options":[],"keywords":["appctl","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"appstore","section":1,"title":"appstore","synopsis":["appstore list | info NAME | install NAME pear://LINK --yes","appstore launch NAME | update NAME | uninstall NAME","appstore setup | search [query] | services [NAME]"],"description":"P2P App Store client for Bare OS. Installs packages from pear:// links by copying the release Hyperdrive tree into ~/.appstore/packages/ (or /mnt/appstore when the appstore HDMS drive is mounted). install uses lib/appstore-pear.js: prefers a local HDMS mount with the same key, otherwise opens an ephemeral readonly HDMS mount and mirrors files over VFS. launch runs the materialized entry script (package.json main, usually sources/index.js) in the guest shell via ctx.console. Requires login for remote pear:// fetch. See docs/guides/guest-pear-and-appstore-workflow.md.","options":[],"keywords":["appstore","bare-os","coreutils","pear","p2p","hdms"],"listCategory":"coreutils"},{"name":"arch","section":1,"title":"arch","synopsis":["arch [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of arch. Full behavior is defined in packages/bare-os-coreutils/src/arch.js.","options":[],"keywords":["arch","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"awk","section":1,"title":"pattern scanning and processing language","synopsis":["awk [OPTION]... [OPERAND]..."],"description":"Pattern-directed scanning and processing. Engine in lib/awk-engine.js; not full POSIX awk.","options":[],"keywords":["awk","pattern","field","script"],"seeAlso":[{"name":"sed","section":1},{"name":"grep","section":1}],"bareOsNotes":"See handbook ch.9 for divergence from Issue 7.","examples":[{"caption":"print column 1","code":"awk '{print $1}' file.txt"},{"caption":"field separator","code":"awk -F: '{print $1}' /etc/passwd"},{"caption":"sum numbers in first column","code":"awk '{s+=$1} END{print s}' nums.txt"},{"caption":"lines matching /re/","code":"awk '/error/{print NR\": \"$0}' log.txt"}],"listCategory":"coreutils"},{"name":"baretop","section":1,"title":"baretop","synopsis":["baretop [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of baretop. Full behavior is defined in packages/bare-os-coreutils/src/baretop.js.","options":[],"keywords":["baretop","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"btop","section":1,"title":"btop","synopsis":["btop [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of btop. Full behavior is defined in packages/bare-os-coreutils/src/btop.js.","options":[],"keywords":["btop","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"base32","section":1,"title":"base32","synopsis":["base32 [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of base32. Full behavior is defined in packages/bare-os-coreutils/src/base32.js.","options":[],"keywords":["base32","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"base64","section":1,"title":"base64","synopsis":["base64 [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of base64. Full behavior is defined in packages/bare-os-coreutils/src/base64.js.","options":[],"keywords":["base64","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"basename","section":1,"title":"strip directory and suffix from pathnames","synopsis":["basename [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of strip directory and suffix from pathnames. Full behavior is defined in packages/bare-os-coreutils/src/basename.js.","options":[],"keywords":["basename","bare-os","coreutils"],"examples":[{"caption":"strip directory","code":"basename /home/user/docs/readme.md"},{"caption":"strip suffix","code":"basename -s .md /path/readme.md"}],"listCategory":"coreutils"},{"name":"baresay","section":1,"title":"baresay","synopsis":["baresay [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of baresay. Full behavior is defined in packages/bare-os-coreutils/src/baresay.js.","options":[],"keywords":["baresay","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"basenc","section":1,"title":"basenc","synopsis":["basenc [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of basenc. Full behavior is defined in packages/bare-os-coreutils/src/basenc.js.","options":[],"keywords":["basenc","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"cat","section":1,"title":"concatenate and print files","synopsis":["cat [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of concatenate and print files. Full behavior is defined in packages/bare-os-coreutils/src/cat.js.","options":[],"keywords":["cat","bare-os","coreutils"],"examples":[{"caption":"stdout several files","code":"cat a.txt b.txt"},{"caption":"number lines (use nl)","code":"cat -n file.txt # if supported; else nl file"},{"caption":"here-string via echo pipe","code":"echo hello | cat"}],"listCategory":"coreutils"},{"name":"chat","section":1,"title":"chat","synopsis":["chat [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of chat. Full behavior is defined in packages/bare-os-coreutils/src/chat.js.","options":[],"keywords":["chat","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"chgrp","section":1,"title":"change file group ownership","synopsis":["chgrp [OPTION]... [OPERAND]..."],"description":"Updates group metadata on the personal Hyperdrive for writable paths (session home, $HOME, /tmp, /var/log).","options":[],"keywords":["chgrp","bare-os","coreutils"],"bareOsNotes":"Uses vfs.chown with preserved uid; system image paths are read-only. See packages/bare-os-booter/lib/vfs.js.","examples":[{"caption":"set group by name","code":"chgrp guest shared.conf"}],"listCategory":"coreutils"},{"name":"chmod","section":1,"title":"change file mode bits","synopsis":["chmod MODE FILE...","MODE is octal (e.g. 644) or symbolic (e.g. u+rw)"],"description":"Sets file mode bits on the VFS. Supports POSIX-style symbolic modes (u/g/o/a, +/-/=, rwxX) and octal modes.","options":[],"keywords":["chmod","mode","permission","octal","symbolic"],"diagnostics":["chmod: No such file","chmod: invalid mode"],"bareOsNotes":"Applies to Hyperdrive metadata; not a host inode.","examples":[{"caption":"octal","code":"chmod 644 ~/.profile"},{"caption":"recursive-ish (run find + chmod per file)","code":"find . -type f -name \"*.sh\" -print"},{"caption":"symbolic user bits","code":"chmod u+x script.sh"},{"caption":"all read, owner write","code":"chmod a+r,u+w shared.txt"}],"listCategory":"coreutils"},{"name":"chown","section":1,"title":"change file owner and group","synopsis":["chown [OPTION]... [OPERAND]..."],"description":"Updates uid/gid metadata on the personal Hyperdrive where the booter allows writes; euid 0 may set any owner.","options":[],"keywords":["chown","bare-os","coreutils"],"bareOsNotes":"OWNER/GROUP may be numeric or root/guest/nobody/current user. See vfs chown and identity env UID/GID.","examples":[{"caption":"group only","code":"chown :guest file.txt"},{"caption":"numeric ids","code":"chown 1000:1000 notes.txt"}],"listCategory":"coreutils"},{"name":"cksum","section":1,"title":"write file checksums and sizes","synopsis":["cksum [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of write file checksums and sizes. Full behavior is defined in packages/bare-os-coreutils/src/cksum.js.","options":[],"keywords":["cksum","bare-os","coreutils"],"examples":[{"caption":"checksum file","code":"cksum iso.img"},{"caption":"verify pipeline","code":"cat f | cksum"}],"listCategory":"coreutils"},{"name":"clear","section":1,"title":"clear the terminal screen","synopsis":["clear [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of clear the terminal screen. Full behavior is defined in packages/bare-os-coreutils/src/clear.js.","options":[],"keywords":["clear","bare-os","coreutils"],"examples":[{"caption":"wipe screen","code":"clear"}],"listCategory":"coreutils"},{"name":"comm","section":1,"title":"comm","synopsis":["comm [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of comm. Full behavior is defined in packages/bare-os-coreutils/src/comm.js.","options":[],"keywords":["comm","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"cmp","section":1,"title":"cmp","synopsis":["cmp [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of cmp. Full behavior is defined in packages/bare-os-coreutils/src/cmp.js.","options":[],"keywords":["cmp","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"cp","section":1,"title":"copy files","synopsis":["cp [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of copy files. Full behavior is defined in packages/bare-os-coreutils/src/cp.js.","options":[],"keywords":["cp","bare-os","coreutils"],"examples":[{"caption":"copy file","code":"cp src.txt dest.txt"},{"caption":"into directory","code":"cp a b c ~/backup/"},{"caption":"preserve implied (if implemented)","code":"cp -R proj proj.bak"}],"listCategory":"coreutils"},{"name":"corestorectl","section":1,"title":"corestorectl","synopsis":["corestorectl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of corestorectl. Full behavior is defined in packages/bare-os-coreutils/src/corestorectl.js.","options":[],"keywords":["corestorectl","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"crontab","section":1,"title":"user crontab manipulation","synopsis":["crontab [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of user crontab manipulation. Full behavior is defined in packages/bare-os-coreutils/src/crontab.js.","options":[],"keywords":["crontab","bare-os","coreutils"],"examples":[{"caption":"list jobs","code":"crontab -l"},{"caption":"install from file","code":"crontab ~/.crontab"},{"caption":"remove all","code":"crontab -r"}],"listCategory":"coreutils"},{"name":"ctxbaredoctor","section":1,"title":"ctxbaredoctor","synopsis":["ctxbaredoctor [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of ctxbaredoctor. Full behavior is defined in packages/bare-os-coreutils/src/ctxbaredoctor.js.","options":[],"keywords":["ctxbaredoctor","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"curl","section":1,"title":"curl","synopsis":["curl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of curl. Full behavior is defined in packages/bare-os-coreutils/src/curl.js.","options":[],"keywords":["curl","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"cut","section":1,"title":"cut out selected fields of each line","synopsis":["cut [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of cut out selected fields of each line. Full behavior is defined in packages/bare-os-coreutils/src/cut.js.","options":[],"keywords":["cut","bare-os","coreutils"],"examples":[{"caption":"fields by delimiter","code":"cut -d: -f1,3 /etc/passwd"},{"caption":"characters","code":"cut -c1-16 file.txt"}],"listCategory":"coreutils"},{"name":"date","section":1,"title":"display or set date and time","synopsis":["date [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of display or set date and time. Full behavior is defined in packages/bare-os-coreutils/src/date.js.","options":[],"keywords":["date","bare-os","coreutils"],"examples":[{"caption":"RFC-ish output","code":"date"},{"caption":"epoch seconds","code":"date +%s"}],"listCategory":"coreutils"},{"name":"dd","section":1,"title":"dd","synopsis":["dd [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of dd. Full behavior is defined in packages/bare-os-coreutils/src/dd.js.","options":[],"keywords":["dd","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"df","section":1,"title":"df","synopsis":["df [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of df. Full behavior is defined in packages/bare-os-coreutils/src/df.js.","options":[],"keywords":["df","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"diff","section":1,"title":"diff","synopsis":["diff [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of diff. Full behavior is defined in packages/bare-os-coreutils/src/diff.js.","options":[],"keywords":["diff","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"dir","section":1,"title":"dir","synopsis":["dir [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of dir. Full behavior is defined in packages/bare-os-coreutils/src/dir.js.","options":[],"keywords":["dir","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"dirname","section":1,"title":"return directory portion of a pathname","synopsis":["dirname [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of return directory portion of a pathname. Full behavior is defined in packages/bare-os-coreutils/src/dirname.js.","options":[],"keywords":["dirname","bare-os","coreutils"],"examples":[{"caption":"parent path","code":"dirname /a/b/c.txt"},{"caption":"compose with basename","code":"p=/x/y/z; echo $(dirname $p)/$(basename $p)"}],"listCategory":"coreutils"},{"name":"dircolors","section":1,"title":"dircolors","synopsis":["dircolors [-b] [FILE]","dircolors -p"],"description":"Print LS_COLORS from a dircolors database (GNU subset: TERM blocks, key/value pairs). -p prints the default Bare OS database.","options":[{"flag":"-b, --sh","meaning":"Bourne-shell export LS_COLORS"},{"flag":"-p, --print-database","meaning":"Print default database"}],"keywords":["dircolors","LS_COLORS","color"],"bareOsNotes":"FILE read via VFS.","listCategory":"coreutils"},{"name":"dhtctl","section":1,"title":"dhtctl","synopsis":["dhtctl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of dhtctl. Full behavior is defined in packages/bare-os-coreutils/src/dhtctl.js.","options":[],"keywords":["dhtctl","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"dhtscan","section":1,"title":"dhtscan","synopsis":["dhtscan [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of dhtscan. Full behavior is defined in packages/bare-os-coreutils/src/dhtscan.js.","options":[],"keywords":["dhtscan","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"dhttop","section":1,"title":"dhttop","synopsis":["dhttop [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of dhttop. Full behavior is defined in packages/bare-os-coreutils/src/dhttop.js.","options":[],"keywords":["dhttop","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"discord-bot","section":1,"title":"discord-bot","synopsis":["discord-bot [--env PATH] [--token TOKEN] [--guild ID] [--check]"],"description":"Foreground Discord ping-pong bot using ctx.bare.discordJS (vendored bare-discord-js / official discord.js). Replies pong to the /ping slash command and to the message ping. Token comes from --token, guest DISCORD_TOKEN, a VFS .env file (--env, DISCORD_ENV_FILE, ~/.discord.env), or a host DISCORD_ENV_FILE / DISCORD_TOKEN copied into the session by the booter. Enable MESSAGE CONTENT INTENT in the Discord Developer Portal for channel message ping/pong; /ping works without that privileged intent. Custom bots should use ctx.bare.discordJS.Client the same way (see examples/discord-ping-pong).","options":[{"flag":"--env PATH","meaning":"VFS path to a .env file containing DISCORD_TOKEN=... (also --env-file)."},{"flag":"--token TOKEN","meaning":"Bot token (Developer Portal → Bot → Token). Prefer a .env file."},{"flag":"--guild ID","meaning":"Guild id for instant /ping registration (else global, up to ~1 hour)."},{"flag":"--check","meaning":"Verify ctx.bare.discordJS and that a token can be resolved; do not login."}],"keywords":["discord","bot","ping","pong","ctx.bare"],"environment":["DISCORD_TOKEN — bot token in the guest session (also copied from the host when set).","DISCORD_ENV_FILE / BARE_OS_DISCORD_ENV_FILE — path to a .env file. On the host this may be a host filesystem path (booter reads it). In the guest it is a VFS path.","DISCORD_GUILD_ID — optional guild for slash-command registration.","BARE_OS_DISCORD — set 0 / false to skip loading ctx.bare.discordJS.","BARE_OS_BARE_MODULES — set 0 to omit ctx.bare entirely."],"seeAlso":[{"name":"bare-os-ctx-bare","section":7}],"bareOsNotes":"Requires a Bare/Pear host so vendored bare-discord-js can remap Node builtins. Guest scripts have no import/require; use ctx.bare.discordJS.","examples":[{"caption":"check token resolution without connecting","code":"discord-bot --check --env ~/.discord.env"},{"caption":"run the ping-pong bot","code":"discord-bot --env ~/.discord.env --guild 123456789012345678"}],"listCategory":"coreutils"},{"name":"du","section":1,"title":"estimate file space usage","synopsis":["du [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of estimate file space usage. Full behavior is defined in packages/bare-os-coreutils/src/du.js.","options":[],"keywords":["du","bare-os","coreutils"],"examples":[{"caption":"sizes under cwd","code":"du ."},{"caption":"human (if supported)","code":"du -h ~"}],"listCategory":"coreutils"},{"name":"edit","section":1,"title":"edit","synopsis":["edit [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of edit. Full behavior is defined in packages/bare-os-coreutils/src/edit.js.","options":[],"keywords":["edit","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"echo","section":1,"title":"write arguments to standard output","synopsis":["echo [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of write arguments to standard output. Full behavior is defined in packages/bare-os-coreutils/src/echo.js.","options":[],"keywords":["echo","bare-os","coreutils"],"examples":[{"caption":"literal","code":"echo hello world"},{"caption":"no newline (if -n supported)","code":"echo -n OK"}],"listCategory":"coreutils"},{"name":"env","section":1,"title":"set the environment for command invocation","synopsis":["env [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of set the environment for command invocation. Full behavior is defined in packages/bare-os-coreutils/src/env.js.","options":[],"keywords":["env","bare-os","coreutils"],"examples":[{"caption":"print environment","code":"env"},{"caption":"run with override","code":"env PATH=/bin:/usr/bin man ls"}],"listCategory":"coreutils"},{"name":"exit","section":1,"title":"exit the shell or booter session","synopsis":["exit [status]"],"description":"When run as /bin/exit, requests the booter to end the session via ctx.requestBooterExit. Status defaults to 0.","options":[],"keywords":["exit","bare-os","coreutils"],"bareOsNotes":"Also available as a shell builtin with different wiring.","examples":[{"caption":"leave session with status","code":"exit 0"},{"caption":"from script","code":"/bin/exit 42"}],"listCategory":"coreutils"},{"name":"expand","section":1,"title":"expand","synopsis":["expand [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of expand. Full behavior is defined in packages/bare-os-coreutils/src/expand.js.","options":[],"keywords":["expand","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"expr","section":1,"title":"expr","synopsis":["expr [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of expr. Full behavior is defined in packages/bare-os-coreutils/src/expr.js.","options":[],"keywords":["expr","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"factor","section":1,"title":"factor","synopsis":["factor [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of factor. Full behavior is defined in packages/bare-os-coreutils/src/factor.js.","options":[],"keywords":["factor","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"false","section":1,"title":"return false value","synopsis":["false [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of return false value. Full behavior is defined in packages/bare-os-coreutils/src/false.js.","options":[],"keywords":["false","bare-os","coreutils"],"examples":[{"caption":"force failure in pipeline tests","code":"false; echo $?"}],"listCategory":"coreutils"},{"name":"find","section":1,"title":"find files","synopsis":["find [PATH...] [EXPRESSION]"],"description":"Walks directories and applies expressions (-name, -type, -print, -maxdepth, logical -and/-or/-not).","options":[],"keywords":["find","directory","walk","search"],"bareOsNotes":"Expression syntax is a simplified subset.","examples":[{"caption":"files by name glob","code":"find . -name \"*.js\""},{"caption":"directories only","code":"find . -type d"},{"caption":"max depth","code":"find . -maxdepth 2 -type f"},{"caption":"OR names","code":"find . \\( -name \"*.c\" -o -name \"*.h\" \\)"}],"listCategory":"coreutils"},{"name":"fmt","section":1,"title":"fmt","synopsis":["fmt [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of fmt. Full behavior is defined in packages/bare-os-coreutils/src/fmt.js.","options":[],"keywords":["fmt","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"fold","section":1,"title":"fold","synopsis":["fold [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of fold. Full behavior is defined in packages/bare-os-coreutils/src/fold.js.","options":[],"keywords":["fold","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"getconf","section":1,"title":"get configuration values","synopsis":["getconf [OPTION]... [OPERAND]..."],"description":"Prints a fixed subset of configuration limits for Bare OS (JavaScript runtime and VFS). There is no host sysconf(3); values are documented constants, not live kernel queries.","options":[{"flag":"-a","meaning":"Write all known variables (name then value per pair)"}],"keywords":["getconf","bare-os","coreutils"],"bareOsNotes":"Unknown variable names exit with status 1. Not a full Issue 7 getconf implementation.","examples":[{"caption":"path length limit","code":"getconf PATH_MAX"},{"caption":"list known names and values","code":"getconf -a"}],"listCategory":"coreutils"},{"name":"getfacl","section":1,"title":"getfacl","synopsis":["getfacl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of getfacl. Full behavior is defined in packages/bare-os-coreutils/src/getfacl.js.","options":[],"keywords":["getfacl","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"git-pear","section":1,"title":"git-pear","synopsis":["git-pear [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of git-pear. Full behavior is defined in packages/bare-os-coreutils/src/git-pear.js.","options":[],"keywords":["git-pear","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"grep","section":1,"title":"pattern matching utility","synopsis":["grep [-E|-F] [-i] [-v] [-n] [-c] [-l] [-q] [-s] [-H|-h] [-e pat] ... [-f file] ... [pattern] [file...]"],"description":"Searches input or files for lines matching a pattern. Uses JavaScript RegExp unless -F (fixed string). Not bit-identical to GNU grep.","options":[{"flag":"-E","meaning":"Extended regex (accepted; patterns use JS RegExp)"},{"flag":"-F","meaning":"Fixed string match"},{"flag":"-i","meaning":"Ignore case"},{"flag":"-v","meaning":"Invert match"},{"flag":"-n","meaning":"Prefix lines with line number"},{"flag":"-c","meaning":"Count matching lines only"},{"flag":"-l","meaning":"List files with matches"},{"flag":"-q","meaning":"Quiet (exit status only)"},{"flag":"-s","meaning":"Suppress error messages"},{"flag":"-H / -h","meaning":"Force / suppress filename prefix"},{"flag":"-e pat","meaning":"Specify pattern"},{"flag":"-f file","meaning":"Read patterns from file"}],"keywords":["grep","search","regex","pattern","filter"],"seeAlso":[{"name":"sed","section":1},{"name":"awk","section":1}],"bareOsNotes":"UTF-16 strings and JS regex differ from strict POSIX/GNU.","examples":[{"caption":"recursive feel (grep each file)","code":"grep -n error *.log"},{"caption":"case insensitive","code":"grep -i todo NOTES.md"},{"caption":"invert (lines without)","code":"grep -v '^#' config"},{"caption":"fixed string (no regex)","code":"grep -F \"v1.0\" CHANGES"},{"caption":"count matches","code":"grep -c FAIL build.log"},{"caption":"only filenames","code":"grep -l main *.js"},{"caption":"multiple patterns","code":"grep -e foo -e bar file.txt"}],"listCategory":"coreutils"},{"name":"groups","section":1,"title":"groups","synopsis":["groups [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of groups. Full behavior is defined in packages/bare-os-coreutils/src/groups.js.","options":[],"keywords":["groups","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"head","section":1,"title":"copy the first part of files","synopsis":["head [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of copy the first part of files. Full behavior is defined in packages/bare-os-coreutils/src/head.js.","options":[],"keywords":["head","bare-os","coreutils"],"examples":[{"caption":"first 10 lines","code":"head /etc/os-release"},{"caption":"first N","code":"head -n 50 big.log"},{"caption":"stdin","code":"cat long.txt | head"}],"listCategory":"coreutils"},{"name":"hdms","section":1,"title":"Hyperswarm distributed map store","synopsis":["hdms [OPTION]... [OPERAND]..."],"description":"Invokes ctx.runHdms when the booter provides HDMS integration; otherwise prints unavailable.","options":[],"keywords":["hdms","hyperswarm","map"],"bareOsNotes":"Optional booter capability.","examples":[{"caption":"when booter wires HDMS","code":"hdms ls /mnt"},{"caption":"otherwise","code":"# prints unavailable without ctx.runHdms"}],"listCategory":"coreutils"},{"name":"help","section":1,"title":"Bare OS help summary","synopsis":["help"],"description":"Prints a one-screen summary of shell builtins and /bin command names. Use man for long-form documentation.","options":[],"keywords":["help","summary","builtins","commands"],"seeAlso":[{"name":"man","section":1},{"name":"bare-os-shell","section":1}],"examples":[{"caption":"quick index","code":"help"},{"caption":"then deep dive","code":"man grep"}],"listCategory":"coreutils"},{"name":"holesail","section":1,"title":"holesail","synopsis":["holesail [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of holesail. Full behavior is defined in packages/bare-os-coreutils/src/holesail.js.","options":[],"keywords":["holesail","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"holepunch-view","section":1,"title":"holepunch-view","synopsis":["holepunch-view [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of holepunch-view. Full behavior is defined in packages/bare-os-coreutils/src/holepunch-view.js.","options":[],"keywords":["holepunch-view","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"hostid","section":1,"title":"hostid","synopsis":["hostid [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of hostid. Full behavior is defined in packages/bare-os-coreutils/src/hostid.js.","options":[],"keywords":["hostid","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"hostname","section":1,"title":"set or print hostname","synopsis":["hostname [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of set or print hostname. Full behavior is defined in packages/bare-os-coreutils/src/hostname.js.","options":[],"keywords":["hostname","bare-os","coreutils"],"examples":[{"caption":"show host","code":"hostname"}],"listCategory":"coreutils"},{"name":"hypershell-board","section":1,"title":"hypershell-board","synopsis":["hypershell-board [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of hypershell-board. Full behavior is defined in packages/bare-os-coreutils/src/hypershell-board.js.","options":[],"keywords":["hypershell-board","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"iconv","section":1,"title":"iconv","synopsis":["iconv [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of iconv. Full behavior is defined in packages/bare-os-coreutils/src/iconv.js.","options":[],"keywords":["iconv","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"id","section":1,"title":"return user identity","synopsis":["id [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of return user identity. Full behavior is defined in packages/bare-os-coreutils/src/id.js.","options":[],"keywords":["id","bare-os","coreutils"],"examples":[{"caption":"who am I numerically","code":"id"}],"listCategory":"coreutils"},{"name":"install","section":1,"title":"install","synopsis":["install [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of install. Full behavior is defined in packages/bare-os-coreutils/src/install.js.","options":[],"keywords":["install","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"irc","section":1,"title":"irc","synopsis":["irc [libera|HOST] [--tls|--plain] [--nick N]","irc send TARGET TEXT","irc join #channel","irc whois NICK","irc status"],"description":"Modern IRC client (IRCv3 CAP LS 302). Default network is Libera.Chat over TLS at irc.libera.chat:6697. On a TTY, opens a full-screen ctx.tui session with a room browser (/rooms) and a random nick when none is configured. Without a TTY, use send/join/whois/status. Config lives in ~/.irc/config.json; SASL secrets in ~/.irc/secrets.json.","options":[{"flag":"--tls","meaning":"Require TLS (default)."},{"flag":"--plain","meaning":"Plaintext TCP. Blocked for libera.chat unless --insecure-plain."},{"flag":"--insecure-plain","meaning":"Allow plaintext even for Libera hostnames."},{"flag":"--nick","meaning":"Nickname (else ~/.irc/config.json, BARE_IRC_NICK, or a random osXXXXX nick)."},{"flag":"--sasl-user","meaning":"SASL PLAIN account. Password from ~/.irc/secrets.json."}],"keywords":["irc","libera","tui","chat"],"bareOsNotes":"TLS via ctx.bareOsTlsConnect (ctx API 1.57.0) or ctx.bare.bareTls on older Bare standalone binaries. Disable with BARE_OS_IRC=0.","listCategory":"coreutils"},{"name":"join","section":1,"title":"join","synopsis":["join [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of join. Full behavior is defined in packages/bare-os-coreutils/src/join.js.","options":[],"keywords":["join","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"kill","section":1,"title":"kill","synopsis":["kill [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of kill. Full behavior is defined in packages/bare-os-coreutils/src/kill.js.","options":[],"keywords":["kill","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"kernel-boot-diff","section":1,"title":"kernel-boot-diff","synopsis":["kernel-boot-diff [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of kernel-boot-diff. Full behavior is defined in packages/bare-os-coreutils/src/kernel-boot-diff.js.","options":[],"keywords":["kernel-boot-diff","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"kernel-doctor","section":1,"title":"kernel-doctor","synopsis":["kernel-doctor [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of kernel-doctor. Full behavior is defined in packages/bare-os-coreutils/src/kernel-doctor.js.","options":[],"keywords":["kernel-doctor","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"kernel-explain","section":1,"title":"kernel-explain","synopsis":["kernel-explain [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of kernel-explain. Full behavior is defined in packages/bare-os-coreutils/src/kernel-explain.js.","options":[],"keywords":["kernel-explain","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"kernel-fsck","section":1,"title":"kernel-fsck","synopsis":["kernel-fsck [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of kernel-fsck. Full behavior is defined in packages/bare-os-coreutils/src/kernel-fsck.js.","options":[],"keywords":["kernel-fsck","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"kernel-home-snapshot","section":1,"title":"kernel-home-snapshot","synopsis":["kernel-home-snapshot [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of kernel-home-snapshot. Full behavior is defined in packages/bare-os-coreutils/src/kernel-home-snapshot.js.","options":[],"keywords":["kernel-home-snapshot","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"kernel-manifest-validate","section":1,"title":"kernel-manifest-validate","synopsis":["kernel-manifest-validate [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of kernel-manifest-validate. Full behavior is defined in packages/bare-os-coreutils/src/kernel-manifest-validate.js.","options":[],"keywords":["kernel-manifest-validate","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"kernel-preflight","section":1,"title":"kernel-preflight","synopsis":["kernel-preflight [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of kernel-preflight. Full behavior is defined in packages/bare-os-coreutils/src/kernel-preflight.js.","options":[],"keywords":["kernel-preflight","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"kernel-triage","section":1,"title":"kernel-triage","synopsis":["kernel-triage [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of kernel-triage. Full behavior is defined in packages/bare-os-coreutils/src/kernel-triage.js.","options":[],"keywords":["kernel-triage","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"jq","section":1,"title":"command-line JSON processor (jq language subset)","synopsis":["jq [-n] [-R] [-s] [-c] [-r] [-e] [-f file] filter [file...]","jq reads JSON (concatenated values or NDJSON-style streams) from files or stdin."],"description":"Runs a jq filter program against JSON values. The engine is vendored jqjs (pure JavaScript), not the C implementation at https://github.com/jqlang/jq — language coverage and edge cases differ.","options":[{"flag":"-n, --null-input","meaning":"Use null as the sole input (ignore file/stdin for input)"},{"flag":"-R, --raw-input","meaning":"Treat each line as a string instead of JSON"},{"flag":"-s, --slurp","meaning":"Read all inputs into one array; run the filter once"},{"flag":"-c, --compact-output","meaning":"Compact JSON on output"},{"flag":"-r, --raw-output","meaning":"Print strings without JSON quotes"},{"flag":"-e, --exit-status","meaning":"Set exit status from outputs (no output → 4; last false/null → 1)"},{"flag":"-f, --from-file","meaning":"Read filter program from file"}],"keywords":["jq","json","query","filter","jqjs"],"seeAlso":[{"name":"grep","section":1},{"name":"awk","section":1}],"bareOsNotes":"Engine: lib/jq-engine.js from @sscots/jqjs (mwh/jqjs). Missing vs C jq: try/catch, user-defined functions, recurse, many builtins, modules, full Unicode. See upstream jqjs README for the feature matrix.","examples":[{"caption":"pretty-print","code":"jq . data.json"},{"caption":"field","code":"jq .version package.json"},{"caption":"slurp array","code":"jq -s 'map(.x) | add' parts.jsonl"},{"caption":"compact","code":"jq -c '.[] | select(.ok)' items.json"}],"listCategory":"coreutils"},{"name":"ln","section":1,"title":"link files","synopsis":["ln [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of link files. Full behavior is defined in packages/bare-os-coreutils/src/ln.js.","options":[],"keywords":["ln","bare-os","coreutils"],"examples":[{"caption":"symlink","code":"ln -s target name"},{"caption":"hard link (if supported)","code":"ln file linkname"}],"listCategory":"coreutils"},{"name":"link","section":1,"title":"link","synopsis":["link [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of link. Full behavior is defined in packages/bare-os-coreutils/src/link.js.","options":[],"keywords":["link","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"logger","section":1,"title":"logger","synopsis":["logger [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of logger. Full behavior is defined in packages/bare-os-coreutils/src/logger.js.","options":[],"keywords":["logger","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"login","section":1,"title":"begin a session on the system","synopsis":["login [OPTION]... [OPERAND]..."],"description":"When invoked from /bin, behavior aligns with session identity hooks (see booter). Prefer the shell builtin for passphrase entry.","options":[],"keywords":["login","identity","passphrase"],"seeAlso":[{"name":"logout","section":1}],"examples":[{"caption":"unlock: run login, then type passphrase at prompt (multi-word ok)","code":"login"},{"caption":"register new identity","code":"login --new"}],"listCategory":"coreutils"},{"name":"logout","section":1,"title":"end session (save vault)","synopsis":["logout [OPTION]... [OPERAND]..."],"description":"Ends session; may persist vault depending on booter and flags.","options":[],"keywords":["logout","session"],"seeAlso":[{"name":"login","section":1}],"examples":[{"caption":"end session","code":"logout"},{"caption":"save vault hint","code":"logout --save"}],"listCategory":"coreutils"},{"name":"logname","section":1,"title":"return the user's login name","synopsis":["logname [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of return the user's login name. Full behavior is defined in packages/bare-os-coreutils/src/logname.js.","options":[],"keywords":["logname","bare-os","coreutils"],"examples":[{"caption":"login name","code":"logname"}],"listCategory":"coreutils"},{"name":"locale","section":1,"title":"locale","synopsis":["locale [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of locale. Full behavior is defined in packages/bare-os-coreutils/src/locale.js.","options":[],"keywords":["locale","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"ls","section":1,"title":"list directory contents","synopsis":["ls [-1al] [--color[=never|auto|always]] [FILE...]"],"description":"Lists directory contents. Long format shows mode, links, owner, group, size, mtime, and symlink targets. With color (default auto on a TTY), directories, symlinks, executables, and permission bits are highlighted.","options":[{"flag":"-a","meaning":"Include names starting with ."},{"flag":"-l","meaning":"Long listing"},{"flag":"-1","meaning":"One name per line (short format)"},{"flag":"--color[=never|auto|always]","meaning":"ANSI colors: never, auto (TTY only), or always; plain --color is auto"}],"keywords":["ls","list","directory","dir"],"environment":["NO_COLOR — disable color even when a TTY or --color=always"],"bareOsNotes":"Hides .bareos_empty marker like other tools.","examples":[{"caption":"long + hidden","code":"ls -la ~"},{"caption":"one per line","code":"ls -1 /bin | head"},{"caption":"multiple paths","code":"ls /bin /etc"}],"listCategory":"coreutils"},{"name":"man","section":1,"title":"display on-line manual pages","synopsis":["man [-k keyword] [-f name] [-l] [[section] name]","man reads /share/man/man.json on the system drive."],"description":"Displays manual pages from the merged JSON database. Section 1: /bin and git/shell pages. Section 7: handbook (man handbook), user manual (man users-manual), developer guide (man devguide), and docs/ (man docs), merged at build from handbook/*.md, users-manual/*.md, developer-guide/*.md, and docs/**/*.md.","options":[{"flag":"-k, --apropos","meaning":"Search keywords and titles (substring)"},{"flag":"-f, --whatis","meaning":"One-line description for exact name"},{"flag":"-l, --list","meaning":"List pages grouped by category (/bin, git/shell, handbook, user manual, developer guide, docs/), then alphabetically"}],"keywords":["man","manual","help","documentation","apropos","whatis","cheat","examples"],"environment":["MANWIDTH — if set, wrap width (clamped 40200); overrides auto width","COLUMNS — when stdout is not a TTY (or output is captured), used if MANWIDTH unset","NO_COLOR — disable bold headings on TTY"],"seeAlso":[{"name":"help","section":1},{"name":"bare-os-handbook","section":7},{"name":"bare-os-developer-guide","section":7},{"name":"bare-os-docs","section":7},{"name":"bare-os-users-manual","section":7}],"bareOsNotes":"No troff; no embedded DB fallback in v1.","examples":[{"caption":"open page","code":"man sed"},{"caption":"handbook TOC (section 7)","code":"man handbook"},{"caption":"handbook chapter by section","code":"man 7 handbook-01-introduction"},{"caption":"apropos","code":"man -k copy"},{"caption":"whatis","code":"man -f grep"},{"caption":"all pages","code":"man -l"},{"caption":"fixed width (overrides TTY)","code":"MANWIDTH=64 man awk"}],"listCategory":"coreutils"},{"name":"md5sum","section":1,"title":"md5sum","synopsis":["md5sum [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of md5sum. Full behavior is defined in packages/bare-os-coreutils/src/md5sum.js.","options":[],"keywords":["md5sum","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"meshdrop","section":1,"title":"meshdrop","synopsis":["meshdrop [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of meshdrop. Full behavior is defined in packages/bare-os-coreutils/src/meshdrop.js.","options":[],"keywords":["meshdrop","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"mkdir","section":1,"title":"make directories","synopsis":["mkdir [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of make directories. Full behavior is defined in packages/bare-os-coreutils/src/mkdir.js.","options":[],"keywords":["mkdir","bare-os","coreutils"],"examples":[{"caption":"one dir","code":"mkdir proj"},{"caption":"parents","code":"mkdir -p a/b/c"}],"listCategory":"coreutils"},{"name":"mkfifo","section":1,"title":"make FIFO special files","synopsis":["mkfifo [OPTION]... [OPERAND]..."],"description":"Creates in-memory FIFO endpoints under /run/bare-os/ipc/<name> (not Hyperdrive specials).","options":[],"keywords":["mkfifo","bare-os","coreutils"],"bareOsNotes":"Uses ctx.bareOsIpc.create; optional BARE_OS_IPC_NAMESPACE prefixes keys. BARE_OS_IPC_MAX_CHANNELS caps distinct channels; see metrics_live.ipcTelemetry.","examples":[{"caption":"stub","code":"# FIFOs not on Hyperdrive — use shell pipelines"}],"listCategory":"coreutils"},{"name":"mktemp","section":1,"title":"mktemp","synopsis":["mktemp [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of mktemp. Full behavior is defined in packages/bare-os-coreutils/src/mktemp.js.","options":[],"keywords":["mktemp","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"mount","section":1,"title":"mount","synopsis":["mount [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of mount. Full behavior is defined in packages/bare-os-coreutils/src/mount.js.","options":[],"keywords":["mount","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"mv","section":1,"title":"move or rename files","synopsis":["mv [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of move or rename files. Full behavior is defined in packages/bare-os-coreutils/src/mv.js.","options":[],"keywords":["mv","bare-os","coreutils"],"examples":[{"caption":"rename","code":"mv old.txt new.txt"},{"caption":"into dir","code":"mv *.txt ~/inbox/"}],"listCategory":"coreutils"},{"name":"nano","section":1,"title":"nano","synopsis":["nano [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of nano. Full behavior is defined in packages/bare-os-coreutils/src/nano.js.","options":[],"keywords":["nano","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"nice","section":1,"title":"nice","synopsis":["nice [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of nice. Full behavior is defined in packages/bare-os-coreutils/src/nice.js.","options":[],"keywords":["nice","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"nl","section":1,"title":"line numbering utility","synopsis":["nl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of line numbering utility. Full behavior is defined in packages/bare-os-coreutils/src/nl.js.","options":[],"keywords":["nl","bare-os","coreutils"],"examples":[{"caption":"number all lines","code":"nl README.md"}],"listCategory":"coreutils"},{"name":"nohup","section":1,"title":"run command (hangup is a no-op in Bare OS)","synopsis":["nohup [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of run command (hangup is a no-op in Bare OS). Full behavior is defined in packages/bare-os-coreutils/src/nohup.js.","options":[],"keywords":["nohup","bare-os","coreutils"],"examples":[{"caption":"run utility (no real SIGHUP in guest)","code":"nohup long-job.sh"}],"listCategory":"coreutils"},{"name":"nproc","section":1,"title":"nproc","synopsis":["nproc [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of nproc. Full behavior is defined in packages/bare-os-coreutils/src/nproc.js.","options":[],"keywords":["nproc","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"numfmt","section":1,"title":"numfmt","synopsis":["numfmt [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of numfmt. Full behavior is defined in packages/bare-os-coreutils/src/numfmt.js.","options":[],"keywords":["numfmt","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"od","section":1,"title":"octal dump","synopsis":["od [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of octal dump. Full behavior is defined in packages/bare-os-coreutils/src/od.js.","options":[],"keywords":["od","bare-os","coreutils"],"examples":[{"caption":"hex dump vibe","code":"od -c file.bin | head"}],"listCategory":"coreutils"},{"name":"openssl","section":1,"title":"openssl","synopsis":["openssl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of openssl. Full behavior is defined in packages/bare-os-coreutils/src/openssl.js.","options":[],"keywords":["openssl","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"oidc-publish","section":1,"title":"oidc-publish","synopsis":["oidc-publish [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of oidc-publish. Full behavior is defined in packages/bare-os-coreutils/src/oidc-publish.js.","options":[],"keywords":["oidc-publish","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"paste","section":1,"title":"paste","synopsis":["paste [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of paste. Full behavior is defined in packages/bare-os-coreutils/src/paste.js.","options":[],"keywords":["paste","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"patch","section":1,"title":"patch","synopsis":["patch [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of patch. Full behavior is defined in packages/bare-os-coreutils/src/patch.js.","options":[],"keywords":["patch","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"pear","section":1,"title":"pear","synopsis":["pear help | info | list | init [dir]","pear stage [dir] | build [dir] | bundle [dir]","pear release [dir] [--label HDMS-LABEL]","pear seed [dir] [--wait-ms N]"],"description":"Pear development tools inside Bare OS (ctx.pear surface). init scaffolds a project; stage writes .pear/stage/ (sources, bundles, stage.json) using ctx.pear/ctx.bare pack tools when enabled; release publishes the stage tree to a writable HDMS mount and prints pear:// links (no host Pear CLI required); seed flushes Hyperswarm for the release drive. Requires identity unlock (login) for release/seed. Implementation: packages/bare-os-coreutils/src/pear.js, lib/pear-stage.js, lib/pear-release.js. See docs/guides/guest-pear-and-appstore-workflow.md.","options":[],"keywords":["pear","bare-os","coreutils","p2p","build","release","hdms"],"listCategory":"coreutils"},{"name":"pathchk","section":1,"title":"check pathname portability","synopsis":["pathchk [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of check pathname portability. Full behavior is defined in packages/bare-os-coreutils/src/pathchk.js.","options":[],"keywords":["pathchk","bare-os","coreutils"],"examples":[{"caption":"portable path check","code":"pathchk -p \"$HOME/file name\""}],"listCategory":"coreutils"},{"name":"pathcap-verify","section":1,"title":"pathcap-verify","synopsis":["pathcap-verify [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of pathcap-verify. Full behavior is defined in packages/bare-os-coreutils/src/pathcap-verify.js.","options":[],"keywords":["pathcap-verify","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"p2ping","section":1,"title":"p2ping","synopsis":["p2ping [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of p2ping. Full behavior is defined in packages/bare-os-coreutils/src/p2ping.js.","options":[],"keywords":["p2ping","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"p2ptrace","section":1,"title":"p2ptrace","synopsis":["p2ptrace [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of p2ptrace. Full behavior is defined in packages/bare-os-coreutils/src/p2ptrace.js.","options":[],"keywords":["p2ptrace","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"peerctl","section":1,"title":"peerctl","synopsis":["peerctl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of peerctl. Full behavior is defined in packages/bare-os-coreutils/src/peerctl.js.","options":[],"keywords":["peerctl","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"peerdiscover","section":1,"title":"peerdiscover","synopsis":["peerdiscover [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of peerdiscover. Full behavior is defined in packages/bare-os-coreutils/src/peerdiscover.js.","options":[],"keywords":["peerdiscover","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"peernote","section":1,"title":"peernote","synopsis":["peernote [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of peernote. Full behavior is defined in packages/bare-os-coreutils/src/peernote.js.","options":[],"keywords":["peernote","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"pr","section":1,"title":"pr","synopsis":["pr [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of pr. Full behavior is defined in packages/bare-os-coreutils/src/pr.js.","options":[],"keywords":["pr","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"printenv","section":1,"title":"print environment variables","synopsis":["printenv [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of print environment variables. Full behavior is defined in packages/bare-os-coreutils/src/printenv.js.","options":[],"keywords":["printenv","bare-os","coreutils"],"examples":[{"caption":"one variable","code":"printenv HOME"},{"caption":"all","code":"printenv"}],"listCategory":"coreutils"},{"name":"pkg-swarm-index","section":1,"title":"pkg-swarm-index","synopsis":["pkg-swarm-index [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of pkg-swarm-index. Full behavior is defined in packages/bare-os-coreutils/src/pkg-swarm-index.js.","options":[],"keywords":["pkg-swarm-index","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"printf","section":1,"title":"format and print","synopsis":["printf [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of format and print. Full behavior is defined in packages/bare-os-coreutils/src/printf.js.","options":[],"keywords":["printf","bare-os","coreutils"],"examples":[{"caption":"format","code":"printf \"hex=%x dec=%d\\n\" 255 255"},{"caption":"no newline","code":"printf \"%s\" OK"}],"listCategory":"coreutils"},{"name":"procstat","section":1,"title":"procstat","synopsis":["procstat [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of procstat. Full behavior is defined in packages/bare-os-coreutils/src/procstat.js.","options":[],"keywords":["procstat","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"ps","section":1,"title":"ps","synopsis":["ps [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of ps. Full behavior is defined in packages/bare-os-coreutils/src/ps.js.","options":[],"keywords":["ps","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"pwd","section":1,"title":"return working directory name","synopsis":["pwd [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of return working directory name. Full behavior is defined in packages/bare-os-coreutils/src/pwd.js.","options":[],"keywords":["pwd","bare-os","coreutils"],"examples":[{"caption":"where am I","code":"pwd"}],"listCategory":"coreutils"},{"name":"readlink","section":1,"title":"print symbolic link targets","synopsis":["readlink [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of print symbolic link targets. Full behavior is defined in packages/bare-os-coreutils/src/readlink.js.","options":[],"keywords":["readlink","bare-os","coreutils"],"examples":[{"caption":"symlink target","code":"readlink ~/.config"}],"listCategory":"coreutils"},{"name":"realpath","section":1,"title":"realpath","synopsis":["realpath [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of realpath. Full behavior is defined in packages/bare-os-coreutils/src/realpath.js.","options":[],"keywords":["realpath","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"rev","section":1,"title":"rev","synopsis":["rev [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of rev. Full behavior is defined in packages/bare-os-coreutils/src/rev.js.","options":[],"keywords":["rev","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"rm","section":1,"title":"remove files","synopsis":["rm [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of remove files. Full behavior is defined in packages/bare-os-coreutils/src/rm.js.","options":[],"keywords":["rm","bare-os","coreutils"],"examples":[{"caption":"file","code":"rm tmp.txt"},{"caption":"tree","code":"rm -rf build/"}],"listCategory":"coreutils"},{"name":"rmdir","section":1,"title":"remove empty directories","synopsis":["rmdir [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of remove empty directories. Full behavior is defined in packages/bare-os-coreutils/src/rmdir.js.","options":[],"keywords":["rmdir","bare-os","coreutils"],"examples":[{"caption":"empty dir","code":"rmdir olddir"}],"listCategory":"coreutils"},{"name":"routeview","section":1,"title":"routeview","synopsis":["routeview [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of routeview. Full behavior is defined in packages/bare-os-coreutils/src/routeview.js.","options":[],"keywords":["routeview","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"savevault","section":1,"title":"encrypt snapshot of personal drive","synopsis":["savevault [OPTION]... [OPERAND]..."],"description":"Encrypts a copy of the personal drive under /.bare/vault/ when identity services are available.","options":[],"keywords":["savevault","vault","encrypt","backup"],"seeAlso":[{"name":"login","section":1}],"examples":[{"caption":"snapshot encrypted vault","code":"savevault"}],"listCategory":"coreutils"},{"name":"say","section":1,"title":"say","synopsis":["say [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of say. Full behavior is defined in packages/bare-os-coreutils/src/say.js.","options":[],"keywords":["say","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sed","section":1,"title":"stream editor","synopsis":["sed [OPTION]... [OPERAND]..."],"description":"Stream editor with a subset of POSIX sed. Large engine is vendored in lib/sed-engine.js.","options":[],"keywords":["sed","stream","edit","substitute"],"seeAlso":[{"name":"awk","section":1},{"name":"grep","section":1}],"bareOsNotes":"JavaScript implementation; edge cases differ from GNU sed.","examples":[{"caption":"substitute first per line","code":"sed 's/foo/bar/' file.txt"},{"caption":"global per line","code":"sed 's/ //g' spaced.txt"},{"caption":"in-place (if supported)","code":"sed -i.bak 's/^/# /' f.cfg"},{"caption":"print line 5 only","code":"sed -n '5p' file"},{"caption":"delete blank lines","code":"sed '/^$/d' file"}],"listCategory":"coreutils"},{"name":"seq","section":1,"title":"print sequences of numbers","synopsis":["seq [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of print sequences of numbers. Full behavior is defined in packages/bare-os-coreutils/src/seq.js.","options":[],"keywords":["seq","bare-os","coreutils"],"examples":[{"caption":"1..10","code":"seq 1 10"},{"caption":"step","code":"seq 0 2 20"}],"listCategory":"coreutils"},{"name":"setfacl","section":1,"title":"setfacl","synopsis":["setfacl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of setfacl. Full behavior is defined in packages/bare-os-coreutils/src/setfacl.js.","options":[],"keywords":["setfacl","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sha1sum","section":1,"title":"sha1sum","synopsis":["sha1sum [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sha1sum. Full behavior is defined in packages/bare-os-coreutils/src/sha1sum.js.","options":[],"keywords":["sha1sum","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sha224sum","section":1,"title":"sha224sum","synopsis":["sha224sum [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sha224sum. Full behavior is defined in packages/bare-os-coreutils/src/sha224sum.js.","options":[],"keywords":["sha224sum","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sha256sum","section":1,"title":"sha256sum","synopsis":["sha256sum [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sha256sum. Full behavior is defined in packages/bare-os-coreutils/src/sha256sum.js.","options":[],"keywords":["sha256sum","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sha384sum","section":1,"title":"sha384sum","synopsis":["sha384sum [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sha384sum. Full behavior is defined in packages/bare-os-coreutils/src/sha384sum.js.","options":[],"keywords":["sha384sum","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sha512sum","section":1,"title":"sha512sum","synopsis":["sha512sum [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sha512sum. Full behavior is defined in packages/bare-os-coreutils/src/sha512sum.js.","options":[],"keywords":["sha512sum","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sh","section":1,"title":"sh","synopsis":["sh [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sh. Full behavior is defined in packages/bare-os-coreutils/src/sh.js.","options":[],"keywords":["sh","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"shuf","section":1,"title":"shuf","synopsis":["shuf [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of shuf. Full behavior is defined in packages/bare-os-coreutils/src/shuf.js.","options":[],"keywords":["shuf","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sleep","section":1,"title":"suspend execution for an interval","synopsis":["sleep [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of suspend execution for an interval. Full behavior is defined in packages/bare-os-coreutils/src/sleep.js.","options":[],"keywords":["sleep","bare-os","coreutils"],"examples":[{"caption":"pause seconds","code":"sleep 2"}],"listCategory":"coreutils"},{"name":"sort","section":1,"title":"sort lines","synopsis":["sort [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sort lines. Full behavior is defined in packages/bare-os-coreutils/src/sort.js.","options":[],"keywords":["sort","bare-os","coreutils"],"examples":[{"caption":"lexicographic","code":"sort names.txt"},{"caption":"numeric","code":"sort -n scores.txt"},{"caption":"unique","code":"sort -u tags.txt"}],"listCategory":"coreutils"},{"name":"split","section":1,"title":"split","synopsis":["split [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of split. Full behavior is defined in packages/bare-os-coreutils/src/split.js.","options":[],"keywords":["split","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"ssh","section":1,"title":"ssh","synopsis":["ssh [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of ssh. Full behavior is defined in packages/bare-os-coreutils/src/ssh.js.","options":[],"keywords":["ssh","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"ssh-keygen","section":1,"title":"ssh-keygen","synopsis":["ssh-keygen [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of ssh-keygen. Full behavior is defined in packages/bare-os-coreutils/src/ssh-keygen.js.","options":[],"keywords":["ssh-keygen","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sshd","section":1,"title":"sshd","synopsis":["sshd [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sshd. Full behavior is defined in packages/bare-os-coreutils/src/sshd.js.","options":[],"keywords":["sshd","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"stat","section":1,"title":"display file status","synopsis":["stat [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of display file status. Full behavior is defined in packages/bare-os-coreutils/src/stat.js.","options":[],"keywords":["stat","bare-os","coreutils"],"examples":[{"caption":"metadata","code":"stat ~/README.md"}],"listCategory":"coreutils"},{"name":"swarmtop","section":1,"title":"swarmtop","synopsis":["swarmtop [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of swarmtop. Full behavior is defined in packages/bare-os-coreutils/src/swarmtop.js.","options":[],"keywords":["swarmtop","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"swarmdoctor","section":1,"title":"swarmdoctor","synopsis":["swarmdoctor [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of swarmdoctor. Full behavior is defined in packages/bare-os-coreutils/src/swarmdoctor.js.","options":[],"keywords":["swarmdoctor","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"swarmmap","section":1,"title":"swarmmap","synopsis":["swarmmap [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of swarmmap. Full behavior is defined in packages/bare-os-coreutils/src/swarmmap.js.","options":[],"keywords":["swarmmap","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"sum","section":1,"title":"sum","synopsis":["sum [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sum. Full behavior is defined in packages/bare-os-coreutils/src/sum.js.","options":[],"keywords":["sum","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"summon","section":1,"title":"summon","synopsis":["summon [URL]","summon dump URL","summon links URL","summon get URL","summon bookmarks [add URL [TITLE]]","summon about [summon|bookmarks|history|cookies|net|blank]"],"description":"Text web browser for Bare OS. On a TTY, opens a full-screen ctx.tui session (cell buffer). Page JS runs in Bare VM (ctx.bare.bareVm) when available. Without a TTY, dump/links/get print laid-out text, numbered links, or raw source. HTTP(S) uses ctx.httpFetch and the same allow/deny lists as curl/wget. Config, cookies, and bookmarks live in ~/.summon/.","options":[{"flag":"--json","meaning":"Machine-readable dump/links/bookmarks."},{"flag":"--reader","meaning":"Dump article-like text (p/h/li) instead of the full layout."},{"flag":"--cols N","meaning":"Wrap width for dump/layout (default 80)."},{"flag":"--js","meaning":"Run page JavaScript (default)."},{"flag":"--no-js","meaning":"Do not execute page scripts."}],"environment":["BARE_OS_HTTP_ALLOWLIST — host globs permitted for ctx.httpFetch","BARE_OS_HTTP_DENYLIST — host globs always blocked"],"files":["~/.summon/config.json","~/.summon/cookies.json","~/.summon/bookmarks.json"],"keywords":["summon","browser","html","tui","http"],"bareOsNotes":"First-party HTML/CSS engine (not Chromium). Page JS uses ctx.bare.bareVm (bare-vm / bare-realm) or a strict Function sandbox. Disable with --no-js or J.","listCategory":"coreutils"},{"name":"sync","section":1,"title":"sync","synopsis":["sync [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of sync. Full behavior is defined in packages/bare-os-coreutils/src/sync.js.","options":[],"keywords":["sync","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"tar","section":1,"title":"tar","synopsis":["tar [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of tar. Full behavior is defined in packages/bare-os-coreutils/src/tar.js.","options":[],"keywords":["tar","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"tac","section":1,"title":"tac","synopsis":["tac [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of tac. Full behavior is defined in packages/bare-os-coreutils/src/tac.js.","options":[],"keywords":["tac","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"tail","section":1,"title":"copy the last part of a file","synopsis":["tail [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of copy the last part of a file. Full behavior is defined in packages/bare-os-coreutils/src/tail.js.","options":[],"keywords":["tail","bare-os","coreutils"],"examples":[{"caption":"last lines","code":"tail -n 20 app.log"},{"caption":"follow vibe (Bare: poll manually)","code":"tail error.log"}],"listCategory":"coreutils"},{"name":"tee","section":1,"title":"duplicate standard input","synopsis":["tee [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of duplicate standard input. Full behavior is defined in packages/bare-os-coreutils/src/tee.js.","options":[],"keywords":["tee","bare-os","coreutils"],"examples":[{"caption":"copy stdout to file","code":"cat x | tee copy.txt | wc -l"}],"listCategory":"coreutils"},{"name":"telnet","section":1,"title":"telnet","synopsis":["telnet [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of telnet. Full behavior is defined in packages/bare-os-coreutils/src/telnet.js.","options":[],"keywords":["telnet","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"test","section":1,"title":"evaluate a condition","synopsis":["test [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of evaluate a condition. Full behavior is defined in packages/bare-os-coreutils/src/test.js.","options":[],"keywords":["test","bare-os","coreutils"],"examples":[{"caption":"file exists","code":"test -f ~/.barerc && echo yes"},{"caption":"directory","code":"test -d /home/user"},{"caption":"string equal","code":"test \"$USER\" = guest"}],"listCategory":"coreutils"},{"name":"theme","section":1,"title":"theme","synopsis":["theme [list|current|set <name>|apply]"],"description":"Switch Bare OS UI preset: updates ~/.barerc theme line, sets BARE_OS_THEME, calls bareOsApplyTheme when available.","options":[],"keywords":["theme","colors","prompt"],"bareOsNotes":"list/current work without booter hooks; set/apply need ctx.bareOsApplyTheme.","listCategory":"coreutils"},{"name":"time","section":1,"title":"time a simple command","synopsis":["time [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of time a simple command. Full behavior is defined in packages/bare-os-coreutils/src/time.js.","options":[],"keywords":["time","bare-os","coreutils"],"examples":[{"caption":"wall time a command","code":"time sort big.txt"}],"listCategory":"coreutils"},{"name":"timeout","section":1,"title":"run command with bounded wall time","synopsis":["timeout [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of run command with bounded wall time. Full behavior is defined in packages/bare-os-coreutils/src/timeout.js.","options":[],"keywords":["timeout","bare-os","coreutils"],"examples":[{"caption":"kill long job after 5s","code":"timeout 5 slow-cmd"}],"listCategory":"coreutils"},{"name":"touch","section":1,"title":"change file timestamps or create files","synopsis":["touch [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of change file timestamps or create files. Full behavior is defined in packages/bare-os-coreutils/src/touch.js.","options":[],"keywords":["touch","bare-os","coreutils"],"examples":[{"caption":"create empty","code":"touch newfile"},{"caption":"refresh mtime","code":"touch -c existing"}],"listCategory":"coreutils"},{"name":"tr","section":1,"title":"translate or delete characters","synopsis":["tr [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of translate or delete characters. Full behavior is defined in packages/bare-os-coreutils/src/tr.js.","options":[],"keywords":["tr","bare-os","coreutils"],"examples":[{"caption":"uppercase","code":"echo hi | tr 'a-z' 'A-Z'"},{"caption":"delete chars","code":"tr -d '\\r' < win.txt"}],"listCategory":"coreutils"},{"name":"truncate","section":1,"title":"truncate","synopsis":["truncate [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of truncate. Full behavior is defined in packages/bare-os-coreutils/src/truncate.js.","options":[],"keywords":["truncate","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"true","section":1,"title":"return true value","synopsis":["true [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of return true value. Full behavior is defined in packages/bare-os-coreutils/src/true.js.","options":[],"keywords":["true","bare-os","coreutils"],"examples":[{"caption":"always success","code":"true && echo ok"}],"listCategory":"coreutils"},{"name":"trustctl","section":1,"title":"trustctl","synopsis":["trustctl [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of trustctl. Full behavior is defined in packages/bare-os-coreutils/src/trustctl.js.","options":[],"keywords":["trustctl","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"tsort","section":1,"title":"tsort","synopsis":["tsort [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of tsort. Full behavior is defined in packages/bare-os-coreutils/src/tsort.js.","options":[],"keywords":["tsort","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"tty","section":1,"title":"return user's terminal name","synopsis":["tty [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of return user's terminal name. Full behavior is defined in packages/bare-os-coreutils/src/tty.js.","options":[],"keywords":["tty","bare-os","coreutils"],"examples":[{"caption":"am I a tty","code":"tty"}],"listCategory":"coreutils"},{"name":"tui","section":1,"title":"tui","synopsis":["tui [--json]","tui demo"],"description":"Inspect the guest TUI SDK on ctx.tui (version, TTY, size, theme). tui demo runs a sample full-screen app. Disable the SDK with BARE_OS_TUI=0.","options":[{"flag":"--json","meaning":"Print inspector fields as one JSON object."}],"keywords":["tui","ctx","terminal"],"bareOsNotes":"Requires ctx.tui from bare-os-booter after the REPL session exists.","listCategory":"coreutils"},{"name":"taskmesh","section":1,"title":"taskmesh","synopsis":["taskmesh [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of taskmesh. Full behavior is defined in packages/bare-os-coreutils/src/taskmesh.js.","options":[],"keywords":["taskmesh","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"ulimit","section":1,"title":"ulimit","synopsis":["ulimit [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of ulimit. Full behavior is defined in packages/bare-os-coreutils/src/ulimit.js.","options":[],"keywords":["ulimit","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"uname","section":1,"title":"return operating system name","synopsis":["uname [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of return operating system name. Full behavior is defined in packages/bare-os-coreutils/src/uname.js.","options":[],"keywords":["uname","bare-os","coreutils"],"examples":[{"caption":"kernel-ish info","code":"uname -a"}],"listCategory":"coreutils"},{"name":"uniq","section":1,"title":"uniq","synopsis":["uniq [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of uniq. Full behavior is defined in packages/bare-os-coreutils/src/uniq.js.","options":[],"keywords":["uniq","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"unlink","section":1,"title":"unlink","synopsis":["unlink [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of unlink. Full behavior is defined in packages/bare-os-coreutils/src/unlink.js.","options":[],"keywords":["unlink","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"umount","section":1,"title":"umount","synopsis":["umount [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of umount. Full behavior is defined in packages/bare-os-coreutils/src/umount.js.","options":[],"keywords":["umount","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"unexpand","section":1,"title":"unexpand","synopsis":["unexpand [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of unexpand. Full behavior is defined in packages/bare-os-coreutils/src/unexpand.js.","options":[],"keywords":["unexpand","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"uptime","section":1,"title":"uptime","synopsis":["uptime [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of uptime. Full behavior is defined in packages/bare-os-coreutils/src/uptime.js.","options":[],"keywords":["uptime","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"users","section":1,"title":"users","synopsis":["users [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of users. Full behavior is defined in packages/bare-os-coreutils/src/users.js.","options":[],"keywords":["users","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"vdir","section":1,"title":"vdir","synopsis":["vdir [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of vdir. Full behavior is defined in packages/bare-os-coreutils/src/vdir.js.","options":[],"keywords":["vdir","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"wc","section":1,"title":"word, line, and byte or character count","synopsis":["wc [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of word, line, and byte or character count. Full behavior is defined in packages/bare-os-coreutils/src/wc.js.","options":[],"keywords":["wc","bare-os","coreutils"],"examples":[{"caption":"lines words bytes","code":"wc README.md"},{"caption":"stdin only","code":"cat f | wc -l"}],"listCategory":"coreutils"},{"name":"wget","section":1,"title":"wget","synopsis":["wget [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of wget. Full behavior is defined in packages/bare-os-coreutils/src/wget.js.","options":[],"keywords":["wget","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"which","section":1,"title":"locate a command","synopsis":["which [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of locate a command. Full behavior is defined in packages/bare-os-coreutils/src/which.js.","options":[],"keywords":["which","bare-os","coreutils"],"examples":[{"caption":"resolve on PATH","code":"which ls"}],"listCategory":"coreutils"},{"name":"who","section":1,"title":"who","synopsis":["who [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of who. Full behavior is defined in packages/bare-os-coreutils/src/who.js.","options":[],"keywords":["who","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"whoami","section":1,"title":"display effective user ID","synopsis":["whoami [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of display effective user ID. Full behavior is defined in packages/bare-os-coreutils/src/whoami.js.","options":[],"keywords":["whoami","bare-os","coreutils"],"examples":[{"caption":"effective user","code":"whoami"}],"listCategory":"coreutils"},{"name":"whois","section":1,"title":"whois","synopsis":["whois [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of whois. Full behavior is defined in packages/bare-os-coreutils/src/whois.js.","options":[],"keywords":["whois","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"xattr","section":1,"title":"xattr","synopsis":["xattr [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of xattr. Full behavior is defined in packages/bare-os-coreutils/src/xattr.js.","options":[],"keywords":["xattr","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"xargs","section":1,"title":"construct argument lists and invoke utility","synopsis":["xargs [OPTION]... [OPERAND]..."],"description":"Reads stdin into argument batches and runs **`ctx.runBinCommand`** (same as the shell). Enforces stdin size, token count, batch size, and invocation limits for safety.","options":[{"flag":"-0, --null","meaning":"Input items are null-terminated, not whitespace-separated"},{"flag":"-n, --max-args","meaning":"Up to N arguments per utility invocation (capped at 128)"}],"keywords":["xargs","bare-os","coreutils"],"bareOsNotes":"No host process spawn; not full POSIX xargs (no -I, -P, etc.). See src/xargs.js for limits.","examples":[{"caption":"pass lines as arguments","code":"printf 'a\\nb\\n' | xargs echo"},{"caption":"one argument per run","code":"printf 'a\\nb\\n' | xargs -n1 echo"},{"caption":"workaround for complex scripts","code":"# for f in *.txt; do grep -l foo $f; done"}],"listCategory":"coreutils"},{"name":"yes","section":1,"title":"yes","synopsis":["yes [OPTION]... [OPERAND]..."],"description":"Bare OS implementation of yes. Full behavior is defined in packages/bare-os-coreutils/src/yes.js.","options":[],"keywords":["yes","bare-os","coreutils"],"listCategory":"coreutils"},{"name":"bare-cron","section":1,"title":"Bare OS minute scheduler (bare-initd unit)","synopsis":["Managed via systemctl(1): systemctl status bare-cron","Crontab files: /etc/bare-os/crontab, ~/.crontab, ~/.config/bare-os/timers/*.timer"],"description":"The **bare-cron** bare-initd unit runs a bounded in-process scheduler: classic five-field lines, **@reboot**, optional **JitterSec=**, and systemd-inspired timer drop-ins (**OnCalendar=**, **EveryMs=**, **OnInactiveSec=**, **Persistent=**). Jobs execute through **ctx.execLine**; errors may be logged under **/var/log/bare-os/cron.log** when configured. This is not full **cron**(8) or **systemd.timer**(5) parity.","options":[],"keywords":["cron","scheduler","bare-initd","timer","crontab"],"seeAlso":[{"name":"systemctl","section":1},{"name":"crontab","section":1}],"bareOsNotes":"Implementation: packages/bare-os-booter/lib/bare-cron.js. Dependency: **kernel-logger** before **bare-cron** in the default initd graph.","examples":[{"caption":"list scheduler unit","code":"systemctl status bare-cron"},{"caption":"user crontab line (five-field)","code":"0 * * * * echo hourly"}],"listCategory":"extra"},{"name":"bare-os-ctx-bare","section":7,"title":"ctx.bare library and drive bundles","synopsis":["# reference — not a shell command"],"description":"Documents BARE_OS_BARE_MODULES and BARE_OS_BARE_DRIVE_BUNDLES for the booter ctx.bare registry. In-image scripts (AsyncFunction) use ctx.bare.<key> instead of import(). Keys come from host dynamic import of packages listed in packages/bare-os-booter/lib/bare-module-manifest.json, then optional merge from trusted IIFE bundles under /lib/bare/bundles/ on the system image (see manifest.json there). The booter also attaches ctx.bare.discordJS from vendored bare-discord-js (official discord.js on Bare) unless BARE_OS_DISCORD=0. Set BARE_OS_BARE_MODULES=0 to omit ctx.bare entirely. Set BARE_OS_BARE_DRIVE_BUNDLES=0 to skip executing drive bundles (host imports only). Rebuild bundles with npm run build -w bare-os-bare-libs.","options":[],"keywords":["BARE_OS_BARE_MODULES","BARE_OS_BARE_DRIVE_BUNDLES","ctx.bare","bare-module-manifest","bare-os-bare-libs"],"environment":["BARE_OS_BARE_MODULES — set to 0 or false to disable ctx.bare (hardened sessions).","BARE_OS_BARE_DRIVE_BUNDLES — set to 0 or false to skip loading /lib/bare/bundles/*.js into ctx.bare."],"seeAlso":[{"name":"bare-os-developer-guide","section":7}],"bareOsNotes":"See developer-guide/05-modules-and-imports.md and 12-bare-modules-and-pear-ecosystem.md.","examples":[],"listCategory":"extra"},{"name":"bare-os-shell","section":1,"title":"Bare OS interactive shell (Issue 7inspired subset)","synopsis":["# Interactive session: builtins + /bin via ctx.execLine (see handbook §9)","# /bin/sh is a separate script runner — see man sh"],"description":"The interactive shell runs in the booter: tokenization, pipelines (simulated capture), redirection, AND-OR lists (; && ||), bounded compound commands (if/fi, while/for/case), background jobs (&), optional command substitution ($(…)) when BARE_OS_SHELL_CMDSUBST=1, globbing, and subsets of errexit (-e), nounset (-u), and pipefail. There are no forked subshells and no full POSIX sh grammar. Canonical narrative: handbook ch.9; completion/REPL: docs/reference/shell-completion-and-repl-editor.md.","options":[],"aliases":["sh-builtins"],"keywords":["shell","builtin","pipeline","jobs","execLine","bare-os-shell","sh-builtins"],"builtins":[{"name":"alias","synopsis":["alias","alias name=value ...","unalias name ..."],"description":"Define or list command aliases; unalias removes definitions."},{"name":"cd","synopsis":["cd [DIR]"],"description":"Change working directory via vfs.chdir; default is HOME."},{"name":"export","synopsis":["export NAME=value ..."],"description":"Set environment variables visible to child /bin invocations."},{"name":"unset","synopsis":["unset NAME ..."],"description":"Remove variables; readonly names cannot be unset."},{"name":"readonly","synopsis":["readonly NAME[=value] ..."],"description":"Mark variables read-only."},{"name":"umask","synopsis":["umask [octal]"],"description":"Show or set shell file creation mask (stored in env UMASK)."},{"name":"set","synopsis":["set -o","set +o","set -e | +e | -u | +u | -f | +f","set -o errexit|nounset|pipefail","set +o errexit|nounset|pipefail"],"description":"Toggle errexit (BARE_OS_SHELL_ERREXIT), nounset (BARE_OS_SHELL_NOUNSET), pipefail (BARE_OS_SHELL_PIPEFAIL), noglob (BARE_OS_SHELL_NOGLOB). Use set -o / set +o alone to print current shell options (subset)."},{"name":"command","synopsis":["command -v|-V NAME","command ARGV..."],"description":"Resolve or run a command; -v/-V skip aliases."},{"name":"type","synopsis":["type NAME"],"description":"Report whether NAME is a builtin or a path under PATH."},{"name":"jobs","synopsis":["jobs [-l] [-p]"],"description":"List logical background jobs. -p prints pgid only; -l includes pgid/sid in the listing."},{"name":"fg / bg / wait","synopsis":["fg [%job]","bg [%job]","wait [n | %n]","wait -n (with BARE_OS_SHELL_POSIX_MODE=1)"],"description":"Cooperative job control: fg awaits a job; bg resumes stopped jobs; wait waits for jobs by id or all."},{"name":"suspend-job","synopsis":["suspend-job [%job]"],"description":"Mark a running background job stopped (logical); resume with fg or bg."},{"name":"disown","synopsis":["disown [%job]"],"description":"Remove a job from the jobs table without cancelling its async work (still runs to completion)."},{"name":"trap","synopsis":["trap -l","trap -p","trap CMD SIGNAL"],"description":"List signals, print handlers, or register synthetic trap handlers (ctx.shellTrapHandlers)."},{"name":"login / logout","synopsis":["login [--new]","logout [--save]"],"description":"login is a /bin utility: run it with no passphrase on the command line, then type the passphrase at the TTY prompt (hidden). logout remains a shell builtin for session teardown; both require booter hooks."},{"name":":","synopsis":[":"],"description":"No-op builtin."},{"name":"exit","synopsis":["exit [n]"],"description":"Request booter exit with status n (builtin path)."},{"name":"read","synopsis":["read [-r] [NAME ...]"],"description":"Optional when BARE_OS_SHELL_READ_BUILTIN=1; bounded line from shell stdin or readLine."}],"seeAlso":[{"name":"sh","section":1},{"name":"help","section":1},{"name":"man","section":1}],"bareOsNotes":"Pipelines use simulated capture (not OS pipes). kill and wait accept %n job specs when shellBackgroundJobs is populated. Full UX (history file, tab menu, Ctrl+R) uses BARE_OS_FISH≠0 on a TTY; see shell-completion-and-repl-editor.md.","examples":[{"caption":"pipeline (simulated)","code":"ls -1 /bin | grep man"},{"caption":"errexit + compound","code":"set -e\nif true; then echo ok; fi"},{"caption":"background job","code":"sleep 1 &\njobs"},{"caption":"redirect out","code":"echo hi > ~/hello.txt"},{"caption":"alias + use","code":"alias ll='ls -la'\nll ~"}],"listCategory":"extra"},{"name":"sshd_config","section":5,"title":"OpenSSH sshd configuration file (Bare OS subset)","synopsis":["/etc/ssh/sshd_config"],"description":"Bare OS reads a subset of OpenSSH sshd_config directives from the system image. Supported keys include Port, ListenAddress, HostKey (repeatable; tilde expands to $HOME on the personal drive), PasswordAuthentication, PubkeyAuthentication, PermitRootLogin, AllowTcpForwarding, MaxAuthTries, ClientAliveInterval, AuthorizedKeysFile (relative paths resolve under $HOME), and Subsystem sftp. Unsupported lines are ignored. Strong ciphers default to bare-ssh2 stock algorithm lists.","options":[],"keywords":["ssh","sshd","config","security"],"bareOsNotes":"HostKey paths must be writable; the stock config places keys under ~/.config/bare-os/ssh/host/.","seeAlso":[{"name":"sshd","section":8},{"name":"man","section":1}],"listCategory":"extra"},{"name":"systemctl","section":1,"title":"bare-initd service control (systemd-like subset)","synopsis":["systemctl list|list-units","systemctl status [UNIT] [--lines N]","systemctl logs UNIT [--lines N]","systemctl start|stop|restart UNIT","systemctl enable|disable UNIT","systemctl is-enabled UNIT","systemctl is-active UNIT","journalctl -u UNIT [--lines N]"],"description":"Lists and manages session-scoped bare-initd units (kernel-logger, bare-cron, …). Implemented by the booter (kernel-runner); /bin stubs exist for PATH and man(1). enable/disable toggle the personal-drive preset file ~/.config/bare-os/initd/disabled.txt for future boots in the same image. is-enabled reports enabled or disabled; is-active reports active vs inactive from runtime phase (exit 0 vs 3). Logs live under /var/log/bare-os/ when the unit defines a logPath. The legacy name bare-initctl is still accepted by the booter as an alias.","options":[{"flag":"--lines N","meaning":"Tail N lines from the unit log (status, logs, journalctl)"}],"aliases":["bare-initctl"],"keywords":["bare-initd","initctl","service","supervisor","cron","systemd"],"bareOsNotes":"journalctl supports -u UNIT and --lines / -n. Other systemd verbs are unavailable on Bare OS (exit 2).","seeAlso":[{"name":"crontab","section":1},{"name":"bare-os-shell","section":1}],"examples":[{"caption":"list units","code":"systemctl list-units"},{"caption":"restart scheduler","code":"systemctl restart bare-cron"},{"caption":"tail cron errors","code":"journalctl -u bare-cron --lines 20"}],"listCategory":"extra"},{"name":"git","section":1,"title":"Bare OS git front-end (isomorphic-git)","synopsis":["git [-C dir] <subcommand> [ARGUMENTS...]"],"description":"Runs isomorphic-git against the VFS-backed adapter. Remote HTTP(S) uses BARE_OS_GIT_HTTP when set; otherwise Pear bare module fetch.","options":[{"flag":"-C dir","meaning":"Run as if git was started in dir"}],"environment":["BARE_OS_GIT_HTTP — optional fetch implementation for remotes","GIT_* — standard hints where supported"],"keywords":["git","version control","repository","clone","commit","isomorphic-git"],"bareOsNotes":"Not a separate /bin script; booter delegates argv[0]=git to git-cli.js.","seeAlso":[{"name":"bare-os-shell","section":1}],"examples":[{"caption":"new repo","code":"git init -C ~/myrepo"},{"caption":"status","code":"git -C ~/myrepo status"},{"caption":"clone over HTTP (needs remote + fetch)","code":"git clone https://example.com/repo.git ~/work/repo"},{"caption":"config local","code":"git -C ~/myrepo config user.email \"[email protected]\""},{"caption":"log one line","code":"git -C ~/myrepo log --oneline -5"}],"listCategory":"extra"},{"name":"bare-os-handbook","section":7,"title":"Bare OS handbook — table of contents and reading order","synopsis":["man 7 bare-os-handbook","Handbook chapter (plain text from handbook/README.md)"],"description":"BARE OPERATING SYSTEM — HANDBOOK\n\nBare OS is an experimental, P2P-first system image: a Merkle-addressed Hyperdrive you replicate from peers over Hyperswarm, plus a second drive for everything that should stay yours (home, identity, logs). This handbook is the narrative spine—written like a long-form technical article so you can read it cover to cover or jump to a chapter. It explains why the pieces exist, how they connect, and where to look when something breaks.\n\nThis project is experimental research software, not a production OS. It is open source under Apache-2.0 and is owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company (LICENSE <../LICENSE>).\n\nON THIS PAGE\n\n- How this handbook fits the repo <#how-this-handbook-fits-the-repo>\n- Who should read what <#who-should-read-what-three-paths>\n- Chapters <#chapters>\n- Packages in one sentence each <#packages-in-one-sentence-each>\n- Root README <#root-readme>\n\nHOW THIS HANDBOOK FITS THE REPO\n\nDocumentation home <../docs/README.md> — Single map of every tree: user manual, this handbook, developer guide, reference, concepts (evergreen) <../docs/concepts/README.md>, glossary <../docs/glossary.md>, FAQ <../docs/faq.md>, troubleshooting router <../docs/troubleshooting.md>, contributing to docs <../docs/CONTRIBUTING-DOCS.md>.\n\nPreface — why Bare OS <00-preface.md> — Thesis, comparison to classic images, security limits, outlook, contributor paths.\n\n*This handbook (handbook/.md)** — Story, architecture, protocol, runtime, identity, POSIX surface, operations, and research directions.\n\nUser manual <../users-manual/README.md> — Short operator-oriented path: clone, run seeder and booter, use the shell and identity features, find man and troubleshooting without reading cover to cover.\n\ndocs/reference/README.md <../docs/reference/README.md> — File-by-file inventory, environment variables, data-flow diagram.\n\ndocs/architecture/KERNEL_CONTRACT.md <../docs/architecture/KERNEL_CONTRACT.md> — Single-page contract: subsystems, boot steps, ctx semver, typed errors.\n\nBoot trust model <../docs/security/boot-trust-model.md> — Concise operator checklist for block-0 provenance and swarm trust boundaries.\n\ndeveloper-guide/README.md <../developer-guide/README.md> — How to write run(ctx, argv) / start(ctx), extend /bin, and test under Pear.\n\nKernel extensions <../docs/reference/kernel-extensions.md> — Kernel feature bitmask, seed-channel RPC, and capability bits.\n\nThe ctx object is versioned for kernels and scripts that depend on booter behavior. Treat packages/bare-os-booter/CHANGELOG.md <../packages/bare-os-booter/CHANGELOG.md> as the contract history (bareOsCtxApiVersion / BARE_OS_CTX_API_VERSION). TypeScript authors can use packages/bare-os-booter/lib/bare-os-ctx.d.ts <../packages/bare-os-booter/lib/bare-os-ctx.d.ts>.\n\nWHO SHOULD READ WHAT (THREE PATHS)\n\nI want to run it. Start at the user manual <../users-manual/README.md> or the root README.md <../README.md>, then Chapter 7 — Operations <07-operations-and-development.md> (install, npm test, seeder/booter, Pear). Skim Chapter 1 <01-introduction.md> for vocabulary.\n\nI want to change the image or /bin. Read Preface <00-preface.md> → Chapter 6 <06-kernel-and-binaries.md> → the developer guide <../developer-guide/README.md>, especially extending coreutils <../developer-guide/06-extending-bin-coreutils.md> and the ctx object <../developer-guide/02-the-context-object.md>.\n\nI want the architecture and trust model. Read Preface <00-preface.md> → Chapter 2 — Blueprints <02-blueprints.md> → Chapter 3 — Protocol <03-protocol-and-disk.md> → Chapter 4 — Booter runtime <04-the-booter-runtime.md> → Chapter 5 — Identity <05-identity-vault-and-hdms.md>.\n\nCHAPTERS\n\n- Preface <00-preface.md> — Whitepaper-style thesis, documentation map, security limits, research directions, contributing.\n- 01 — Introduction <01-introduction.md> — Goals, vocabulary, Holepunch stack, clone-to-prompt story.\n- 02 — Blueprints <02-blueprints.md> — Layered architecture, trust, boot-flow diagram.\n- 03 — Protocol and disk <03-protocol-and-disk.md> — MBR, swarm, Protomux, SwarmDisk, peer-assisted block 0 mirroring, failure matrix.\n- 04 — The booter runtime <04-the-booter-runtime.md> — ctx, VFS, shell, kernel, initd, cron, REPL, host bridges.\n- 05 — Identity, vault, HDMS <05-identity-vault-and-hdms.md> — Guest vs user, account blob, vault, extra drives.\n- 06 — Kernel and binaries <06-kernel-and-binaries.md> — /boot/init.js, coreutils pipeline, /bin summary.\n- 07 — Operations and development <07-operations-and-development.md> — CI, pretest, Pear channels, env vars, troubleshooting.\n- 08 — Git on Bare OS <08-git-on-bare-os.md> — isomorphic-git, VFS adapter, HTTP modes.\n- 09 — POSIX utilities, shell, VFS <09-posix-utilities-shell-and-vfs.md> — XCU-style /bin, shell, divergence from Issue 7.\n- 10 — Manual pages and online help <10-manpages-and-online-help.md> — man(1), JSON DB, handbook ingest, help vs man.\n- 11 — Kernel program and research <11-kernel-program-and-research.md> — Pear/Bare/holepunch context, capability words, non-goals.\n- 12 — P2P stack vs POSIX boundaries <12-p2p-stack-and-posix-boundaries.md> — Hypercore replication, swarm, Protomux, and how they relate to the declared POSIX profile and non-goals.\n\nPear workflows, ctx.bare, drive bundles: developer-guide ch.11 <../developer-guide/11-kernel-pear-cookbook.md> and ch.12 <../developer-guide/12-bare-modules-and-pear-ecosystem.md>.\n\nPACKAGES IN ONE SENTENCE EACH\n\n- bare-os-protocol <../packages/bare-os-protocol/README.md> — Shared topic string, MBR layout, Protomux message IDs, and kernel feature bits used by seeder and booter.\n- bare-os-seeder <../packages/bare-os-seeder/README.md> — Stages kernel/ into a system Hyperdrive, publishes the canonical MBR block and joins the swarm so booters can replicate the image.\n- bare-os-booter <../packages/bare-os-booter/README.md> — Joins the swarm, opens system + personal drives, builds ctx, runs /boot/init.js, shell, initd, cron, and delegated tools (git, curl, wget); eligible booted peers may mirror block 0 and seed RPC snapshots.\n- bare-os-coreutils <../packages/bare-os-coreutils/README.md> — Sources and build for /bin utilities plus the merged man.json database.\n- bare-os-bare-libs <../packages/bare-os-bare-libs/README.md> — Builds optional /lib/bare bundles merged into ctx.bare when enabled.\n\nThe staged tree also includes kernel/README.md <../kernel/README.md> (what lands on the system drive) and scripts/README.md <../scripts/README.md> (repo automation). Pear release links and host env notes: PEAR-RUN.md <../docs/PEAR-RUN.md>.\n\nROOT README\n\nThe top-level README.md <../README.md> is the short runbook (clone, npm ci, seeder/booter commands). Use it when you only need copy-paste steps.\n\n_Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — see LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","bare","os","table","contents","and","reading","order"],"seeAlso":[{"name":"handbook-00-preface","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/README.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","aliases":["handbook","bare-os-handbook-index"],"listCategory":"handbook"},{"name":"handbook-00-preface","section":7,"title":"Preface — why Bare OS exists","synopsis":["man 7 handbook-00-preface","Handbook chapter (plain text from handbook/00-preface.md)"],"description":"PREFACE — WHY BARE OS EXISTS\n\nTime to read: about 12 minutes. Prerequisites: curiosity about peer-to-peer software; no Holepunch background required.\n\nMost operating system images are fetched from a single place: an HTTP mirror, a registry, or a block device someone prepared for you. Bare operating system asks a different question: what if the “golden image” were a content-addressed tree that many peers could help you replicate, so discovery and distribution look more like joining a swarm than downloading a monolithic blob?\n\nThis preface states the thesis in plain language, places the project next to familiar ideas, names what the design does not promise, and points you to the chapters that unpack each layer. The code in this repository is experimental research software—useful for learning and prototyping, not audited for production threat models.\n\nTHE THESIS IN ONE PARAGRAPH\n\nBare OS is a Unix-flavored environment whose system root lives on a Hyperdrive keyed from a tiny 512-byte MBR you read from peers. A seeder application publishes that drive; a booter application finds peers on a fixed Hyperswarm topic, replicates the drive, mounts a separate personal Hyperdrive for mutable state, and runs a JavaScript kernel (/boot/init.js) and a Tier-1 /bin built from small AsyncFunction scripts. After successful boot, eligible peers can mirror the same block 0 and captured seed RPC snapshots for cold joiners. Execution is one host process (Pear or Node) simulating POSIX paths, a line shell, and synthetic /proc-style views—not a hardware kernel.\n\nA DELIBERATELY LEAKY ANALOGY\n\nPicture the system drive as a read-only live image many peers can help you replicate, and the personal drive as your private stick for home, identity, and vault data—except both are Hyperdrives and the “CPU” is still one Pear/Node process interpreting scripts. That image helps you orient; it is not a security promise. You still choose which peers to trust, and anything in /bin can reach whatever the host runtime allows. Short evergreen pages: docs/concepts — Two-drive model <../docs/concepts/two-drive-model.md>.\n\nNon-goal: “P2P” does not mean you can skip thinking about trust, backups, and passphrase quality.\n\nON THIS PAGE\n\n- The thesis in one paragraph <#the-thesis-in-one-paragraph>\n- A deliberately leaky analogy <#a-deliberately-leaky-analogy>\n- How this handbook relates to other docs <#how-this-handbook-relates-to-other-docs>\n- Comparison frame <#comparison-frame-not-marketing>\n- Security and limits <#security-and-limits>\n- Research directions <#research-directions>\n- Contributing <#contributing--first-steps>\n- Where to read next <#where-to-read-next>\n\nHOW THIS HANDBOOK RELATES TO OTHER DOCS\n\n- Documentation home <../docs/README.md> — Navigation hub for all trees plus shared glossary <../docs/glossary.md>, FAQ <../docs/faq.md>, and troubleshooting <../docs/troubleshooting.md>.\n- Handbook (handbook/.md) — Story and mental model*: why two drives, how the wire protocol boots the image, what the shell and identity layers do.\n- User manual <../users-manual/README.md> — Run and use: install, seeder and booter, shell basics, identity, troubleshooting, without reading the full architecture first.\n- docs/reference/ <../docs/reference/README.md> — Where everything lives: package paths, complete environment variable tables, byte-level MBR layout.\n- developer-guide/ <../developer-guide/README.md> — How to implement: ctx fields, coreutils build, testing with Brittle, Pear staging.\n- Contributing to documentation <../docs/CONTRIBUTING-DOCS.md> — Style and CI: admonitions, Mermaid, link checks, terminology governance.\n\nIf you edit handbook Markdown, those files are also ingested into man(7) inside the image (see Chapter 10 <10-manpages-and-online-help.md>); diagrams in mermaid fences are omitted in the terminal viewer—read the repo for figures.\n\nCOMPARISON FRAME (NOT MARKETING)\n\nVersus a static ISO or container layer: the system image is still “files in a tree,” but replication is sparse and keyed: peers contribute blocks; you verify structure against Hyperdrive semantics rather than trusting a single CDN tarball.\n\nVersus a traditional multi-user kernel: there is no fork, no hardware isolation between “processes,” and no guarantee that malicious /bin scripts cannot read host memory. Commands are JavaScript in the booters realm. See Security and limits <#security-and-limits> below.\n\nVersus “put / on IPFS”: the stack here is Holepunch-shaped (Corestore, Hyperdrive, Hyperswarm, Protomux) with a deliberate boot protocol (MBR block 0, seed channel, optional capability RPC). The goal is a coherent dev story (seeder + booter Pear apps), not maximal compatibility with every content network.\n\nSECURITY AND LIMITS\n\nBare OS separates system (replicated image) from personal (your writable drive), but does not sandbox the shell: anything execLine can do inherits the Pear/Node process capabilities. Identity uses PBKDF2 and AEAD for the on-disk account blob and vault snapshots—passphrase quality still matters, and ciphertext only stays private if replication and backups are under your control.\n\nFor a developer-oriented trust discussion (eval boundaries, import vs in-image scripts), read developer-guide — Security and trust <../developer-guide/09-security-and-trust.md>. Chapter 5 adds a trust boundary <05-identity-vault-and-hdms.md#trust-boundaries-what-the-design-does-not-promise> summary for identity and HDMS.\n\nRESEARCH DIRECTIONS\n\nThe codebase is a testbed for P2P distribution, POSIX ergonomics on Hyperdrive, optional ctx.bare module bundles, seed-channel capability negotiation, and Pear host bridges (reload, mirrors, snapshots). Open threads include stronger isolation (workers, Pear isolates), richer networking parity, and operational hardening. Treat roadmap bullets in Chapter 4 <04-the-booter-runtime.md#roadmap-and-out-of-scope> as current intent, not commitments.\n\nCONTRIBUTING — FIRST STEPS\n\n- Documentation: Follow the voice of this handbook (short hooks, clear “related” links). Run npm run build -w bare-os-coreutils after changing man pages; handbook ingest runs in that build.\n- Code: Read developer-guide README <../developer-guide/README.md>, then the package README for the area you touch (bare-os-booter, bare-os-coreutils, etc.). Run npm test from the repo root before opening a PR.\n\nWHERE TO READ NEXT\n\n- Vocabulary and a clone-to-prompt story — Chapter 1 — Introduction <01-introduction.md>.\n- Boxes, arrows, trust — Chapter 2 — Blueprints <02-blueprints.md>.\n- Wire format and failure modes — Chapter 3 — Protocol and disk <03-protocol-and-disk.md>.\n\nRelated: Handbook home <README.md> · Root README <../README.md> · docs/reference <../docs/reference/README.md> · CHANGELOG — ctx API <../packages/bare-os-booter/CHANGELOG.md>\n\n_This project is experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","00","preface","why","bare","exists"],"seeAlso":[{"name":"handbook-01-introduction","section":7},{"name":"bare-os-handbook","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/00-preface.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-01-introduction","section":7,"title":"Chapter 1 — Introduction: what “Bare OS” is","synopsis":["man 7 handbook-01-introduction","Handbook chapter (plain text from handbook/01-introduction.md)"],"description":"CHAPTER 1 — INTRODUCTION: WHAT “BARE OS” IS\n\nTime to read: about 8 minutes. Prerequisites: none; Preface <00-preface.md> first if you want the thesis in essay form.\n\nCanonical refs: Compatibility matrix <../docs/reference/compatibility-matrix.md> · Environment appendix <../docs/reference/environment-and-posix-appendix.md> · Protocol package reference <../docs/reference/package-bare-os-protocol.md>.\n\nIf you have only a minute: Bare operating system is a tiny Unix-flavored environment whose root filesystem is a Hyperdrive replicated from peers. A seeder publishes that drive and a 512-byte MBR over Hyperswarm; a booter joins the swarm, downloads the image, mounts a second Hyperdrive for per-user mutable state, and runs JavaScript “kernel” and /bin scripts inside a Bare or Node runtime. Eligible already-booted peers can later mirror the same block 0 and seed RPC snapshots for cold joiners.\n\nThe rest of this chapter sets vocabulary straight—without it, the architecture diagrams in Chapter 2 <02-blueprints.md> will not stick.\n\nON THIS PAGE\n\n- From git clone to a first prompt <#from-git-clone-to-a-first-prompt-story-not-a-runbook>\n- The problem this project explores <#the-problem-this-project-explores>\n- Key vocabulary <#key-vocabulary>\n- Why Hyperdrive and Hyperswarm <#why-hyperdrive-and-hyperswarm>\n- Relationship to Pear and Bare <#relationship-to-pear-and-bare>\n- Where to go next <#where-to-go-next>\n\nFROM GIT CLONE TO A FIRST PROMPT (STORY, NOT A RUNBOOK)\n\nImagine two terminals on the same machine. In one you run the seeder: it loads the kernel/ tree into a system Hyperdrive, writes a 512-byte MBR (magic BIOS, embedded public keys), and joins Hyperswarm on the project topic plus the drives discovery key. In the other you run the booter: it joins the topic, finds a peer, opens a Protomux channel, reads block 0, parses the MBR, opens the system drive by key, creates your personal drive, and hands off to /boot/init.js. Once up, that booter can also help cold joiners by mirroring the same block 0 and captured seed RPC hints when eligibility passes. You see a line prompt; everything “POSIX” after that is the booters VFS and shell simulating a machine.\n\nExact commands, env vars, and Pear workflows live in Chapter 7 — Operations <07-operations-and-development.md> and the root README.md <../README.md>. This paragraph is only the narrative spine.\n\nTHE PROBLEM THIS PROJECT EXPLORES\n\nTraditional OS images live on block devices or tarball layers. Here, the image is a Merkle tree you can address by key and replicate live. Peers do not hand you a .iso; they help you fill in the same Hyperdrive from the same discovery key.\n\nThat raises three design questions this repo answers in code:\n\n1. Discovery — How does a fresh node find _someone_ who has block 0 (the MBR) and the drive root?\n2. Separation of concerns — What is immutable-ish OS vs mutable per-device home?\n3. Execution model — What runs in the host process vs what is “inside” the simulated POSIX surface?\n\nBare OS picks: one swarm topic for the project, Protomux channels for control + replication, two Hyperdrives (system + personal), and AsyncFunction-loaded JS for kernel and utilities.\n\nKEY VOCABULARY\n\n- System drive — Hyperdrive containing /boot/init.js, /bin, /etc; replicated from the seeder image.\n- Personal drive — Separate Hyperdrive (Corestore namespace) for $HOME, /.bare, cron, and logs.\n- MBR — 512 bytes: magic BIOS plus embedded Hyperdrive public keys (primary and optional failover slots).\n- Kernel — /boot/init.js with async function start(ctx); a session loop, not a hardware microkernel.\n- /bin — Small JavaScript programs (async function run(ctx, argv)) built from bare-os-coreutils, including a TTY editor (edit, nano) and usual POSIX-style tools.\n- VFS — Booter-provided path layer: routes paths under $HOME to the personal drive, otherwise the system drive.\n- ctx — Context object passed to kernel and commands: vfs, console, execLine, identity hooks, and many optional bridges.\n- Guest — Default session before login: predictable HOME=/home/guest, no Ed25519 identity material exposed.\n- HDMS — Hyperdrive management: optional extra drives mounted under /mnt after unlock.\n\nHOLEPUNCH STACK (FIRST-USE DEFINITIONS)\n\nUse these names consistently across docs:\n\n- Hyperdrive — Append-only, sparse-friendly filesystem identified by a public key; good for a shared OS tree.\n- Hyperswarm — DHT-style peer discovery; Bare OS uses a topic (bare-os-v1) and drive discovery keys.\n- Protomux — Multiplexes logical channels on one encrypted stream; the bare-os-v1 channel carries MBR reads and replication.\n- Corestore — Storage backend that holds Hyperdrive cores; seeder and booter use separate store paths.\n- Bare — Minimal JavaScript runtime; Pear wraps Bare for distributable apps (the seeder and booter are Pear apps).\n\nWHY HYPERDRIVE AND HYPERSWARM\n\nHyperdrive gives you a single-writer (per key) log-backed filesystem with deterministic reads and sparse replication—good for an OS tree that many nodes can share.\n\nHyperswarm gives you topic-based and discovery-key-based peer finding. The seeder joins both the bare-os-v1 topic (so booters find _some_ peer) and the drive discovery key (so Hyperdrive replication completes).\n\nYou do not need to agree with every product choice to read the code: the handbook describes what the repo does, not whether it is the only way to build a P2P OS.\n\nRELATIONSHIP TO PEAR AND BARE\n\n- Bare is a minimal JavaScript runtime used by Pear apps.\n- Both seeder and booter are Pear applications (pear field in package.json) and can run under node index.js for development.\n- brittle-bare vs brittle-node split in tests reflects native addons (e.g. identity crypto) that only load on Bare.\n\nWHERE TO GO NEXT\n\n- Essay-length thesis: Preface <00-preface.md>\n- Big picture: Chapter 2 — Blueprints <02-blueprints.md>\n- Wire protocol: Chapter 3 <03-protocol-and-disk.md>\n- Day-to-day hacking: Chapter 7 <07-operations-and-development.md>\n\nNext: Chapter 2 — Blueprints <02-blueprints.md>\n\nRelated: Documentation home <../docs/README.md> · Glossary <../docs/glossary.md> · Handbook home <README.md> · Kernel extensions <../docs/reference/kernel-extensions.md> · CHANGELOG — ctx API <../packages/bare-os-booter/CHANGELOG.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","01","introduction","what","bare"],"seeAlso":[{"name":"handbook-02-blueprints","section":7},{"name":"handbook-00-preface","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/01-introduction.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-02-blueprints","section":7,"title":"Chapter 2 — Blueprints: architecture and trust","synopsis":["man 7 handbook-02-blueprints","Handbook chapter (plain text from handbook/02-blueprints.md)"],"description":"CHAPTER 2 — BLUEPRINTS: ARCHITECTURE AND TRUST\n\nTime to read: about 10 minutes. Prerequisites: Chapter 1 <01-introduction.md> vocabulary.\n\nCanonical refs: Compatibility matrix <../docs/reference/compatibility-matrix.md> · KERNEL_CONTRACT <../docs/architecture/KERNEL_CONTRACT.md> · Protocol reference <../docs/reference/package-bare-os-protocol.md>.\n\nThis chapter is the aerial view: boxes, arrows, and what is allowed to trust what. Implementation details live in later chapters.\n\nFor a comparison to classic images and security limits, see Preface — Comparison frame and Security <00-preface.md#comparison-frame-not-marketing>.\n\nON THIS PAGE\n\n- Boot path from seeder to shell <#0-boot-path-from-seeder-to-shell>\n- Two applications, one protocol <#1-two-applications-one-protocol>\n- Two drives on the booter <#2-two-drives-on-the-booter>\n- Protocol, MBR, and discovery <#3-protocol-mbr-and-discovery>\n- Execution stack inside the booter <#4-execution-stack-inside-the-booter>\n- Services after the console exists <#5-services-after-the-console-exists>\n- Identity states <#6-identity-states>\n- What is not here (boundary) <#7-what-is-not-here-boundary>\n\n0. BOOT PATH FROM SEEDER TO SHELL\n\nThe following is the conceptual ordering (not every substep on the wire). It complements the reference sequence diagram in Architecture: end-to-end data flow <../docs/reference/architecture-data-flow.md>.\n\n1. TWO APPLICATIONS, ONE PROTOCOL\n\n- The seeder is the canonical publisher of the OS image (plus MBR in a small RAM map).\n- The booter is a consumer that refuses to invent a local copy: it must see peers.\n- After successful boot and eligibility checks, a booter can become a helper for cold joiners by mirroring the same block 0 MBR and captured seed RPC snapshots.\n\n2. TWO DRIVES ON THE BOOTER\n\nThe VFS merges both drives into one POSIX-shaped tree. Typical personal prefixes include $HOME, /tmp, /var/log, and /.bare/; most of /bin, /boot, /etc, /lib, … resolve on the system image. Exact routing is policy-sensitive—see the booter reference for guest /.bare visibility rules.\n\nEvergreen diagram: docs/concepts — Two-drive model <../docs/concepts/two-drive-model.md>.\n\nTrust model (pragmatic):\n\n- System drive content is whatever replicated from the swarm matching the MBR keys. In dev you treat the seeder as trusted; in the wild this is “who you peer with.”\n- Personal drive is your namespace (Corestore bare-os-personal-v1). It holds secrets, cron, dotfiles, HDMS registry, vault snapshots.\n\n3. PROTOCOL, MBR, AND DISCOVERY\n\nThe shared package bare-os-protocol pins:\n\n- TOPIC_STRING === 'bare-os-v1'\n- topicKey() = crypto.hash(b4a.from(TOPIC_STRING))\n- MBR layout: 512 bytes, magic BIOS, primary key at offset 8, optional failover keys at 40 and 72\n\nMBR layout (512 bytes, see bare-os-protocol/constants.js):\n\n- Bytes 03: BIOS magic\n- Bytes 839: primary system Hyperdrive public key\n- Bytes 4071, 72103: optional additional keys\n\nProtomux channel bare-os-v1 carries:\n\n- Block read requests (MBR and any indexed RAM the seeder exposes)\n- Hyperdrive replication on the same socket\n- Gossip bitfield (message 2), manifest search (3/4), and *bare_os. RPC (5/6) on the seed channel — including bare_os.capabilities, bare_os.replication_status, bare_os.manifest_hints, bare_os.peer_health, bare_os.staging_slot** (see packages/bare-os-protocol/lib/channel.js; Kernel extensions <../docs/reference/kernel-extensions.md>)\n\n4. EXECUTION STACK INSIDE THE BOOTER\n\nKernel and /bin scripts are not separate processes. They are AsyncFunction closures in the same JS realm as the booter, with a synthetic ctx instead of syscalls.\n\n5. SERVICES AFTER THE CONSOLE EXISTS\n\nstopBareInitd() runs from REPL session cleanup so timers do not leak across session restarts.\n\nBare mobile lifecycle: when the host registers bareOsRegisterSuspendHook / bareOsRegisterResumeHook, the booter wires bare-initd so units with ExecStop= / ExecStart= (or equivalent stop/start paths) run in dependency order on suspend and resume—mirroring ordered service pause on mobile shells without real process freeze.\n\n6. IDENTITY STATES\n\nGuest and unlocked sessions share the same booter process; the state machine below is about environment and policy, not separate OS processes.\n\n- Guest: fixed HOME=/home/guest, read-oriented personal tree policy for some operations.\n- Unlocked: HOME under /home/<pubkey-prefix>, HDMS can attach writable drives, crontab install/remove allowed.\n\nFull story: Chapter 5 — Identity, vault, HDMS <05-identity-vault-and-hdms.md>.\n\n7. WHAT IS _NOT_ HERE (BOUNDARY)\n\n- No hardware kernel, no MMU, no ELF loader for native /bin.\n- No container cgroup isolation—commands are JS with full host capability of the Pear/Bare process.\n- Future: stronger isolation would compose Bare workers, Pear runtime isolates, or bare-kit-style embeds; the stock ctx.bareOsSandboxRunScript hook is a documented placeholder until then (see developer guide security chapter).\n- No global consensus: two booters can diverge if they replicate different forks of the same discovery key (Hyperdrive versioning is a separate concern).\n\nNext: Chapter 3 — Protocol and disk <03-protocol-and-disk.md>\n\nRelated: Preface <00-preface.md> · Handbook home <README.md> · Kernel extensions <../docs/reference/kernel-extensions.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","02","blueprints","architecture","and","trust"],"seeAlso":[{"name":"handbook-03-protocol-and-disk","section":7},{"name":"handbook-01-introduction","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/02-blueprints.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-03-protocol-and-disk","section":7,"title":"Chapter 3 — Protocol, MBR, and SwarmDisk","synopsis":["man 7 handbook-03-protocol-and-disk","Handbook chapter (plain text from handbook/03-protocol-and-disk.md)"],"description":"CHAPTER 3 — PROTOCOL, MBR, AND SWARMDISK\n\nTime to read: about 12 minutes. Prerequisites: Chapter 2 — Blueprints <02-blueprints.md>.\n\nCanonical refs: package-bare-os-protocol <../docs/reference/package-bare-os-protocol.md> (bytes, offsets) · Kernel extensions <../docs/reference/kernel-extensions.md> (feature bits, seed RPC) · Compatibility matrix <../docs/reference/compatibility-matrix.md> (aligned versions).\n\nHere we connect bare-os-protocol to what seeder and booter actually do on the wire and in RAM. For byte offsets and constants, keep package-bare-os-protocol <../docs/reference/package-bare-os-protocol.md> open. For kernel feature bits and seed-channel RPC behavior, see Kernel extensions <../docs/reference/kernel-extensions.md>.\n\nON THIS PAGE\n\n- The MBR in plain language <#the-mbr-in-plain-language>\n- Seeder lifecycle <#seeder-lifecycle>\n- Booter: from peers to Hyperdrive <#booter-from-peers-to-hyperdrive>\n- Message IDs <#message-ids--what-each-is-for>\n- Kernel feature bitmask (documentation) <#kernel-feature-bitmask-documentation>\n- Personal drive replication <#personal-drive-replication>\n\nTHE MBR IN PLAIN LANGUAGE\n\nThink of the MBR as a business card for the system image: 512 bytes that say “this Hyperdrive key (and optional alternates) is the OS you want.” The first bytes are the ASCII magic BIOS so booters do not mistake random data for a catalog. Starting at offset 8, the card embeds 32-byte public keys—the primary system drive first, then optional failover keys at 40 and 72 if you publish multiple compatible images.\n\nThe booter always tries to obtain block 0 through the swarm-backed SwarmDisk; it does not silently fall back to your git checkouts kernel/. That design choice forces you to confront availability: if nobody is seeding, you do not boot.\n\nBLOCK-0 TRUST ASSUMPTIONS\n\nBlock 0 is small, but it is a trust root: whichever peer satisfies read(0) first can define which system Hyperdrive key the booter opens. Peer-assisted mirrors (BARE_OS_PEER_SYSTEM_SEED) widen availability by letting already-booted nodes answer the same block 0 and captured seed RPC snapshots, but they do not create a stronger authority domain than the swarm itself.\n\nSee also: Boot trust model <../docs/security/boot-trust-model.md> for the concise operator checklist.\n\nTreat block-0 acceptance as an explicit operator policy:\n\n- allow only peers/topics you trust to publish the intended image lineage,\n- enforce strict capability/version gates before proceeding when possible,\n- and verify release provenance out-of-band for production-like deployments.\n\nDetails: bare-os-protocol/constants.js <../packages/bare-os-protocol/constants.js> and the reference doc above.\n\nSEEDER LIFECYCLE\n\n1. Resolve kernel root (BARE_OS_KERNEL_ROOT or vendored kernel/).\n2. Optionally rebuild coreutils when running under Node (file: URL) — skipped under Pear.\n3. Open Corestore + Hyperdrive, stageKernelTree:\n- init.js → /boot/init.js\n- bin/ → /bin/\n- etc/ → /etc/\n- Other paths under the kernel tree map to the same path on the drive; README.md at the kernel root is skipped (repository layout doc only — not installed as /README.md).\n4. Build MBR with buildMbr(drive.key) and store block 0 in a Map (localRAM).\n5. Hyperswarm join(topicKey()) and join(drive.discoveryKey).\n6. On each connection: Protomux + setupSeedChannel, which:\n- Answers read index requests from localRAM (index 0 → MBR)\n- Attaches drive.replicate(stream)\n- Optionally pairs a second channel bare-os-app-v1 when BARE_OS_PROTOMUX_APP_CHANNEL is set on the host/seeder (namespaced application RPC alongside the OS control plane on bare-os-v1; see bare-os-protocol PROTOCOL_APP_CHANNEL_NAME).\n\nStack view (discovery → channel → replication):\n\n> Note\n> Offsets, magic bytes, and message IDs are specified in package-bare-os-protocol <../docs/reference/package-bare-os-protocol.md>; this sequence is the behavioral summary.\n\nOPTIONAL READ-ONLY SYSTEM ALIAS MOUNT\n\nWhen the host sets BARE_OS_VFS_SYSTEM_RO_ALIAS to an absolute path (for example /snapshot/system), the VFS routes that prefix to the same read-only system Hyperdrive as / (writes denied via mntReadOnly). The path appears in /proc/mounts as bare-os-system-ro-alias. Use it for scripts and docs that expect a distinct “versioned root” without opening a second drive.\n\nBOOTER: FROM PEERS TO HYPERDRIVE\n\nSwarmDisk (booter) mirrors the seeders channel handlers:\n\n- read(index) — if not local RAM, broadcast msg 0 to peers, await msg 1 (timeout).\n- addPeer — open channel, replicate system (and later personal) drives on the mux stream.\n\nPeer-assisted seeding (default on): Unless the host sets BARE_OS_PEER_SYSTEM_SEED to 0, false, no, or off, eligibility checks run after initd; when they pass, the booter copies its boot MBR (512 bytes) into localRAM so read(0) can be answered like the publisher, and disk.os implements bare_os.capabilities plus the same best-effort *bare_os. mirror RPCs using snapshots taken from the publisher at this nodes boot. Helpers still replicate the system Hyperdrive over the mux as today. After a successful swarm boot, BARE_OS_PEER_SEED_SYNTHETIC_CAPABILITIES (default on) may fill seedCapabilityInfo with stock kernelCapabilityWords when the pre-MBR bare_os.capabilities RPC was skipped or incomplete, so more nodes can mirror block 0 without a perfect publisher snapshot. Operators should set BARE_OS_SEED_IMAGE_TIP_ID on the seeder (and the same value on booters, or BARE_OS_PEER_SEED_ADVERTISE_IMAGE_TIP_ID) so helpers advertise one image tip; optional BARE_OS_PEER_SEED_IMAGE_TIP_ID** on a helper still gates whether that node may mirror; see the environment appendix.\n\nBoot path:\n\n1. Wait until disk.peers.size > 0 or boot timeout.\n2. parseMbr(await disk.read(0)) → list of 32-byte keys.\n3. For each key, try Hyperdrive(store, key) + replicate until /boot/init.js exists.\n4. Initialize personal drive namespace and join its discovery key.\n5. Hand off to executeKernel.\n\nThere is intentionally no “use my checkouts kernel/ if the network fails” path—the project forces you to think about availability of the swarm.\n\nEND-TO-END BOOT SEQUENCE (MBR TO START(CTX))\n\nThis view complements the seeder ↔ wire sketch above by naming both drives and /boot/init.js. Same story as docs/concepts — Boot timeline <../docs/concepts/boot-and-init-timeline.md>.\n\nMESSAGE IDS — WHAT EACH IS FOR\n\nAligned with packages/bare-os-protocol/lib/channel.js and swarm-disk.js. The boot-critical path is 0/1 plus Hyperdrive replication on the same socket; the rest supports discovery, ops, and capability negotiation (see Kernel extensions <../docs/reference/kernel-extensions.md>).\n\n- 0 (client → peers) — Fetch a RAM block by index (block 0 is the MBR) when the booter has no local copy.\n- 1 (peer → client) — Return the bytes for that index (or otherwise satisfy the read contract).\n- 2 (gossip stub) — Bitfield buffer for optional capability and gossip experiments (see kernel feature bits).\n- 3 / 4 (search request / response) — Manifest search so operators can ask whether the image contains a path without walking the whole tree client-side.\n- 5 / 6 (RPC request / response) — *bare_os. RPC: version, health, kernel info, capabilities, replication_status**, gossip; strict boot can require answers before trusting the image.\n\nThe important path for boot is 0/1 plus Hyperdrive replication on the same socket.\n\nBOOTER DISK.OS BRIDGE (AFTER INITD)\n\nOnce initd has started, the stock booter assigns disk.os on SwarmDisk. Peers use the same Protomux channel (messages 36) to query the running booter—not the static seeder RAM map:\n\n- searchLocal(query) — case-insensitive substring match over system Hyperdrive paths (recursive list, capped), returned on message 4.\n- execRpc(module, method, args) — whitelisted *bare_os. calls only, UTF-8 result string on message 6**:\n- bare_os.ping → pong\n- bare_os.ctx_api_version → BARE_OS_CTX_API_VERSION\n- bare_os.uptime_ms → ms since booter VFS construction started\n- bare_os.system_revision → JSON of ctx.bareOsSystemRevision\n- bare_os.ipc_list → JSON array of FIFO channel names\n- bare_os.service_names → JSON array of initd unit names\n- bare_os.echo → JSON {\"args\":[…]} (debug)\n- bare_os.disk_os_hints → JSON schema 3: schema 2 fields plus pathSearchLocal (last searchLocal metrics: manifest path, match counts, scan counts). searchLocal consults optional /etc/bare-os/path-manifest.json on the system drive first (BARE_OS_DISK_OS_PATH_MANIFEST, BARE_OS_DISK_OS_SEARCH_MANIFEST_ONLY, BARE_OS_DISK_OS_MANIFEST_CACHE_MS).\n- bare_os.replication_operator_sketch → JSON schema 7 (superset of 6): adds corestoreSnapshotUxHint (schema 3) comparing BARE_OS_CORESTORE_SNAPSHOT_JSON vs BARE_OS_CORESTORE_STATS_JSON handle/namespace counts; retains pkgIndexSurface + bare_os.pkg_index_get, corestoreOperatorSketch, peerPrioritySketch, blindTopologySketchV3, hyperblobsDedupSketch, Hyperswarm budget fields — non-secret operator JSON only.\n- bare_os.pkg_index_get → JSON schema 1: reads BARE_OS_PKG_INDEX_PATH (default /etc/bare-os/pkg-index.json) for package key listing or one name@version entry.\n- bare_os.replication_operator_intent — cap-gated (BARE_OS_DISK_OS_OPERATOR_INTENT_RPC=1): accepts a JSON object string, appends one disk_os.replication_operator_intent row via ctx.bareOsAuditLogAppendBatch when the booter wires auditBatch; EPERM when disabled.\n- Unknown pairs throw BareOsKernelError with code BARE_OS_EXEC_RPC_UNKNOWN (surfaced as RPC error text).\n\nsearchLocal: matches optional /etc/bare-os/path-manifest.json (or BARE_OS_DISK_OS_PATH_MANIFEST) on the system drive first, then (unless BARE_OS_DISK_OS_SEARCH_MANIFEST_ONLY) recursively lists the system Hyperdrive, then each SwarmDisk.auxiliaryDrives entry, dedupes paths, caps at 256 hits. Optional BARE_OS_DISK_OS_SEARCH_THROTTLE_MS (0500) inserts a short setTimeout between auxiliary drive scans.\n\nImplementation: packages/bare-os-booter/lib/bare-os-disk-os-bridge.js <../packages/bare-os-booter/lib/bare-os-disk-os-bridge.js>. Architecture overview: docs/architecture/KERNEL_CONTRACT.md <../docs/architecture/KERNEL_CONTRACT.md>.\n\nEXPERIMENTAL — P2P-NATIVE PACKAGE INDEX\n\nStock pkg-swarm-index lists or resolves rows from the drive manifest (/etc/bare-os/pkg-index.json) or ctx.bareOsHrpcRequest('bare_os','pkg_index_get', …) when the booter exposes HRPC. For get, when an entry includes pathCapabilityEnvelope and ctx.bareOsVerifyPathCapabilityEnvelope exists, the utility adds pathCapabilityEnvelopeVerify to the printed JSON (same behavior as the /bin copy under kernel/bin/). Operators can still compose Hyperbee + hyperswarm to publish name@version → { driveKey, manifestHash } records signed with Ed25519, verified against boot policy instead of a central registry. See kernel/etc/bare-os/pkg-index.example.json <../kernel/etc/bare-os/pkg-index.example.json>, kernel/etc/bare-os/hyperbee-index-hint.example.json <../kernel/etc/bare-os/hyperbee-index-hint.example.json>, BARE_OS_PKG_SWARM_TOPIC_HEX, and kernel/etc/bare-os/bundlebee-extension-sidecar.example.json for extension sidecars.\n\nEXPERIMENTAL — MULTISIG-GATED KERNEL UPDATE STREAM\n\nSee kernel/etc/bare-os/kernel-stream.manifest.example.json <../kernel/etc/bare-os/kernel-stream.manifest.example.json> for a non-normative sketch tying /boot/init.js hash pins, quorum signers, and an optional swarm topic class — operators wire replication and verification outside the guest.\n\nEXPERIMENTAL — MULTISIG-GATED RC.D PROPOSALS\n\nCollaborative fleets install JSON under */etc/bare-os/rc.proposals/enabled/.json (see kernel/etc/bare-os/rc.proposal.multisig.example.json <../kernel/etc/bare-os/rc.proposal.multisig.example.json>). With BARE_OS_RC_PROPOSAL_MULTISIG_STRICT=1, the guest kernel requires /etc/bare-os/pear.multisig.json, validates each proposals signaturesFrom keys against that policys signers, and requires at least quorum distinct matches before rc.d runs. ctx.bareOsAuditLogAppend receives rc.proposal.multisig_ok / rc.proposal.multisig_fail rows when wired. Cryptographic attestation of proposal bytes remains a host / seeder** responsibility.\n\nKERNEL FEATURE BITMASK (DOCUMENTATION)\n\nThe package bare-os-protocol exports lib/kernel-feature-bits.js (re-exported from index.js) with versioned capability words describing optional booter / image capabilities across the current surface: shorthand words bits through bits11 and canonical kernelCapabilityWords (always >>> 0 when masking). Peers see a 250-byte bitfield on message 2 (gossip stub; bit 0 set today). The seeder answers bare_os.capabilities over RPC with doc / featureBitsDoc, bits…bits11, kernelCapabilityWords, protocolPackageVersion, role, and protocol so the booter can compare before MBR read (BARE_OS_SEED_CAP_STRICT covers all non-zero words the stock booter advertises). bare_os.replication_status adds seeder-local replication hints; bare_os.replication_queue (with bounded queue / snapshot notes), bare_os.capability_attestation, bare_os.mbr_layout, bare_os.snapshot_hints, and bare_os.peer_firewall_stats are optional RPCs (hints only; guests do not verify crypto). mbr_layout / replication JSON may surface parsed failover key slots (MBR offsets 40 / 72) as hex hints for operators, plus optional staging slot, manifest, peer health, and firewall sketches when the seeder implements them. Guests read dumps under /proc/bare_os_features, /proc/bare_os/, and related /proc nodes. Unknown bits should be ignored.\n\nAuthoritative tables: Kernel extensions <../docs/reference/kernel-extensions.md>.\n\nPERSONAL DRIVE REPLICATION\n\nSwarmDisk.initPersonalDrive creates a separate Hyperdrive under a stable Corestore namespace and swarm.join(personalDrive.discoveryKey). Your $HOME tree can therefore sync across your devices if peers share that discovery key—orthogonal to the system image key from the MBR.\n\nPeer admission audit (optional): when BARE_OS_PEER_ADMISSION_AUDIT_NDJSON is on, ctx.bareOsEvaluatePeerAdmission may emit peer_admission event-bus rows with verdict, optional reason, and a 16-hex-character peerKeyHexPrefix only (never the full key). BARE_OS_PEER_ADMISSION_AUDIT_RATE_MS throttles repeats per prefix bucket; /proc/bare_os/security_posture.json documents the env keys under peerAdmission. Allowlist/denylist fail-closed semantics are unchanged — audit is observability only.\n\nHost logging: mount and writability warnings use emitSwarmDiskHostLog in swarm-disk.js <../packages/bare-os-booter/lib/swarm-disk.js>. When BARE_OS_BOOT_TRACE is json or ndjson, one structured type\":\"booterHost\" line ( component\":\"swarm_disk\" ) is written to stderr per event; otherwise messages go to stderr (info) or console.warn (warnings), not guest ctx.console.\n\nWhat you should expect: personal data persists under the same store path between runs; if you delete the booter Corestore or switch BARE_OS_BOOT_STORE, you effectively get a new personal namespace unless you restore keys. Multi-device sync only happens if another device joins the same personal discovery key—there is no automatic “cloud account”; it is still P2P replication semantics.\n\nFAILURE MODES YOU WILL SEE IN THE WILD\n\nBooter exits after boot timeout — Likely no peer on the bare-os-v1 topic, or Hyperswarm is blocked. Start a seeder on the same network, review BARE_OS_BOOT_TIMEOUT_MS, and confirm HYPERSWARM_BOOTSTRAP if you use custom bootstrap nodes.\n\nInvalid MBR or parse error — Block 0 may not be from this project, the RAM map may be corrupt, or the seeder may be mismatched. Align bare-os-protocol versions between seeder and booter and rebuild the MBR from a known-good drive.\n\nDrive never finishes replicating — Often a discovery key mismatch, flaky peers, or a stalled mux. Watch peer counts, restart the seeder, inspect logs, and verify the booter joined the system discovery key from the MBR.\n\nCapabilities or strict seed errors — The booter may expect features the seeder image does not advertise. Align package versions; relax BARE_OS_SEED_CAP_STRICT only if you understand the tradeoff (Kernel extensions <../docs/reference/kernel-extensions.md>).\n\nPersonal files missing on a new machine — You may be using a new Corestore path or a new personal drive. Restore the same BARE_OS_BOOT_STORE (or key backup); the personal drive is not the system MBR key.\n\nNext: Chapter 4 — The booter runtime <04-the-booter-runtime.md>\n\nRelated: Chapter 2 — Blueprints <02-blueprints.md> · Handbook home <README.md> · Kernel extensions <../docs/reference/kernel-extensions.md> · Environment appendix <../docs/reference/environment-and-posix-appendix.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","03","protocol","and","disk","mbr","swarmdisk"],"seeAlso":[{"name":"handbook-04-the-booter-runtime","section":7},{"name":"handbook-02-blueprints","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/03-protocol-and-disk.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-04-the-booter-runtime","section":7,"title":"Chapter 4 — The booter runtime: ctx, VFS, shell, kernel, services","synopsis":["man 7 handbook-04-the-booter-runtime","Handbook chapter (plain text from handbook/04-the-booter-runtime.md)"],"description":"CHAPTER 4 — THE BOOTER RUNTIME: CTX, VFS, SHELL, KERNEL, SERVICES\n\nTime to read: about 20 minutes (skim headings first). Prerequisites: Chapters 23 <02-blueprints.md>.\n\nThe booter is the largest package because it is the machine: everything the user experiences as “the OS” (except the raw Hyperdrive bytes) is assembled in packages/bare-os-booter/index.js and *lib/.js**.\n\nCTX AT A GLANCE (SURFACE AREA)\n\nctx is the single handle passed into /boot/init.js and every /bin utility. You can think of it as the simulated machine:\n\n- ctx.vfs — path operations across system + personal drives (readFile, writeFile, stat, chdir, …).\n- ctx.console — log / error wired to the session console (and often mirrored to kernel logs).\n- ctx.execLine / ctx.readLine — the line shell and prompt input.\n- ctx.runBinCommand — run a /bin command as if typed (used by time, xargs, etc.).\n- Identity — hooks and state for guest vs unlocked sessions (login / logout).\n- Optional ctx.bare — merged Bare module map when the host allows imports + optional drive bundles (see below).\n- Policy and caps — ctx.bareOsRuntimeCaps, optional httpFetch (policy fetch for delegated curl/wget when a fetch backend exists at ctx build), IPC FIFOs, HDMS, Pear reload requests, audit flags, …\n\nThe authoritative field list and versioning story are in developer-guide — The context object <../developer-guide/02-the-context-object.md> and CHANGELOG <../packages/bare-os-booter/CHANGELOG.md>.\n\nBOOT SPLASH AND STDIO\n\nresolveStdio() picks session stdin/stdout appropriate for Pear/Bare vs Node. When stdout is a TTY and BARE_OS_NO_SPLASH is unset, createBootSplash draws a full-screen boot UI tied to BARE_OS_BOOT_TIMEOUT_MS: a centered block with title, tagline, framed log area and progress bar sized to the terminal, phase lines with spinner, and optional footer lines (booter and protocol versions from main()). Vertical padding is capped so very tall terminals do not push content too far down. prepareForKernel() clears the screen and restores the cursor before the line editor attaches.\n\nNon-TTY mode skips splash noise; automation uses BARE_OS_SKIP_REPL=1.\n\nHost vs guest logging: After the session ctx exists, user-visible kernel and shell output should flow through ctx.console (wired in createKernelReplSession / init). Pre-session and operator-only booter paths use packages/bare-os-booter/lib/bare-os-host-booter-log.js plus BARE_OS_HOST_BOOTER_LOG (stderr vs NDJSON file) so automation can separate host telemetry from guest REPL traffic. The seeder mirrors the same idea via packages/bare-os-seeder/lib/host-logger.mjs (seedLog).\n\nEXECUTEKERNEL IN ONE PARAGRAPH\n\nAfter the system and personal drives exist:\n\n1. Build shellEnv (guest defaults: HOME, PATH, USER, …, BARE_OS_CTX_API_VERSION), copying host keys when set — including *BARE_OS_PIPELINE_ (including BARE_OS_PIPELINE_ABS_MAX_), BARE_OS_SHELL_STREAMING, BARE_OS_SHELL_STREAMING_MULT (alias BARE_OS_STREAMING_MULTIPLIER), BARE_OS_SHELL_CMDSUBST, BARE_OS_SHELL_CMDSUBST_MAX_BYTES, boot and audit toggles (BARE_OS_BOOT_PROFILE, BARE_OS_ONBOOT, BARE_OS_BOOT_STRICT, BARE_OS_RC_D_SKIP, BARE_OS_BOOT_MINIMAL, BARE_OS_BOOT_SKIP, BARE_OS_BOOT_TRACE, BARE_OS_KERNEL_SELFTEST, BARE_OS_SELFTEST_FORMAT, BARE_OS_AUDIT, BARE_OS_AUDIT_JSON, BARE_OS_AUDIT_REDACT, BARE_OS_BOOT_ALLOWLIST, BARE_OS_EXEC_MAX_DEPTH, BARE_OS_EXEC_LINE_BUDGET_MS / BARE_OS_TIMER_BUDGET_MS, BARE_OS_IPC_, BARE_OS_IPC_CHANNEL_MAX_BYTES, BARE_OS_IPC_MAX_CHANNELS, BARE_OS_POSIX_MQ_MAX_MSGS, BARE_OS_POSIX_MQ_MSG_BYTES, BARE_OS_HTTP_ALLOWLIST, BARE_OS_HTTP_DENYLIST, BARE_OS_TLS_PIN_SHA256, BARE_OS_VFS_WATCH, BARE_OS_VFS_MAX_OPEN, BARE_OS_VFS_UNION_PREFIXES, BARE_OS_VFS_UNION_WRITE_DENY, BARE_OS_VFS_BIN_CACHE, BARE_OS_IMAGE_DIGEST, BARE_OS_PEAR_CHANNEL, BARE_OS_PEAR_RELEASE, BARE_OS_BARE_MODULES, BARE_OS_BARE_DRIVE_BUNDLES, BARE_OS_BOOT_MANIFEST, BARE_OS_BOOT_MANIFEST_SIGN, BARE_OS_BOOT_MANIFEST_PUBKEY_HEX, BARE_OS_BOOT_POLICY, BARE_OS_SANDBOX_SCRIPT, BARE_OS_SANDBOX_WORKER, BARE_OS_INITD_MAX_PARALLEL, BARE_OS_INITD_JOURNAL_MAX_LINES, BARE_OS_URANDOM_CRYPTO, BARE_OS_TELEMETRY_NDJSON, BARE_OS_TELEMETRY_OTEL_JSONL, BARE_OS_TELEMETRY_OTEL, BARE_OS_SEED_RPC_HANDSHAKE, BARE_OS_SEED_CAP_STRICT, BARE_OS_SEED_CAP_FAIL, BARE_OS_BLIND_BOOTSTRAP_URL, BARE_OS_BLIND_BOOTSTRAP_JSON, BARE_OS_MIRROR_READ_KEY, PEAR_CHANNEL, Capability word 9 keys (BARE_OS_SOCKS_PROXY_MAP_JSON, BARE_OS_BARE_CRYPTO_VERSION, BARE_OS_PEAR_IPC_PACKAGE_VERSION, BARE_OS_PEAR_UPDATER_CHANNEL, BARE_OS_HAPPY_EYEBALLS_V3_MODE, BARE_OS_BIN_WORKER_WASM_MS_MAX, BARE_OS_PROBE_ID_BARE_MODULE_CRYPTO_STAGING, optional BARE_OS__JSON for /proc/bare_os/ Capability word 9 files), and Capability word 10 keys (BARE_OS_PROBE_ID_PEAR_INSPECT_LOGGER_TLS, BARE_OS_BARE_RPC_PROBE_CLASS, BARE_OS_MTLS_PROXY_MAP_JSON, BARE_OS_THREAD_POOL_TELEMETRY_JSON, BARE_OS_HAPPY_EYEBALLS_V4_MODE, BARE_OS_BARE_BOOT_VERSION, BARE_OS_BARE_LOGGER_VERSION, BARE_OS_BARE_TLS_VERSION, BARE_OS_LIFECYCLE_SCHEMA_VERSION, optional BARE_OS__JSON for Capability word 10 /proc/bare_os/ files — see Chapter 7 <07-operations-and-development.md>, the environment appendix <../docs/reference/environment-and-posix-appendix.md#14-environment-variables-complete-list>, Kernel extensions <../docs/reference/kernel-extensions.md>, and the context object developer guide <../developer-guide/02-the-context-object.md>. Set BARE_OS_BOOT_PROFILE_RESOLVED from the host override or the first line of /etc/bare-os/profile on the system drive; assign BARE_OS_SESSION_ID for /run/bare-os/session. Seed /run/bare-os/boot.json fields imageDigest, pearChannel, pearRelease, and accumulate booterPhases (vfs, ctx, repl, initd, kernel_invoke) for observability alongside kernel phases.\n2. createBareOsIpc({ maxFifoBytes, maxChannels?, perChannelMaxBytes?, ipcRpcToken?, enableFanout?, maxJsonRpcLineBytes?, posixMqDefaultMaxmsg?, posixMqDefaultMaxBytes?, posixMqMaxmsgCeiling? }) — in-memory FIFOs under /run/bare-os/ipc/<name>; optional distinct-channel cap BARE_OS_IPC_MAX_CHANNELS; optional per-name byte caps via BARE_OS_IPC_CHANNEL_MAX_BYTES (JSON map); pushJson/takeJson with optional shared-secret field bareOsIpcToken when BARE_OS_IPC_RPC_TOKEN is set; fan-out topics fanoutPublish/fanoutSubscribe (disable with BARE_OS_IPC_FANOUT=0); createDuplexBridge(baseName) pairs two push/take sides for bidirectional byte streams; duplexJsonRoundTrip(side, request) sends one JSON object and awaits one JSON reply (bounded); stats includes fan-out subscriber counts. POSIX-like message queues (mqOpen / mqSend / mqReceive, also ctx.bareOsSyscall('mq_open'|…)) live in the same module: bounded maxmsg and per-message maxBytes (optional session defaults from BARE_OS_POSIX_MQ_MAX_MSGS / BARE_OS_POSIX_MQ_MSG_BYTES when attrs omitted), priority order (higher numeric prio dequeued first, then FIFO by internal sequence), separate from FIFO semantics; stats().posixMessageQueues lists queue count and sample names.\n3. createVfs(drive, personalDrive, shellEnv, mntRef, vfsOptions?) — the two-drive router; optional vfsOptions supply procSnapshot (/proc/version, cmdline), dynamic text for /proc/net/dev, /proc/diskstats, /proc/bare_os_quotas, /proc/bare_os_resources, /proc/bare_os_features, /sys/class/net/lo, bootProfileText, sessionText, initdRunText, bootReadyJsonText, getVirtualReaders for /run/bare-os/virtual/<name>, etc.\n4. After VFS: buildBareCtxObjectFromHost + maybeMergeBareFromDrive fill a bareLibrary map (host imports first; drive bundles only add missing keys). /lib/bare/manifest.json and */lib/bare/bundles/.js are trusted like /bin**. See developer guide ch.12 <../developer-guide/12-bare-modules-and-pear-ecosystem.md>.\n5. Construct ctx: disks, vfs, bareOsIpc, env, b4a, optional bare: Object.freeze(bareLibrary) when BARE_OS_BARE_MODULES is enabled, topic, bareOsRuntimeCaps (pipeline limits, quotas, pseudo path list, feature flags such as vfsWatch, ipcRpcJson, ipcFanout, initdSocketActivation, bareCtxModules, bareDriveBundles), optional httpFetch (policy-wrapped fetch when globalThis.fetch or ctx.bare.fetch is available at ctx build — see HTTP: curl and wget <../docs/reference/http-curl-and-wget.md>), optional bareOsHostStats from the bare-os module, bareOsGetResourceStatus, bareOsRegisterVirtualFile, Pear/sandbox stubs, identity hooks, bareOsSubscribeBootEvent / bareOsEmitBootEvent, bareOsSubscribeHdmsLifecycle, bareOsAwaitInitdUnits, runHdms, requestBooterExit, bareOsPublishBootReady, …\n6. applyGuestEnv + ensureGuestHome — identity stub and /.bare skeleton on the personal drive (after the ctx object exists).\n7. createKernelReplSession — Fish-style readLine + console bound to the same stdout as the prompt (tab completion, ghost suggestions, history on the personal drive; disable with BARE_OS_FISH=0 or non-TTY stdin). Full behavior: Shell completion and REPL editor <../docs/reference/shell-completion-and-repl-editor.md>.\n8. Set ctx.execLine, ctx.readLine, ctx.runBinCommand — optional AbortSignal/timeoutMs on execLine, readLine, runBinCommand, and VFS readFile/writeFile; exit, optional audit logging (BARE_OS_AUDIT, BARE_OS_AUDIT_JSON, redaction), execLine nesting cap (BARE_OS_EXEC_MAX_DEPTH), then execShellLine.\n9. await startBareInitd(ctx) — see below.\n10. runKernelFromSource(initSource, ctx) — runs /boot/init.js.\n\nCleanup path closes swarm/drives and calls session.cleanup(), which runs stopBareInitd().\n\nVFS: TWO DRIVES, ONE PATH SPACE\n\nlib/vfs.js implements resolveLogical with unix-path-resolve(cwd, userPath) (two arguments only—important when reading the code).\n\n- Paths under $HOME resolve to the personal Hyperdrive under /.bare-os/home/<HOME-basename>/… (mutable writeFile / unlink where policy allows); writable /var/log uses /.bare-os/var/log/<same-basename>/…; writable /tmp uses /.bare-os/tmp/<same-basename>/… (session-isolated scratch). With BARE_OS_PERSONAL_ACCT_PREFIX=1, these three subtrees nest under /.bare-os/acct/<id>/… first (see multi-account design <../docs/design/multi-account-personal-subvolumes.md>).\n- Guest vs sealed /.bare: In guest mode, /.bare/account, /.bare/vault/, and vault-rotation-audit paths are not readable or writable (and readdir / .bare hides account / vault names) unless BARE_OS_GUEST_BARE_READ_ALL=1. login / logout** also clear warm read caches, reset simulated shell jobs, and reload fish history so another principals session does not bleed through.\n- Legacy flat-root migration — One-time lift from personal / into the active home prefix is governed by BARE_OS_PERSONAL_ROOT_MIGRATE and state /.bare-os/migration/legacy-root-v1.json; guest skips the lift when an account blob exists (so another users legacy files never land in /home/guest). Optional BARE_OS_GUEST_SCRUB wipes guest /tmp and selected caches when entering guest.\n- Other absolute paths hit the system drive (OS image).\n- Hyperdrive rejects / as a filename; the VFS special-cases logical root for stat, chdir, exists.\n\nVirtual listings include /home (session-specific), /mnt when HDMS mounts exist, and injected root entries proc, sys, tmp when absent from the system image.\n\nCatalog detail: Chapter 9 <09-posix-utilities-shell-and-vfs.md>.\n\nPSEUDO /PROC, /SYS, /RUN, /DEV (MOSTLY READ-ONLY)\n\nThese paths are synthetic (not stored on either Hyperdrive). They exist for inspection and scripting ergonomics, not Linux ABI compatibility. In blog terms: /proc is “what is this session doing?”; /sys is “tiny sysfs-shaped stubs”; /run is “volatile session state the booter owns”; /dev is “just enough device names that scripts stop crashing”; session /tmp is “scratch space that never lands on the read-only system drive.”\n\n- /proc: version, bare_os_version, uptime, meminfo, cpuinfo, loadavg, mounts, diskstats (peer-scaled synthetic lines), bare_os_quotas (JSON: pipeline limits, exec-depth cap, IPC cap, session stats, FIFO stats), bare_os_resources, bare_os_features (includes advertised stock words bits2 … bits10 when non-zero, optional seedHandshake summary after bare_os.capabilities RPC when enabled), bare_os_swarm (bounded P2P / session snapshot when the host provides it), bare_os_replication (JSON hints: version, peers, last error; may embed manifestHints, peerHealth, stagingSlot, seedSnapshotHints, seedPeerFirewallStats, seedReplication, mbrKeysHex from seed RPCs), bare_os_manifest_hints, bare_os_peer_health, bare_os_staging_slot, bare_os_snapshot_hints, bare_os_provenance (digest / signing / Pear channel summary), bare_os_pear_ipc_registry (well-known Pear IPC channel names), bare_os_pear_trust (operator JSON from BARE_OS_PEAR_TRUST_JSON), bare_os_initd_dag / bare_os_initd_graph (initd dependency graph JSON; graph may include a dot string), boot_graph.json (declarative kernel boot stage graph + boot-ready snapshot), bare_os_rlimits (getrlimit-shaped mirror of runtime caps; RLIMIT_NOFILE may follow BARE_OS_VFS_MAX_OPEN when set on the host), bare_os_hdms_health (non-secret mount/registry summary), bare_os_metrics_live (coalesced quotas/resources snapshot; interval BARE_OS_PROC_POLL_MS; schema 2 adds delegate inflight / rate-bucket samples), bare_os_net_summary (operator rollup of swarm topic, peer count, seed RPC hints; optional transport from BARE_OS_NET_TRANSPORT_STATS_JSON; optional udxTuning / hyperswarmTuning from BARE_OS_UDX_TUNING_JSON / BARE_OS_HYPERSWARM_TUNING_JSON), bare_os_host_os.json (Holepunch bare-os or injected JSON), bare_os_sync_window.json (BARE_OS_REPLICATION_SYNC_WINDOWS UTC windows), bare_os_debug.json when BARE_OS_KERNEL_DEBUG=1 (non-secret masks), bare_os_extensions.json / bare_os_hdms_hints.json (kernel extension registry + HDMS/autopass hints), bare_os_capabilities (human-readable dump of ctx.bareOsRuntimeCaps; bare_os_capabilities.json or Accept: application/json for machine output), bare_os_bootstrap, bare_os_union (JSON: union read prefixes + BARE_OS_VFS_UNION_WRITE_DENY), bare_os_seed_handshake (raw handshake / error object), bare_os_virtual_registry (registered virtual file metadata), /proc/bare_os/ (stable names + index.json mirroring the flat *bare_os_ aliases), net/dev (P2P-oriented stub), net/tcp, net/udp (header-only stubs), self/ with environ, cmdline, cgroups, exe, fd/02 (stub targets), plus bare_os_session_stats. environ omits keys whose names look secret-bearing (e.g. PASSWORD, TOKEN, VAULT) and only includes a small public set plus BARE_OS_ (including BARE_OS_SESSION_ID*).\n- /sys: fs/bare_os/version, fs/bare_os/build_id (same payload sources as /proc/version / build id), class/net/lo — one pseudo file whose text is operstate and carrier lines from the booters sysClassNetLoText hook (stock: operstate reflects swarm peer count carrier 0/1; see createVfs in vfs.js <../packages/bare-os-booter/lib/vfs.js>), devices/virtual/ — navigable empty directory for script portability (no per-device files).\n- /sys/fs/bare_os/version: same text as /proc/version.\n- /run/bare-os/units: tab-separated snapshot of bare-initd registered units (phase, start time, description).\n- /run/bare-os/unit-journal/: append-only NDJSON per unit (<name>.ndjson) for start/stop/health/restart events (size-capped); journalctl -u also tails this file when present.\n- /run/bare-os/boot_profile: one line (plus newline): resolved boot profile name (BARE_OS_BOOT_PROFILE from the host, else first line of /etc/bare-os/profile, else empty). Listed in ctx.bareOsRuntimeCaps.pseudoFsPaths.\n- /run/bare-os/session: session UUID (from BARE_OS_SESSION_ID) plus newline.\n- /run/bare-os/virtual/: optional kernel-registered synthetic files via ctx.bareOsRegisterVirtualFile.\n- /dev/null, /dev/zero: minimal device semantics — null discards writes and reads empty; zero reads a fixed 64KiB zero buffer. Not infinite /dev/zero like Linux.\n- /dev/shm: directory of in-memory named segments (/dev/shm/<name>); readdir lists segment names; unlink removes a segment. This is not host shm_open—it is a guest-local buffer registry for scripts and tests.\n\nNon-goals: no real PIDs, accurate meminfo, or guarantees of path parity with Linux.\n\nvfs.watch(logicalPath) (Hyperdrive-backed paths only — not pseudo roots): returns { watcher, destroy, logicalAbs, driveFolder }; use Hyperdrives async iterator on watcher. Disabled when host sets BARE_OS_VFS_WATCH=0. With BARE_OS_VFS_WATCH_PSEUDO=1 or BARE_OS_VFS_WATCH_SWARM=1, a bounded poll watcher is also available on allowlisted /proc paths (metrics, swarm, replication). See ctx.bareOsRuntimeCaps.features.vfsWatch.\n\nUnion read: when BARE_OS_VFS_UNION_PREFIXES lists comma-separated logical prefixes, readFile / readlink on those paths may merge the system image with overlays (see vfs.js and ctx.bareOsRuntimeCaps.features.vfsUnionRead). BARE_OS_VFS_BIN_CACHE=1 enables a small LRU read cache for /bin entries, invalidated when vfs.watch notifications fire on watched prefixes.\n\nImplementation note: pseudo-file content is UTF-8 encoded with b4a, not TextEncoder, because some Bare/Pear runtimes omit the Web Encoding globals (TextEncoder / TextDecoder). The same applies elsewhere in the booter and in-image utilities that must run on Bare.\n\n/DEV AND /RUN (MINIMAL SUBSET)\n\nSee Pseudo /proc, /sys, /run, /dev above. A full device tree and /run parity with Linux are still out of scope.\n\nCTX.BARE AND DRIVE BUNDLES\n\nAfter the VFS exists, buildBareCtxObjectFromHost plus maybeMergeBareFromDrive fill a bareLibrary map: host-configured imports first, then /lib/bare/manifest.json and */lib/bare/bundles/.js on the system drive may supply only missing keys. Those paths are trusted like /bin**—they ship in the replicated image.\n\nUse this when you want real ESM modules (Holepunch *bare- packages) inside an otherwise AsyncFunction-only tree. Trust stance: enabling BARE_OS_BARE_MODULES** and drive bundles expands attack surface; treat manifests as part of your image signing story.\n\nDeep dive: developer-guide ch.12 — Bare modules and Pear ecosystem <../developer-guide/12-bare-modules-and-pear-ecosystem.md> · kernel/lib/bare/ <../kernel/lib/bare/> · PEAR-RUN.md — BARE_OS_BARE_MODULES <../docs/PEAR-RUN.md>.\n\nPEAR HOST BRIDGES AND HTTP POLICY\n\nThe booter exposes policy-gated hooks so a Pear host can react without forking the guest kernel:\n\n- ctx.bareOsRequestPearReload(opts?) — ask the host to reload the Pear runtime (OTA-style); optional persistRequest writes ~/.bare-os/pear-reload.request. Env mirrors BARE_OS_PEAR_CHANNEL, BARE_OS_PEAR_RELEASE, PEAR_CHANNEL into /run/bare-os/boot.json.\n- ctx.bareOsRequestMirror({ key?, label? }), ctx.bareOsExportPersonalSnapshot({ label? }), ctx.bareOsPearIpcEmit(channel, payload) — return hints or booleans; on Node the booter emits process events for embedding apps to implement real mirrors or snapshots.\n\nHTTP CLIENTS (CURL / WGET)\n\nDelegated curl and wget run from the booters host delegate registry before any /bin script on the system drive. They use a Fetch-shaped stack: policy-wrapped ctx.httpFetch when set, else ctx.bare.fetch from host imports or /lib/bare/bundles, else globalThis.fetch. On minimal Pear/Bare hosts, ensureBareFetchGlobals may install globals from bare-fetch or bare-https when no native fetch exists. Outbound URLs are constrained by BARE_OS_HTTP_ALLOWLIST / BARE_OS_HTTP_DENYLIST, optional BARE_OS_TLS_PIN_SHA256 (and init.bareOsCurlTls for curl TLS details), and optional BARE_OS_DNS_ALLOWLIST. The drive still ships /bin/curl and /bin/wget as manifest stubs; normal sessions never execute them.\n\nCanonical reference: HTTP: curl and wget <../docs/reference/http-curl-and-wget.md> · Flag matrix: CLI_PARITY.md <../packages/bare-os-booter/CLI_PARITY.md> · Full env tables: environment appendix <../docs/reference/environment-and-posix-appendix.md> · Pear notes: PEAR-RUN.md <../docs/PEAR-RUN.md>.\n\nagent: in-guest /bin/agent uses the same ctx.httpFetch stack for OpenAI-compatible /chat/completions requests and for the web_fetch tool (live http(s) fetches for the model). Treat BARE_OS_HTTP_ALLOWLIST / BARE_OS_HTTP_DENYLIST as covering both the API host and any sites you expect web_fetch to reach. Provider settings live under ~/.agent/ on the personal drive (man agent). chat (/bin/chat) is separate: swarm / Protomux chat when the booter enables it (man chat).\n\nROADMAP AND OUT-OF-SCOPE\n\nRemaining gaps are tracked in packages/bare-os-booter/CLI_PARITY.md, POSIX appendix — gaps <../docs/reference/environment-and-posix-appendix.md#14a-posix-userland-appendix-implemented-vs-gaps>, and Kernel extensions <../docs/reference/kernel-extensions.md>: transports and flags curl/wget may never match GNU; pipelines remain bounded captures rather than kernel pipes; bareOsSandboxRunScript is not a hard hardware-style isolate yet (optional stronger paths are documented in bare-os-sandbox.js); socket-activation idle stop remains directional work, not a promise.\n\nMilestone shape (current intent): (1) VFS + shell + synthetic proc/run + boot trace + allowlists — largely in place; (2) man and incremental /bin flags; (3) delegated HTTP parity where feasible; (4) init/protocol hardening as needs arise.\n\nDirectories: vfs.mkdir(path, { recursive }) and vfs.rmdir(path) implement POSIX-like tree creation and removal using a .bareos_empty marker file for empty directories (aligned with git-fs-adapter). See Chapter 9 <09-posix-utilities-shell-and-vfs.md>.\n\nctx.runBinCommand(argv) — same resolution as external commands in the shell; exposed for utilities such as /bin/time.\n\nSHELL AND KERNEL RUNNER\n\nexecShellLine (lib/shell.js):\n\n- Tokenizes words, quotes, escapes, $VAR, pipelines |, redirections > / >> / <.\n- Builtins: alias, unalias, cd, export, unset, readonly, umask, :, command, type, login, logout, exit, jobs, fg, bg, suspend-job, wait, bounded if/while/for/case — plus external commands via runBinCommand. Optional BARE_OS_SHELL_CMDSUBST enables bounded $(…) in words; optional BARE_OS_SHELL_STREAMING scales pipeline capture caps. readonly blocks export and assignment writes to the same name; command -v / -V and type use resolveBinInPath for PATH lookup.\n- First-word aliases (defaults like ll → ls -la, nano → edit) expand after $VAR substitution; alias / unalias match the restricted ~/.barerc syntax (not full POSIX sh).\n- Pipes capture console.log into the next stage or a string sink.\n\nrunBinCommand (lib/kernel-runner.js):\n\n1. If argv[0] contains / — resolve via VFS, drive.get, runScriptFromSource.\n2. Else if the name ends with .js — resolve $PWD/name.js first (same as explicit ./ for many cases).\n3. Else walk PATH on the system drive only.\n\nrunScriptFromSource strips an optional #! line, runs the script body as top-level code in an async function, then awaits a top-level run(ctx, argv) if one is defined (optional for user scripts; /bin utilities always define run). It catches errors—logs to ctx.console.error without unwinding the kernel loop.\n\nrunKernelFromSource requires async function start(ctx) at the top level of /boot/init.js.\n\n~/.BARERC (RESTRICTED STARTUP FILE)\n\nOn guest and logged-in identity transitions, the booter loads ~/.barerc from the personal drive if it exists. On login (unlocked identity), if the file is missing, the booter creates a comment-only skeleton you can edit. Only these forms are applied (other lines are ignored; set BARE_OS_STRICT_BARC=1 to log warnings):\n\n- export NAME=value — same name rules as the shell builtin; value is expanded like export in execShellLine.\n- alias name=value and unalias — same behavior as the interactive builtins (unalias -a resets to the default alias table).\n\nThere is no arbitrary command execution, source, or control flow — it is intentionally not a full sh profile.\n\nBARE-INITD, CRON, AND THEMES\n\nbare-initd.js (below) starts DAG-ordered units after the console exists. bare-cron (also below) reads /etc/bare-os/crontab and ~/.crontab.\n\nThemes live in docs/themes/README.md <../docs/themes/README.md> — preset packs (for example Nord) that align LS_COLORS, prompt colors, and sample Alacritty / Warp YAML so your host terminal and the in-guest theme / dircolors utilities agree. At login, ~/.barerc may contain theme nord (plus export / alias lines) to set *BARE_OS_COLOR_** without hand-editing escape codes.\n\nBARE-INITD AND KERNEL LOGGER\n\nbare-initd.js:\n\n- registerBareService({ name, start, stop?, description?, logPath? }) — optional stop enables systemctl stop / restart for that unit; logPath is a logical VFS path for systemctl status / logs\n- startBareInitd(ctx) — ensures /var/log/bare-os (see below), then DAG-ordered start with optional parallelism (BARE_OS_INITD_MAX_PARALLEL, default 1). Skips units listed in ~/.config/bare-os/initd/disabled.txt. Drop-ins ~/.config/bare-os/units/<name>.unit support [Unit] keys After=, Before=, Requires=, Wants=, TimeoutStartSec=, TimeoutStopSec=, Restart=, RestartSec=, OnFailure=, FailureAction=, ExecStartPost=, SocketActivationIpc= (defers start() until the first read on that FIFO), IdleSec= (with socket activation and a stop handler: stop after idle seconds between FIFO messages), ReadinessPath= (VFS path until exists, or exec:<execLine> gated by ReadinessTimeoutSec=), ReadinessTimeoutSec=, ConditionPathExists= (skip start when missing), AssertPathExists= (fail unit when missing). Optional fragments *~/.config/bare-os/units.d/<name>/.conf (sorted .conf) merge after the main .unit and before ~/.config/bare-init/units/ overrides. Cycles in After/Before are detected and logged; affected units fail start. Built-in default edges include bare-cron after kernel-logger, bare-os-www after kernel-logger, and bare-holesail after kernel-logger and bare-os-www (so the static HTTP listener is up before managed Holesail tunnels target that port). Per-service try/catch, [bare-initd] name: err on failure; failures append to /var/log/bare-os/initd.log and the structured unit journal; runtime state active / failed / inactive. waitForBareInitdUnits(names, timeoutMs) polls until listed units are active (exposed as ctx.bareOsAwaitInitdUnits). Mobile Bare.suspend / Bare.wakeup walks stop handlers in reverse boot order and start hooks forward, matching the DAG snapshot in /proc/bare_os/initd_graph.json. Coalesced /proc/bare_os/metrics_live.json (and ctx.bareOsReadProcMetricsLive()) include initdReadiness (schema 2**) for unit readiness summaries.\n- listBareServices(), getBareServiceRuntime(name), findBareServiceDefinition(name), startBareService / stopBareService / restartBareService — introspection and lifecycle (used by the CLI below)\n- bareInitdShutdownActiveUnitsReverse(ctx) — REPL session.cleanup awaits this first: calls stop on every active unit with a stop handler, in reverse boot-DAG order (same direction as mobile suspend).\n- registerKernelShutdownHook(fn) + runKernelShutdownHooks() — async-friendly teardown after initd reverse stop, before disposers; then stopBareInitd() clears intervals and runs registerBareInitdDisposer callbacks.\n- registerBareInitdDisposer(fn) + stopBareInitd() — for intervals and synchronous teardown\n- Kernel logger — mirrors console.log/error to /var/log/bare-os/kernel-console.log. The VFS exposes /var as a virtual directory and maps /var/log/… onto the personal Hyperdrive at /.bare-os/var/log/… (the system image drive stays read-only). Each log file is trimmed when it grows past 512KiB (last 256KiB kept plus a notice line).\n\nBuilt-in kernel-logger wraps ctx.console.log / error to append UTF-8 lines to that path (with stop / restart support). startBareInitd also creates /var/log/bare-os and a short README there. Other services use the same tree (e.g. cron.log, www.log for bare-os-www). Failures to write logs are swallowed so logging never kills the session.\n\nService control: /bin/systemctl is implemented by the booter (kernel-runner delegates to systemctl-cli.js), not by evald image JS. Subcommands: list / list-units (shows PRESET enabled/disabled from disabled.txt), status, logs, start, stop, restart, enable, disable, is-enabled. journalctl -u UNIT (log tail only) shares the same backend. The legacy name bare-initctl is still accepted as an alias. enable / disable only affect the next startBareInitd (personal-drive config); runtime start / stop remain session commands. See man systemctl.\n\nBARE-CRON\n\nbare-cron.js registers service bare-cron:\n\n- Reads /etc/bare-os/crontab on the system image (if present), then ~/.crontab on the personal drive (silent if missing). Invalid lines are skipped and logged to /var/log/bare-os/cron.log.\n- Loads timer drop-ins from *~/.config/bare-os/timers/.timer (max 8 files): [Timer] with OnCalendar= (five cron fields) + ExecLine= — merged into the same minute tick as crontab jobs; optional JitterSec= (spread execLine within 0…N seconds); or EveryMs= (100086400000) + ExecLine= — fixed-interval setInterval jobs (optional JitterSec= delays the first tick); or OnInactiveSec= + ExecLine= — fire after the last timer run finishes plus an idle window (Persistent= keeps scheduling state where supported). Image examples: /etc/bare-os/timers/.timer.example on the system drive (copy into ~/.config/bare-os/timers/ and rename to .timer**).\n- Parses five-field cron lines + command remainder, @reboot + command (once per bare-cron start), and optional leading JitterSec=N on the command side for calendar lines.\n- Aligns to minute boundaries, setInterval(60s), runs await ctx.execLine(command) with per-line in-flight guard; job errors are appended to /var/log/bare-os/cron.log as well as console.error. Calendar lines use wall-clock minute ticks; EveryMs= timers use monotonic-ish setInterval spacing (not drift-corrected to NTP — see distributed time sync in /proc/bare_os when enabled). With BARE_OS_TIMER_EVERY_MS_MONOTONIC=1, EveryMs= units may prefer monotonic scheduling where the runtime supports it.\n- One disposer at module load clears timers on session shutdown; stopBareCron is also the unit stop for systemctl.\n\nInstall/list/remove user crontab with /bin/crontab (see Chapter 6 <06-kernel-and-binaries.md>). See Developer guide ch.11 <../developer-guide/11-kernel-pear-cookbook.md> for timer file layout.\n\nBARE-OPENSSH (SSHD)\n\nbare-openssh.js registers initd service bare-openssh (starts after kernel-logger and bare-cron per the default DAG). It listens with bare-ssh2 on the booter hosts net stack (not as a concatenated /bin script). /bin/sshd and /bin/bare-sshd are thin delegates that call ctx.bareOsRunSshdCli.\n\n- Config — Stock /etc/ssh/sshd_config on the system image; HostKey paths resolve on the personal drive so the read-only system tree is not required for key material.\n- Auth — OpenSSH-format authorized_keys on the personal drive (default relative path from sshd_config), optional password auth using the same account crypto as login; successful password auth calls unlockIdentity and therefore upgrades the shared session identity (same caveat as console login).\n- Sessions — Shell and exec requests run through execShellLine on a per-connection ctx clone; PTY sessions can use the fish-style REPL when the channel supports it.\n- SFTP — Subsystem sftp implements a bounded subset over ctx.vfs (unsupported operations return SSH_FX_OP_UNSUPPORTED).\n- Observability — /proc/bare_os/openssh.json (schema 1) reports listen address, port, active clients, and last error; /var/log/bare-os/openssh.log receives start/listen failures.\n- Holesail (managed) — After listen succeeds, bare-os-ssh-holesail.js idempotently merges bare-ssh-<port> into the same managed state.json as bare-www-* (see § bare-holesail below). port / host match the actual bind (defaults 127.0.0.1:2222; BARE_OS_SSH_BIND_ALL=1 can widen the address). Set BARE_OS_SSH_HOLESAIL=0 / false to skip auto-merge. If sshd started before managed bare-holesail was up (e.g. guest boot), startBareUserSessionStack runs ensureBareOsSshHolesailTunnel again after bare-holesail starts so the tunnel can attach without restarting sshd.\n\nDisable the unit for the next boot with ~/.config/bare-os/initd/disabled.txt (same mechanism as other initd services). Host env BARE_OS_SSH_LISTEN_PORT (guest vfs.env) overrides Port / supports ephemeral 0; BARE_OS_SSH_BIND_ALL=1 maps a config ListenAddress 127.0.0.1 to 0.0.0.0 for operator overrides.\n\nImplementation touchpoint: packages/bare-os-booter/lib/bare-os-ssh-holesail.js <../packages/bare-os-booter/lib/bare-os-ssh-holesail.js> (called from bare-openssh.js <../packages/bare-os-booter/lib/bare-openssh.js> and bare-user-session-stack.js <../packages/bare-os-booter/lib/bare-user-session-stack.js>).\n\nBARE-OS-WWW (STATIC HTTP FOR ~/.WWW)\n\nbare-os-www-initd.js registers initd unit bare-os-www: a minimal HTTP/1.1 static file server for the session docroot ~/.www (resolved through the VFS). Stock defaults: listen on 127.0.0.1:8088, GET and HEAD only, safe path resolution (no ..), small extension→Content-Type map. HEAD uses vfs.stat so Content-Length matches the file size.\n\n- Enable — On by default. Disable with BARE_OS_WWW_INITD=0 / false or systemctl disable bare-os-www (~/.config/bare-os/initd/disabled.txt).\n- Env — BARE_OS_WWW_PORT (default 8088), BARE_OS_WWW_HOST (default 127.0.0.1; use 0.0.0.0 only when you intend LAN exposure without Holesail). BARE_OS_WWW_HOLESAIL=0 skips auto-merging bare-www-<port> into managed Holesail state.json (see § bare-holesail for seed / key persistence).\n- Bootstrap — If ~/.www/index.html is missing or empty, the unit creates ~/.www/ and writes the stock landing page. The same ensureBareOsWwwHomeDefaults(ctx) helper runs after a successful login, login --new, or applyLoginKeys in identity-session.js, so operators often already have ~/.www before initd starts.\n- Holesail — When managed bare-holesail is active, after HTTP listen succeeds the booter idempotently persists bare-www-<port> ( server: true, port, host from BARE_OS_WWW_HOST, enabled: true) into ~/.holesail/state.json by default — same seed / key rules as every other managed server row (§ bare-holesail). Opt out with BARE_OS_WWW_HOLESAIL=0.\n- Logs — /var/log/bare-os/www.log (same personal-backed tree as other bare-os logs).\n- VFS + HDMS — When an HDMS mount with label www exists at /mnt/www, logical $HOME/.www and /home/<active>/.www route to that Hyperdrive root instead of the personal home tree (see Chapter 5 <05-identity-vault-and-hdms.md>). Without that mount, ~/.www stays on the personal drive under the session home prefix.\n\nImplementation: packages/bare-os-booter/lib/bare-os-www-initd.js <../packages/bare-os-booter/lib/bare-os-www-initd.js>, bare-os-www-holesail.js <../packages/bare-os-booter/lib/bare-os-www-holesail.js> (Node uses node:http; Bare/Pear uses bare-node-http).\n\nBARE-HOLESAIL (HOLESAIL P2P PROXY)\n\nbare-holesail.js wires the upstream holesail package (AGPL-3.0) using only its public class API (no direct Hyperswarm / HyperDHT usage in this integration). Under pear run, the booter cannot bare-import('holesail') from pear: modules, so bare-holesail resolves the class from ctx.bare.holesail when the drive merge succeeded, else import.meta.resolve('holesail'), else a one-off eval of /lib/bare/bundles/holesail.js via ctx.vfs (same IIFE semantics as maybeMergeBareFromDrive).\n\n- Initd unit bare-holesail — On by default ( BARE_OS_HOLESAIL_INITD=1 and BARE_OS_HOLESAIL_MANAGED=1 in stock shellEnv unless the host sets them empty or to 0/false). Disable for a session with BARE_OS_HOLESAIL_INITD=0 or systemctl disable bare-holesail ( ~/.config/bare-os/initd/disabled.txt). Either managed multi-tunnel or single env tunnel:\n- Managed (persisted list) — Stock default (BARE_OS_HOLESAIL_MANAGED=1). Tunnel definitions live in BARE_OS_HOLESAIL_STATE. Stock default path is ~/.holesail/state.json (logical path resolved under the session $HOME / VFS); set BARE_OS_HOLESAIL_STATE to override (any logical path). If the primary file is missing or empty, legacy rows are merged once from /.bare/holesail/state.json, /.bare/holesail/guest/state.json, and /home/guest/.holesail/state.json. On unit start, every enabled connection id gets its own holesail instance. After the first full pass, the daemon yields one tick and runs a second pass that starts only connections not already running (onlyNew) so late writers (bare-os-www, bare-openssh) can add rows without destroying tunnels that started in pass one. Use guest /bin/holesail ( ctx.bareOsRunHolesailCli) to list, add, remove, start, stop, enable, disable, restart.\n- Server rows: seed and key — Stable identity uses a persisted seed: 64-character hex ctor secret (minted when missing), or a valid z32-style suffix migrated from a legacy hs://…-only row. bareHolesailManagedEnsureServerSeedPersisted normalizes rows before new Holesail(). After ready(), bareHolesailManagedSyncPersistedServerKey writes the shareable hs://… URL into key only ( seed stays the ctor secret — do not replace seed with the URL suffix alone). bareHolesailManagedNewHolesailOpts passes seed to the upstream ctor in preference to the full hs://… string when both are present. holesail list shows the live URL when the tunnel is running.\n- Stock auto-managed entries — bare-www-<port> ( bare-os-www ) and bare-ssh-<port> ( bare-openssh ); same state.json file and the same seed / key semantics as manual holesail add rows.\n- Single tunnel — Set BARE_OS_HOLESAIL_MANAGED=0, then exactly one of BARE_OS_HOLESAIL_SERVER=1 or BARE_OS_HOLESAIL_CLIENT=1, BARE_OS_HOLESAIL_KEY=… when in client mode, and optional BARE_OS_HOLESAIL_SECURE, BARE_OS_HOLESAIL_PORT, BARE_OS_HOLESAIL_HOST, BARE_OS_HOLESAIL_UDP, BARE_OS_HOLESAIL_LOG.\nStarts after kernel-logger and bare-os-www by default (so *bare-www- server tunnels can reach the loopback HTTP listener). Logs: /var/log/bare-os/holesail.log. Example drop-in: /etc/bare-os/units/bare-holesail.unit.example** on the system image.\n- Early booter (“kernel-path”) instance — Separate optional instance started after the repl boot phase and before startBareInitd. Enable with BARE_OS_HOLESAIL_KERNEL=1 and the *BARE_OS_HOLESAIL_KERNEL_ mirror of the options above (e.g. BARE_OS_HOLESAIL_KERNEL_SERVER=1). Uses registerKernelShutdownHook for teardown. hs.pause() / hs.resume()** run on mobile suspend/resume hooks alongside other subsystems.\n- Guest scripts — Use ctx.bare.holesail (bundled under /lib/bare/bundles/holesail.js), not require('holesail'), because /bin and /boot/init.js are not Node modules. /bin/holesail is the operator CLI for persisted tunnels (see managed mode above). See kernel/etc/bare-os/kernel.d/.README.\n\nSet BARE_OS_HOLESAIL_DEBUG=1 for extra console lines (URLs only; keys are not logged in full).\n\nSHELL SESSION, CONTROLLING TTY SKETCH, AND JOB-CONTROL GAPS\n\nThe interactive shell keeps ctx.shellSessionState: sid (session id), nextPgid (for & background jobs), foregroundPgid (set to a jobs pgid while fg awaits that job, otherwise reset toward sid after each foreground line), and controllingTty (/dev/console or ipc:<session-fifo> when BARE_OS_SESSION_FIFO / BARE_OS_IPC_SESSION_FIFO is set). Background jobs record sid / pgid in ctx.shellBackgroundJobs for jobs output. Cooperative logical job control: suspend-job sets stopped and the background runner yields between statements until fg or bg clears it; there is still no tcsetpgrp and no host SIGTSTP/SIGCONT. Host SIGINT may arrive as bare-os:host-sigint (via optional bare-signals or process.on('SIGINT')) for cooperative cancellation; ctx.bareOsSendSignal also records PIPE / CHLD / USR1 / USR2 on synthetic PIDs without ending the session. ctx.bareOsTrySpawnHostSubprocess against bare-subprocess 6 accepts ipc: true (stdio ['pipe','pipe','pipe','ipc'], serialization: 'json') and returns ipc: Boolean(child.channel).\n\nREPL: FISH-STYLE LINE EDITOR\n\nWhen stdin/stdout are a capable TTY and BARE_OS_FISH≠0, fish-readline.js provides history, hints, and synchronized Console output so prompts and console.log do not fight. History files live on the personal drive keyed by user identity, so guests and logged-in users do not stomp each others command recall. Set BARE_OS_FISH=0 for minimal readline or pipes-first automation; BARE_OS_SKIP_REPL=1 skips the interactive kernel loop entirely.\n\nImplementation touchpoint: packages/bare-os-booter/lib/fish-readline.js <../packages/bare-os-booter/lib/fish-readline.js>.\n\nDEBUG\n\ndebug-repl.js and env-driven logging can trace readline and write paths—useful when stdin is a pipe vs TTY.\n\nNext: Chapter 5 — Identity, vault, HDMS <05-identity-vault-and-hdms.md>\n\nRelated: Preface — Security <00-preface.md> · Kernel extensions <../docs/reference/kernel-extensions.md> · CHANGELOG <../packages/bare-os-booter/CHANGELOG.md>\n\nExperimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>.","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","04","the","booter","runtime","ctx","vfs","shell","kernel","services"],"seeAlso":[{"name":"handbook-05-identity-vault-and-hdms","section":7},{"name":"handbook-03-protocol-and-disk","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/04-the-booter-runtime.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-05-identity-vault-and-hdms","section":7,"title":"Chapter 5 — Identity, vault, and HDMS","synopsis":["man 7 handbook-05-identity-vault-and-hdms","Handbook chapter (plain text from handbook/05-identity-vault-and-hdms.md)"],"description":"CHAPTER 5 — IDENTITY, VAULT, AND HDMS\n\nTime to read: about 12 minutes. Prerequisites: Chapter 4 — Booter runtime <04-the-booter-runtime.md> (VFS and shell).\n\nThis chapter covers who the session is (guest vs unlocked), where keys live, encrypted vault snapshots, and extra Hyperdrives under /mnt. Cryptographic details are implemented in identity-account.js <../packages/bare-os-booter/lib/identity-account.js> and identity-session.js <../packages/bare-os-booter/lib/identity-session.js>; here we stay at prose level.\n\nEND-TO-END: FROM COLD BOOT TO AN HDMS MOUNT\n\n1. Boot — The booter applies guest defaults: USER=guest, HOME=/home/guest, no Ed25519 material in the environment. You can already read the system image and write guest-scoped paths on the personal drive.\n2. login — You provide a passphrase. If the account exists, the booter decrypts /.bare/account and derives session keys; if login --new, it mints a new Ed25519 keypair and writes a v2 blob (see below).\n3. Unlocked — HOME moves under /home/<pubkey-prefix>, BARE_OS_PUBLIC_KEY is set, and HDMS may attach extra Hyperdrives registered on the personal drive.\n4. hdms create / hdms add — Writable or read-only drives appear under /mnt/<label>; the registry JSON on the personal drive is the source of truth.\n5. logout — Sensitive material is zeroed; you return to guest. logout --save or savevault can snapshot selected paths into /.bare/vault/ as encrypted records.\n\nOperator trust framing: Vault threat model <../docs/security/vault-threat-model.md>.\n\nPairing hints (operators): when the host sets BARE_OS_AUTOPASS_INVITE_URL, the guest exposes a JSON hint at /proc/bare_os/hdms_hints.json. The guest does not open network URLs automatically; hosts or operators consume the hint out-of-band. /proc/bare_os/hdms_health.json (and flat alias) summarizes non-secret mount/registry metadata (counts, labels) for dashboards—no key material.\n\nUnlock errors (automation): when unlockIdentity in identity-session.js <../packages/bare-os-booter/lib/identity-session.js> throws, stable Error.code values include BARE_OS_IDENTITY_NO_ACCOUNT (no /.bare/account blob) and BARE_OS_IDENTITY_PASSPHRASE_REJECTED (decrypt/parse failure; error.cause carries the underlying error when present). Human-readable messages remain for interactive login.\n\nCron note: crontab install/remove requires unlocked identity so arbitrary guests cannot overwrite ~/.crontab.\n\nGUEST SESSION\n\nOn boot, applyGuestEnv sets:\n\n- USER / LOGNAME — guest\n- HOME / PWD — /home/guest\n- BARE_OS_IDENTITY — guest\n- Empty or absent BARE_OS_PUBLIC_KEY\n\nThe personal drive still persists: guest data is not anonymous to the drive—it is simply the unauthenticated profile.\n\nHome and session logs on disk: logical $HOME and /var/log map to the personal Hyperdrive under /.bare-os/home/<basename> and /.bare-os/var/log/<basename>, where <basename> is the first segment of HOME (e.g. guest or the 12-hex display name). That keeps guest and unlocked trees separate on the same drive. Shared machine metadata (/.bare/account, /.bare/hdms/, vault blobs, etc.) stays outside those prefixes. On first boot after an upgrade from older booters, a best-effort migration may move non-reserved files from the personal drive root into the current sessions home prefix when that prefix is still empty.\n\nACCOUNT BLOB: /.BARE/ACCOUNT AND CRYPTOGRAPHY IN PROSE\n\nidentity-account.js defines v2 on-disk format:\n\n- Magic BAREOS01, version 2\n- 32-byte Ed25519 public key (your identity handle in the UI)\n- PBKDF2-SHA256 salt + iteration count (default 210000) — slows passphrase guessing\n- ChaCha20-Poly1305 seal over the 64-byte secret key material (bare-crypto; raw Ed25519 bytes come from KeyObject.export(), not the removed ._key)\n\nWhat this means in practice: the passphrase never sits on disk; the blob stores salt + iterations + ciphertext. Unlocking derives a key from the passphrase, decrypts the signing secret, and keeps derived session state in memory. login --new creates a new account; login decrypts an existing one. Legacy v1 blobs are rejected with a message to recreate.\n\nVault (savevault, logout --save): selected files are snapshotted into /.bare/vault/ as AEAD-protected / sealed blobs at rest (path hashing + keys derived from the unlocked session material in the implementation). Vault ciphertext is only as good as your passphrase, backups, and who can replicate your personal drive. NDJSON checkpoints still append under /.bare/vault-rotation-audit.ndjson; when ctx.bareOsAuditLogAppendBatch exists, the booter mirrors identity_unlock / vault_save rows into the host audit chain as identity.vault_audit_mirror for hash-chained accountability.\n\nUNLOCKED SESSION\n\nidentity-session.js:\n\n- Updates ctx.vfs.env with real USER, HOME under /home/<pubkey-prefix>, BARE_OS_PUBLIC_KEY, derived UID/GID-like fields from a hash of the public key.\n- vfs.chdir to the new home.\n- onIdentityUnlocked (from index.js) activates HDMS with Corestore, swarm bootstrap, personal drive, mount map.\n- loadBarerc runs inside applyUnlockedEnv after a successful login or login --new (with createSkeletonIfMissing: true on first unlock), so ~/.barerc exports and aliases apply immediately—custom kernels normally do not need to reload barerc themselves. Use ctx.onIdentityUnlocked if you want an extra banner or post-login message.\n- ~/.www — After ensureBareDir, ensureBareOsWwwHomeDefaults creates ~/.www/ and the stock index.html when the tree is missing or the file is empty, so a successful unlock/register/login leaves a ready personal-site docroot. The initd unit bare-os-www serves it over HTTP on 127.0.0.1:8088 by default (see Chapter 4 — bare-os-www <04-the-booter-runtime.md#bare-os-www-static-http-for-www>).\n\nlogout zeroes sensitive material and returns to guest; logout --save (and savevault) snapshot selected paths into /.bare/vault/ as encrypted records (see identity-account.js helpers for AEAD and path hashing).\n\nHDMS (HYPERDRIVE MANAGEMENT)\n\nhdms-manager.js implements /bin/hdms via ctx.runHdms(argv):\n\n- Registry JSON on the personal drive: /.bare/hdms/registry.json\n- Writable drives: new Corestore namespace + Hyperdrive, label, replicate to swarm\n- Read-only drives: open by key string (hdms add <label> <z32-key>)\n- invite / pair — uses Autopass (static ESM import for Pear tracing) for blind pairing; optionally embeds an HDMS drive offer so the peer can auto-register a mount (read-only or read/write)\n\nInvite with a drive label (read-only replica): hdms invite [--read-only] <label> (the label must be an existing writable HDMS mount). The booter stores { label, key } in bare-os-hdms/pending-share, then deleteInvites, polls until @autopass/invite is gone from the HyperDB view (bounded by BARE_OS_HDMS_INVITE_CLEAR_MS, default 30000 ms), and only then calls createInvite so every printed z32 is a fresh BlindPairing token—Autopass would otherwise reuse the old z32 while the row still appears in the view after delete. --read-only sets the peers Autopass writer row to read-only (addWriter without base.addWriter in autopass <https://github.com/holepunchto/autopass>); the Holepunch AutopassPairer still awaits pass.deleteInvite() (an append) on connect. Read-only Autobase writers are not append-capable, so hdms invite --read-only + hdms pair often breaks with “Not writable” / timeout—omit --read-only for normal HDMS pairing. It does not control Hyperdrive /mnt writability for the default invite; without --rw, the peer still gets a read-only Hyperdrive replica.\n\nInvite with read/write: hdms invite [--read-only] <label> --rw stores { label, key, signerKey, writerSecretHex } on bare-os-hdms/pending-share-rw: key is the Hyperdrive z32 id (manifest), signerKey is the metadata writers Ed25519 public key (z32), writerSecretHex is the 64-byte secret as hex. Those differ on Hyperdrive 11+; both are required to open a writable replica. Peers that only look at pending-share will not see this offer, avoiding a silent read-only mount when the inviter intended read/write. Anyone who can read the paired Autopass ledger can write the drive—treat --rw invites as highly sensitive.\n\nPair and auto-mount: hdms pair [--persist|--no-persist] <invite> waits for BlindPairing to reach the inviter (default cap BARE_OS_HDMS_PAIR_WAIT_MS, 120000 ms — otherwise the shell returns a timeout error instead of hanging). After the session is live, the booter waits up to BARE_OS_HDMS_PAIR_READY_MS (default 45000 ms, max 120000; set 0 to skip) for Autobase membership to settle and calls base.update() while polling, matching Autopasss own tests—then it polls for a pending share on pending-share-rw first, then pending-share (default BARE_OS_HDMS_PAIR_SHARE_WAIT_MS, 25000 ms). If present, the peer registers the mount under /mnt/<inviter-label> (or label-2 … label-99 if the label is taken). By default the mount is saved to /.bare/hdms/registry.json so it returns after reboot. hdms pair --no-persist keeps the mount ephemeral (session-only; hdms list marks ephemeral). hdms pair --persist is an explicit no-op for the same default. The inviter must stay online with a matching Hyperswarm bootstrap to the peer or pairing never completes.\n\nInvite without a label: hdms invite or hdms invite --read-only only pairs Autopass; both pending share Autopass keys are cleared so no stale drive offer remains. The peer will not get an automatic /mnt mount.\n\nassertLoggedIn requires ctx.identity.state === 'unlocked' and active controller—guests can list mounts that are already open but cannot mutate registry until login.\n\nVFS exposes /mnt/<label>/... for mounted drives; writable mounts allow put on those routes. When label is www, the VFS also routes logical $HOME/.www (and /home/<active>/.www) to that mounts root so operators can use the familiar home path while still storing the site on a dedicated Hyperdrive (convention: hdms create www or mount local www after unlock).\n\nKernel hooks: ctx.bareOsSubscribeHdmsLifecycle(fn) runs your callback after HDMS activate and before deactivate with { kind: 'afterActivate' | 'beforeDeactivate', labels?: string[] } so custom /boot/init.js can refresh mounts-dependent state without forking HDMS. The stock booter also invokes onAfterActivate on the hdms module export when present (see Developer guide ch.11 <../developer-guide/11-kernel-pear-cookbook.md>).\n\nEXAMPLE SESSION (ILLUSTRATIVE TRANSCRIPT)\n\n [guest@bare:/home/guest] > login\n …\n [alice@bare:/home/a1b2c3d4e5f6] > hdms list\n (no mounts)\n [alice@bare:/home/a1b2c3d4e5f6] > hdms create notes\n Created notes key=…\n [alice@bare:/home/a1b2c3d4e5f6] > ls /mnt\n notes\n [alice@bare:/home/a1b2c3d4e5f6] > touch /mnt/notes/hello.txt\n\nSharing that drive with a peer (illustrative): inviter runs hdms invite notes (read-only replica) or hdms invite notes --rw (read/write; writer secret on Autopass), sends the printed z32 token out-of-band; peer runs hdms pair <token> — the mount appears at /mnt/notes (or /mnt/notes-2 if notes already exists locally).\n\nExact subcommands and flags: man hdms after a coreutils build.\n\nMANUAL QA CHECKLIST (HDMS INVITE WITH DRIVE)\n\nUse two unlocked sessions with the same Hyperswarm bootstrap (or reachable peers).\n\n1. Inviter: hdms create a, then hdms invite a — copy the z32 invite line.\n2. Peer: hdms pair <invite> — expect hdms list to include a, /mnt/a read-only, and a line confirming the HDMS read-only mount (after replication).\n3. Peer (label collision): create a local mount hdms create a first, then hdms pair <invite> from an inviter who shared label a — expect /mnt/a-2 (or next free suffix) and a log line that the inviters label was in use.\n4. Inviter: hdms invite with no label — peer hdms pair should pair Autopass but log that no HDMS drive was on the invite.\n5. Stale offer: after hdms invite foo, run hdms invite without a label before the peer pairs — pending share keys should be cleared (peer should not mount foo from an old token unless the inviter re-issued an invite with foo).\n6. RW invite: inviter hdms invite a --rw, peer hdms pair <invite> — expect hdms list writable for a and writes under /mnt/a after replication (same bootstrap).\n7. Ephemeral pair: peer hdms pair --no-persist <invite> — expect ephemeral in hdms list and no new row in registry after logout simulation (mount not reloaded from registry on next activate).\n\nHOST PAIRING HINTS (AUTOPASS-STYLE)\n\nOperators may set BARE_OS_AUTOPASS_INVITE_URL on the host so the guest exposes /proc/bare_os/hdms_hints.json with an invite URL field. The guest never opens that URL; Pear or operator tooling consumes it outside the session.\n\nMirror-drive style hints for replication workflows use ctx.bareOsEmitMirrorDriveHint (see developer-guide ch.11 <../developer-guide/11-kernel-pear-cookbook.md>).\n\nTRUST BOUNDARIES: WHAT THE DESIGN DOES _NOT_ PROMISE\n\n- Passphrase strength matters: PBKDF2 iterations slow brute force but do not fix weak secrets.\n- Vault ciphertext is only as safe as the derived key and where copies replicate.\n- Operator /proc and telemetry — Synthetic */proc/bare_os/ files are documentation-first operator mirrors. They must not carry vault passphrases, raw private keys, or sealed vault blobs; ctx.bareOsVaultAuditSummary returns only coarse identity state (hasPublicKey, identityState), not key material. Prefer NDJSON audit mirrors (identity.vault_audit_mirror**) for accountability rather than expanding proc payloads.\n- JS in-process commands can exfiltrate keys from memory—this is a toy OS shell, not a sandbox. See Preface — Security <00-preface.md#security-and-limits> and developer-guide — Security and trust <../developer-guide/09-security-and-trust.md>.\n\nNext: Chapter 6 — Kernel and binaries <06-kernel-and-binaries.md>\n\nRelated: Handbook home <README.md> · Chapter 4 <04-the-booter-runtime.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","05","identity","vault","and","hdms"],"seeAlso":[{"name":"handbook-06-kernel-and-binaries","section":7},{"name":"handbook-04-the-booter-runtime","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/05-identity-vault-and-hdms.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-06-kernel-and-binaries","section":7,"title":"Chapter 6 — Kernel and /bin utilities","synopsis":["man 7 handbook-06-kernel-and-binaries","Handbook chapter (plain text from handbook/06-kernel-and-binaries.md)"],"description":"CHAPTER 6 — KERNEL AND /BIN UTILITIES\n\nTime to read: about 15 minutes. Prerequisites: Chapter 4 <04-the-booter-runtime.md>, Chapter 5 <05-identity-vault-and-hdms.md> for identity-aware paths.\n\nThe kernel is a single script. The utilities are many small scripts. Both follow strict AsyncFunction contracts so the same code runs under Bare without a bundler per command.\n\nON THIS PAGE\n\n- The kernel loop in plain language <#the-kernel-loop-in-plain-language>\n- /boot/init.js <#bootinitjs>\n- Coreutils build pipeline <#coreutils-build-pipeline>\n- Command reference (summary) <#command-reference-summary>\n\nTHE KERNEL LOOP IN PLAIN LANGUAGE\n\nAfter boot snippets and the banner, stock /boot/init.js enters an infinite read/eval loop: readLine returns one user line; execLine runs it through the same shell as interactive typing (pipelines, redirects, builtins). Exceptions are caught so a bad script does not exit the session—the booter logs and continues. There is no second process: the “kernel” is a JavaScript loop in the booter, not a ring-0 scheduler.\n\nShell entry is still ctx.execLine; /bin utilities are ctx.runBinCommand or runScriptFromSource from the runner. For why import does not work inside /bin sources, read developer-guide — Modules and imports <../developer-guide/05-modules-and-imports.md>.\n\nP2P CONSISTENCY MODEL (SHORT)\n\nBare OS is offline-first but swarm-backed: the host booter joins Hyperswarm, replicates system and personal Hyperdrives, and exposes a merged VFS to the guest. The guest kernel only sees ctx.drive, ctx.vfs, and cooperative hooks — it does not open raw sockets for replication. BARE_OS_OFFLINE_LKG_BOOT and BARE_OS_LKG_SYSTEM_KEY_HEX describe boot without live peers; disk.os and seed RPCs (handbook ch.3 <03-protocol-and-disk.md>) carry operator-facing replication sketches. Mirror mounts (/mirror, union prefixes) are read models over replicated content; treat stale reads as normal until cores catch up, and use /proc/bare_os/metrics_live.json (replicationLive) plus BARE_OS_VFS_WARM_CACHE_PREFIX_INVALIDATE when you need length-driven warm-cache eviction during replication.\n\n/BOOT/INIT.JS\n\nStaged from kernel/init.js, which is a bundled artifact: edit kernel/lib/init/init-main.js <../../kernel/lib/init/init-main.js> (and optional kernel/lib/boot/ <../../kernel/lib/boot/> helpers), then run npm run bundle:kernel ( node scripts/bundle-kernel-init.mjs ) so kernel/init.js and the seeder copy stay in sync—do not hand-edit only the bundle output. Responsibilities (typical):\n\n1. Print /etc/os-release via ctx.drive.get + b4a.toString\n2. Print optional /etc/motd if present\n3. Optional boot profile: first line of /etc/bare-os/profile, overridden by host BARE_OS_BOOT_PROFILE; if the name is safe, run /etc/bare-os/rc.profile.<name> when present (before main rc)\n4. Run non-comment lines from /etc/bare-os/rc through execLine (boot-time shell snippets)\n5. Run digit-prefixed snippets under /etc/bare-os/rc.d/ (same rules as before)\n6. Run optional /etc/bare-os/rc.local (non-comment lines via execLine, after rc.d)\n7. Run digit-prefixed snippets under /etc/bare-os/kernel.d/ (same skip rules as rc.d) after rc.local\n8. Run optional */etc/bare-os/kernel.ext.d/.json drop-ins listing trusted scripts under /lib/bare-os/extensions/ (via ctx.bareOsRunImageScript); JSON may include dependsOn, requires, after, and before for extension-id ordering (topological sort; cycles fall back unless strict policy fails). Each load is recorded for /proc/bare_os/extensions.json when ctx.bareOsRegisterKernelExtensionRecord is available. With BARE_OS_KERNEL_EXT_D_HOT_RELOAD=1, after boot ctx.bareOsReloadKernelExtDropinsSafe() may append newly listed scripts only (no unload); optional audit /run/bare-os/kernel-ext-reload.ndjson**\n9. Print a one-line hint (commands, login, paths), or /etc/bare-os/banner / /etc/issue when present\n10. When BARE_OS_SKIP_REPL: optional onboot — every non-comment line from host BARE_OS_ONBOOT (newline-separated), or if unset, every such line from /etc/bare-os/onboot in order, via execLine\n11. Loop forever:\n\n- line = await readLine('')\n- Break on null (EOF / session end)\n- Skip empty lines\n- try/catch around execLine(t) so stray throws do not kill the loop\n\nThe prompt ([user@host:path] > ) is applied by the booters readline layer, not by init.js.\n\nBOOT PROFILES, RECOVERY, AND READINESS\n\nWhen to use which (practically):\n\n- Normal dev — leave profiles unset; use /etc/bare-os/rc and friends on the system image.\n- *BARE_OS_BOOT_PROFILE / rc.profile. — opt into extra PATH, aliases, or distro-specific setup without** forking init.js.\n- BARE_OS_BOOT_MINIMAL — “something is broken in rc” recovery: you still get os-release / motd and a prompt, but skip heavy boot phases.\n- BARE_OS_BOOT_SKIP — surgical skips (comma list) when bisecting which boot phase fails.\n- BARE_OS_BOOT_ALLOWLIST + BARE_OS_BOOT_STRICT — distributor mode: only vetted first tokens from /etc/bare-os/boot.allow run during boot snippets.\n- BARE_OS_KERNEL_SELFTEST + BARE_OS_SELFTEST_FORMAT=tap — CI smoke inside the image after boot.\n- ctx.bareOsPublishBootReady — automation hooks that watch /run/bare-os/ready or boot.json (see Kernel extensions <../docs/reference/kernel-extensions.md> for related caps).\n\nBOOT KNOBS (ENV AND HOOKS)\n\n- BARE_OS_BOOT_PROFILE / /etc/bare-os/profile — First line names /etc/bare-os/rc.profile.<name> (before rc). Suggested names: dev (extra PATH, aliases), ci (BARE_OS_SKIP_REPL + BARE_OS_ONBOOT smoke lines), kiosk (minimal rc.d, fixed onboot).\n- BARE_OS_BOOT_MINIMAL — Skip rc, rc.d, rc.local, kernel.d, onboot, and profile *rc.profile. — recovery shell with os-release / motd** only.\n- BARE_OS_BOOT_SKIP — Comma list of phases to skip: profile, rc, rc.d, rc.local, kernel.d, kernel.ext.d, onboot.\n- BARE_OS_BOOT_SAFE_MODE — Skips rc.d, kernel.ext.d, and onboot after boot policy merge (recovery).\n- BARE_OS_BOOT_TRANSACTION_JOURNAL / BARE_OS_BOOT_CHECKPOINT — Append boot NDJSON / last-phase checkpoint under /run/bare-os/ when ctx.vfs allows; journal lines and checkpoints carry a bootStage (preflight, policy, rc, extensions, services, shell) — see Kernel program <../developer-guide/kernel-program.md>.\n- BARE_OS_BOOT_DRY_RUN — Parse boot snippets but skip trusted execLine and kernel.ext.d scripts (CI).\n- BARE_OS_BOOT_POLICY_PATH, policyFallbackPaths (in boot.policy.json) — Tiered policy path and merged skip phases from secondary files under /etc/bare-os/.\n- BARE_OS_BOOT_ROLLBACK_APPLY + /run/bare-os/boot-rollback.marker — Operator rollback selector for merged skip phases.\n\n| | Dry-run (BARE_OS_BOOT_DRY_RUN) | Rollback marker (BARE_OS_BOOT_ROLLBACK_APPLY) |\n| Executes trusted boot snippets | No (parsed only) | Yes (normal boot with merged skips) |\n| Primary goal | CI / doctor preflight without side effects | Recover from a bad rollout by skipping selected stages |\n| Key artifact | stderr / trace only | /run/bare-os/boot-rollback.marker JSON merged into boot policy skips |\n- BARE_OS_REQUIRE_CTX_API_MIN / BARE_OS_BOOT_ABI_STRICT — Compare ctx.bareOsCtxApiVersion to a minimum semver when strict.\n- BARE_OS_BOOT_TRACE=ndjson (or json) — One JSON object per completed boot stage on stderr (bootTraceSchemaVersion: 2, type\":\"boot\", step / stage / phase, ms, plus sessionId / ts for ndjson). Guest os-release, motd, and banner lines additionally emit type\":\"bootOutput\" records with a preview of the text (textPreview); interactive output remains ctx.console.log.\n- BARE_OS_KERNEL_SELFTEST — After boot snippets, run a short trusted execLine checklist.\n- BARE_OS_SELFTEST_FORMAT=tap — Same self-test emits TAP lines on stderr (CI-friendly).\n- BARE_OS_BOOT_ALLOWLIST=1 — Only run boot snippet lines whose first shell token is listed in /etc/bare-os/boot.allow (plus safe builtins); distributors can start from etc/bare-os/boot.allow.example on the system image. Pair with BARE_OS_BOOT_STRICT to exit on the first disallowed or failing line.\n- BARE_OS_EXEC_MAX_DEPTH — Max nested execLine depth (host → session; default 64).\n- ctx.bareOsPublishBootReady(...) — Kernel calls this when boot is complete; populates /run/bare-os/ready (1 / 0) and /run/bare-os/boot.json (imageDigest, pearChannel, pearRelease are pre-seeded from host env when set — see environment variables reference <../docs/reference/environment-and-posix-appendix.md#14-environment-variables-complete-list>).\n- BARE_OS_BOOT_MANIFEST — When 1 / true, the stock kernel verifies /etc/bare-os/boot.manifest.json against an expected SHA-256 (see kernel init.js and ctx.bareOsBootFileSha256Hex). Example layout: kernel/etc/bare-os/boot.manifest.example.json <../kernel/etc/bare-os/boot.manifest.example.json>.\n- BARE_OS_BOOT_MANIFEST_SIGN, BARE_OS_BOOT_MANIFEST_PUBKEY_HEX — Optional Ed25519 over the raw manifest bytes: expects /etc/bare-os/boot.manifest.sig and ctx.bareOsVerifyBootManifestSignature (host/booter). Mismatch fails boot with a clear stderr line.\n- ctx.bareOsRegisterBootStepHook / bareOsInvokeBootStepHooks — Kernel extensions can observe before: / after: stock boot stages (e.g. rc, repl) without replacing init.js. Legacy bareOsRegisterBootPhaseHook / bareOsInvokeBootPhaseHooks remain. See developer guide §2 <../developer-guide/02-the-context-object.md>.\n- BARE_OS_BOOT_POLICY, /etc/bare-os/boot.policy.json — When enabled, merges skipPhases, denyBootPhases, optional minKernelCapabilitiesPrimary / requireSeedCaps, v2 maxExecLineDepth / denyEnvKeys / requireProcNodes, v3 requireKernelCapabilitiesExtendedSeedingPlatform / requireKernelCapabilitiesRlimitsDelegatesShell, allowedPearIpcChannels, denyVfsPrefixes, maxInitdRestartsPerUnit, v4 requireKernelCapabilitiesOfflineNetExtensions, denyExecLineBuiltins, allowedCtxMethods, later requireKernelCapabilitiesHostTransportDelegates … requireKernelCapabilitiesPearInspectLoggerTls, and v9 requirePearRuntimeRange, denyBareModuleSpecifierPatterns, requireBareCryptoMin, denyKernelSyscalls, requirePearIpcMin, extensionSignerPinsV2, offlineLkgManifestMaxAgeSec, bootPhasesRequireProcIndexMinSchema, plus v10 requireBareBootMin, denyBareRpcMethodPatterns, maxPearInspectDepth, requireBareLoggerMin, denyAutobaseDiscoveryChannels, requireBareTlsMin, extensionSignerPinsV3, offlineLkgRequirePearStamp, bootPhasesRequireLifecycleMinSchema (see kernel/etc/bare-os/boot.policy.example.json <../kernel/etc/bare-os/boot.policy.example.json> and docs/schemas/boot.policy.schema.json <../docs/schemas/boot.policy.schema.json>). BARE_OS_BOOT_POLICY_STRICT aborts when a check fails.\n- /etc/bare-os/selftest.d/ — Optional digit-prefixed *.sh snippets run after the main boot path when BARE_OS_KERNEL_SELFTEST is enabled (same execLine rules as other boot snippets). Pair with BARE_OS_SELFTEST_FORMAT=tap** for CI-friendly stderr.\n\nCUSTOM INIT.JS CONTRACT\n\nReplacing /boot/init.js on the system image is supported: the booter loads it with AsyncFunction and expects a top-level async function start(ctx). Stable ctx fields for kernels are documented in Chapter 4 <04-the-booter-runtime.md> and the context object developer guide <../developer-guide/02-the-context-object.md>, including ctx.bareOsRuntimeCaps for pipeline limits, quotas, pseudo path lists, and features (e.g. httpDelegate, gitDelegate, systemctlDelegate, vfsWatch, ipcRpcJson, initdSocketActivation). Use ctx.registerKernelShutdownHook for teardown that must run before stopBareInitd. Boot snippets under /etc/bare-os/rc, /etc/bare-os/rc.d/ (only rc.d files whose names start with a digit), rc.local, kernel.d/ (same digit-prefix rules), *rc.profile., and onboot are trusted (full execLine power); keep them minimal. Optional /etc/bare-os/boot.allow (see boot.allow.example in the kernel tree) lists allowed first tokens when BARE_OS_BOOT_ALLOWLIST=1**.\n\nCOREUTILS BUILD PIPELINE\n\nIn one sentence: developers edit packages/bare-os-coreutils/src/<cmd>.js and optional *lib/-engine.js helpers; build.mjs concatenates a preamble (runtime + engines) per command, emits kernel/bin/<cmd>, and the seeder stages the same bytes into its vendored kernel/bin/ for Pear. lib/commands.mjs is the sorted manifest of every /bin name; the build fails if a command is missing from the manifest or from man/pages/**.\n\n packages/bare-os-coreutils/lib/runtime.js\n +\n (optional) packages/bare-os-coreutils/lib/<engine>.js ← sed-engine, awk-engine, edit-*.js, …\n +\n packages/bare-os-coreutils/src/<cmd>.js\n ↓ (build.mjs, see preamble map)\n kernel/bin/<cmd>\n packages/bare-os-seeder/kernel/bin/<cmd> ← Pear vendored copy\n\nRule: no import in *src/.js — only async function run(ctx, argv) (shared helpers live in lib/runtime.js). Large sed and awk bodies live in lib/-engine.js; md5sum prepends lib/md5.js; jq prepends lib/jq-engine.js; all are concatenated at build time (same global scope as run). edit and nano share src/edit.js and lib/edit-.js; /bin/nano is a separate staged name (default shell alias nano → edit). See lib/commands.mjs for the full sorted /bin** name list.\n\nSIDEBAR: WHY SED AND AWK ARE “ENGINES”\n\nPOSIX sed and awk are large enough that shipping them as one file per command would duplicate parsers and bloat the image. The build prepends shared lib/sed-engine.js / lib/awk-engine.js into the emitted /bin scripts so one JS runtime runs the grammar, while run(ctx, argv) stays the stable entrypoint. Behavior is Issue 7inspired, not byte-identical to GNU—see Chapter 9 <09-posix-utilities-shell-and-vfs.md>.\n\nFull POSIX-style catalog, stubs, and divergence notes: Chapter 9 — POSIX utilities, shell, and VFS <09-posix-utilities-shell-and-vfs.md>.\n\nDELEGATED COMMANDS (BEFORE /BIN)\n\ngit, curl, wget, and the systemctl family are not executed from the coreutils /bin sources first. runBinCommand <../packages/bare-os-booter/lib/kernel-runner.js> matches the command basename against the host delegate registry (host-delegate-registry.js <../packages/bare-os-booter/lib/host-delegate-registry.js>) before it walks PATH on the system drive. BARE_OS_DELEGATE_ALLOW can disable individual kinds (git, curl, wget, systemctl). The system image still contains /bin/curl and /bin/wget for which / ls /bin parity; when a delegate is excluded, the stock booter wires ctx.bareOsRunCurlCli / ctx.bareOsRunWgetCli so those drive-resident scripts invoke the same fetch-based backends as the delegates.\n\nHTTP details: Reference — HTTP: curl and wget <../docs/reference/http-curl-and-wget.md> · Policy: Developer guide — Security and trust <../developer-guide/09-security-and-trust.md>.\n\nFILE METADATA AND PERMISSIONS (NOT FULL POSIX)\n\nHyperdrive entries carry optional metadata.bareOs (mode, uid, gid, names, mtime) set on vfs.writeFile. New files use UMASK from the environment (default 022): typically 0644 for data files, 0755 when executable is set. ls -l and stat/lstat read that metadata; seeded system files without bareOs are synthesized (e.g. root, 0555 under /bin). The VFS enforces basic read/write/traverse checks from UID/GID and mode bits. chown / chgrp update that metadata on the personal drive (same writable scope as chmod); this is still not ACLs or a multi-user host kernel.\n\nCOMMAND REFERENCE (SUMMARY)\n\n- systemctl, journalctl — Booter-delegated: list/status/logs/start/stop/restart/enable/disable/is-enabled/is-active for bare-initd units; preset file on personal drive; journalctl -u only; bare-initctl alias; see ch. 4\n- curl, wget — Booter-delegated fetch-based HTTP clients when allowed; /bin copies call ctx.bareOsRunCurlCli / ctx.bareOsRunWgetCli when delegates are narrowed — see HTTP: curl and wget <../docs/reference/http-curl-and-wget.md> and CLI_PARITY.md <../packages/bare-os-booter/CLI_PARITY.md>\n- git — Booter-delegated (isomorphic-git); see Chapter 8 <08-git-on-bare-os.md>\n- basename, dirname — Path manipulation\n- cat, head, tail, nl — Text\n- clear — ANSI clear screen\n- crontab — -l list, -r remove, <file> install (~/.crontab; writes need login)\n- date — Date/time\n- echo, printf-like simplicity — Args to stdout\n- edit, nano — TTY full-screen buffer editor (same source for both /bin names; stock alias nano → edit); requires real TTY — see ch. 9 §5.2a <09-posix-utilities-shell-and-vfs.md>\n- env, printenv — Environment\n- exit — Sets exit code / session end via booter\n- false, true — Status\n- grep — Line filter: -E/-F, -i, -v, -w, -x, -n, -c, -l, -o, -m, -q, -s, -e, -f, -H/-h; JS RegExp, not full GNU/PCRE\n- hdms — Hyperdrive management CLI\n- help — Lists builtins + /bin\n- hostname — Host string\n- id, whoami, tty — Identity / TTY\n- login, logout — Account session\n- ls — Lists directories; *hides . unless -a; -l** uses real mode, owner, group, mtime from VFS stat\n- chmod — Octal (e.g. 644) or symbolic (e.g. u+rw) on writable drives; updates stored metadata + executable bit\n- mkdir, rmdir — mkdir -p; empty dirs use .bareos_empty (see ch. 9)\n- cp, mv, ln — cp -R, mv (copy+delete trees), ln -s only (no hard links)\n- stat, readlink — File metadata and symlink targets\n- printf, cut, tr, od — Formatting and text transforms (ASCII-oriented tr)\n- sed, awk — Large JavaScript engines in *lib/-engine.js** — not byte-identical to GNU/POSIX everywhere; see ch. 9\n- tee, find, du, cksum — Pipe tee, limited find (-maxdepth, -mindepth, -depth, -name, -type), du -k, POSIX CRC cksum\n- mktemp — Creates a temp file under session /tmp (template XXX suffix)\n- git-pear — Thin helper for Git + Pear workflows (channel/release env); see Chapter 8 <08-git-on-bare-os.md>\n- time, logname — Wall-clock time via ctx.runBinCommand; identity string\n- chown, chgrp — Update ownership in metadata.bareOs on the personal drive (same writable scope as chmod); supports :group and numeric ids; root vs owner rules as in VFS\n- mkfifo — Creates a simulated named pipe at /run/bare-os/ipc/<name> (in-memory FIFO in the booter; readFile blocks until writeFile delivers bytes)\n- getconf, xargs — Documented Bare subsets (fixed getconf table; bounded xargs via ctx.runBinCommand)\n- pathchk — Path sanity\n- pwd — Logical cwd\n- rm — Remove files; -r/-R/--recursive for directories, -f/--force (bundled -rf) — uses VFS tree walk + del per entry\n- savevault — Encrypted vault snapshot\n- seq, sleep, sort — Misc\n- test, [ — Conditionals (as implemented)\n- touch — Create/empty files\n- uname — OS string\n- wc, which — Text / PATH lookup\n- uniq, realpath, base64, sha256sum, … — Checksums and path canonicalization (see ch. 9 for md5sum, sha1sum, sha512sum, sum, base32, basenc)\n- paste, split, tac, rev, expand, unexpand, fold, fmt, comm, join, pr, yes, shuf, tsort, factor, expr, numfmt — GNU-style text/data utilities (several are memory- or output-bounded; see ch. 9 and getconf)\n- truncate, unlink, install, df, sync — File sizing, single unlink, copy+chmod, synthetic df, no-op sync\n- arch, groups, hostid, nproc, uptime, users, who — Session / stub introspection\n- dir, vdir — ls -C / ls -l via runBinCommand\n- agent — OpenAI-compatible HTTPS assistant (ReAct-style tools, TTY streaming). Uses ctx.httpFetch like delegated curl / wget; config on the personal drive under ~/.agent/ (man agent). Large preamble in *packages/bare-os-coreutils/lib/agent-.js (see build.mjs**).\n- chat — Swarm / Protomux chat (full-screen TUI on a TTY or send / history / … subcommands); not the same as agent. Requires booter support (man chat).\n\nExact flags vary—read each src/<cmd>.js for truth.\n\nRUNNING USER SCRIPTS\n\n- ./foo.js — explicit relative path via VFS.\n- foo.js — if the basename ends with .js, the runner tries $PWD/foo.js before scanning PATH on the system drive.\n\nShebang lines #!... are stripped before compilation.\n\nNo ESM in the image: user scripts are AsyncFunction bodies, not Node modules—see developer-guide — User scripts and PATH <../developer-guide/04-user-scripts-and-path.md> and Modules and imports <../developer-guide/05-modules-and-imports.md>.\n\nEDITING THE BANNER\n\nUpdate kernel/init.js and packages/bare-os-seeder/kernel/init.js if you want the staged Pear copys first-run text to match (some workflows copy automatically via build; the seeders kernel/ tree may be vendored separately—check your release process).\n\nNext: Chapter 7 — Operations <07-operations-and-development.md> · POSIX utilities (detail) <09-posix-utilities-shell-and-vfs.md>\n\nRelated: Identity and HDMS <05-identity-vault-and-hdms.md> · Handbook home <README.md> · Kernel extensions <../docs/reference/kernel-extensions.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","06","kernel","and","binaries","bin","utilities"],"seeAlso":[{"name":"handbook-07-operations-and-development","section":7},{"name":"handbook-05-identity-vault-and-hdms","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/06-kernel-and-binaries.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-07-operations-and-development","section":7,"title":"Chapter 7 — Operations, development, and release","synopsis":["man 7 handbook-07-operations-and-development","Handbook chapter (plain text from handbook/07-operations-and-development.md)"],"description":"CHAPTER 7 — OPERATIONS, DEVELOPMENT, AND RELEASE\n\nTime to read: about 14 minutes. Prerequisites: root README.md <../README.md> or user manual <../users-manual/README.md> for the shortest path; Chapter 3 <03-protocol-and-disk.md> if debugging boot.\n\nThis chapter is the operators desk: how to install, test, run Pear apps, interpret CI, and chase common failures.\n\nON THIS PAGE\n\n- Repository layout (monorepo) <#repository-layout-monorepo>\n- Continuous integration <#continuous-integration-github-actions>\n- pretest <#pretest-what-runs-before-npm-test>\n- Holepunch catalog and Bare manifest <#holepunch-catalog-and-bare-manifest-maintainers>\n- Warm read cache (operators) <#warm-read-cache-operators>\n- Release checklist <#release-checklist>\n- Install and test <#install-and-test>\n- Running seeder and booter (Node) <#running-seeder-and-booter-node>\n- Running with Pear <#running-with-pear-recommended-for-real-behavior>\n- Pear channels and staging <#pear-channels-staging-and-pear-links>\n- Environment variables (cheat sheet) <#environment-variables-cheat-sheet>\n- Themes, LS_COLORS, and real terminals <#themes-ls_colors-and-real-terminals>\n- Formatting <#formatting>\n- Troubleshooting <#troubleshooting>\n- Further reading <#further-reading>\n\nREPOSITORY LAYOUT (MONOREPO)\n\n- package.json — Workspaces root; pretest builds coreutils and bare-libs and runs kernel or seeder parity and other verifiers (see root package.json for the exact chain).\n- kernel/ — System image sources staged onto the Hyperdrive.\n- packages/bare-os-protocol — Topic string, MBR layout, Protomux helpers, kernel feature bits.\n- packages/bare-os-coreutils — Build /bin scripts and man.json.\n- packages/bare-os-bare-libs — Build /lib/bare bundles for optional ctx.bare merge.\n- packages/bare-os-seeder — Publish the OS drive and MBR.\n- packages/bare-os-booter — Network boot plus guest runtime.\n- scripts/ — Pear node_modules fixer, parity verifiers, catalog generation, release checklist, and operator helpers like mirror-drive-experiment.mjs for local system-drive mirroring experiments.\n- data/ — Gitignored legacy Corestore directory (optional; defaults usually under ~/.bare-os).\n\nEach workspace has its own README.md with package-specific commands.\n\nCONTINUOUS INTEGRATION (GITHUB ACTIONS)\n\nThe .github/workflows/ci.yml <../.github/workflows/ci.yml> job:\n\n1. Checks out the repo on ubuntu-latest.\n2. Installs Node 20 with npm cache.\n3. Runs npm ci.\n4. Installs Bare globally: npm install -g bare (matches local identity and crypto tests).\n5. Runs npm run gen:bare-catalog:check — ensures docs/bare-holepunch-catalog.json <../docs/bare-holepunch-catalog.json> is up to date with the generator (no drift in PRs).\n6. Runs npm test, which triggers pretest first (see below).\n\nIf CI fails on gen:bare-catalog:check, run npm run gen:bare-catalog locally and commit the JSON. If pretest fails, read the next section.\n\nPRETEST: WHAT RUNS BEFORE NPM TEST\n\nThe authoritative script lives in root package.json <../package.json> under pretest. It always includes, among other steps:\n\n- npm run build -w bare-os-coreutils — Produces /bin outputs and man.json. Failure usually means stale or broken utilities, TypeScript or syntax errors, or a bad build script.\n- npm run build -w bare-os-bare-libs — Builds ctx.bare bundles. Failure means esbuild errors or bad imports under kernel/lib/bare/. Maintainer hygiene: scripts/sanitize-bare-bundles.mjs strips or rewrites noisy guest-facing *console. in selected vendored bundles before they ship under kernel/lib/bare/bundles/; run it when upstream bundles regress logging (then rebuild bare-libs so ctx.console** / var-log paths stay authoritative).\n- node scripts/verify-kernel-seeder-parity.mjs — Ensures kernel/ matches packages/bare-os-seeder/kernel/ with a full recursive comparison: every relative path must exist in both trees and byte-identical contents (not only init.js or lib/init/init-main.js). It also asserts kernel/init.js matches the bundle recipe (*kernel/lib/boot/.js + init-main.js) and that every kernel/bin/ file carries the BARE_OS_BIN_API pragma. Remediate from repo root* after editing the canonical image:\n\n node scripts/bundle-kernel-init.mjs\n rsync -a --delete kernel/ packages/bare-os-seeder/kernel/\n\nOne-command sync (same as the two lines above, plus parity verify): npm run maintainer:sync-kernel-seeder from the repo root. If /boot/init.js must be regenerated first: npm run maintainer:sync-kernel-seeder:bundle. Full image rebuild (coreutils, bare-libs, bundle, extensions index): npm run maintainer:kernel-image.\n\nFailure means the Pear seeder would ship the wrong tree; sync before release.\n- node scripts/sync-holepunch-clones.mjs — Optional maintainer report under docs/audit/holepunch-clone-sync-report.json (local holepunchto_repos vs bare-module-manifest.json names).\n- node scripts/verify-holepunch-clone-drift.mjs — When docs/audit/holepunch-drift-repos.json <../docs/audit/holepunch-drift-repos.json> lists repos[], compares each existing clone under BARE_OS_HOLEPUNCH_CLONES_ROOT (default $HOME/dev/pearcli/holepunch-repos/holepunchto_repos) to origin/main; missing clones are skipped. Set BARE_OS_HOLEPUNCH_DRIFT_TIER1=1 to check tier1Repos[] instead (small Holepunch spine). Set BARE_OS_HOLEPUNCH_DRIFT_CHECK=0 to skip (offline CI / no mirror). Pair with periodic git fetch origin main in those clones so the gate stays meaningful.\n- node scripts/verify-runtime-no-incomplete-markers.mjs — Scans first-party kernel/lib/init, kernel/lib/boot, packages/bare-os-booter/lib, and packages/bare-os-coreutils/src for TODO / FIXME / stub markers that must not ship on the drive.\n- Additional verifiers (ctx API, capability contracts, roadmap wave rows, doc links, man coverage, compatibility matrix strings, Pear import rules, bare manifest smoke) run in the same pretest chain—read package.json for the full ordered list.\n\nIf any step fails, scroll the npm test output for the first non-zero exit; each script prints a specific error string.\n\nHOLEPUNCH CATALOG AND BARE MANIFEST (MAINTAINERS)\n\n- npm run gen:bare-catalog — Refreshes docs/bare-holepunch-catalog.json from upstream metadata (network).\n- npm run gen:bare-catalog:check — Same as above in check mode for CI.\n- npm run sync:bare-manifest — Applies catalog data to packages/bare-os-booter/lib/bare-module-manifest.json <../packages/bare-os-booter/lib/bare-module-manifest.json> (rewrites entries only; curated pearEntries are preserved), regenerates packages/bare-os-booter/lib/bare-module-manifest.data.mjs <../packages/bare-os-booter/lib/bare-module-manifest.data.mjs> (Pear module-graph copy of the manifest), and updates related booter optionalDependencies.\n- npm run verify:manifest-data — Fails CI if the JSON and .data.mjs payloads diverge (run automatically in pretest / maintainer:kernel-image).\n- npm run smoke:bare-manifest — Import smoke test for manifest entries.\n\nSee docs/README.md <../docs/README.md> and developer-guide ch.12 <../developer-guide/12-bare-modules-and-pear-ecosystem.md>.\n\nBUNDLE PROVENANCE ON THE DRIVE (KERNEL/LIB/BARE/MANIFEST.JSON)\n\nEach npm run build -w bare-os-bare-libs run writes kernel/lib/bare/manifest.json (and mirrors it into packages/bare-os-seeder/kernel/lib/bare/manifest.json) with:\n\n- bundles — /lib/bare/bundles/*.js paths and ctx.bare keys.\n- bundleStats / bundleDiagnostics — row count and per-bundle byte sizes.\n- bundleProvenance — schemaVersion, ISO generatedAt, repo gitCommit (from git rev-parse HEAD when available), host nodeVersion, bundleTier (all unless BARE_OS_BUNDLE_TIER narrowed the build), normativeManifest, and buildScript path.\n\nUse provenance to audit which commit produced an images Holepunch IIFEs and to compare bundle tiers across environments.\n\nWARM READ CACHE (OPERATORS)\n\nWhen BARE_OS_VFS_BIN_CACHE and/or BARE_OS_VFS_LIB_BARE_CACHE are on, the booter serves hot /bin and /lib/bare reads from an LRU. After live replication, OTA-style /bin or /lib/bare writes, or kernel.ext.d hot reload that changes bundles, stale bytes are a real risk.\n\n1. Prefer ctx.bareOsVfsBatchWrite for batch put operations — it clears warm entries when paths touch bin/, lib/bare/, boot/init.js, or lib/init/, and uses selective vfs.bareOsEvictLibBareBundlesFromManifest when only lib/bare/bare-module-manifest.json changes.\n2. Call ctx.bareOsInvalidateWarmReadCaches('reason') (or vfs.bareOsClearWarmReadCaches()) after host-driven replication or policy changes that bypass the batch writer.\n3. For manifest-only updates, use ctx.bareOsInvalidateWarmReadCachesFromBareManifestJson(buf) to evict bundles/<ctxKey>.js rows without flushing unrelated cache entries.\n4. Optional BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_APPEND registers Hypercore append listeners so replication can clear caches automatically (higher churn on busy drives).\n\nTests in packages/bare-os-booter/test.js cover hit/miss, full clear, manifest-selective eviction, and hrpc allowlist helpers adjacent to the VFS suite.\n\nFor a cheap regression-shaped timing sample of synthetic cache churn (JavaScript Map clear + refill — not the booter LRU), run node scripts/kernel-microbench.mjs --suite vfs and inspect warmReadCacheInvalidateSynthetic in the JSON output; use it to compare machines or commits before/after replication-invalidation tuning, not as an absolute guest latency budget.\n\nPEAR BUNDLE AND PACK PIPELINE (OS IMAGES)\n\nFor Pear-shaped releases, align pear-bundle / pear-pack with the same kernel/ tree the seeder stages: run npm run build -w bare-os-coreutils and npm run build -w bare-os-bare-libs, verify scripts/verify-kernel-seeder-parity.mjs, then point Pear tooling at packages/bare-os-seeder or the published Hyperdrive key. packages/bare-os-seeder/package.json pear.stage.include must list kernel so Pear ships the vendored tree (the seeder never static-imports those files; without include, pear run pear://… can fail with kernel directory missing when staging with --compact). Keep pear-runtime and bare-os-protocol versions coupled per compatibility-matrix.md <../docs/reference/compatibility-matrix.md>.\n\nRELEASE CHECKLIST\n\nscripts/release-checklist.mjs <../scripts/release-checklist.mjs> is a maintainer aid to sanity-check versioning, artifacts, or release steps before tagging (run node scripts/release-checklist.mjs from the repo root when preparing a release). It complements—not replaces—human review and Pear staging.\n\nINSTALL AND TEST\n\n git clone https://git.ssh.surf/snxraven/bare-operating-system.git\n cd bare-operating-system\n npm ci\n npm test\n\n- booter tests use Node for Hyperdrive + Bare for identity crypto (test.identity.js).\n\nRUNNING SEEDER AND BOOTER (NODE)\n\nFrom packages/bare-os-seeder:\n\n node index.js\n\nStructured seeder logs: set BARE_OS_SEED_LOG_LEVEL (debug, info, warn, error) and, for machine-readable output, BARE_OS_SEED_LOG_FORMAT=ndjson (or json) so each line is a single JSON object with ts, level, msg, and context fields. Default human-readable lines go to stdout.\n\nExample NDJSON rows (one object per line):\n\n {\"ts\":\"2026-04-26T21:00:00.000Z\",\"level\":\"info\",\"msg\":\"seeder.start\",\"key\":\"...\",\"store\":\"~/.bare-os/corestore/seeder\"}\n {\"ts\":\"2026-04-26T21:00:00.420Z\",\"level\":\"info\",\"msg\":\"discovery.flushed\",\"peers\":0,\"topic\":\"bare-os-v1\"}\n {\"ts\":\"2026-04-26T21:00:01.003Z\",\"level\":\"warn\",\"msg\":\"replication.backpressure\",\"depth\":12}\n\nFrom packages/bare-os-booter:\n\n node index.js\n\nDefault Corestore paths are ~/.bare-os/corestore/seeder and ~/.bare-os/corestore/booter (override base with BARE_OS_HOST_DATA, or set BARE_OS_SEED_STORE / BARE_OS_BOOT_STORE). See each packages lib/paths.js.\n\nRUNNING WITH PEAR (RECOMMENDED FOR “REAL” BEHAVIOR)\n\nFrom repo root:\n\n npm run os:seeder\n npm run os:booter # second terminal\n\nThese run scripts/ensure-pear-node-modules.mjs first so Pears module resolution sees workspace dependencies the same way npm ci does at the repo root—without that shim, pear run from a package directory can miss hoisted node_modules. Do not run pear run os:seeder — os:seeder is an npm script name, not a Pear link.\n\nPEAR CHANNELS, STAGING, AND PEAR:// LINKS\n\nHost (booter/seeder): After pear stage / pear release on the host, Pear prints a pear://… link per app. Consumers run those keys with host pear run, or use dev mode pear run --dev ..\n\nGuest (booted shell): Use /bin/pear to stage and release user apps, then /bin/appstore to install and launch — no host Pear CLI required. See guides/guest-pear-and-appstore-workflow.md <../docs/guides/guest-pear-and-appstore-workflow.md>.\n\nConcrete keys and re-staging steps (seeder/booter channels, versioned links, host env for OTA): PEAR-RUN.md <../docs/PEAR-RUN.md>.\n\nOTA-shaped flow (doc contract): Pears channel / release metadata on the host pairs with BARE_OS_PEAR_CHANNEL, BARE_OS_PEAR_RELEASE, and optional ctx.bareOsPearUpdaterDelegate() (async) when BARE_OS_PEAR_UPDATER_MODULE or BARE_OS_PEAR_UPDATER_SNAPSHOT_JSON is set—see developer-guide ch.11 — Pear workflows <../developer-guide/11-kernel-pear-cookbook.md>. ctx.bareOsSystemRevision exposes id, pending, and slot for guest policy; /etc/bare-os/boot.policy.json rollback fields and boot markers (BARE_OS_BOOT_ROLLBACK_APPLY, BARE_OS_SYSTEM_REVISION_PENDING) gate whether a newer system key is adopted after the next boot.\n\nENVIRONMENT VARIABLES (CHEAT SHEET)\n\nThese are the variables operators touch most often; the full list is in docs/reference/environment-and-posix-appendix.md <../docs/reference/environment-and-posix-appendix.md#14-environment-variables-complete-list>.\n\nSeeder and paths\n\n- BARE_OS_KERNEL_ROOT — Override the kernel tree path the seeder stages.\n- BARE_OS_HOST_DATA — Base directory for host state (default ~/.bare-os).\n- BARE_OS_SEED_STORE — Seeder Corestore directory.\n- BARE_OS_BOOT_STORE — Booter Corestore directory.\n- BARE_OS_SEED_LOG_LEVEL, BARE_OS_SEED_LOG_FORMAT — Seeder host logger (ndjson / json for one object per line).\n\nBooter behavior\n\n- BARE_OS_BOOT_TIMEOUT_MS — Boot deadline (default 60000).\n- BARE_OS_MBR_READ_TIMEOUT_MS — Override max wait for replicated block 0 / MBR before boot fails (≥ 3000 ms, cap 600000).\n- BARE_OS_MBR_READ_TIMEOUT_ADAPTIVE — When 1 / true and BARE_OS_MBR_READ_TIMEOUT_MS is unset, lengthens or shortens the default MBR wait from live peer count (sparse swarms get more time). See environment appendix §14.\n- BARE_OS_NO_SPLASH — Disable TTY splash.\n- BARE_OS_SKIP_REPL — Non-interactive kernel.\n- BARE_OS_FISH — Set 0 to disable fish readline.\n- BARE_OS_HOST_BOOTER_LOG — Host diagnostics before guest session: stderr (default), ndjson file under BARE_OS_HOST_BOOTER_LOG_PATH or ~/.bare-os/var/log/booter-host.ndjson, or 0/off` to silence. See environment appendix §14.\n- BARE_OS_BOOT_PERF_DETAIL — With 1, guest boot-perf.json gains finer samples and the booter logs bare_stdlib_merge_ns after drive ctx.bare merge.\n- BARE_OS_BARE_SUBPROCESS_BRIDGE, BARE_OS_BARE_SUBPROCESS_TIMEOUT_MS — When the bridge is on, runBin inherits the subprocess timeout cap unless runBin already has an explicit budget; ctx.bareOsReadSubprocessBridgeSnapshot() (schema 4) includes timeoutPolicy echoing these env keys.\n\nNetwork and replication\n\n- HYPERSWARM_BOOTSTRAP — Comma-separated bootstrap nodes for Hyperswarm (booter and HDMS).\n- Testnet operator lane (HYPERSWARM_BOOTSTRAP) — For isolated labs, point booter and seeder at dedicated bootstrap nodes only (for example your local test bootstrap pair) so production swarms are not mixed with test traffic. Keep this host-only and ephemeral; clear the value before normal production runs.\n- BARE_OS_REPLICATION_SYNC_WINDOWS — UTC windows (HH:MM-HH:MM, comma-separated); exposes /proc/bare_os/sync_window.json and BARE_OS_REPLICATION_SYNC_WINDOW_ACTIVE.\n\nSeeder RPC hints (optional)\n\n- BARE_OS_SEED_STAGING_PREVIOUS_SLOT — Prior A/B slot hex for rollback hints in staging_slot RPC.\n- BARE_OS_SEED_REPLICATION_QUEUE_DEPTH_HINT — Integer echoed as queueDepthEstimate in replication_queue RPC.\n- BARE_OS_SEED_REPLICATION_SNAPSHOT_NOTE_JSON — JSON string influencing snapshot workflow text on the seeder.\n\nThroughput, IPC, and telemetry (host → guest)\n\n- *BARE_OS_PIPELINE_MAX_ and BARE_OS_PIPELINE_ABS_MAX_BYTES / BARE_OS_PIPELINE_ABS_MAX_LINES — Simulated pipeline capture (absolute caps default 512MiB / 2000000 lines after the streaming multiplier). The stock booter defaults BARE_OS_SHELL_STREAMING=1, BARE_OS_SHELL_STREAMING_MULT=2, BARE_OS_PIPELINE_MAX_BYTES (512MiB), and BARE_OS_PIPELINE_MAX_LINES (2000000**) when the host leaves them unset.\n- BARE_OS_SHELL_STREAMING, BARE_OS_SHELL_STREAMING_MULT — Multiply capture limits; alias BARE_OS_STREAMING_MULTIPLIER when BARE_OS_SHELL_STREAMING_MULT is unset (booter default mult is 2).\n- BARE_OS_IPC_MAX_CHANNELS, BARE_OS_POSIX_MQ_MAX_MSGS, BARE_OS_POSIX_MQ_MSG_BYTES — FIFO/MQ quotas and POSIX mq_open defaults.\n- BARE_OS_VFS_MAX_OPEN — Advisory RLIMIT_NOFILE in /proc/bare_os/rlimits.json when set.\n- BARE_OS_TELEMETRY_OTEL / BARE_OS_TELEMETRY_OTEL_JSONL — OTel JSON line export (shorthand BARE_OS_TELEMETRY_OTEL=1 defaults the path — see appendix).\n- BARE_OS_EXEC_LINE_BUDGET_MS / BARE_OS_TIMER_BUDGET_MS — Top-level execLine session wall budget.\n\nPear cookbook: developer-guide ch.11 § ~1GiB host RAM <../developer-guide/11-kernel-pear-cookbook.md>.\n\nThe booter also copies many other *BARE_OS_ toggles from the host into the guest session (boot strictness, audit, Pear metadata, BARE_OS_VFS_WATCH, BARE_OS_BOOT_ALLOWLIST**, …). See the environment appendix for the full list.\n\nLayers in plain language: host env (Pear shell, CI, your laptop) seeds values into shellEnv; the guest sees them as normal environment variables and in /proc/self/environ (filtered). When debugging, ask: was this variable set on the host before launching the booter?\n\nTHEMES, LS_COLORS, AND REAL TERMINALS\n\nThemes are not just aesthetics—they keep ls --color, the fish-style prompt, and host emulator configs aligned so you do not debug “broken colors” when the real issue is a truecolor vs 256-color mismatch.\n\n- ~/.barerc supports theme <preset> (e.g. theme nord) plus export / alias. The active preset fills *BARE_OS_COLOR_ and LS_COLORS unless you set LS_COLORS yourself or BARE_OS_LS_COLORS_LOCKED=1. Use BARE_OS_COLOR_DEPTH (256, 16, or ansi**) on constrained terminals.\n- barerc reload, theme, dircolors — see Chapter 4 <04-the-booter-runtime.md> and man theme.\n- docs/themes/README.md <../docs/themes/README.md> — preset packs and sample Alacritty / Warp YAML (in-house).\n\nFORMATTING\n\n npm run format\n npm run lint\n\nPrettier config: no semicolons, single quotes (.prettierrc).\n\nTROUBLESHOOTING\n\nBooter exits at timeout — No seeder peer on the bare-os-v1 topic. Start the seeder and confirm network reachability.\n\nMBR / block 0 stalls on flaky swarms — Raise BARE_OS_MBR_READ_TIMEOUT_MS or enable BARE_OS_MBR_READ_TIMEOUT_ADAPTIVE so cold boot waits longer when few peers are visible; compare swarm_health / replication metrics in /proc/bare_os/metrics_live.json. Regression-shaped timings: node scripts/kernel-microbench.mjs --suite boot (mbr_read_timeout_ms_sketch).\n\n/bin/foo missing under Pear — Run npm run build -w bare-os-coreutils before staging or seeding so the image includes a fresh /bin build.\n\nautopass or module not found in Pear — Check hoisting, ensure-pear-node-modules, and avoid forbidden static imports in HDMS paths.\n\ntest is not defined in user script — Bug in user JavaScript; the kernel runner should log and continue instead of crashing the session.\n\nDouble cron or log spam — Session restarted without stopBareInitd; REPL cleanup should stop initd timers.\n\nCron day-of-month vs day-of-week — bare-cron matches a job when the usual five fields align; if both day-of-month and day-of-week are non-*`, a match on either field is sufficient (POSIX crontab “OR” rule). See packages/bare-os-booter/lib/bare-cron.js`**.\n\nCI fails gen:bare-catalog:check — Regenerate the catalog with npm run gen:bare-catalog and commit.\n\nverify-kernel-seeder-parity fails — Copy or sync kernel/ → packages/bare-os-seeder/kernel/ per release documentation.\n\nSECURITY, ACL, AND OBSERVABILITY HOOKS\n\nThe booter exposes ctx.bareOsAclEvaluate, audit toggles (BARE_OS_AUDIT, BARE_OS_AUDIT_JSON), and append-only style logging under /var/log/ (see environment appendix). Subsystem-oriented error classes with stable code fields live in packages/bare-os-booter/lib/bare-os-errors.js <../packages/bare-os-booter/lib/bare-os-errors.js>. After initd, disk.os.execRpc accepts only whitelisted *bare_os.** methods—see Chapter 3 — disk.os bridge <03-protocol-and-disk.md>.\n\nBoot / initd telemetry: /proc/bare_os/boot_budget_summary.json mirrors the kernels /run/bare-os/boot-budget-summary.json (schema 2 includes bootStageCount, bootStageTail). /proc/bare_os/initd_graph.json (and initd_dag.json) expose the initd DAG the booter used; correlate with metrics_live.initdReadiness and boot-transaction NDJSON when BARE_OS_BOOT_TRANSACTION_JOURNAL is on.\n\nFURTHER READING\n\n- docs/README.md <../docs/README.md> — documentation home (all trees, glossary, FAQ)\n- docs/troubleshooting.md <../docs/troubleshooting.md> — symptom router\n- docs/CONTRIBUTING-DOCS.md <../docs/CONTRIBUTING-DOCS.md> — doc style and pretest verifiers\n- docs/reference/README.md <../docs/reference/README.md> — file-by-file reference (authoritative for paths)\n- README.md <../README.md> — short overview\n- User manual <../users-manual/README.md> — operator-oriented runbook\n- Preface <00-preface.md> — thesis and contributor paths\n- Handbook Chapter 3 <03-protocol-and-disk.md> — boot failures on the wire\n\nNext: Chapter 8 — Git on Bare OS <08-git-on-bare-os.md>\n\nRelated: Handbook home <README.md> · CHANGELOG — ctx API <../packages/bare-os-booter/CHANGELOG.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","07","operations","and","development","release"],"seeAlso":[{"name":"handbook-08-git-on-bare-os","section":7},{"name":"handbook-06-kernel-and-binaries","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/07-operations-and-development.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-08-git-on-bare-os","section":7,"title":"Chapter 8 — Git on Bare OS","synopsis":["man 7 handbook-08-git-on-bare-os","Handbook chapter (plain text from handbook/08-git-on-bare-os.md)"],"description":"CHAPTER 8 — GIT ON BARE OS\n\nTime to read: about 8 minutes. Prerequisites: Chapter 4 — VFS <04-the-booter-runtime.md> (path routing), Chapter 7 <07-operations-and-development.md> for env vars.\n\nThe git command in this project is not the GNU Git binary. It is a small CLI in the booter package that calls isomorphic-git <https://isomorphic-git.org/> — a JavaScript implementation with a fixed set of APIs, not parity with every git subcommand you might know from a desktop Linux install.\n\nWHY DELEGATION EXISTS\n\nHyperdrive-resident /bin utilities are built as concatenated scripts and loaded with AsyncFunction. They cannot use Node import to pull in isomorphic-git. When you type git, the booter short-circuits to git-cli.js via a normal ESM import at host level—same pattern as delegated curl, wget, and systemctl. Storage still targets VFS paths (personal drive under $HOME, writable HDMS mounts), not arbitrary host paths.\n\nHOW IT RUNS\n\n- Delegation: When you type git (or an absolute path like /bin/git whose basename is git), the booter loads git-cli.js with a normal ESM import. That avoids the Hyperdrive /bin model, where utilities are concatenated and evald without import, which cannot load npm packages.\n- Storage: Repositories live on the VFS (personal drive under $HOME, or writable HDMS mounts). isomorphic-git expects a Node-style fs.promises surface; the booter provides createGitFsFromVfs, which maps those calls onto Hyperdrive-backed paths. Empty directories use a hidden marker file (.bareos_empty) because Hyperdrive does not always mirror POSIX directory semantics.\n\nNETWORK MODES (CLONE, FETCH, PUSH)\n\n- On Node, HTTP defaults to isomorphic-git/http/node (simple-get), loaded via import.meta.resolve when available so package subpaths resolve reliably (including under Pear).\n- If that fails to load, or when you set BARE_OS_GIT_HTTP=web, the CLI uses isomorphic-git/http/web, which expects a global fetch. The booter statically imports the web client so Pears bundler can wire isomorphic-git/http/web (dynamic imports from git-cli.js used to fail with “Cannot find referrer”). Node 18+ and browsers already provide fetch; Pear/Bare often does not, so the booter loads bare-fetch (Holepunch) and assigns globalThis.fetch (plus Request / Response / Headers) before using the web client.\n- TLS, proxies, and corporate inspection still depend on the host; certificate errors may surface even when the VFS layer is fine.\n\nMental model: git network I/O is host-shaped; repository bytes are drive-shaped.\n\nEXPECTATIONS AND CONSTRAINTS\n\n- Use git --help inside Bare OS for the supported subcommand list.\n- Unsupported subcommands print a short message; for full API behavior, see the isomorphic-git documentation <https://isomorphic-git.org/docs/en/next/alphabetic>.\n- Very large repos may stress memory and replication more than desktop Git with packfiles on a local disk—this is still a research stack.\n\nGIT-PEAR AND PEAR METADATA\n\n/bin/git-pear is a small coreutils utility that prints or exports Pear-oriented hints (PEAR_CHANNEL, BARE_OS_PEAR_CHANNEL, BARE_OS_PEAR_RELEASE) for scripts that clone or tag against a Pear release channel. It complements git (which remains the isomorphic-git CLI) and is documented in man git-pear after a coreutils build.\n\ngip (when installed on the host) is described in the Developer guide — Kernel + Pear cookbook <../developer-guide/11-kernel-pear-cookbook.md> as a host-side companion for publishing drives; inside the guest image, prefer git + git-pear for VFS-local workflows.\n\nNext: Chapter 9 — POSIX utilities, shell, VFS <09-posix-utilities-shell-and-vfs.md>\n\nRelated: Documentation home <../docs/README.md> · Handbook home <README.md> · PEAR-RUN.md <../docs/PEAR-RUN.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","08","git","on","bare","os"],"seeAlso":[{"name":"handbook-09-posix-utilities-shell-and-vfs","section":7},{"name":"handbook-07-operations-and-development","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/08-git-on-bare-os.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-09-posix-utilities-shell-and-vfs","section":7,"title":"Chapter 9 — POSIX-style utilities, shell builtins, and VFS alignment","synopsis":["man 7 handbook-09-posix-utilities-shell-and-vfs","Handbook chapter (plain text from handbook/09-posix-utilities-shell-and-vfs.md)"],"description":"CHAPTER 9 — POSIX-STYLE UTILITIES, SHELL BUILTINS, AND VFS ALIGNMENT\n\nTime to read: reference chapter (skim §12, use §5 as catalog). Prerequisites: Chapter 4 <04-the-booter-runtime.md>, Chapter 6 <06-kernel-and-binaries.md>.\n\nWHY THIS CHAPTER EXISTS\n\nIf you come from Linux or macOS, Bare OS feels like a small Unix: ls, grep, sed, pipelines, and man. Under the hood it is JavaScript utilities on a two-drive VFS with simulated pipes. This chapter is the honest catalog: what matches POSIX.1-2017 XCU <https://pubs.opengroup.org/onlinepubs/9699919799/toc.htm> closely, what is Issue 7inspired, and what is stubbed or bounded so the runtime stays predictable.\n\nNormative reference: Open Group Issue 7 — use the online utilities index for intended semantics; Bare behavior may intentionally diverge where Hyperdrive or the single-process runtime makes full compliance impossible.\n\nDeclared profile (single spec): POSIX_DECLARED_PROFILE.md <../docs/architecture/POSIX_DECLARED_PROFILE.md> — contract for XCU/XSH-like behavior, proc stand-ins for “syscalls,” and explicit non-goals.\n\nGenerated dashboard (do not hand-edit): POSIX compliance dashboard <../docs/reference/posix-dashboard.md> — refreshed by root pretest from posix-compliance-matrix.json <../docs/reference/posix-compliance-matrix.json>.\n\nDeclared profile (constants): the protocol package publishes BARE_OS_POSIX_PROFILE_VERSION / BARE_OS_POSIX_PROFILE_ID (bare-os-posix-like), surfaced on /proc/bare_os_features and in /proc/bare_os/syscalls.json (schema 11 for that file — adds posix_fadvise simulated hint and clock_gettime; fdModel / signalModel plus opsDetail / posixXsh (schema 3) / socketMsgSurface (schema 6: iovecSemantics + recvmsg susv4Refs; binary ancillary ENOTSUP; optional BARE_OS_POSIX_SOCKET_SCM_RIGHTS JSON cmsgs → logical scmRightsLocalDup on sendmsg for SOCK_STREAM and SOCK_DGRAM bridge fds; recvmsg controllen: 0) / errnoHints, including cooperative fcntl advisory locks with optional F_SETLKW blocking wait (BARE_OS_POSIX_FCNTL_BLOCKING_WAIT) and optional socket-bridge datagram bind/connect/send/sendmsg/recv/recvfrom/recvmsg (passive UDP bind, optional connect on the same fd, send with explicit port/host when bound without default peer) with bounded queues; /proc/bare_os/index.json uses schema 8). process_table.json is schema 9 with per-row nice and logical companions process_maps.json / process_threads.json. getconf BARE_OS_POSIX_XSH_OPS lists the XSH names; getconf BARE_OS_SYSCALL_OPS lists ctx op names only. Cold-boot wall time vs BARE_OS_BOOT_BUDGET_MS_COLD is also written to /run/bare-os/boot-perf.json when the VFS supports it. metrics_live includes initdReadiness (schema 2), bootBudgetTelemetry (schema 2, unified with boot-perf.json), and paths such as utilitiesIndexPath → /etc/bare-os/posix_utilities.json when present. Dashboard: POSIX + P2P consolidated hub <../docs/README.md#posix--p2p-consolidated-dashboard>.\n\nON THIS PAGE\n\n- Why this chapter exists <#why-this-chapter-exists>\n- Executive summary: what is not POSIX here <#1-executive-summary-what-is-not-posix-here>\n- VFS: directories, metadata, and empty folders <#2-vfs-directories-metadata-and-empty-folders>\n- Shell lists, pipelines, and builtins <#3-shell-lists-pipelines-and-builtins-packagesbare-os-booterlibshelljs>\n- Booter ctx helpers <#4-booter-ctx-helpers>\n- /bin utilities (catalog) <#5-bin-utilities-catalog>\n- §6 — sed implementation <#6-sed-implementation>\n- §7 — awk implementation <#7-awk-implementation>\n- §8 — Coreutils build preamble map <#8-coreutils-build-preamble-map>\n- §8.5 — Shell cookbook <#85-shell-cookbook-without-full-posix-sh>\n- §8.7 — Capability word 8 errno / whiteout / FIFO <#87-capability-word-8--bare-fs-errno-rows-union-whiteout-fifo-metrics>\n- §9 — Where to read next <#9-where-to-read-next>\n\nPHILOSOPHY: “ISSUE 7-ISH” IN ONE PARAGRAPH\n\nWe borrow names and muscle memory from POSIX because that makes scripts portable _in spirit_. We do not promise bitwise compatibility with GNU coreutils, binary sh compatibility, or kernel semantics (no real fork, no real FIFOs on disk). When in doubt, read src/<cmd>.js and the environment / POSIX appendix <../docs/reference/environment-and-posix-appendix.md#14a-posix-userland-appendix-implemented-vs-gaps>—the appendix is the checklist view; this chapter is the narrative view.\n\n1. EXECUTIVE SUMMARY: WHAT IS _NOT_ POSIX HERE\n\n- Full POSIX sh grammar — Bare uses a compact shell surface: builtins plus /bin; lists with ; (outside compound statements), &&, and | pipelines; bounded if … fi; bounded while / for / until (iteration cap BARE_OS_SHELL_LOOP_MAX, default 10000); loop controls break / continue; bounded case … esac (BARE_OS_SHELL_CASE_MAX_BRANCHES, default 32). Optional bounded $(…) when BARE_OS_SHELL_CMDSUBST=1 (see §3). With BARE_OS_SHELL_POSIX_MODE=1, subshell-free grouped lists ( compound-list ) run as a single statement (same session context). There are no forked subshells and no full *sh\\\\* grammar.\n- Processes, fork, pipes as OS primitives — Pipelines are simulated by capturing console.log (and merged console.error when 2>&1 is used) into the next command. With BARE_OS_POSIX_FD_SIM=1, extensions may also use ctx.bareOsPosixFdSimPipe / bareOsPosixFdSimRead / bareOsPosixFdSimWrite for bounded in-memory pipe pairs surfaced as logical FDs in /proc/self/fd (not full kernel pipes). Logical FDs support ctx.bareOsSyscall('fcntl', { fd, cmd: 'F_GETFL' | 'F_SETFL', arg }) (Linux-shaped O_APPEND 0x400, O_NONBLOCK 0x800), cooperative F_GETLK / F_SETLK / F_SETLKW on absolute paths (or fd→path), and readiness via ctx.bareOsPosixPoll / ctx.bareOsSyscall('posixPoll', { fds, timeoutMs }) (see /proc/bare_os/syscalls.json). Cooperative locks are not kernel wait queues: F_SETLKW may surface an EINTR-shaped note when the blocking wait budget elapses or a stale-owner grace window passes — there is no host deadlock detector. With BARE_OS_POSIX_SOCKET_FD_BRIDGE=1, socket + connect may use ctx.bare.bareTcp for SOCK_STREAM and ctx.bare.bareDgram for SOCK_DGRAM when merged; passive SOCK_STREAM uses bind, listen, accept (bareTcp.Server) with BARE_OS_POSIX_ACCEPT_QUEUE_MAX; accepted stream fds support send/recv with a bounded segment queue (same cap family as BARE_OS_POSIX_DGRAM_RECVQ_MAX). Bridged UDP supports send, recv, and recvfrom with BARE_OS_POSIX_DGRAM_RECVQ_MAX / BARE_OS_POSIX_DGRAM_RECV_BLOCK_MS_MAX, and *poll/select\\\\* treat the fd readable when the datagram queue is non-empty (listening and TCP-accepted fds use their respective queues).\n- chown / chgrp / real UIDs across users — Single-session identity; metadata carries uid/gid for display and checks, not a multi-user kernel.\n- FIFOs, mknod, real devices — No kernel FIFOs or mknod; mkfifo creates in-memory channels under /run/bare-os/ipc/<name> (see bare-os-ipc.js). Optional BARE_OS_IPC_MAX_CHANNELS (host passthrough) caps distinct channel keys; optional BARE_OS_POSIX_MQ_MAX_MSGS / BARE_OS_POSIX_MQ_MSG_BYTES set POSIX mq_open defaults when attrs are omitted; metrics_live.ipcTelemetry mirrors FIFO depth, fan-out counts, and quota counters.\n- Full POSIX/GNU xargs — Bounded implementation: ctx.runBinCommand only; -0, -n (and -nN), optional -P parallelism with effective cap min(requested, BARE_OS_XARGS_MAX_PROCS, 32) (default 8 when env unset; sequential when 0); stdin, token, and invocation caps (see *src/xargs.js\\\\*).\n- getconf / live sysconf — Fixed name table plus -a; values are Bare constants, not host kernel queries (see src/getconf.js). getconf NAME /path delegates to ctx.bareOsPathconf for *_PC_\\ variables ( \\_PC_CHOWN_RESTRICTED is 0 under /mirror/\\\\ read-only aux mounts).\n- Byte-identical sed / awk / grep — Implementations are JavaScript; regex and edge cases differ from GNU or strict POSIX.\n- Tier-1 utilities outside POSIX Issue 7 — agent (HTTPS assistant with tools such as web_fetch) and chat (swarm / Protomux chat) are first-class /bin commands but are not POSIX utilities; see man agent, man chat, and User manual — ch.4 <../users-manual/04-shell-path-and-scripts.md>.\n\nFor the /bin build contract (no import, AsyncFunction load), see Chapter 6 <06-kernel-and-binaries.md>.\n\n> Key idea — two drives, one namespace: utilities almost never care _which_ Hyperdrive backs a path; the VFS routes $HOME, /tmp, and /var/log to personal prefixes and everything else to the system image. See Chapter 4 <04-the-booter-runtime.md>.\n\n2. VFS: DIRECTORIES, METADATA, AND EMPTY FOLDERS\n\npackages/bare-os-booter/lib/vfs.js <../packages/bare-os-booter/lib/vfs.js> exposes a unified path space over the system and personal Hyperdrives (see Chapter 4 <04-the-booter-runtime.md>).\n\n> Key idea — .bareos_empty: empty directories are marked with a hidden sentinel so git and mkdir -p agree on tree shape. Hyperdrive is not POSIX-shaped by default.\n\n2.1 EMPTY DIRECTORIES (.BAREOS_EMPTY)\n\nHyperdrive does not always behave like a POSIX directory tree. Empty directories are represented by a hidden marker file .bareos_empty, consistent with git-fs-adapter.js <../packages/bare-os-booter/lib/git-fs-adapter.js> and Chapter 8 — Git <08-git-on-bare-os.md>. readdir on the raw VFS may list that name; git paths filter it.\n\n2.2 MKDIR AND RMDIR\n\n- vfs.mkdir(path, { recursive, mode }) — creates directories by writing dirname/.bareos_empty. Optional mode sets permission bits on the marker; lstat on the directory derives S_IFDIR from that metadata (with execute bits implied where read bits are set, so paths stay traversable). -p / --parents and -m are implemented by /bin/mkdir. On failure, mkdir prints mkdir: path: CODE: message when the VFS error carries a string code (Holepunch bare-fs / error.code family), else mkdir: path: message only.\n- vfs.rmdir(path) — removes a directory only if it has no entries other than .bareos_empty (and removes the marker).\n\n2.3 PSEUDO /PROC, /SYS, /RUN, /DEV, AND SESSION /TMP\n\n- /proc, /sys, /run, /dev — read-only synthetic trees except /dev/null and /dev/zero accept writes that are discarded, and /dev/shm/<name> accepts writeFile / readFile / unlink for in-memory named segments (see POSIX declared profile <../docs/architecture/POSIX_DECLARED_PROFILE.md>). Other pseudo writeFile / unlink / chmod paths fail as documented there. Linux-shaped synthetic files include /proc/cpuinfo, /proc/meminfo, /proc/loadavg, /proc/net/dev, /proc/diskstats, and data-backed /proc/self/cgroups, /proc/net/tcp, /proc/net/udp (session / swarm / quota hints; stable columns where practical). /proc/bare_os/ (stable aliases + index.json schema 8, listing Pear/Bare operator JSON from Capability words 611 such as pear_stage_pointer.json, bare_module_resolution.json, pear_doctor_state.json, bare_boot_phase_map.json, …, plus syscalls.json (schema 8; stock booter caches JSON until warm read-cache invalidation), process_table.json (schema 7: PGID/SID-style fields, parentName, signalRouting, initd binding), metrics.prom, protomux.json (schema 2 RPC pool / backpressure hints), /proc/bare_os_quotas, /proc/bare_os_resources, /proc/bare_os_features, /proc/bare_os_session_stats, /proc/bare_os_swarm, /proc/bare_os_replication, /proc/bare_os_manifest_hints, /proc/bare_os_peer_health, /proc/bare_os_staging_slot, /proc/bare_os_snapshot_hints, /proc/bare_os_provenance, /proc/bare_os_pear_ipc_registry, /proc/bare_os_initd_dag, /proc/bare_os_initd_graph, /proc/bare_os_pear_trust, /proc/bare_os_rlimits, /proc/bare_os_hdms_health, /proc/bare_os_metrics_live (and /proc/bare_os/metrics_live.json), /proc/bare_os/metrics.prom (OpenMetrics text for kernel counters), /proc/bare_os_extensions.json, /proc/bare_os_hdms_hints.json, /proc/bare_os_capabilities (and /proc/bare_os_capabilities.json), /proc/bare_os_bootstrap, /proc/bare_os_union, /proc/bare_os_seed_handshake, /proc/bare_os_virtual_registry, /proc/self/cgroups, /proc/self/exe, /proc/self/fd/02, /sys/class/net/lo, /sys/devices/virtual, /sys/fs/bare_os/build_id, */run/bare-os/virtual/, /run/bare-os/unit-journal/.ndjson, /run/bare-os/kernel-ext-reload.ndjson (append-only kernelExtReloadSchemaVersion lines when BARE_OS_KERNEL_EXT_D_HOT_RELOAD and ctx.bareOsReloadKernelExtDropinsSafe() run), and /dev/urandom (each readFile of urandom returns a bounded buffer; not suitable for cryptography unless BARE_OS_URANDOM_CRYPTO is left at default). Optional union write denials use BARE_OS_VFS_UNION_WRITE_DENY (see kernel extensions <../docs/reference/kernel-extensions.md>). With BARE_OS_VFS_WATCH_PSEUDO=1, vfs.watch may poll coalesced metrics_live and metrics.prom. With BARE_OS_VFS_WATCH_SWARM=1, vfs.watch may poll coalesced swarm / replication pseudo files. Use ctx.bareOsReadProcMetricsLive() for the same JSON as metrics_live without a VFS read. /bin/env supports -S / --env-file when BARE_OS_ENV_DASH_S=1. Shell ${…} v2 (##, %%, :=, basename /) requires BARE_OS_SHELL_PARAM_EXPANSION_V2=1 with param expansion enabled. V3 adds :? / :+ when BARE_OS_SHELL_PARAM_EXPANSION_V3=1. Gated local / read-only declare -r use BARE_OS_SHELL_LOCAL_DECLARE=1\\\\.\n- /tmp — writable on the personal drive under /.bare-os/tmp/<HOME-basename>/…, isolated like $HOME and /var/log.\n\n2.4 CHMOD (OCTAL AND SYMBOLIC)\n\n/bin/chmod accepts:\n\n- Octal modes (e.g. 644, 0755) — passed through to vfs.chmod (permission bits; type bits come from the existing entry).\n- Symbolic modes (e.g. u+rw, go-w) — a supported subset of POSIX symbolic chmod; see packages/bare-os-coreutils/src/chmod.js.\n\n/bin/chown and /bin/chgrp update metadata.bareOs on the personal drive via vfs.chown (same writable scope as chmod); root vs owner rules apply, but this is still a single-session runtime (not a multi-user host kernel).\n\n2.5 AUXILIARY READ-ONLY DRIVES (/MIRROR)\n\nWhen HDMS or the booter attaches extra Hyperdrives on disk.auxiliaryDrives, the VFS exposes them read-only under /mirror/aux0, /mirror/aux1, … (also listed in /proc/mounts as bare-os-auxN /mirror/auxN hyperdrive ro rows). ctx.bareOsListMirrorMounts() returns the same ordering and paths for scripts that avoid parsing mounts. This matches Holepunch mirror-drivestyle auxiliary read-through replication hints on the host; the guest surface stays read-only. This is optional; most images omit auxiliary drives.\n\n2.5.1 READ-THROUGH CACHE (/BIN, OPTIONAL /LIB/BARE)\n\nWith BARE_OS_VFS_BIN_CACHE=1, the booter keeps a bounded LRU of system-drive readFile results for */bin/. Add BARE_OS_VFS_LIB_BARE_CACHE=1 to extend the same warm path to /lib/bare/ (bundle resolution hot paths). Hit, miss, and per-prefix counters appear under warmReadCache in /proc/bare_os/metrics_live.json (and the coalesced ctx.bareOsReadProcMetricsLive() view) when the cache is enabled. After live replication or policy changes, call ctx.bareOsInvalidateWarmReadCaches(reason) (or rely on ctx.bareOsVfsBatchWrite when batch put paths touch bin/ or lib/bare/) so operators do not read stale bytes from warm entries. Reasons whose text includes replication also increment vfs.warm_read_cache_invalidate_replication for replication-path auditing. BARE_OS_VFS_WARM_CACHE_PREFIX_INVALIDATE=1 evicts /bin, /etc, /lib, /usr, or personal prefixes when replicated core lengths increase (see metrics_live.replicationLive.warmPrefixInvalidate). BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_REPLICATION=1 performs a full warm-cache clear via ctx.bareOsInvalidateWarmReadCaches('replication:core-length') on the same growth signal (surfaced under warmFullInvalidateOnReplication). Hyperswarm connection budgeting uses BARE_OS_SWARM_MAX_PEERS, BARE_OS_SWARM_MAX_CLIENT_CONNECTIONS, BARE_OS_SWARM_MAX_SERVER_CONNECTIONS, and BARE_OS_SWARM_MAX_PARALLEL (surfaced on /proc/bare_os/swarm connectionBudget and disk.os replication_operator_sketch schema 4). ctx.bareOsSyscall('nanosleep', { tv_sec, tv_nsec }) and bridge getsockopt/setsockopt (SO_KEEPALIVE, TCP_NODELAY) are documented in /proc/bare_os/syscalls.json (profile version BARE_OS_POSIX_PROFILE_VERSION* — POSIX declared profile <../docs/architecture/POSIX_DECLARED_PROFILE.md>, compatibility matrix <../docs/reference/compatibility-matrix.md>).\n\n2.6 COPY AND MOVE\n\n- cp — -R/-r recursive copy; follows the same marker convention (skips copying .bareos_empty as a separate “file” where appropriate).\n- mv — Hyperdrive has no atomic rename; the general case is copy-tree + vfs.rm on the source. A single regular file to a non-directory destination uses a two-phase write (stage as *.bare-os-mv-tmp. in the resolved destination directory, write destination, remove stage, unlink\\\\ source) so a failed destination write does not remove the source (see POSIX declared profile <../docs/architecture/POSIX_DECLARED_PROFILE.md>).\n\n3. SHELL LISTS, PIPELINES, AND BUILTINS (PACKAGES/BARE-OS-BOOTER/LIB/SHELL.JS)\n\nInteractive REPL (TTY): when BARE_OS_SKIP_REPL is off and BARE_OS_FISH ≠ 0, the booter uses a Fish-style line editor with tab completion (commands, flags from /share/man/man.json, paths, kill/wait targets, env vars, and optional ctx.bareOsRegisterCompleter hooks), ghost history hints, and per-user history on the personal drive. Canonical detail: Shell completion and REPL editor <../docs/reference/shell-completion-and-repl-editor.md>. The /bin/sh utility only executes script files via execLine (same language as this interactive shell); it is not the REPL itself — see man bare-os-shell vs man sh. Shell operator tokenization (including ;;, ;&, |&, >&) is centralized in shell-lex.js and summarized in shell-grammar.md <../docs/reference/shell-grammar.md>; roadmap status lives in shell-roadmap-features.json <../docs/data/shell-roadmap-features.json>.\n\nTop-level syntax: the line is split on ; into separate lists (semicolons inside compound blocks do not end the outer statement). if then [ else ] fi uses the same && / || / pipeline rules inside the condition and each branch; the condition is true when the last evaluated command in that &&/|| list exits 0. *while\\_ list; do list; done and for name in words *;\\\\ do list; done repeat the body while respecting BARE_OS_SHELL_LOOP_MAX. case word in pattern) list ;; … esac matches the first pattern (token-safe); patterns support | alternation and fnmatch-style \\\\_, ?, and […] (excluding | branches handled separately). Branch count is capped by BARE_OS_SHELL_CASE_MAX_BRANCHES. Each list is an AND-OR chain: pipelines separated by && or ||, evaluated left-to-right with POSIX-style short-circuiting (ctx.exitCode — treat missing as 0). Within a pipeline, |* connects stages as before (simulated stdin between utilities).\n\nBackground / jobs (subset vs SUSv4): a trailing & on a top-level list runs that list asynchronously (microtask). jobs lists recent jobs (including Stopped when suspend-job was used); fg awaits the selected (or latest) job; wait awaits one job by id (or %id) or all background jobs; with BARE_OS_SHELL_POSIX_MODE=1, wait -n waits for any pending job (Promise.race) and exits 0 when none remain. bg clears Stopped and re-queues the job (logical resume within the single-session runtime). trap -l / trap -p / trap CMD SIG use ctx.shellTrapHandlers (delivery still maps through ctx.bareOsSendSignal for synthetic PIDs). This is not IEEE Std 1003.1 job control: there is no set -m monitor mode, no real process groups or SIGTSTP from the host kernel, and background jobs use jobControlModel: 'logical_no_fork' (see /proc/bare_os/process_table.json jobControlSemantics). Unsupported operations fail with explicit stderr messages (fg: no such job, wait: no such job, bg: no stopped jobs, …) rather than silent no-ops.\n\nHere-string / here-document: <<< word feeds the expanded word as stdin to the first command in the pipeline. A line that ends with << DELIMITER (optional '...' / \"...\" around the delimiter) collects following lines from readLine('> ') until a line equals DELIMITER, then uses that body as stdin (*$\\\\* expansion is skipped for a single-quoted delimiter name).\n\nPipeline limits: simulated pipe capture is bounded. The stock booter seeds BARE_OS_SHELL_STREAMING=1, BARE_OS_SHELL_STREAMING_MULT=2 (alias BARE_OS_STREAMING_MULTIPLIER), BARE_OS_PIPELINE_MAX_BYTES (512MiB), and BARE_OS_PIPELINE_MAX_LINES (2000000) when the host does not set them, so the default session targets a ~512MiB effective byte cap (after multiplier and BARE_OS_PIPELINE_ABS_MAX_BYTES, default 512MiB) and 2M lines. Tier-1 getconf statics are aligned to the same base sizes; live Tier-2 values follow vfs.env. BARE_OS_PIPELINE_MAX_STAGES defaults to 32. Effective capture is also capped by BARE_OS_PIPELINE_ABS_MAX_BYTES and BARE_OS_PIPELINE_ABS_MAX_LINES after the streaming multiplier. With streaming on, effective byte and line caps are multiplied by BARE_OS_SHELL_STREAMING_MULT (stock 2 unless overridden; max 16). Exceeding a limit fails the pipeline with exit status 1 and an error on stderr. Current caps and FIFO stats also surface in /proc/bare_os_quotas and ctx.bareOsRuntimeCaps.quotas. With BARE_OS_SHELL_PIPEFAIL (env or set -o pipefail / clear with set +o pipefail), a pipelines status reflects the first failing stage (bash-like); default is POSIX-like last stage only. With BARE_OS_SHELL_PIPESTATUS=1, after each pipeline completes, vfs.env.BARE_OS_PIPESTATUS holds space-separated stage exit codes (inspect-only PIPESTATUS analog).\n\nErrexit (subset): BARE_OS_SHELL_ERREXIT=1, set -e, or set -o errexit stops further top-level ;-separated commands after a non-zero exit (set +e / set +o errexit clears). The same flag now applies *inside\\\\* if then / else bodies and while / for loop bodies between semicolon-separated lists (POSIX-style: a failing command aborts the rest of that compound body). Condition expressions in if / while still evaluate without errexit stopping between predicate lists. This remains a declared subset, not full Issue 7 sh.\n\nNounset (subset): BARE_OS_SHELL_NOUNSET=1, set -u, or set -o nounset makes expansion of unset simple parameters an error (shell: unbound variable: NAME, exit 1). $? and positional digits use normal lookup; clearing via set +u / *set +o nounset\\\\*.\n\nCommand substitution (bounded): when BARE_OS_SHELL_CMDSUBST=1, words may contain $(…) (one level balanced, nesting depth capped). The inner line runs via execLine; console.log output becomes the substituted text, trimmed to BARE_OS_SHELL_CMDSUBST_MAX_BYTES (default 8192). This is not full POSIX sh command substitution.\n\nCaptured stdout (ctx.bareOsStdoutCaptured): stages whose console.log output is captured into the simulated pipe (or into a > / >> redirect) run with bareOsStdoutCaptured: true on the shallow ctx clone passed to runBinCommand (see bareOsPipelineChildCtx in shell.js). ls uses this to print one name per line in short format, similar to GNU ls when stdout is not a terminal, so grep, sort, and wc receive one entry per line. Each console.log call still becomes one output line (trailing newline added by the shell capture).\n\nexecLine nesting: host BARE_OS_EXEC_MAX_DEPTH (default 64) caps recursive execLine calls (e.g. cron, ExecStartPost); exceeding it fails with a clear error. Optional BARE_OS_EXEC_LINE_BUDGET_MS rejects further top-level execLine when cumulative session wall time exceeds the budget (surfaced in /proc/bare_os_resources).\n\nParameter expansion (subset): when BARE_OS_SHELL_PARAM_EXPANSION=1, words may use ${VAR:-word} (default if unset or empty) and *${VAR#prefix}\\\\* (remove shortest prefix; prefix length bounded).\n\nParameter expansion V2 / V3: with BARE_OS_SHELL_PARAM_EXPANSION_V2, ${VAR:=word}, prefix/suffix stripping (##, #, %%, %), and related forms apply as documented in the environment appendix <../docs/reference/environment-and-posix-appendix.md>. With BARE_OS_SHELL_PARAM_EXPANSION_V3, ${VAR:+word} and ${VAR:?word} are enabled. Regression coverage lives in packages/bare-os-booter/test.js (expandWord param expansion v2 / v3).\n\nPathname expansion (globbing): after $ expansion and optional $(…), unquoted words are matched against the VFS using *`, ?, and […] (fnmatch-style). Matches are sorted in UTF-8 byte order. Single-quoted and double-quoted words suppress globbing (so echo '' prints a literal asterisk). Hidden dot-names are excluded unless BARE_OS_DOTGLOB=1. BARE_OS_GLOB_MAX_MATCHES (default 4096) caps total matches per word; BARE_OS_GLOB_IGNORE is a colon-separated list of patterns to skip. With BARE_OS_STRICT_POSIX=1, a glob that matches nothing fails the command (exit 1); otherwise the shell passes the pattern through literally (bash-like). set -f / set +f toggle BARE_OS_SHELL_NOGLOB in the session environment (disable or re-enable globbing). Optional brace expansion {a,b} on unquoted segments requires BARE_OS_SHELL_BRACE_EXPANSION=1. Tilde: ~ / ~/…expand to$HOME`* when the leading segment is unquoted.\n\nStderr redirection: 2> / 2>> redirect console.error for the command (same byte/line caps as stdout when captured for a pipe). 2>&1 merges stderr into the stdout capture stream so both appear in the simulated pipe input for the next stage (and in a stdout redirect when it is the last command in the list).\n\nLast exit status: after each full execLine evaluation, vfs.env.BARE_OS_EXIT_STATUS is updated (decimal string). Words expand $? and ${?} from that value (default 0 if unset), similar to POSIX *$?\\\\*.\n\nBeyond alias, unalias, cd, export, login, logout, exit:\n\n- unset — Removes variables from vfs.env; refuses readonly names (POSIX-style error).\n- readonly — Marks names readonly; readonly NAME=value sets and locks. Blocks export and leading assignments on readonly keys.\n- umask — With an argument, sets env.UMASK (octal string); without, prints the current mask (default 022 if unset).\n- set — set -f / set +f toggle noglob; set -e / set +e and set -o errexit / set +o errexit toggle BARE_OS_SHELL_ERREXIT; set -u / set +u and set -o nounset / set +o nounset toggle BARE_OS_SHELL_NOUNSET; set -o pipefail / set +o pipefail toggle BARE_OS_SHELL_PIPEFAIL. Unsupported set combinations still error with a clear message.\n- : — No-op (exit status 0).\n- command — -v / -V: prints builtin name or resolved PATH location via resolveBinInPath. Otherwise runs runBinCommand with the remaining words (external commands only for that path).\n- type — type NAME reports builtin versus resolved /bin/... path or not found.\n- read (optional, opt-in) — Disabled by default for compatibility; enable with BARE_OS_SHELL_READ_BUILTIN=1. When enabled, a bounded POSIX-style read reads one line from ctx.shellStdin, ctx.readLine, or an interactive REPL path; supports -r and IFS field split into named variables (default variable REPLY). Cap line length with BARE_OS_SHELL_READ_MAX_BYTES (default 65536, hard cap 2MiB). This is not full Issue 7 sh read (no here-doc read, no read -d).\n\n~/.barerc remains restricted ( export, alias, unalias, comments only) — see Chapter 4 <04-the-booter-runtime.md>.\n\n4. BOOTER CTX HELPERS\n\n- ctx.runBinCommand(argv) — same resolution as the shells external dispatch: host delegates (git, curl, wget, systemctl / bare-initctl / journalctl) run first (see HTTP: curl and wget <../docs/reference/http-curl-and-wget.md>), then explicit paths, then *.js in $PWD, then PATH on the system drive only. Used by /bin/time to run another utility and report wall time. The shell may set ctx.bareOsStdoutCaptured on the clone when stdout is captured (§3).\n- resolveBinInPath(ctx, name) in kernel-runner.js — used by command -v / type.\n- ctx.vfs.watch(logicalPath) — Hyperdrive-backed paths only; returns { watcher, destroy, … } when ctx.bareOsRuntimeCaps.features.vfsWatch is true (disable with host *BARE_OS_VFS_WATCH=0\\\\*).\n- ctx.bareOsBinWrite(Uint8Array|string) (optional) — raw output hook for NUL-terminated lines and binary-safe writes when host process.stdout.write is missing; used by printenv -0, find -print0, dirname -z, and tests (see bareOsEmitRaw in packages/bare-os-coreutils/lib/runtime.js).\n- ctx.bareOsIpc — in-memory FIFOs under /run/bare-os/ipc/<name>; when features.ipcRpcJson is true, pushJson, takeJson, and stats support bounded JSON envelopes (see bare-os-ipc.js). assignProcessGroup(channelName, pgid) / signalProcessGroup(pgid, signal) provide a setpgid/killpg analog for routing virtual signals across FIFO groups (*not\\\\* host OS process groups).\n- ctx.bareOsSubscribeBootEvent, ctx.bareOsEmitBootEvent, ctx.bareOsAwaitInitdUnits, ctx.bareOsSubscribeHdmsLifecycle — automation hooks (see Developer guide §2 <../developer-guide/02-the-context-object.md>).\n\n5. /BIN UTILITIES (CATALOG)\n\nSources: packages/bare-os-coreutils/src/<name>.js. Authoritative sorted list: packages/bare-os-coreutils/lib/commands.mjs (COREUTILS_COMMANDS), consumed by build.mjs. man(1) pages are kept in lockstep with that list: CI runs scripts/verify-man-coverage.mjs (every Tier-1 /bin name has merged JSON under kernel/share/man/ after npm run build -w bare-os-coreutils).\n\n5.1 FILESYSTEM AND LINKS\n\n> Key idea — mutate the personal tree: chmod, chown, touch, rm, and most writes target personal or HDMS paths; /bin on the system image stays read-only.\n\nWhen BARE_OS_VFS_UNION_PREFIXES overlays the personal drive on system paths, readlink checks the personal shadow (same as union readFile) before falling back to the system drive, so symlinks under *$HOME\\\\*-style unions resolve consistently.\n\n- mkdir — -p / --parents, -m MODE (octal; stored on .bareos_empty; directory lstat shows S_IFDIR with those bits). Errors include errno code when present (§2.2).\n- rmdir — Empty directories only (marker-aware).\n- rm — -r/-R/--recursive, -f/--force, -d/--dir (empty directory only), --.\n- cp — -R/-r/--recursive for trees; -u/--update, -v/--verbose, -p/--preserve (timestamps); -L/-P` symlink follow.\n- mv — Multi-source → directory; recursive directory moves via copy + delete.\n- ln — Symbolic links only (-s): hard links are not supported on Hyperdrive entries.\n- stat — -c / --format= with *%n %N %s %Y %A %U %G %u %g %F\\\\* (see source for full set).\n- readlink — -n; output via console.log (newline behavior may differ from GNU).\n- getfacl / setfacl — POSIX-style view/edit of advisory ACLs stored in synthetic sidecars (/.bare_acl.json next to the target paths directory; see kernel/etc/bare-os/vfs-sidecar-xattr-acl.example.json). setfacl updates JSON only; the VFS enforces advisory checks on open when ACL metadata is present.\n- basename — -a, -s / suffix operand.\n- dirname — Multiple paths; -z NUL-terminated output when host process.stdout.write exists.\n- mkfifo — /run/bare-os/ipc/NAME only; in-memory channel (readFile/writeFile/unlink`).\n- ls — -l -a -1 -t -S -r, --sort= (time, size, none), --format=single-column, --color= (always, never, auto); honors *LS_COLORS\\\\*. One name per line when stdout is captured (pipelines).\n- dircolors — -p, -b; BARE_OS_DIRCOLORS merges at theme apply.\n- theme — list, current, set, apply — presets; persists in *~/.barerc\\\\*.\n\n5.2 TEXT AND BINARY VIEWING\n\n> Key idea — engines, not forks: sed, awk, and grep run in-process JavaScript; large bodies live in *lib/-engine.js** prepended at build time.\n\n- cat — -n / -b, -A / -vET, - stdin operand; prefers host process.stdout.write when present (avoids extra log newline).\n- env — -i / --ignore-environment, NAME=value assignments, then utility via ctx.runBinCommand (temporarily swaps vfs.env / ctx.env).\n- touch — -a / -m, -d / -r; vfs.writeFile with explicit mtimeMs/ctimeMs` (no separate atime).\n- cut — -d delimiter, -f field list (numeric and ranges).\n- tr — -d delete set, or set1 set2 mapping (byte/char oriented).\n- od — Hex-ish dump (fixed width); not full POSIX od flag matrix.\n- tee — -a append; duplicates stdin to files and stdout.\n- sed — Large subset — see §6.\n- awk — Substantial interpreter — see §7.\n- grep — -F, -i, -v, -w, -x, -n, -c, -l, -o, -m, -r/-R with --include, --exclude, --exclude-dir (glob count capped by BARE_OS_GREP_FILTER_MAX, default 32), -A/-B/-C, --color=never / always / auto, -e, -f, etc.; JS RegExp (not PCRE / full GNU).\n- base64 — -d/--decode, -w line wrap; decode uses bareOsEmitRaw when console.log would corrupt binary.\n- base32 — RFC 4648 encode/decode; decode path same raw-output contract as base64.\n- basenc — --base16 (hex), --base32 (RFC-style), and --base64 encode/decode.\n- realpath — -m/--canonicalize-missing; prints vfs.resolveLogical.\n- sha256sum — GNU-style lines via globalThis.crypto.subtle.digest('SHA-256', …).\n- sha1sum, sha512sum — Same line format when subtle.digest supports SHA-1 / SHA-512.\n- sha384sum — Same line format via subtle.digest('SHA-384', …) when available.\n- sha224sum — Same line format using bundled lib/sha224.js (many runtimes omit SHA-224 in subtle.digest).\n- md5sum — Bundled lib/md5.js (no Web Crypto MD5).\n- sum — SysV default or -r BSD 16-bit checksum + 512-byte block counts.\n- uniq — -c, -d, -u on adjacent lines (sort input first for POSIX-style behavior).\n- paste — -d delimiter list, -s serial (one files lines joined per output row).\n- split — -l lines or -b bytes per chunk; output basename + POSIX-style multi-length az suffixes (aa…zz, then aaa, aab, …); max files BARE_OS_SPLIT_MAX_FILES ( getconf default 10000).\n- tac, rev — Reverse line order / reverse characters per line.\n- expand, unexpand — Uniform tab width (-t / -tN); spaces ↔ tabs.\n- fold — -w fixed column wrap (no word-aware reflow).\n- fmt — Simple paragraph reflow (-w); blank-line-separated paragraphs.\n- comm — Two sorted files; columns with -1/-2/-3` suppress.\n- join — -t, -1, -2 on sorted inputs; relational merge on join field.\n- pr — Minimal columnate / -n line numbers / -s separator.\n- yes — Repeated line until BARE_OS_YES_MAX_LINES ( getconf: default 100000); host may pass through from process.env.\n- shuf — In-memory shuffle; input line cap BARE_OS_SHUF_MAX_LINES (default 50000). Uses Math.random.\n- factor — Trial division; safe integers.\n- expr — Integers with *+ - / %, comparisons, string = / !=, and POSIX-shaped : (match length; pattern compiled as ECMA RegExp ^(?:…)\\\\, not strict BRE).\n- test / [ — File tests, FILE1 -nt FILE2 / -ot / -ef (mtimeMs, *dev/ino\\\\* when present).\n- tsort — Topological sort; exits 1 on cycles.\n- numfmt — --to=iec (1024) or *--to=si\\\\* (1000) human scales.\n\n5.2A TTY TEXT EDITOR (EDIT / NANO)\n\n- edit — Full-screen in-terminal editor over ctx.vfs: multi-line buffer, search / goto / save-as, optional syntax highlighting. Requires a TTY (stdin.isTTY in src/edit.js); exits with a clear error if stdin is not a TTY. On exit, the TUI leaves alternate-screen mode (?1049l) when enabled (default), restoring the pre-editor terminal view; set BARE_EDIT_NO_ALTSCREEN to any non-empty value to use a full clear (2J) instead on terminals where alternate-screen misbehaves. Source: src/edit.js with preamble lib/edit-ansi.js, edit-highlight.js, edit-buffer.js, edit-key-parse.js, edit-tui.js.\n- nano — Same built artifact as edit (build.mjs maps nano → src/edit.js and the same preamble). /bin/nano is installed for muscle memory; the default shell alias nano → edit (see defaultShellAliases in shell.js) makes nano invoke that binary. man edit and man nano describe flags and keys.\n\n5.2A0 GUEST TUI SDK (CTX.TUI)\n\n- tui — Inspect ctx.tui (version, TTY, size, theme). tui demo runs a sample full-screen app. Guest scripts use ctx.tui.run(model) (raw JS, no import). Fish is suspended for the session; the alternate screen is restored on exit. Disable with BARE_OS_TUI=0. See developer-guide ch.20 <../developer-guide/20-tui-and-sdk.md> and ctx-tui.md <../docs/reference/ctx-tui.md>.\n\n5.2A1 SESSION MONITOR (BARETOP)\n\n- baretop / btop — Full-screen htop-style terminal dashboard for session / operator state plus a logical process table from /proc/bare_os/process_table.json (schema 10 when optional per-row CPU / I/O / thread / RSS fields are populated — not host OS PIDs). Pulls /proc/bare_os/metrics_live.json ( schema 4 — replication live, kernel counters, warm cache, IPC, boot budgets, swarm lifecycle, embedded processTable when present, optional perProcessCpu / kernelCountersByJob when the booter adds them), ctx.bareOsReadProcMetricsLive, /proc/bare_os_resources / ctx.bareOsGetResourceStatus, pseudo /proc/meminfo / loadavg / cpuinfo, ctx.bareOsReadBareTopSnapshot (optional { lite: true } for a smaller batch; BARE_TOP_SNAPSHOT_LITE_AUTO may force lite after slow fetches), plus optional ctx.bareOsReadDelegateFairnessSnapshot, ctx.bareOsReadSubprocessBridgeSnapshot, ctx.bareOsHostStats, ctx.bareOsClipboardWrite, ctx.bareOsRenice (optional; renice UI degrades gracefully). *Default fourteen tabs:\\\\ overview (pinned HUD + scrollable sections; / filters section titles; ' then 19 / 0 jumps to the Nth visible section by scroll), processes (sort, R flips asc/desc, F follow PID, V tree / z collapse, regex filter /…/, invert env, tag =/ tagged-only%, F7/n renice, a action menu, E tab-only export, incremental per-row diff when enabled), initd, network, features, diagnostics, operator, pear, catalog, host, cpu, mem, disk. BARE_TOP_TAB_MERGE=netop drops the separate operator tab and folds a short operator summary into network. 19 select the first nine tabs in order; H labels host on wide strips; 0 selects the last tab (disk). Config: ~/.config/baretoprc or BARE_TOP_CONFIG_PATH (JSON, including keys remapping and optional prefs with BARE_TOP_PERSIST=1). r/F5 refresh burst; pause skips live tick until . step or refresh. Shell aliases top / btop → baretop. bareOsReadBareTopSnapshot may return metricsLiveText (same JSON as metrics_live.json) so the client can skip a duplicate read. Default line-diff terminal updates when TERM supports them; BARE_TOP_FULL_REDRAW=1 opts out. The composite health score treats operational replicationLive.stallHint values (no_peers, length_unavailable, ok) as non-fault. See src/baretop.js --help and man baretop for env. Source: src/baretop.js + lib/baretop-snapshot.js, lib/baretop-compose.js, lib/baretop-ui-helpers.js, lib/baretop-tui.js`\\\\*.\n\n5.2A1A OPERATOR PROC CATALOG (BARETOP PANELS)\n\nStable paths are also listed under /proc/bare_os/ in packages/bare-os-booter/lib/vfs.js. The snapshot batch keys (keep aligned with BARE_TOP_SNAPSHOT_PROC_ENTRIES in lib/baretop-snapshot.js and bareOsReadBareTopSnapshot in packages/bare-os-booter/index.js) include: index.json, version, host_os.json, debug.json, session_stats, quotas, capabilities (+ .json), seed_handshake, bootstrap, provenance, snapshot_hints.json, staging_slot, peer_health, pear_ipc.json, pear_ipc_health.json, pear_trust.json, replication, replication_backpressure.json, swarm, sync_window.json, clock.json, hdms_health.json, hdms_hints.json, dht_status.json, udx_extended.json, ipc_backpressure.json, delegate_red.json, git_delegate_stats.json, kernel_program.json, git_lfs_pointer_stats.json, worker_budget.json, sandbox_profile.json, rlimits.json, extensions.json, initd_dag.json, boot_graph.json, boot_budget_summary.json, process_table.json, syscalls.json, metrics.prom, protomux.json, security_posture.json, process_io.json, process_threads.json, process_maps.json. Missing nodes show N/A per panel rather than failing the whole TUI.\n\n5.2A1B CONTRIBUTORS — BARE VS NODE BUILTINS\n\n/bin utilities are concatenated bundles evaluated as AsyncFunction — they must not static-import node:crypto, node:module, or other node: builtins Pear/Bare cannot resolve from a pear:// image. Use ctx.vfs, JSON.parse, and ctx.b4a only inside baretop. For background on the Bare module stack (bare-crypto, bare-module, etc.), see the Holepunch holepunch-repos tree (e.g. docs/05-BARE-RUNTIME.md) in a local Pear workspace; paths vary by checkout.\n\n5.2B HTTP CLIENTS (CURL / WGET)\n\ncurl and wget are booter-delegated CLIs first, not coreutils engines. They implement Fetch-based subsets of the familiar tools. The drive-resident /bin/curl and /bin/wget scripts call ctx.bareOsRunCurlCli / ctx.bareOsRunWgetCli (always present on stock booters) so BARE_OS_DELEGATE_ALLOW can exclude host delegation while keeping the same fetch implementation. If those ctx hooks are absent (prehistoric booter), the utilities fail closed with exit 127 and an explicit upgrade message — they are not silent no-ops.\n\n- Delegation order, fetch resolution, policy env — Reference — HTTP: curl and wget <../docs/reference/http-curl-and-wget.md>.\n- Flag parity — CLI_PARITY.md <../packages/bare-os-booter/CLI_PARITY.md>.\n- Online help — Chapter 10 — Manpages <10-manpages-and-online-help.md> (man curl, man wget).\n- Security / allowlists — Developer guide — Security and trust <../developer-guide/09-security-and-trust.md>.\n\n5.3 DISCOVERY AND MEASUREMENT\n\n> Key idea — bounded automation: find -exec, xargs, yes, and shuf carry hard caps so runaway scripts cannot allocate unbounded memory; see getconf -a and environment appendix <../docs/reference/environment-and-posix-appendix.md>.\n\n- find — -maxdepth, -mindepth, -depth, -name / -iname, -path, -regex (matches full path as a JavaScript regex), -type f/d/l, -empty, -exec / -ok utility … {} … ; (requires ctx.runBinCommand; capped by BARE_OS_FIND_EXEC_MAX, default 64; -ok runs only when BARE_OS_FIND_OK=1), -print0 (uses host process.stdout.write when available).\n- du — -k for 1024-byte blocks; otherwise 512-byte units; -h human-readable byte totals; -s acknowledged (one total per operand, same as default here).\n- cksum — POSIX / Open Group CRC + length + name (matches common cksum on BSD/macOS for the same bytes).\n- printf — Subset of printf(1) conversions (%s, %d, %o, *%x\\\\*, etc.).\n- logname — Prints LOGNAME / USER / guest.\n- time — Times ctx.runBinCommand for the rest of the line; prints real to stderr.\n- timeout — timeout [-s SIG] DURATION cmd … — runs cmd with a wall-clock cap via AbortSignal when BARE_OS_FEATURE_ABORT_TIMEOUT is advertised; on timeout exits 124 (or 128+N after kill when --foreground and signal delivery is supported). See man timeout.\n- tail — -n, -c, + offsets, -f/--follow ( vfs.watch when enabled, else poll; BARE_OS_TAIL_F_POLL_MS, BARE_OS_TAIL_F_MAX_ROUNDS); stdin and multi-file -f not supported.\n- head — -n, -c, -NUM.\n- sort — -n, -r, -u, -f, -k / -t, -c / -C (check ordered input), -s (stable), -o FILE (output path; place before operands), - stdin operand; clustered flags (e.g. -nru).\n- wc — -l, -w, -c (default: all three); - stdin.\n- date — -u, +FORMAT subset (%Y %m %d %H %M %S %s %z %a %b, *%%\\\\*).\n- test — -eq/-ne/-lt/-le/-gt/-ge (signed integers), -h/-L, -f/-d/-e, -z/-n, string = / *!=\\\\*.\n- df — Synthetic 1K-blocks row for Bare (-h human-readable); not real block devices. Optional scale hint from /proc/bare_os_quotas. /proc/bare_os_resources statvfs is schema 3: Hyperdrive byte accounting plus optional hostStatfs (bare-fs 4.8+ statfs() frsize) overlaying f_bsize / f_frsize. Use --help for usage (-h is not help).\n- truncate — -s SIZE absolute length only; pads with zeros when growing.\n- unlink — Single operand; vfs.unlink.\n- install — [-m MODE] SOURCE DEST — copy one file and optional chmod.\n- sync — No-op success (no host flush hook).\n- dir, vdir — Delegate to ctx.runBinCommand(['ls','-C',…]) / *['ls','-l',…]\\\\*.\n- arch — PROCESSOR_ARCHITECTURE, MACHINE, or BARE_OS_ARCH; else unknown.\n- groups — GROUPS env or primary GROUP.\n- hostid — Eight hex digits from HOSTID or hash of BARE_OS_SESSION_ID.\n- nproc — Count processor: lines in /proc/cpuinfo or BARE_OS_NPROC override. --all accepted (same count here).\n- uptime — /proc/uptime and /proc/loadavg when present.\n- users, who — Session USER / LOGNAME; who prints a minimal table from env.\n\n5.4 GETCONF AND XARGS (BARE SUBSETS)\n\n- getconf — getconf NAME prints a value from a fixed static table plus live vfs.env overrides for cap names (PATH_MAX, _POSIX_VERSION, *BARE_OS_PIPELINE_, BARE_OS_FIND_EXEC_MAX, BARE_OS_XARGS_MAX_PROCS, BARE_OS_KERNEL_EXT_D_HOT_RELOAD, BARE_OS_VFS_HYPERBLOBS_DEDUP, …). getconf -a prints all known names (each name then value on the following line). Unknown names exit 1**.\n- xargs — Reads bareStdin(ctx); splits on whitespace or -0 null bytes; runs await ctx.runBinCommand([utility, …initial, …batch]) per batch. Flags: -0/--null, -n N/--max-args N (capped), -P N (parallel batches; cap min(N, BARE_OS_XARGS_MAX_PROCS, 32), default env cap 8), -I repl (substitute in utility argv; implies -n 1 unless -n is set). Hard limits on stdin size, token count, args per run, and invocations per process—see *src/xargs.js\\\\*.\n\nAll other commands from build.mjs not listed here follow the summaries in Chapter 6 <06-kernel-and-binaries.md> or their *src/.js\\\\ files.\n\nExports for tests / tools: splitTokensBySemicolon, splitTokensByAndOr (same module as tokenize).\n\n6. SED IMPLEMENTATION\n\nEngine: packages/bare-os-coreutils/lib/sed-engine.js (prepended before src/sed.js at build time).\n\nCLI: sed supports -n, -E/-r, -z (NUL-separated “lines”; max records BARE_OS_SED_NULL_MAX_RECORDS, default 100000), multiple -e, -f, and operands as files or stdin.\n\nBroadly supported: line addresses (#, $, /re/, ranges, first~step), s/// with common flags (g, p, digit), y///, d/D/p/P/n/N, hold space (h/H/g/G/x), b/t/:label, q, r/w, =, l, a/i/c (backslash forms). r reads paths via a preload scan + vfs.readFile; w appends via vfs.writeFile.\n\nNot guaranteed: full GNU sed extensions, every POSIX corner case (e.g. all s flag combinations, locale collation), or s delimiter edge cases identical to every implementation.\n\n7. AWK IMPLEMENTATION\n\nEngine: packages/bare-os-coreutils/lib/awk-engine.js (prepended before src/awk.js).\n\nCLI: -F, -v name=value (implemented as a synthetic BEGIN assignment), -f, program string, then optional input files (stdin if none).\n\nBroadly supported: BEGIN/END, regex and expression patterns, print/printfwith redirection to files,if/while/for/for (i in arr), arrays, next/exit, many builtins (length, substr, index, split, sprintf, sub/gsub, match, int, tolower/toupper, rand/srand), ENVIRON[\"VAR\"], user-defined *function\\\\*.\n\nKnown limitations: / in expressions is always a regex literal in the lexer (division is ambiguous in real awk — use spaces or refactor); getline var < path reads the file once with line caching (sequential consumption; not identical to all host awk reopen semantics); nextfile skips the rest of the current input file (Issue 7shaped control flow; bounded like other loop rules); print to files is queued and flushed per statement batch — fine for typical scripts but not identical to every awk I/O timing. POSIX math builtins atan2, cos, sin, exp, log, sqrt are available alongside int, rand, srand. substr(s, start) without a length argument returns the suffix from start (Issue 7). Unary - is supported. Not gawk-compatible for extensions.\n\n8. COREUTILS BUILD: PREAMBLE MAP\n\nbuild.mjs <../packages/bare-os-coreutils/build.mjs> concatenates:\n\n1. lib/runtime.js\n2. Optional extra libs from the preamble map: md5sum → lib/md5.js, sed → lib/sed-engine.js, awk → lib/awk-engine.js, jq → lib/jq-engine.js, man → lib/man-render.js, ls / dircolors → lscolors bundles, edit / nano → *lib/edit-.js TUI stack, chat → lib/edit-ansi.js, edit-key-parse.js, edit-stream-read.js, chat-tui.js (TTY prefers ctx.tui.run; the edit-stream stack is the BARE_OS_TUI=0 fallback), irc → lib/irc-.js (Libera.Chat TLS TUI; ctx.tui.run + ctx.bareOsTlsConnect), summon → lib/summon-.js (text HTML/CSS browser; ctx.tui.run + ctx.httpFetch), dhttop / swarmmap / routeview / holepunch-view / swarmtop → the same edit-stream stack plus p2p-suite.js / p2p-suite-tui.js, agent → the same edit stream stack plus lib/agent-abort-polyfill.js, agent-text-polyfill.js, agent-helpers.js, agent-state.js, agent-sse-parse.js, agent-openai.js, agent-web-fetch.js, agent-tools.js, agent-tui.js (order is authoritative in build.mjs <../packages/bare-os-coreutils/build.mjs> preamble**)\n3. src/<cmd>.js (nano uses src/edit.js)\n\nThere is still no importin*src/\\.js — large utilities are vendored as plain script chunks in lib/\\\\.\n\n8.5 SHELL COOKBOOK (WITHOUT FULL POSIX SH)\n\nThe line shell does not support subshells, full sh grammar, or real background processes. Prefer these patterns:\n\n- Sequential steps — One execLine per line in rc / rc.d (trusted), or ; / *&&\\\\* in the REPL.\n- Capture output — Pipelines and VAR=$(command) (when BARE_OS_SHELL_CMDSUBST=1) instead of POSIX command groups.\n- Conditionals — Bounded if / fi (see §3); for complex logic, call a */bin\\\\* helper script on the system image.\n- Boot policy — denyExecLineBuiltins in boot.policy.json (v4) maps to BARE_OS_BOOT_POLICY_DENY_EXEC_LINE_BUILTINS to block specific builtins (e.g. login) on locked-down images.\n\n8.7 CAPABILITY WORD 8 — BARE-FS ERRNO ROWS, UNION WHITEOUT, FIFO METRICS\n\nStock docs add these guest-visible mappings and behaviors (bounded JSON / handbook only where noted):\n\n- ELOOP — Too many symlink hops when resolving a path on Hyperdrive-backed VFS.\n- ENOTEMPTY — Directory not empty on rmdir / rename that would clobber a non-empty tree.\n\nUnion mounts: document opaque vs transparent whiteout matrix when upper layers hide lower files; find -prune respects mount boundaries as in the kernel-extensions table.\n\nFIFO / /run: metrics schema v2 may include byte + message counts (operator-injected JSON); not a POSIX pipe implementation.\n\n/dev/zero: read coalescing cap is documentation-first for host-backed implementations.\n\n/bin/env -S: when BARE_OS_ENV_DASH_S=1, GNU-like split strings apply; see packages/bare-os-coreutils/src/env.js and kernel-extensions <../docs/reference/kernel-extensions.md>.\n\n9. WHERE TO READ NEXT\n\n- POSIX + P2P dashboard <../docs/README.md#posix--p2p-consolidated-dashboard> — profile, posix-dashboard.md <../docs/reference/posix-dashboard.md>, matrices, roadmap JSON.\n- Chapter 6 — Kernel and /bin summary <06-kernel-and-binaries.md>\n- Chapter 4 — Shell and VFS routing <04-the-booter-runtime.md>\n- Chapter 10 — Manual pages (man) and online help <10-manpages-and-online-help.md>\n- Booter reference §12.612.9 <../docs/reference/package-bare-os-booter.md> and coreutils §12.10 <../docs/reference/package-bare-os-coreutils-and-ci.md#1210-package-bare-os-coreutils> — file-level inventory\n- bare-os-coreutils README <../packages/bare-os-coreutils/README.md> — build and command contract\n\nNext: Chapter 10 — Manual pages <10-manpages-and-online-help.md>\n\nRelated: Kernel extensions <../docs/reference/kernel-extensions.md> · Handbook home <README.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","09","posix","utilities","shell","and","vfs","style","builtins","alignment"],"seeAlso":[{"name":"handbook-10-manpages-and-online-help","section":7},{"name":"handbook-08-git-on-bare-os","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/09-posix-utilities-shell-and-vfs.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-10-manpages-and-online-help","section":7,"title":"Chapter 10 — Manual pages (man) and online help","synopsis":["man 7 handbook-10-manpages-and-online-help","Handbook chapter (plain text from handbook/10-manpages-and-online-help.md)"],"description":"CHAPTER 10 — MANUAL PAGES (MAN) AND ONLINE HELP\n\nTime to read: about 10 minutes. Prerequisites: Chapter 6 <06-kernel-and-binaries.md> (coreutils build), Chapter 7 <07-operations-and-development.md>.\n\nBare OS ships a man(1)-style viewer backed by a JSON manual database on the system Hyperdrive, not troff, mandoc, or groff. This matches the projects model: utilities are AsyncFunction scripts, and documentation must load without a host typesetter.\n\nPURPOSE\n\n- Familiar UX: Users expect man ls, man -k pattern (apropos), and man -f name (whatis).\n- Shippable: Pages live at /share/man/man.json (staged from kernel/share/man/man.json), merged at build time from *packages/bare-os-coreutils/man/pages/.json**.\n- Verifiable: The build fails if any /bin command from lib/commands.mjs <../packages/bare-os-coreutils/lib/commands.mjs> lacks a page. Root pretest also runs scripts/verify-man-coverage.mjs against kernel/share/man/man.json so CI catches drift after catalog changes.\n\nSession environment: many boot knobs are *BARE_OS_** variables copied from the host (HTTP policy, IPC token/fan-out, TLS pin list, audit, boot trace, …). The canonical list is in developer-guide §2 — The context object <../developer-guide/02-the-context-object.md> and packages/bare-os-booter/CHANGELOG.md <../packages/bare-os-booter/CHANGELOG.md>.\n\nSECTIONS\n\n- 1 — User commands — every name in COREUTILS_COMMANDS, including man itself.\n- 1 — bare-os-shell — one manual for all interactive shell builtins (cd, export, …), so we do not maintain dozens of one-line stubs.\n- 7 — Handbook — every *handbook/.md file (including 00-preface.md, README.md, 01-introduction.md, …) is merged at build time as man(7) (POSIX “miscellaneous”). TOC: man handbook or man 7 bare-os-handbook (alias handbook). Per-file pages use names like handbook-00-preface, handbook-01-introduction, … mermaid** diagrams are omitted in the terminal view; open the Markdown in the repo for figures.\n- 7 — User manual — every *users-manual/.md file is merged the same way. TOC: man users-manual or man 7 bare-os-users-manual (alias user-manual). Chapters: man users-manual-01-what-this-is, … (The users(1) utility keeps that name; the manual hub is users-manual, not users**, to avoid a lookup clash.)\n- 7 — Developer guide — every *developer-guide/.md file is merged the same way. TOC: man devguide or man 7 bare-os-developer-guide (aliases developer-guide, devguide). Chapters: man devguide-01-two-runtimes-host-vs-image**, …\n- 7 — docs/ — every docs//.md file (architecture, ADRs, concepts, reference, …) is merged the same way. Hub: man docs or man 7 bare-os-docs (aliases documentation, bare-os-documentation). Per-file names mirror the path, e.g. man 7 docs-reference-package-bare-os-protocol, man 7 docs-concepts-p2p-swarm-and-protomux`*.\n\ngit is not a /bin script (it is delegated in the booter to git-cli.js), but it still has a section 1 page git in the same database.\n\nCLI SURFACE (/BIN/MAN)\n\n- man — Short usage and pointer to man -l.\n- man name — Show manual for name (any section if the name is unique, e.g. man ls or man handbook).\n- man 1 name / man 7 name — Require that section; fails if the page lives in another section (e.g. man 7 ls fails).\n- man -l — List every page under category headings (/bin, git/shell, handbook, user manual, developer guide, docs/), then name(section) alphabetically within each group.\n- man -k word — Apropos: pages whose keywords / title / name match word (substring, case-insensitive).\n- man -f name — Whatis: one-line name(section) - title for an exact name match.\n\nEnvironment\n\n- MANWIDTH — If set, wrap width for prose (clamped 40200); overrides terminal auto width. When unset and session stdout is a TTY with a column count, man uses that width. Otherwise COLUMNS is used when set; fallback default 72.\n\nExit status\n\n- 0 — Success (page shown or list empty for man -k with no matches).\n- 1 — Page not found or man.json missing on the system drive.\n- 2 — Invalid usage.\n\nJSON PAGE MODEL\n\nAuthoritative schema: packages/bare-os-coreutils/man/schema.json <../packages/bare-os-coreutils/man/schema.json>.\n\nEach man/pages/<name>.json describes one page:\n\n- name, section, title — NAME header.\n- synopsis — string array (usage lines).\n- description — multi-sentence DESCRIPTION.\n- options — { \"flag\": string, \"meaning\": string }[].\n- environment, files — optional string arrays.\n- exitStatus, diagnostics — optional string arrays.\n- seeAlso — { \"name\": string, \"section\": number }[].\n- bareOsNotes — optional string; POSIX / GNU divergence.\n- keywords — lowercase tokens for man -k.\n- aliases — optional alternate lookup names (e.g. sh-builtins → bare-os-shell).\n- stub — if true, man(1) adds a STATUS section stating the utility is intentionally bounded relative to Issue 7 (see BARE OS NOTES and handbook ch.9).\n- examples — optional array of { \"caption\"?: string, \"code\": string } (cheat.shstyle: short label + copy-paste command; code may use newlines for multi-line snippets). Rendered under an EXAMPLES heading after OPTIONS. bare-os-shell builtins may also carry per-builtin examples with the same shape.\n- descriptionMode — \"wrap\" (default) or \"preserve\". Handbook pages use preserve so line breaks and tables stay readable.\n\nman -k also indexes caption text from examples so searches like “clone” can surface git.\n\nThe merged man.json adds schemaVersion, generatedAt, pages, index (name → page index), and apropos (keyword → page indices) for fast lookup.\n\nBUILD PIPELINE\n\n1. npm run build -w bare-os-coreutils runs build.mjs, which calls scripts/build-man-db.mjs.\n2. build-man-db.mjs loads every man/pages/<cmd>.json for COREUTILS_COMMANDS, plus git.json and bare-os-shell.json, then merges prose from ingest-handbook-for-man.mjs, ingest-users-manual-for-man.mjs, ingest-developer-guide-for-man.mjs, and ingest-docs-for-man.mjs.\n3. ingest-handbook-for-man.mjs (see packages/bare-os-coreutils/scripts/ingest-handbook-for-man.mjs <../packages/bare-os-coreutils/scripts/ingest-handbook-for-man.mjs>) reads *handbook/.md, converts Markdown to plain text for the terminal: headings become spaced title lines, list items flatten, inline code/backticks and links are stripped to readable text, fenced blocks indent as literal text except mermaid fences (omitted). Each file becomes one man(7)** page with auto keywords.\n4. ingest-users-manual-for-man.mjs, ingest-developer-guide-for-man.mjs, and ingest-docs-for-man.mjs apply the same conversion to *users-manual/.md, developer-guide/.md, and docs//.md`** (recursive), respectively.\n5. build-man-db.mjs validates the merged database, writes kernel/share/man/man.json, and mirrors to packages/bare-os-seeder/kernel/share/man/man.json.\n6. The seeder stages kernel/ recursively; kernel/share/... → /share/... on the system drive (packages/bare-os-seeder/index.js <../packages/bare-os-seeder/index.js>).\n7. /bin/man reads ctx.drive.get('/share/man/man.json'). There is no embedded fallback in v1 — the image must include the merged file.\n\nRELATIONSHIP TO HELP\n\n/bin/help prints a compact one-screen list of builtins and /bin names (including edit and nano)—fast orientation. man is the long-form reference: flags, exit status, EXAMPLES, and merged handbook, user manual, developer-guide, and docs/ pages.\n\nUser story: help when you are exploring; man <cmd> before scripting; man handbook, man users-manual, or man 7 handbook-00-preface when you want narrative docs inside the guest.\n\nAuthoring split: change help when builtins or binary names change; change man JSON when command behavior changes; change handbook/, users-manual/, developer-guide/, or docs/ for prose—rebuild coreutils to refresh man(7).\n\nAUTHORING WORKFLOW\n\n1. Narrative docs — edit *handbook/.md, users-manual/.md, developer-guide/.md, or docs/*/.md`**; run a coreutils build so ingest runs.\n2. Per-command pages — add or edit packages/bare-os-coreutils/man/pages/<name>.json.\n3. Run npm run build -w bare-os-coreutils (or node packages/bare-os-coreutils/scripts/build-man-db.mjs).\n4. New /bin commands: add name.json, lib/commands.mjs entry, and src/<name>.js — the build fails until the page exists.\n\nFUTURE WORK\n\n- Interactive PAGER (keypress paging on TTY) beyond PAGER=bare-slice section breaks.\n- man -w is implemented (prints /share/man/man.json); per-page anchor paths remain future work.\n- HTML export for Pear / browser shells.\n- Section 7 overview pages and i18n.\n\nRelated: Chapter 9 <09-posix-utilities-shell-and-vfs.md> · Handbook home <README.md> · CHANGELOG <../packages/bare-os-booter/CHANGELOG.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","10","manpages","and","online","help","manual","pages","man"],"seeAlso":[{"name":"handbook-11-kernel-program-and-research","section":7},{"name":"handbook-09-posix-utilities-shell-and-vfs","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/10-manpages-and-online-help.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-11-kernel-program-and-research","section":7,"title":"Chapter 11 — Kernel program, ecosystem, and non-goals","synopsis":["man 7 handbook-11-kernel-program-and-research","Handbook chapter (plain text from handbook/11-kernel-program-and-research.md)"],"description":"CHAPTER 11 — KERNEL PROGRAM, ECOSYSTEM, AND NON-GOALS\n\nTime to read: one pass. Prerequisites: Preface <00-preface.md>, Chapter 3 — Protocol <03-protocol-and-disk.md>.\n\nWHY THIS CHAPTER EXISTS\n\nBare OS sits at the intersection of Pear (packaging and desktop hosts), Bare (embedded-first JS runtime and modules), and Holepunch stacks (Hyperswarm, HyperDHT holepunch, Hyperdrive). This chapter names research directions and intentional limits so distributors know what the project will and will not become.\n\nECOSYSTEM MAP (LOCAL CLONES)\n\nIf you maintain a checkout of holepunch-repos <https://github.com/holepunchto> (or a mirror), useful adjacencies include:\n\n- Runtime / packaging — pear-runtime, pear-stage, pear-ipc — Host OTA, IPC, staging\n- Bare modules — bare-subprocess, bare-daemon, bare-kit, bare-storage — Optional delegates, worklets, storage policy\n- Transport — hyperdht (holepunch docs), hyperswarm, udx-native — NAT, relays, stream behavior\n\nNothing in that tree is the Bare OS kernel: our kernel remains /boot/init.js on the system Hyperdrive, executed by the booter.\n\nCAPABILITY WORDS (PROTOCOL)\n\nCapability words bits … bits11 (see packages/bare-os-protocol <../packages/bare-os-protocol/README.md>) advertise what the stock booter and seeder implement. BARE_OS_SEED_CAP_STRICT requires the seeder to cover every non-zero stock word. Capability words 611 checklists: docs/reference/feature-roadmap.md <../docs/reference/feature-roadmap.md>. Kernel program (100-item backlog): developer-guide/kernel-program.md <../developer-guide/kernel-program.md>; program batch B table lives in the same reference doc. Governance: developer-guide/adr/001-kernel-feature-bits-governance.md <../developer-guide/adr/001-kernel-feature-bits-governance.md>. Word 10 extends Pear/Bare-aligned seed RPCs, /proc JSON for that generation, boot policy v10, extension registry schema 7, telemetry schema 9 / OTel 7 / audit 7, and the Node→Bare module map in developer-guide/node-to-bare-modules.md <../developer-guide/node-to-bare-modules.md>. Word 11 continues that posture with hypercorePackHrpcLifecycle gates (boot policy v11), extension registry schema 8, and the eleventh-word operator /proc family.\n\nINTENTIONAL NON-GOALS\n\n- No hardware MMU kernel — no ring 0, no real fork; isolation is policy, caps, and host boundaries.\n- No full POSIX sh — line shell with bounded grammar; see Chapter 9 §8.5 <09-posix-utilities-shell-and-vfs.md>.\n- No single HTTP mirror as source of truth — image distribution is P2P-first; offline boot is optional LKG + local Corestore (BARE_OS_OFFLINE_LKG_BOOT).\n\nWHERE TO READ NEXT\n\n- Documentation home <../docs/README.md> — all trees, glossary, FAQ\n- Compatibility matrix <../docs/reference/compatibility-matrix.md> — versions in one place\n- Kernel extensions <../docs/reference/kernel-extensions.md> — feature / env / proc map\n- ADR 001 — Feature bit governance <../developer-guide/adr/001-kernel-feature-bits-governance.md>\n- Handbook home <README.md>\n\n_Experimental research software, not a production OS. Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","11","kernel","program","and","research","ecosystem","non","goals"],"seeAlso":[{"name":"handbook-12-p2p-stack-and-posix-boundaries","section":7},{"name":"handbook-10-manpages-and-online-help","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/11-kernel-program-and-research.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"handbook-12-p2p-stack-and-posix-boundaries","section":7,"title":"Chapter 12 — P2P-native stack vs POSIX boundaries","synopsis":["man 7 handbook-12-p2p-stack-and-posix-boundaries","Handbook chapter (plain text from handbook/12-p2p-stack-and-posix-boundaries.md)"],"description":"CHAPTER 12 — P2P-NATIVE STACK VS POSIX BOUNDARIES\n\nBare OS ships a guest-facing POSIX-like layer (utilities, shell subset, logical fds, synthetic /proc) on top of a P2P-first substrate: Hyperdrive replication, Hyperswarm discovery, Protomux channels, and optional blind relay paths. This chapter maps those worlds so integrators know what is compatibility sugar and what is distributed systems reality.\n\nNON-GOALS (DECLARED)\n\nThe authoritative list lives in POSIX declared profile <../docs/architecture/POSIX_DECLARED_PROFILE.md> and the placeholder / closure baseline <../docs/audit/PLACEHOLDER_BASELINE.md>. In short: no real fork, no host kernel threads inside the guest image, no FIFOs on Hyperdrive (in-memory IPC and synthetic pipes instead), errno not bit-identical to Linux, and replication / /proc JSON treated as observability, not strong linearizability proofs.\n\nWhen a behavior is intentionally partial, the POSIX compliance matrix <../docs/reference/posix-compliance-matrix.json> and /proc/bare_os/syscalls.json schema carry the machine-readable contract.\n\nP2P STACK (WHAT ACTUALLY MOVES BYTES)\n\n| Concern | Primary mechanism | Guest-visible hints |\n| System image | Hyperdrive over Corestore; seed MBR + Protomux bare-os-v1 | /proc/bare_os/replication, metrics_live.replicationLive, ctx.bareOsReadReplicationOperatorJson |\n| Personal data | Second Hyperdrive (home, vault, /.bare-os) | Union paths, identity session, vault blobs |\n| Wire multiplexer | Protomux on encrypted streams | /proc/bare_os/protomux.json, extension registry when enabled |\n| Discovery / NAT | Hyperswarm + HyperDHT (host) | /proc/bare_os/swarm, dht_status.json, optional dhtAddressClassAllowlist env |\n| Operator RPC | Seed RPC allowlist + optional hrpc bridge | KERNEL_CONTRACT seed + ctx.bareOsHrpcRequest built-ins |\n\nOffline-first remains the default story: local Corestore opens the system drive; swarm fills gaps and pushes updates. Eventual consistency is honest: warm read caches, replication snapshots, and append-driven invalidation (when BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_APPEND is on) are best-effort hygiene, not a distributed filesystem guarantee.\n\nPOSIX SURFACE (WHAT SCRIPTS SHOULD RELY ON)\n\n- Utilities under /bin follow documented subsets; man and the matrix record gaps.\n- Shell — see Chapter 9 — POSIX utilities, shell, and VFS <09-posix-utilities-shell-and-vfs.md>; set -e / BARE_OS_SHELL_ERREXIT implement a narrow errexit subset, not full Issue 7 sh.\n- Syscalls — logical ctx.bareOsSyscall operations mirror /proc/bare_os/syscalls.json; socket bridge behavior is env-gated and bounded.\n\nCLOSURE CRITERIA\n\n- P0 / P1 items in PLACEHOLDER_BASELINE.md <../docs/audit/PLACEHOLDER_BASELINE.md> should be implemented or explicitly reclassified with a doc link.\n- P3 bundle/vendor markers are governed by *verify-bundle- and upstream bare-os-bare-libs rebuilds — not ad-hoc edits in kernel/lib/bare/bundles/**.\n\nFor maintainer automation (pretest generators, bundle order, seeder parity), see scripts/README.md <../scripts/README.md> — Maintainer: pretest generator runbook.\n\nSEE ALSO\n\n- Chapter 3 — Protocol and disk <03-protocol-and-disk.md>\n- Chapter 4 — The booter runtime <04-the-booter-runtime.md>\n- Chapter 9 — POSIX utilities, shell, and VFS <09-posix-utilities-shell-and-vfs.md>\n- Architecture: data flow <../docs/reference/architecture-data-flow.md>","descriptionMode":"preserve","options":[],"keywords":["handbook","bare-os","documentation","narrative","chapter","12","p2p","stack","and","posix","boundaries","native"],"seeAlso":[{"name":"handbook-11-kernel-program-and-research","section":7},{"name":"man","section":1}],"bareOsNotes":"Generated at build time from handbook/12-p2p-stack-and-posix-boundaries.md. Diagrams in ```mermaid blocks are omitted; open the Markdown in the repo for figures.","listCategory":"handbook"},{"name":"bare-os-developer-guide","section":7,"title":"Bare OS developer guide — index and reading order","synopsis":["man 7 bare-os-developer-guide","Developer guide chapter (developer-guide/README.md)"],"description":"BARE OS — DEVELOPER GUIDE\n\nWelcome. This guide is the how-to companion for writing software on and for Bare OS: scripts that run inside the replicated system image, utilities under /bin, the session kernel, and—when you need full JavaScript modules—the host Pear packages that implement the booter and seeder.\n\nThe documentation home <../docs/README.md> maps every tree plus the shared glossary <../docs/glossary.md>, FAQ <../docs/faq.md>, troubleshooting router <../docs/troubleshooting.md>, and contributing to docs <../docs/CONTRIBUTING-DOCS.md>. The handbook <../handbook/README.md> explains _why_ the system is shaped the way it is (Hyperdrive, two drives, swarm boot). The docs/reference <../docs/reference/README.md> inventory lists _where_ every file lives. The user manual <../users-manual/README.md> helps people run the system before they extend it. This guide focuses on _what you actually type_: entrypoint signatures, the ctx object, why import does not work in drive-resident scripts, and how the coreutils build turns sources into /bin commands.\n\nThis project is experimental research software. APIs described here follow the current code in packages/bare-os-booter and packages/bare-os-coreutils; when in doubt, read the cited paths.\n\nctx API versions: see packages/bare-os-booter/CHANGELOG.md <../packages/bare-os-booter/CHANGELOG.md> for bareOsCtxApiVersion history and booter alignment. TypeScript-oriented authors can reference lib/bare-os-ctx.d.ts <../packages/bare-os-booter/lib/bare-os-ctx.d.ts>.\n\nFeature-bit governance: ADR 001 — Kernel feature bit governance <adr/001-kernel-feature-bits-governance.md>.\n\nCapability map: docs/reference/kernel-capabilities-index.md <../docs/reference/kernel-capabilities-index.md>.\n\nContract checks: changing bareOsCtxApiVersion or stock kernel feature bits should keep scripts/verify-ctx-api-feature-bits.mjs green (invoked from root pretest).\n\nArchitecture contract (boundaries): docs/architecture/KERNEL_CONTRACT.md <../docs/architecture/KERNEL_CONTRACT.md> — booter vs guest image, disk.os RPC, boot step IDs.\n\nKernel source set: docs/reference/kernel-extensions.md <../docs/reference/kernel-extensions.md> — first-party paths (kernel/init.js, kernel/lib/boot, built /bin) vs vendored kernel/lib/bare/bundles (Holepunch IIFEs), CI allowlists, and seeder parity. Hand-authored code must stay free of incomplete markers; bundles are gated by verify-bundle-markers.mjs, verify-bundle-throws.mjs ( new Error messages with not implemented / abstract-base-class semantics — see docs/audit/bundle-throw-allowlist.json <../docs/audit/bundle-throw-allowlist.json>), and sanitize-bare-bundles.mjs. Prefer shrinking the throw allowlist via upstream bundle refreshes over silent drift.\n\nLocal Holepunch mirror: run npm run audit:holepunch-clones to refresh docs/audit/holepunch-clone-sync-report.json (schema 2), holepunch-lockfile-drift.json, and NDJSON summaries. The sync report lists every bare-module-manifest.json entry against BARE_OS_HOLEPUNCH_CLONES_ROOT (default ~/dev/pearcli/holepunch-repos/holepunchto_repos): gitHead, originMainHead, commitsBehindOriginMain, commitsAheadOfOriginMain (meaningful after git fetch origin main in each clone). goldenPathRows mirrors goldenPathRepos in docs/audit/holepunch-drift-repos.json (Bare runtime + Pear + core wire stack) for quick maintainer diff review — it is not a CI gate. Root pretest runs verify-holepunch-clone-drift.mjs only against repos[] in the same JSON (empty = no-op). Maintainers may set BARE_OS_HOLEPUNCH_DRIFT_TIER1=1 to check tier1Repos[] instead (hypercore / hyperdrive / hyperswarm / protomux / pear / pear-runtime / bare-fs / bare-process). Regenerate the maximal npm catalog with node scripts/gen-bare-holepunch-catalog.mjs (or npm run gen:bare-catalog), then npm run sync:bare-manifest — see scripts/README.md <../scripts/README.md>.\n\nON THIS PAGE\n\n- Who this is for <#who-this-is-for>\n- Maintainer cheat sheet <#maintainer-cheat-sheet-artifacts--verifiers>\n- Reading order <#reading-order>\n- Related docs <#related-docs>\n\nWHO THIS IS FOR\n\n- You want to drop a hello.js on your personal drive and run it from the shell without misunderstanding the execution model.\n- You plan to add or change a /bin utility and need the no-import contract and build steps.\n- You are modifying the booter or seeder Pear apps and need to separate “host ESM” from “in-image AsyncFunction.”\n- You are debugging async function run(ctx, argv) or start(ctx) and need a map of ctx.\n\nMAINTAINER CHEAT SHEET (ARTIFACTS → VERIFIERS)\n\n| What you touch | Responsibility | Root check |\n| packages/bare-os-coreutils/lib/commands.mjs <../packages/bare-os-coreutils/lib/commands.mjs> | Tier-1 /bin names, man.json coverage | verify-man-coverage.mjs, verify-doc-tier1-count.mjs (via pretest) |\n| packages/bare-os-coreutils/build.mjs <../packages/bare-os-coreutils/build.mjs> | Emit kernel/bin/*, man merge | npm run build -w bare-os-coreutils |\n| kernel/lib/boot/ <../kernel/lib/boot/>, kernel/lib/init/ <../kernel/lib/init/> | Init bundle sources | bundle-kernel-init.mjs, verify-init-bundle-recipe.mjs |\n| kernel/ <../kernel/> vs packages/bare-os-seeder/kernel/ <../packages/bare-os-seeder/kernel/> | Byte-identical mirror | verify-kernel-seeder-parity.mjs |\n| packages/bare-os-booter/lib/bare-os-ctx-api.js <../packages/bare-os-booter/lib/bare-os-ctx-api.js> | BARE_OS_CTX_API_VERSION | verify-ctx-api-feature-bits.mjs, verify-compat-matrix.mjs, gen-ctx-client-helper.mjs |\n| docs/reference/compatibility-matrix.md <../docs/reference/compatibility-matrix.md> | Version table for releases | verify-compat-matrix.mjs, verify-doc-contracts.mjs |\n| docs/reference/posix-compliance-matrix.json <../docs/reference/posix-compliance-matrix.json> | POSIX profile linkage | verify-posix-compliance-matrix.mjs, gen-posix-dashboard.mjs |\n\nFull script index: scripts/README.md <../scripts/README.md>. Gate everything with npm run pretest before pushing doc or contract edits.\n\nREADING ORDER\n\n- 01 — Two runtimes: host vs in-image <01-two-runtimes-host-vs-image.md> — Pear/Node packages vs Hyperdrive JS evaluated with AsyncFunction; trust boundaries.\n- 02 — The context object (ctx) <02-the-context-object.md> — vfs, drive, console, identity hooks, execLine, runBinCommand, …\n- 03 — Kernel: /boot/init.js <03-kernel-boot-init.md> — async function start(ctx); readline loop; calling the shell.\n- 04 — User scripts and PATH resolution <04-user-scripts-and-path.md> — run(ctx, argv), shebangs, *.js in cwd, ./ paths, /bin.\n- 05 — Modules and import <05-modules-and-imports.md> — Why ESM does not apply to in-image scripts; bundling and alternatives.\n- 06 — Extending /bin (coreutils) <06-extending-bin-coreutils.md> — commands.mjs, build.mjs, preamble, man pages.\n- 07 — Apps beyond the shell <07-apps-beyond-the-shell.md> — P2P App Store (/bin/appstore), guest Pear (/bin/pear), HDMS mounts; initd, cron, git.\n- 20 — Guest TUI (ctx.tui) <20-tui-and-sdk.md> — TEA apps, widgets, forms, VFS filepicker; tui inspector.\n- 08 — Testing and debugging <08-testing-and-debugging.md> — npm test, Brittle, Pear dev, common failure modes.\n- 09 — Security and trust <09-security-and-trust.md> — System vs personal drive; eval boundaries.\n- 10 — Glossary and FAQ <10-glossary-and-faq.md> — Quick definitions; frequent questions.\n- 11 — Kernel + Pear cookbook <11-kernel-pear-cookbook.md> — Boot allowlist, timers, socket IPC, vfs.watch, HDMS hooks, Git-in-Pear, release metadata.\n- 12 — Bare modules and Pear ecosystem <12-bare-modules-and-pear-ecosystem.md> — ctx.bare, manifest, drive bundles, Holepunch bare-* mirror vs guaranteed keys.\n- 14 — How to add a seed RPC <14-how-to-add-seed-rpc.md> — Registry, channel wiring, booter policy, tests, and docs.\n- 15 — How to add a /proc/bare_os node <15-how-to-add-proc-node.md> — VFS wiring, snapshot alignment, tests, and schema docs.\n- 16 — How to add a /bin utility <16-how-to-add-bin-utility.md> — Build, man pages, POSIX matrix, seeder parity, and tests checklist.\n- 17 — How to add a shell builtin <17-how-to-add-shell-builtin.md> — Parser/executor/doc/test checklist for builtins.\n- 18 — How to add a shell grammar feature <18-how-to-add-shell-grammar-feature.md> — Grammar-first workflow (fixtures, fuzz-lite, perf guardrails).\n- Holepunch contributor track <13-holepunch-contributor-track.md> — practical task map from Holepunch repos to Bare OS command, proc, and policy work.\n- 13 — Privacy, telemetry, and PII <13-privacy-telemetry-pii.md> — Scrub lists for NDJSON / OTel mirrors; non-secret posture.\n- Node → Bare module map <node-to-bare-modules.md> — Guest-safe replacements for *node: built-ins (bare-crypto, bare-module**, …).\n- bare-boot vs kernel phases <bare-boot-kernel-phase-alignment.md> — Conceptual map: Holepunch bare-boot stages vs stock kernel/init.js.\n- Kernel program (governed expansion) <kernel-program.md> — Governance, boot hooks, /proc/bare_os/kernel_program.json, Bare stack pointers, 200-item roadmap batches.\n- Naming conventions <naming-conventions.md> — First-party vs vendored trees, ctx / env / proc naming.\n- Naming migrations <naming-migrations.md> — Legacy aliases and deprecation windows for boot hooks and policy keys.\n- Architecture decision records (ADRs) <adr/README.md> — Contract decisions and templates.\n- Kernel doctor / kernel-explain conventions <kernel-explain-and-doctor-conventions.md> — Structured diagnostic output.\n\nRELATED DOCS\n\n- Handbook home <../handbook/README.md>\n- User manual <../users-manual/README.md>\n- Chapter 4 — Booter runtime <../handbook/04-the-booter-runtime.md>\n- Chapter 6 — Kernel and binaries <../handbook/06-kernel-and-binaries.md>\n- Chapter 7 — Operations and development <../handbook/07-operations-and-development.md>\n- Chapter 9 — POSIX utilities and shell <../handbook/09-posix-utilities-shell-and-vfs.md>\n- Chapter 11 — Kernel + Pear cookbook <11-kernel-pear-cookbook.md>\n- Chapter 12 — Bare modules and Pear ecosystem <12-bare-modules-and-pear-ecosystem.md>\n- Holepunch contributor track <13-holepunch-contributor-track.md>\n- bare-os-coreutils README <../packages/bare-os-coreutils/README.md>\n- bare-os-booter README <../packages/bare-os-booter/README.md>\n\n_Open source under Apache-2.0. Owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company — see LICENSE <../LICENSE>._","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","bare","os","index","and","reading","order"],"seeAlso":[{"name":"devguide-01-two-runtimes-host-vs-image","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","aliases":["developer-guide","devguide"],"listCategory":"devguide"},{"name":"devguide-01-two-runtimes-host-vs-image","section":7,"title":"Chapter 1 — Two runtimes: host (Pear/Node) vs in-image (AsyncFunction)","synopsis":["man 7 devguide-01-two-runtimes-host-vs-image","Developer guide chapter (developer-guide/01-two-runtimes-host-vs-image.md)"],"description":"CHAPTER 1 — TWO RUNTIMES: HOST (PEAR/NODE) VS IN-IMAGE (ASYNCFUNCTION)\n\nIf you only remember one thing from this guide, remember this: Bare OS runs two different kinds of JavaScript, and they follow different rules.\n\nTHE CONFUSION IN ONE SENTENCE\n\nYou might paste a file into your home directory on the personal Hyperdrive that starts with import fs from 'node:fs' and expect it to run like a Node script. It will not. That file is loaded as a string and executed with the JavaScript AsyncFunction constructor—not as an ES module. There is no module graph, no import resolution, and no automatic node_modules on the drive.\n\nThe booter and seeder Pear packages, by contrast, are normal ESM projects: they use import, npm dependencies, and Pear bundling. They run on the host and _host_ the environment that evaluates in-image code.\n\nWhen the bare-os npm module is available on that host, the booter may attach a read-only ctx.bareOsHostStats snapshot (loadavg, cpus, networkInterfaces, …) and write /proc/bare_os/host_os.json (schema 2, including bare-os 3.9+ and optional bare-posix fields)—still not a general “run Node in the image” escape hatch; see Chapter 2 <02-the-context-object.md>.\n\nMENTAL MODEL: WHO LOADS WHOM\n\n- Host code lives under packages/bare-os-booter/, packages/bare-os-seeder/, etc. It is trusted in the sense that you built or installed it; it opens Corestore, Hyperswarm, Hyperdrive, and constructs ctx.\n- In-image code is bytes on a drive (/boot/init.js, /bin/cat, ~/mytool.js). The booter reads those bytes as UTF-8 strings and passes them to new AsyncFunction(...) (see kernel-runner.js <../packages/bare-os-booter/lib/kernel-runner.js>).\n\nIN-IMAGE EXECUTION (THE ASYNCFUNCTION CONTRACT)\n\nTwo entry shapes matter:\n\n- async function start(ctx) — /boot/init.js on the system drive — ctx — runKernelFromSource wraps the source and calls start(ctx)\n- async function run(ctx, argv) (optional for user scripts) — /bin/ always; or a .js file resolved from the shell — ctx, argv (string array) — runScriptFromSource runs the file body, then awaits run(ctx, argv) if defined\n\nThe booter injects ctx and argv. Kernel start is required; for shell scripts, top-level statements may stand alone, or you may define run like /bin utilities. Top-level import is invalid in that evaluated string because the engine is not loading an ES module—it is compiling a function body.\n\nShebang lines (#!/usr/bin/env bare) are stripped before compile (stripShebang <../packages/bare-os-booter/lib/kernel-runner.js>) so the first token the parser sees is valid JavaScript.\n\nHOST EXECUTION (PEAR / NODE PACKAGES)\n\nWhen you edit packages/bare-os-booter/index.js, you are writing normal JavaScript for Node or Bare under Pear:\n\n- Use import Hyperdrive from 'hyperdrive'.\n- Add dependencies in package.json.\n- Use async I/O against real host APIs.\n\nWeb Encoding globals: some Bare/Pear builds do not define global TextEncoder / TextDecoder. Booter and in-image code should use b4a for UTF-8 instead (e.g. b4a.from(str, 'utf8'), b4a.toString(buf, 'utf8')), matching curl-cli.js <../packages/bare-os-booter/lib/curl-cli.js>. Relying on new TextEncoder() in booter lib/*.js can break at runtime (for example when statting or reading pseudo files under /proc or /sys).\n\nThis code creates ctx and passes it into the kernel. It does not run inside the simulated /bin environment unless you explicitly call runBinCommand(ctx, argv) with the same ctx the shell uses.\n\nTRUST: SYSTEM DRIVE VS PERSONAL DRIVE\n\n- The system drive is the replicated OS image: /boot, /bin, /etc, /share. You should treat its contents as integrity-checked by replication from peers you chose to trust (same discovery key / topic as the rest of the project).\n- The personal drive holds $HOME, /.bare, user files, crontab, etc. It is writable by the session. User scripts you write live here by default.\n\nA script you place in ~/exploit.js is your code; the booter will still AsyncFunction-evaluate it with full ctx power. That is convenient and dangerous—see Chapter 9 <09-security-and-trust.md>.\n\nHOST SOURCE POLICY (BARE-FIRST)\n\nPear-bundled booter and seeder runtime sources under packages/bare-os-booter/lib/ and packages/bare-os-seeder/lib/ must stay resolvable on Bare as well as Node: CI runs scripts/verify-pear-no-static-node-import.mjs <../scripts/verify-pear-no-static-node-import.mjs>, which rejects from 'node:…' imports, require('node:…'), and import('node:…') in those trees (with path-based exceptions). Use #host-fs, #host-path, and #host-fs-promises from package imports instead of bare fs / path specifiers. The only deliberate node:module usage today lives in bare-os-boot-manifest-sig.node.js (Node default entry for boot manifest verification); the bare export uses bare-os-boot-manifest-sig.bare.js. For guest-visible behavior, prefer Holepunch *bare-** modules per Node → Bare module map <node-to-bare-modules.md>.\n\nWHEN TO USE WHICH RUNTIME\n\n- Add a new /bin command shipped with the OS image — In-image pattern: coreutils src/*.js + build (Chapter 6)\n- One-off automation in your home directory — In-image script (top-level and/or optional run); no import (Chapters 45)\n- Change how networking, HDMS, or the REPL works — Host booter package (ESM)\n- Publish or replicate the system image — Host seeder package\n\nSEE ALSO\n\n- Chapter 2 — The context object <02-the-context-object.md>\n- Handbook — Booter runtime <../handbook/04-the-booter-runtime.md>\n- Handbook — Kernel and binaries <../handbook/06-kernel-and-binaries.md>\n\n← Developer guide home <README.md> · Context object → <02-the-context-object.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","01","two","runtimes","host","vs","image","chapter","pear","node"],"seeAlso":[{"name":"devguide-02-the-context-object","section":7},{"name":"bare-os-developer-guide","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/01-two-runtimes-host-vs-image.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-02-the-context-object","section":7,"title":"Chapter 2 — The context object (ctx)","synopsis":["man 7 devguide-02-the-context-object","Developer guide chapter (developer-guide/02-the-context-object.md)"],"description":"CHAPTER 2 — THE CONTEXT OBJECT (CTX)\n\nEvery in-image entrypoint—start(ctx) for the kernel or run(ctx, argv) for commands—receives a single ctx object assembled by the booter before runKernelFromSource or runScriptFromSource runs. This chapter maps the fields you can rely on, how they behave, and where they are defined in source.\n\nAuthoritative construction happens in packages/bare-os-booter/index.js <../packages/bare-os-booter/index.js> inside executeKernel, then a few fields are replaced or augmented when the REPL session is created (readLine, console, execLine, writeScreen).\n\nON THIS PAGE\n\n- Design goal <#design-goal>\n- Stable fields (typical session) <#stable-fields-typical-session>\n- Fields introduced during command execution <#fields-introduced-during-command-execution>\n- What is not on ctx <#what-is-not-on-ctx>\n- Minimal patterns <#minimal-patterns>\n\nDESIGN GOAL\n\nctx is the narrow interface between:\n\n- the host (Hyperdrive handles, swarm, identity, stdio adapters), and\n- unprivileged-looking session code (kernel loop, /bin utilities, user scripts).\n\nIt is intentionally not a full Node process object. Think of it as the “syscall table” for Bare OS userland.\n\nCanonical booter boot steps before the kernel runs: vfs → ctx → repl → initd → kernel_invoke — see KERNEL_CONTRACT <../docs/architecture/KERNEL_CONTRACT.md> and bare-boot-kernel-phase-alignment <bare-boot-kernel-phase-alignment.md>.\n\nSTABLE FIELDS (TYPICAL SESSION)\n\nThe following are set on ctx before the kernel starts (unless noted as overwritten later):\n\n- bareOsCtxApiVersion — String semver for the documented ctx contract (e.g. 1.10.0). Bump in bare-os-ctx-api.js <../packages/bare-os-booter/lib/bare-os-ctx-api.js> when you make breaking changes to stable fields.\n- bareOsRuntimeCaps — Frozen snapshot from bare-os-runtime-caps.js <../packages/bare-os-booter/lib/bare-os-runtime-caps.js>: ctxApiVersion, simulated pipeline limits (includes pipeline.envKeys for *BARE_OS_PIPELINE_, BARE_OS_PIPELINE_ABS_MAX_, streaming multiplier aliases), pseudoFsPaths, and features (including jobControl, shellHereString, bootReadyPseudoFs, bootEventSubscribe, kernelEventSubscribe, keyBrokerHandleSketch, vfsChown, auditLog, initdRequiresWants, seederRpcExtended, bareCtxModules, bareDriveBundles*, …).\n- bareOsPublishBootReady(patch) — Kernel-only: merge patch into the session boot-ready state exposed as /run/bare-os/boot.json and /run/bare-os/ready. The booter pre-seeds imageDigest, pearChannel, pearRelease from host env when set (see BARE_OS_IMAGE_DIGEST, BARE_OS_PEAR_CHANNEL, BARE_OS_PEAR_RELEASE, PEAR_CHANNEL).\n- bareOsSessionStats — Mutable { execLineCount, pipelineBytesTotal } mirrored in /proc/bare_os_session_stats.\n- bareOsBootStartedMs — Epoch milliseconds when the booter started building the session (used for synthetic /proc/uptime).\n- bareOsSkipRepl — true when BARE_OS_SKIP_REPL=1 (non-interactive stdin); kernels may shorten banners.\n- bareOsAdvertisedKernelCapabilityWords / bareOsSeedKernelCapabilityWords — Frozen maps of eleven uint32 masks (wire v2 semantic keys: primary, extendedSeedingPlatform, … hypercorePackHrpcLifecycle). Advertised values reflect stock masks minus env-disabled bits (e.g. crypto urandom); seed map mirrors last bare_os.capabilities handshake when present, else null. Always mask with >>> 0 when testing bits.\n- bareOsReadDelegateFairnessSnapshot() — Returns delegate inflight counts and per-minute rate-bucket sample (same data folded into /proc/bare_os/metrics_live.json schema 2).\n- bareOsReadSubprocessBridgeJobs() — Parses host BARE_OS_SUBPROCESS_BRIDGE_JOBS_JSON when the bridge is wired (hint-only; guest does not spawn).\n- bareOsReadSubprocessBridgeSnapshot() — Schema 2 object: jobs plus meta from BARE_OS_SUBPROCESS_BRIDGE_META_JSON (supportedSignals, cgroupRootHint, exitReasonCodes). Host BARE_OS_BARE_SUBPROCESS_BRIDGE / BARE_OS_BARE_SUBPROCESS_TIMEOUT_MS affect kernel-runner defaults for runBin when the bridge is enabled.\n- bareOsReadSnapshotHintsJson() — Same object as /proc/bare_os/snapshot_hints.json (seed RPC + optional bareOsSnapshotHandles on the interactive ctx), without a VFS read.\n- bareOsListMirrorMounts() — Lists /mirror/auxN paths for disk.auxiliaryDrives (read-only); aligns with /proc/mounts mirror rows for mirror-drive style workflows.\n- bareOsIsCtxMethodAllowed(name) — Boot policy v4: when BARE_OS_BOOT_POLICY_ALLOWED_CTX_METHODS is set, returns whether name is in the allow list (kernels should call before sensitive ctx use).\n- bareOsEmitIpcAudit(ev) — When BARE_OS_IPC_AUDIT=1, appends a JSON line to audit.log (e.g. from mkfifo).\n- bareOsEvaluatePeerAdmission(peerKeyHex, meta?) — Returns { schema: 2, verdict, … } using optional env gates (BARE_OS_PEER_DENYLIST_HEX, BARE_OS_PEER_REQUIRE_CAPS_JSON + meta.caps, BARE_OS_PEER_ALLOWLIST_HEX, BARE_OS_DHT_ADDRESS_CLASS_ALLOWLIST + meta.dhtAddressClass). With BARE_OS_PEER_ADMISSION_AUDIT_NDJSON, emits peer_admission on the event bus (16-hex key prefix only; optional BARE_OS_PEER_ADMISSION_AUDIT_RATE_MS). See environment appendix <../docs/reference/environment-and-posix-appendix.md>.\n- bareOsSystemRevision — Frozen { currentId, pendingId, slot } from host env (*BARE_OS_SYSTEM_REVISION_**) for Pear-style OTA hints.\n- bareOsRegisterSuspendHook / bareOsRegisterResumeHook — Register callbacks; bareOsInvokeSuspendHooks / bareOsInvokeResumeHooks run them (host may call around Bare.suspend / Bare.wakeup). The booter also registers bare-initd so units with stop/start paths run in reverse boot order on suspend and forward boot order on resume, aligned with the initd DAG.\n- bareOsRequestKernelReload() — Throws BARE_OS_KERNEL_RELOAD when BARE_OS_KERNEL_HOT_RELOAD=1 so the booter re-reads /boot/init.js.\n- bareOsRequestKernelProfileReload() — Throws BARE_OS_KERNEL_PROFILE_RELOAD when BARE_OS_KERNEL_PROFILE_WARM=1 (same booter loop as hot reload).\n- bareOsRunImageScript(path) — async — runs trusted JS from the system image; paths must be under /lib/bare-os/extensions/ (used by kernel.ext.d).\n- disk — Disk bundle used during boot (includes drives and helpers); advanced use\n- drive — System Hyperdrive (ctx.drive is the OS image: /bin, /boot, …)\n- personalDrive — Personal Hyperdrive (mutable per-user state; VFS maps $HOME to /.bare-os/home/<HOME-basename>/… and session /var/log to /.bare-os/var/log/<basename>/… so guest vs unlocked trees do not share the same keys)\n- vfs — Path layer: resolves logical paths, routes to system vs personal drive, implements mkdir, readFile, etc. See vfs.js <../packages/bare-os-booter/lib/vfs.js>\n- env — Shell environment object (HOME, PATH, USER, …), same object as vfs.env. Mutated by builtins (export, cd updates PWD, identity unlock updates user fields). After each execLine, BARE_OS_EXIT_STATUS holds the last commands exit code as a decimal string (POSIX $? parity); use $? or ${?} in shell words for expansion.\n- b4a — b4a module (byte helpers); used to convert Hyperdrive buffers to strings\n- bare (optional) — Frozen map of host-loaded (and optionally drive-bundled) npm modules for in-image use (*ctx.bare.b4a*, ctx.bare.protomux, …). Absent when BARE_OS_BARE_MODULES=0. See bare-module-manifest.json <../packages/bare-os-booter/lib/bare-module-manifest.json> and Chapter 12 <12-bare-modules-and-pear-ecosystem.md>.\n- topic — Topic key helper from protocol package (rarely needed in user scripts)\n- console — Initially the raw global; replaced with session-bound log/error that respect the REPL and fish-style UI\n- readLine — Placeholder async function; replaced with session readLine(prompt) that reads a line from stdin (or returns null when session ends). When the Fish-style editor attaches, ctx.bareOsRegisterCompleter(name, fn) / ctx.bareOsUnregisterCompleter(name) register async completion providers merged by the stock engine — see Shell completion and REPL editor <../docs/reference/shell-completion-and-repl-editor.md>.\n- writeScreen — REPL helper for screen-oriented output; starts as no-op, then wired\n- tui / sdk — First-party guest TUI framework (raw JS; no guest import). Attached after the REPL session exists unless BARE_OS_TUI=0. ctx.sdk.tui is the same object. Source lives under lib/tui/src/ and ships as /lib/bare-os/tui.js. See Chapter 20 <20-tui-and-sdk.md> and ctx-tui reference <../docs/reference/ctx-tui.md>. Inspector: /bin/tui.\n- runHdms(argv) — Entry for hdms CLI when HDMS controller is active\n- onIdentityUnlocked / onIdentityGuest — Hooks for HDMS lifecycle (bootstrap nodes, teardown)\n- requestBooterExit(code) — Ends the session from /bin/exit or equivalent\n- applyUnlock / applyRegister / applyLogin / applyLogout / saveVault — Identity and vault operations used by login, logout, savevault\n- shellAliases — Populated when the shell loads default or ~/.barerc aliases\n- bareOsApplyTheme() / bareOsListThemes() — Re-apply BARE_OS_THEME / LS_COLORS / BARE_OS_DIRCOLORS to vfs.env (including BARE_OS_COLOR_DEPTH downgrades for *BARE_OS_COLOR_). Used by /bin/theme** and documented for custom tooling (see bare-os-theme-presets.js <../packages/bare-os-booter/lib/bare-os-theme-presets.js>).\n- runBinCommand(argv) — Runs a command with the same resolution rules as the interactive shell (used by time, xargs, and similar)\n- registerKernelShutdownHook(fn) — Register an async or sync function to run when the REPL session ends, before stopBareInitd and initd disposers. Pair with registerBareInitdDisposer(fn) in bare-initd.js <../packages/bare-os-booter/lib/bare-initd.js> when you need teardown after shutdown hooks but still inside stopBareInitd (intervals, sync cleanup).\n- bareOsSubscribeBootEvent(fn) / bareOsEmitBootEvent(ev) — Subscribe to or emit structured boot lifecycle events (same shape as BARE_OS_BOOT_TRACE=ndjson records). Phase records carry lifecycleSchemaVersion and telemetrySchemaVersion set from stock BARE_OS_LIFECYCLE_SCHEMA_VERSION (see compatibility matrix <../docs/reference/compatibility-matrix.md> and kernel extensions <../docs/reference/kernel-extensions.md>).\n- bareOsSubscribeKernelEvent(fn) / bareOsEmitKernelEvent(ev) — Namespaced kernel event bus (e.g. topic: 'boot.phase', bootStage); also mirrored to diagnostics subscribers with source: 'kernel'.\n- bareOsAcquireKeyHandle(hint?) — Key-broker sketch returning an opaque handle string (no raw key material in guest).\n- bareOsSubscribeHdmsLifecycle(fn) — After HDMS activate / before deactivate, run callbacks with { kind, labels? }.\n- bareOsAwaitInitdUnits(names, timeoutMs) — Resolves when all listed initd units are active (polls getBareServiceRuntime); returns false on timeout.\n- bareOsGetResourceStatus() — Returns a plain object snapshot (pipeline limits, exec depth, IPC stats(), session counters, swarm peer count)—mirrors /proc/bare_os_resources. Session may include execLineWallMsTotal.\n- bareOsReadProcMetricsLive() — Returns the same object as reading /proc/bare_os/metrics_live.json (coalesced; interval from BARE_OS_PROC_POLL_MS).\n- bareOsRegisterVirtualFile(name, reader, opts?) — Registers /run/bare-os/virtual/<name> content; reader may be a function or { read }; may return string or Uint8Array (sync or async). Optional opts: etag, mime (default text/plain), ttlMs (optional cache hint). Gated by runtime cap virtualRegisterFiles.\n- bareOsSandboxRunScript(source, argv?, opts?) — Runs script source with a restricted ctx (personal-drive writes only; identity/virtual registration disabled). Respects raceWithAbortAndTimeout opts. Disable with BARE_OS_SANDBOX_SCRIPT=0. See Chapter 9 <09-security-and-trust.md>.\n- bareOsBootFileSha256Hex(buf) — sha256 hex for boot manifest checks (BARE_OS_BOOT_MANIFEST + /etc/bare-os/boot.manifest.json on the stock kernel).\n- bareOsRegisterBootStepHook(step, fn) / bareOsInvokeBootStepHooks(ev) — Canonical boot hooks around stock kernel/init.js stages; ev includes step / legacy phase, when (before / after), label. The step key may be * or before:rc style. Legacy bareOsRegisterBootPhaseHook / bareOsInvokeBootPhaseHooks remain aliases.\n- bareOsInvalidateVirtualFile(name) / bareOsUpdateVirtualFileMeta(name, patch) — Virtual files under /run/bare-os/virtual/; patch may update etag / version.\n- bareOsInvalidateWarmReadCaches(reason?) — Clears VFS warm read caches for /bin and optional /lib/bare rows; use after replication/image updates when cached bytes may drift. reason is optional and is mirrored in host telemetry/audit paths (for example identity-switch, replication:core-length).\n- bareOsRequestPearReload(opts?) — async — returns { requested, hint, env }; with { persistRequest: true } writes ~/.bare-os/pear-reload.request and may process.emit('bare-os:pear-reload', …) on Node.\n- bareOsVerifyBootManifestSignature(manifestBytes, signatureBytes, publicKeyHex?) — Ed25519 verify helper used when BARE_OS_BOOT_MANIFEST_SIGN=1; public key from arg or BARE_OS_BOOT_MANIFEST_PUBKEY_HEX.\n- bareOsRequestMirror(opts?) / bareOsExportPersonalSnapshot(opts?) — async host bridges returning { ok, hint }; on Node emit bare-os:mirror-request / bare-os:export-personal-snapshot.\n- bareOsPearIpcEmit(channel, payload) — boolean — forwards structured payload to the host when registered (bare-os:pear-ipc on Node). Align channel names with your pear-ipc <https://github.com/holepunchto/pear-ipc> consumer.\n- bareOsPearIpcRequest(channel, payload, opts?) — Promise<unknown> — correlates bareOsIpcReqId on payload; host must process.emit('bare-os:pear-ipc-response', { bareOsIpcReqId, result?, error? }) before opts.timeoutMs (default 30s).\n- bareOsEmitMirrorDriveHint(opts?) — Emits bare-os:mirror-drive-hint on the host with label, key, ts (mirror-drivestyle operator hint).\n- bareOsRegisterKernelExtensionRecord(rec) — Appends { dropin, script } for /proc/bare_os/extensions.json when the stock kernel loads kernel.ext.d scripts.\n- bareOsDiagnosticsSubscribe(fn) / bareOsDiagnosticsEmit(ev) — When BARE_OS_DIAGNOSTICS_SUBSCRIBE=1, subscribe to structured booter/kernel diagnostics events (dev-oriented).\n- bareOsHostStats (optional) — When the *bare-os* npm module loads on the host, a frozen snapshot: hostname, loadavg, cpus, networkInterfaces, optional memoryUsage, peerCount (swarm peers during session build), atMs. /proc/bare_os/host_os.json (schema 2) additionally surfaces bare-os 3.9+ fields when present (type, machine, endianness, availableParallelism, memory / CPU / resource-usage snapshots, userInfo / groupInfo) plus optional posix (uid / euid / gid / egid / groupCount) from bare-posix.\n- httpFetch (optional) — When the booter can build a policy-wrapped *fetch*, it sets this field; delegated curl / wget prefer resolveBareOsFetchFn, which uses ctx.httpFetch first, then ctx.bare.fetch (including /lib/bare/bundles merge, with .default unwrap), then globalThis.fetch. On hosts without native fetch, ensureBareFetchGlobals may install bare-fetch or bare-https. Optional HTTP allow/deny (BARE_OS_HTTP_ALLOWLIST, BARE_OS_HTTP_DENYLIST) and audit hooks when BARE_OS_AUDIT is on. In-guest /bin/agent uses the same ctx.httpFetch for OpenAI-compatible /chat/completions and for the web_fetch tool (allowlist every API and web_fetch target host). See HTTP: curl and wget <../docs/reference/http-curl-and-wget.md> and man agent.\n- bareOsHrpcRequest(service, method, payload) — async — stock HRPC bridge for versioned service.method routes (for example bare_os.pkg_index_get, vfs.readText). payload must be an object; non-stock routes are denied unless the host replaces this method or enables BARE_OS_HRPC_EMIT_UNLISTED. Optional BARE_OS_HRPC_ALLOWLIST_JSON restricts the stock table (see schema bare-os-hrpc-allowlist.schema.json <../docs/schemas/bare-os-hrpc-allowlist.schema.json>); env is documented in environment appendix §14 <../docs/reference/environment-and-posix-appendix.md#14-environment-variables-complete-list>. ctx.bareOsHrpcAllowlistProbe stays aligned with the same parser.\n\nKernel boot composition lives on the system image (/boot/init.js, /etc/bare-os/rc, /etc/bare-os/rc.d/, optional /etc/bare-os/rc.local, optional /etc/bare-os/kernel.d/ (same digit-prefix rules as rc.d), optional /etc/bare-os/profile / *rc.profile., /etc/bare-os/onboot), not on ctx—extend the image or hooks like registerKernelShutdownHook rather than adding boot fields to the context object. The booter seeds ctx.env from the host for BARE_OS_PIPELINE_ (including BARE_OS_PIPELINE_ABS_MAX_BYTES, BARE_OS_PIPELINE_ABS_MAX_LINES), BARE_OS_SHELL_STREAMING, BARE_OS_SHELL_STREAMING_MULT (alias BARE_OS_STREAMING_MULTIPLIER), BARE_OS_SHELL_CMDSUBST, BARE_OS_SHELL_CMDSUBST_MAX_BYTES, boot profile / audit / IPC / HTTP policy keys (BARE_OS_IPC_CHANNEL_MAX_BYTES, BARE_OS_IPC_MAX_CHANNELS, BARE_OS_POSIX_MQ_MAX_MSGS, BARE_OS_POSIX_MQ_MSG_BYTES, …), BARE_OS_VFS_WATCH, BARE_OS_VFS_MAX_OPEN, BARE_OS_VFS_UNION_PREFIXES, BARE_OS_VFS_UNION_WRITE_DENY, BARE_OS_VFS_BIN_CACHE, BARE_OS_IMAGE_DIGEST, Pear channel fields, BARE_OS_BOOT_MANIFEST, BARE_OS_BOOT_MANIFEST_SIGN, BARE_OS_BOOT_MANIFEST_PUBKEY_HEX, BARE_OS_BOOT_POLICY, BARE_OS_SANDBOX_SCRIPT, BARE_OS_SANDBOX_WORKER, BARE_OS_INITD_MAX_PARALLEL, BARE_OS_INITD_JOURNAL_MAX_LINES, BARE_OS_URANDOM_CRYPTO, BARE_OS_TELEMETRY_NDJSON, BARE_OS_TELEMETRY_OTEL_JSONL / BARE_OS_TELEMETRY_OTEL, BARE_OS_EXEC_LINE_BUDGET_MS / BARE_OS_TIMER_BUDGET_MS, BARE_OS_SEED_RPC_HANDSHAKE, BARE_OS_SEED_CAP_STRICT, BARE_OS_SEED_CAP_FAIL, BARE_OS_BLIND_BOOTSTRAP_URL, BARE_OS_BLIND_BOOTSTRAP_JSON, BARE_OS_MIRROR_READ_KEY, BARE_OS_FIND_EXEC_MAX, BARE_OS_YES_MAX_LINES, BARE_OS_SHUF_MAX_LINES, BARE_OS_SPLIT_MAX_FILES, BARE_OS_NPROC, TERM, COLORTERM, PEAR_CHANNEL, and the rest of the passthrough table in environment appendix §14 <../docs/reference/environment-and-posix-appendix.md#14-environment-variables-complete-list>; always sets BARE_OS_BOOT_PROFILE_RESOLVED and BARE_OS_SESSION_ID. When ctx.httpFetch handles curl, check optional init.bareOsCurlTls (insecure, caPem, pinnedSha256) for --cacert / -k* semantics.\n\nAfter createVfs <../packages/bare-os-booter/lib/vfs.js>, ctx.vfs.watch(logicalPath) returns a Hyperdrive watcher when BARE_OS_VFS_WATCH is not disabled. With BARE_OS_VFS_WATCH_PSEUDO=1, vfs.watch may also poll coalesced /proc/bare_os/metrics_live.json (interval from BARE_OS_PROC_POLL_MS). ctx.bareOsIpc exposes FIFO push/take (optional per-channel byte caps from BARE_OS_IPC_CHANNEL_MAX_BYTES), optional JSON-RPC pushJson/takeJson (max line size, optional RPC token), fanoutPublish/fanoutSubscribe, createDuplexBridge, duplexJsonRoundTrip (one JSON request / one JSON reply over a duplex side — useful for unit-to-unit or guesthelper protocols without pulling bare-rpc into /bin), assignProcessGroup/signalProcessGroup (synthetic setpgid/killpg analog for IPC routing), and stats (see bare-os-ipc.js <../packages/bare-os-booter/lib/bare-os-ipc.js>).\n\nWhen BARE_OS_KERNEL_EXT_D_HOT_RELOAD=1, the stock kernel may define ctx.bareOsReloadKernelExtDropinsSafe() to append-only load new kernel.ext.d scripts after boot (see handbook ch.6 <../handbook/06-kernel-and-binaries.md>).\n\nInitd / long-running services: prefer duplexJsonRoundTrip or pushJson/takeJson for structured messages with byte limits already enforced by IPC options. A dedicated bare-rpc dependency is optional on the host or in ctx.bare if you need richer framing; the stock image documents the FIFO-level building blocks only.\n\nAfter createKernelReplSession <../packages/bare-os-booter/lib/repl-session.js> returns:\n\n- ctx.execLine(line, opts?) runs a full shell line (tokenize, builtins, pipelines, /bin resolution). Optional opts: { signal?: AbortSignal, timeoutMs?: number } (deadline for the shell pipeline work).\n- ctx.readLine(prompt, opts?) prompts and reads user input; same optional opts for abort/timeout.\n- ctx.runBinCommand(argv, opts?) passes through abort/timeout to the delegated command runner.\n- ctx.vfs.readFile(path, opts?) and ctx.vfs.writeFile(path, buf, opts?) accept signal/timeoutMs in opts (writeFile merges with executable).\n- ctx.console is session-scoped.\n\n/run/bare-os/boot.json (via bareOsPublishBootReady) may include booterStages / legacy booterPhases: booter milestones (vfs, ctx, repl, initd, kernel_invoke) in addition to kernel stages / legacy phases from the stock kernel/init.js <../kernel/init.js>. subsystems.kernel.bootStages (and legacy bootPhases) list { label, bootStage } for each completed kernel boot stage, and subsystems.kernel.programProc may include schema: 2, programVersion: 2, bootDryRun.\n\nFIELDS INTRODUCED DURING COMMAND EXECUTION\n\nWhen the shell runs an external command (or a pipeline stage), it may pass a shallow clone of ctx with extra fields:\n\n- shellStdin — String body for simulated stdin (pipelines and < redirection)\n- bareOsStdoutCaptured — true when this commands stdout is captured into the simulated pipe or a > / >> redirect (see bareOsPipelineChildCtx in shell.js <../packages/bare-os-booter/lib/shell.js>). ls uses this to print one name per line, matching common GNU behavior for non-terminal output.\n- exitCode — Utilities set ctx.exitCode for conditions (test, grep, …); the shell uses it for &&, logical OR lists, and ; sequencing (see shell.js <../packages/bare-os-booter/lib/shell.js>)\n\nAlways use the ctx passed into run, not a global, so pipeline stdin works.\n\nWHAT IS NOT ON CTX\n\n- No *require*, no import helper—the in-image script is not a CommonJS or ESM module.\n- No automatic fetch guarantee—depends on host/Pear globals; do not rely on it for portable /bin utilities.\n- process may exist on Bare/Node hosts but do not depend on it for utilities meant to run identically under Pear; use ctx.console and ctx.env.\n- bare-initd control is not a ctx method: use /bin/systemctl (or journalctl; bare-initctl is a legacy alias), which the booter handles via delegation—same pattern as git / curl.\n\nMINIMAL PATTERNS\n\nLog a message\n\n async function run(ctx, argv) {\n ctx.console.log('argv:', argv.join(' '))\n }\n\nRead a file via VFS\n\n async function run(ctx, argv) {\n const buf = await ctx.vfs.readFile(argv[1] || 'README.md')\n if (!buf) {\n ctx.console.error('missing file')\n return\n }\n ctx.console.log(ctx.b4a.toString(buf))\n }\n\nRun another command programmatically\n\n async function run(ctx, argv) {\n await ctx.runBinCommand(['ls', '-la', ctx.env.HOME || '.'])\n }\n\nSelective /lib/bare warm-cache drop after manifest edits\n\nWhen an operator writes a new bare-module-manifest.json payload (same bytes as would be stored on the system drive), evict only the bundled ctxKey rows instead of flushing all of /bin + /lib/bare:\n\n async function run(ctx, argv) {\n const manifestBuf = await ctx.vfs.readFile('/lib/bare/bare-module-manifest.json')\n if (manifestBuf && typeof ctx.bareOsInvalidateWarmReadCachesFromBareManifestJson === 'function') {\n ctx.bareOsInvalidateWarmReadCachesFromBareManifestJson(manifestBuf)\n }\n }\n\nOn Pear, ctx.bare is populated from the booters embedded bare-module-manifest.data.mjs, not from readFile of pear://… paths. Updating /lib/bare/bare-module-manifest.json on the system drive still affects VFS warm-cache eviction for /lib/bare/bundles/* via the helpers above, but operators must re-stage the booter after npm run sync:bare-manifest to change manifest metadata; when the booter runs as pear:, host import() skips bundle: true rows (drive bundles supply those keys). See Chapter 12 — Bare modules <12-bare-modules-and-pear-ecosystem.md> and PEAR-RUN.md <../docs/PEAR-RUN.md>.\n\nRead the Protomux extension registry mirror (when BARE_OS_PROC_PROTOMUX_EXTENSIONS_REGISTRY is enabled on the booter):\n\n async function run(ctx) {\n if (typeof ctx.bareOsReadProtomuxExtensionsJson !== 'function') return\n const reg = ctx.bareOsReadProtomuxExtensionsJson()\n ctx.console.log(JSON.stringify(reg, null, 2))\n }\n\nSEE ALSO\n\n- Chapter 3 — Kernel <03-kernel-boot-init.md>\n- Chapter 4 — User scripts <04-user-scripts-and-path.md>\n- Handbook — Identity and vault <../handbook/05-identity-vault-and-hdms.md>\n\n← Two runtimes <01-two-runtimes-host-vs-image.md> · Kernel → <03-kernel-boot-init.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","02","the","context","object","chapter"],"seeAlso":[{"name":"devguide-03-kernel-boot-init","section":7},{"name":"devguide-01-two-runtimes-host-vs-image","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/02-the-context-object.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-03-kernel-boot-init","section":7,"title":"Chapter 3 — Kernel: /boot/init.js and start(ctx)","synopsis":["man 7 devguide-03-kernel-boot-init","Developer guide chapter (developer-guide/03-kernel-boot-init.md)"],"description":"CHAPTER 3 — KERNEL: /BOOT/INIT.JS AND START(CTX)\n\nThe kernel in Bare OS is not a microkernel and not a scheduler. It is a JavaScript file on the system Hyperdrive at /boot/init.js, loaded as UTF-8 text and executed with runKernelFromSource in kernel-runner.js <../packages/bare-os-booter/lib/kernel-runner.js>. The booter expects a top-level:\n\n async function start(ctx) {\n // ...\n }\n\nThere is no argv at the kernel layer—the sessions command line is whatever the interactive user types after boot, handled through ctx.readLine and ctx.execLine.\n\nSource of truth: The file committed as kernel/init.js <../kernel/init.js> is the concatenation of sorted kernel/lib/boot/ <../kernel/lib/boot/> fragments, sorted kernel/lib/init/fragments/ <../kernel/lib/init/fragments/> (boot policy and kernel.ext.d loader), and kernel/lib/init/init-main.js <../kernel/lib/init/init-main.js>. Run npm run bundle:kernel after edits; use npm run verify:init-bundle or full pretest to confirm the bundle matches. Never edit init.js directly—changes would be overwritten and CI will fail. Layout: kernel/lib/init/STRUCTURE.md <../kernel/lib/init/STRUCTURE.md>.\n\nWHAT THE STOCK KERNEL DOES\n\nThe repositorys default kernel (kernel/init.js <../kernel/init.js>, generated as above) is intentionally small:\n\n1. Print /etc/os-release and optional /etc/motd (errors logged, not fatal).\n2. Optional profile snippet /etc/bare-os/rc.profile.<name> when BARE_OS_BOOT_PROFILE or the first line of /etc/bare-os/profile names a safe profile string.\n3. Run /etc/bare-os/rc, then sorted digit-prefixed */etc/bare-os/rc.d/, then optional /etc/bare-os/rc.local, then sorted digit-prefixed /etc/bare-os/kernel.d/ (same naming rules as rc.d), then optional /etc/bare-os/kernel.ext.d/.json** extension lists (see Handbook ch.6 <../handbook/06-kernel-and-binaries.md>).\n4. Print session banner (from /etc/bare-os/banner, /etc/issue, or a built-in hint).\n5. If ctx.bareOsSkipRepl: run every non-empty, non-# line from BARE_OS_ONBOOT (newline-separated), or if that env is unset, the same from /etc/bare-os/onboot in file order, via execLine; then fall through to the loop (where readLine returns null immediately).\n6. Loop forever:\n- line = await ctx.readLine('')\n- If line == null, break (session end / EOF).\n- Skip empty lines.\n- status = await ctx.execLine(line) inside try/catch (console.error on failure).\n- If status === 'exit', break.\n\nSet BARE_OS_BOOT_TRACE=1 (or true) in the environment to log boot phase timings on stderr as [boot] phase: Nms. Use BARE_OS_BOOT_TRACE=json for one JSON object per phase ({\"phase\":\"…\",\"ms\":n}) on stderr. The same phases are also delivered to ctx.bareOsSubscribeBootEvent subscribers as NDJSON-shaped objects.\n\nBARE_OS_BOOT_PERF_DETAIL=1 collects per-stage wallMs and optional bare-hrtime monotonicNs samples into /run/bare-os/boot-perf.json (schema 2 when stages are present). BARE_OS_KERNEL_EXT_GRAPH=1 writes /run/bare-os/kernel-ext-graph.json after kernel.ext.d ordering (and probes whether bare-module-traverse can be imported on the host).\n\nKernel program boot hooks (see kernel-program.md <./kernel-program.md>): BARE_OS_BOOT_SAFE_MODE skips rc.d, kernel.ext.d, and onboot; BARE_OS_BOOT_TRANSACTION_JOURNAL appends phase NDJSON to /run/bare-os/boot-transaction.ndjson (each line includes a bootStage); BARE_OS_BOOT_CHECKPOINT refreshes /run/bare-os/boot-checkpoint.json after each phase (schema 2 adds bootStage). BARE_OS_BOOT_DRY_RUN skips trusted execLine and extension scripts; BARE_OS_BOOT_POLICY_PATH / policyFallbackPaths tier policy files; rollback marker + BARE_OS_BOOT_ROLLBACK_APPLY; kernel.d snippets may start with # ConditionEnvironment=KEY=VAL comment guards; bareOsPublishBootReady includes subsystems.kernel.bootPhases with bootStage labels. Extension drop-ins may use requires, after, and before for ordering alongside dependsOn. The booter emits additional *booter: phases (vfs, ctx, repl, initd, kernel_invoke) and records them under booterPhases in /run/bare-os/boot.json. BARE_OS_BOOT_ALLOWLIST=1 with /etc/bare-os/boot.allow restricts the first token of lines in trusted rc/onboot snippets. Inspect ctx.bareOsRuntimeCaps for pipeline limits, quotas, pseudo paths, and features (including httpDelegate, gitDelegate, systemctlDelegate, vfsWatch, ipcFanout**).\n\nBoot policy v5 (optional /etc/bare-os/boot.policy.json fields when BARE_OS_BOOT_POLICY=1): requireKernelCapabilitiesHostTransportDelegates and requireInitJsSha256 (64-char lowercase hex of raw /boot/init.js via ctx.bareOsBootFileSha256Hex). BARE_OS_KERNEL_PROFILE_WARM=1 enables ctx.bareOsRequestKernelProfileReload() for a warm start(ctx) re-run without dropping the swarm session (same machinery as hot reload).\n\nOptional BARE_OS_KERNEL_SELFTEST=1 runs built-in checks after boot snippets. Set BARE_OS_SELFTEST_FORMAT=tap for TAP on ctx.console.error (session stderr, not the hosts raw globalThis.console), or junit for a single-line XML testsuite on the same sink—matching how runKernelSelftest binds the harness. You can pass { signal, timeoutMs } as a second argument to ctx.execLine, ctx.readLine, ctx.runBinCommand, and VFS readFile/writeFile for bounded waits—see Chapter 2 <02-the-context-object.md>.\n\nSo the “OS personality” is mostly the shell (execShellLine behind execLine) plus /bin.\n\nWHY READLINE USES AN EMPTY PROMPT STRING\n\nThe stock kernel passes '' as the prompt. The actual prompt rendering (fish-style or plain) is owned by the REPL session implementation in repl-session.js <../packages/bare-os-booter/lib/repl-session.js>. If you build a custom kernel, you can pass a different prompt string, but many sessions ignore it in favor of their own UI.\n\nUSING EXECLINE VS CALLING RUNBINCOMMAND DIRECTLY\n\n- await ctx.execLine('ls -la') — Full shell semantics: tokenization, aliases, builtins (cd, export, …), ; / && / logical-OR lists, pipelines, redirections, then /bin\n- await ctx.runBinCommand(['ls', '-la']) — Direct utility invocation—no shell parsing, no aliases\n\nUse execLine when you want users to type natural shell commands from your kernel loop. Use runBinCommand when you already have an argv array and want to avoid re-parsing.\n\nSESSION TERMINATION\n\n- The exit builtin (or /bin/exit) ultimately calls ctx.requestBooterExit(code), which forces readLine to return null on subsequent calls and ends the loop.\n- BARE_OS_SKIP_REPL=1 makes readLine return null immediately—useful for non-interactive smoke tests. Pair with BARE_OS_ONBOOT (one or more newline-separated lines) or /etc/bare-os/onboot so the stock kernel runs trusted execLine snippets before idle exit.\n\nCUSTOM KERNELS: PRACTICAL TIPS\n\n1. Keep the loop async—never block on synchronous host APIs that might hang the Pear app.\n2. Catch errors around execLine so a typo does not tear down the whole session unless you want that.\n3. Do not assume import—the kernel source is the same AsyncFunction model as /bin (Chapter 1).\n4. To add startup services, prefer hooks already wired in the booter (startBareInitd)—stock units include bare-os-www (loopback HTTP for ~/.www, see Handbook ch.4 <../handbook/04-the-booter-runtime.md#bare-os-www-static-http-for-www>)—or a small kernel that calls runBinCommand after banner; see Chapter 7 <07-apps-beyond-the-shell.md>.\n5. To run code when the session ends, use ctx.registerKernelShutdownHook(fn) (runs before initd disposers); see Chapter 2 — ctx <02-the-context-object.md>.\n6. After login, ~/.barerc is reloaded automatically via applyUnlockedEnv—see Handbook — Identity <../handbook/05-identity-vault-and-hdms.md>. The stock init.js does not re-print the boot banner; use onIdentityUnlocked or a custom kernel loop if you want that.\n\nREPLACING THE KERNEL IN THE IMAGE\n\nKernel text is staged from the repos kernel/ tree when you run the seeder (or copied into packages/bare-os-seeder/kernel/ for Pear). After editing kernel/init.js, re-seed or rebuild the vendored tree so peers receive the new /boot/init.js.\n\nSEE ALSO\n\n- Chapter 2 — ctx <02-the-context-object.md>\n- Chapter 4 — User scripts <04-user-scripts-and-path.md>\n- Handbook — Kernel and binaries <../handbook/06-kernel-and-binaries.md>\n\n← Context object <02-the-context-object.md> · User scripts → <04-user-scripts-and-path.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","03","kernel","boot","init","chapter","and","start"],"seeAlso":[{"name":"devguide-04-user-scripts-and-path","section":7},{"name":"devguide-02-the-context-object","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/03-kernel-boot-init.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-04-user-scripts-and-path","section":7,"title":"Chapter 4 — User scripts and PATH resolution","synopsis":["man 7 devguide-04-user-scripts-and-path","Developer guide chapter (developer-guide/04-user-scripts-and-path.md)"],"description":"CHAPTER 4 — USER SCRIPTS AND PATH RESOLUTION\n\nThis chapter is the practical “how do I run my own .js file?” guide. Resolution logic lives in runBinCommand in kernel-runner.js <../packages/bare-os-booter/lib/kernel-runner.js>; the shell calls that function for non-builtin commands.\n\nTHE ENTRYPOINT CONTRACT (AGAIN)\n\nThe booter evaluates your file as the body of an async function with parameters ctx and argv. Top-level statements run first (like a small Node script). Optionally, define a top-level run for the same contract as /bin utilities:\n\n async function run(ctx, argv) {\n // argv[0] is conventionally the script name or command word\n }\n\nThe booter wraps the file body in:\n\n new AsyncFunction(\n 'ctx',\n 'argv',\n source + '\\nif (typeof run === \"function\") await run(ctx, argv)\\n'\n )\n\nIf run exists, it is awaited after the rest of the file. /bin commands always define run; home-directory scripts may use top-level code only (e.g. console.log(...)).\n\nRESOLUTION ORDER (SIMPLIFIED)\n\nWhen the user types a command, roughly:\n\n1. Git delegation — If the command is git (and not ./git), the booter runs the hosted git CLI instead of /bin/git bytes.\n2. Path with slash — If argv[0] contains /, treat as a path: resolve via ctx.vfs, read bytes from the routed drive, evaluate as script.\n3. Ends with .js — Resolve cmd as a logical path (e.g. foo.js in $PWD), read from VFS if found, evaluate.\n4. PATH search — For each directory in $PATH (default /bin), try unixPathResolve(dir, cmd) on the system drive only; first hit wins.\n\nImplications:\n\n- ./my.js and /home/user/my.js use VFS (personal or system as appropriate).\n- hello.js in the current directory is tried before /bin if the file exists on the routed drive.\n- ls resolves to /bin/ls on the system drive (unless shadowed by a same-named *.js in cwd—know this edge case).\n\nSHEBANG\n\nA leading line like #!/usr/bin/env bare is stripped before compilation. It is for human readers and future tooling; the booter does not exec a binary interpreter—it always uses AsyncFunction.\n\nSTDIN IN PIPELINES\n\nThe shell does not give your script a POSIX fd 0. For pipeline stages, stdin is simulated: the shell captures console.log output from the left stage as a string and passes ctx.shellStdin on a cloned ctx to the right stage. Utilities that want stdin read bareStdin(ctx) from the coreutils prelude—but user scripts on the home drive do not get that prelude unless you copy the helper into your file.\n\nMinimal stdin read in a user script:\n\n async function run(ctx, argv) {\n const stdin = typeof ctx.shellStdin === 'string' ? ctx.shellStdin : ''\n ctx.console.log('got bytes:', stdin.length)\n }\n\nENVIRONMENT AND CD\n\n- ctx.env is the same object mutated by export and cd (via vfs.chdir and PWD).\n- Paths like ~/doc are expanded by the VFS when you use vfs.readFile and friends—prefer ctx.vfs over raw drive access for user-level scripts.\n\nGIT AND SPECIAL CASES\n\n- Prefer the git command for version control; it is not the same as evaluating /bin/git as JS.\n- command -v / type use resolveBinInPath (system drive PATH only) plus builtin tables.\n\nDEBUGGING “NOT FOUND”\n\n1. unknown command: foo — Not in PATH on system drive and not a resolvable *.js / path.\n2. not found: ./foo.js — VFS could not read the path (typo, wrong drive, or missing file).\n3. Silent failure with stack in console.error — Runtime error inside run; fix the script logic.\n\nSEE ALSO\n\n- Chapter 5 — Modules <05-modules-and-imports.md>\n- Chapter 6 — Extending /bin <06-extending-bin-coreutils.md>\n- Handbook — POSIX utilities <../handbook/09-posix-utilities-shell-and-vfs.md>\n\n← Kernel <03-kernel-boot-init.md> · Modules → <05-modules-and-imports.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","04","user","scripts","and","path","chapter","resolution"],"seeAlso":[{"name":"devguide-05-modules-and-imports","section":7},{"name":"devguide-03-kernel-boot-init","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/04-user-scripts-and-path.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-05-modules-and-imports","section":7,"title":"Chapter 5 — Modules, import, and packaging (the honest version)","synopsis":["man 7 devguide-05-modules-and-imports","Developer guide chapter (developer-guide/05-modules-and-imports.md)"],"description":"CHAPTER 5 — MODULES, IMPORT, AND PACKAGING (THE HONEST VERSION)\n\nThis chapter answers the most common disappointment: “Why cant I use import in my Bare OS script?”\n\nSHORT ANSWER\n\nIn-image scripts (/boot/init.js, /bin/*, ~/tool.js) are executed as AsyncFunction bodies, not as ES modules. The JavaScript engine never runs the ESM loader for those strings. Therefore:\n\n- import x from 'y' is a syntax error in that context (top-level import is only valid in modules).\n- require is likewise unavailable unless the host injected a global (do not rely on it for portable utilities).\n\nHOW /BIN UTILITIES STILL SHARE CODE\n\nThe bare-os-coreutils build concatenates:\n\n1. lib/runtime.js (shared helpers: bareStdin, mode formatting, …)\n2. Optional preamble files (sed-engine.js, awk-engine.js, man-render.js)\n3. src/<name>.js (must contain only async function run and helpers in the same string—no import)\n\nSo “modules” become one compiled file on the drive. That is the supported pattern for shared logic in tier-1 utilities.\n\nPATTERNS THAT WORK FOR USER AND KERNEL CODE\n\n1. INLINE HELPERS\n\nFor small scripts, define functions above run:\n\n function double(n) {\n return n * 2\n }\n async function run(ctx, argv) {\n ctx.console.log(String(double(21)))\n }\n\n2. COPY-PASTE PRELUDE SNIPPETS\n\nYou may copy minimal helpers (e.g. stdin reader) from runtime.js <../packages/bare-os-coreutils/lib/runtime.js> into your script. Keep the license header in mind if you redistribute; see LICENSE <../LICENSE>.\n\n3. LOAD ANOTHER FILE FROM THE DRIVE (ADVANCED)\n\nYou _can_ readFile a second script as a string and… you should not eval arbitrary untrusted content. For your own modules stored as ~/lib/helpers.js, a pattern is:\n\n- Store function bodies only or data (JSON), not full import syntax.\n- Or concatenate at build time on the host before uploading to Hyperdrive.\n\nThere is no built-in import() dynamic loader wired to Hyperdrive in the stock booter.\n\n4. HOST-SIDE BUNDLING\n\nIf you generate a single bundle.js on your laptop with esbuild/rollup and upload it to ~/bundle.js, that file can use no external import at runtime because everything is already bundled. This is the closest to “npm on device” without changing the booter.\n\nHOST PACKAGES (BOOTER / SEEDER): FULL ESM\n\nWhen you edit packages/bare-os-booter/index.js, you are in module land:\n\n import { runBinCommand } from './lib/kernel-runner.js'\n\nUse this for new protocols, drive encryption, alternate kernels, etc. This is not the same as writing /bin/foo.\n\nCTX.BARE — HOLEPUNCH-STYLE MODULES WITHOUT IMPORT\n\nWhen BARE_OS_BARE_MODULES is not disabled, the booter exposes ctx.bare: a frozen object whose keys are defined by bare-module-manifest.json <../packages/bare-os-booter/lib/bare-module-manifest.json>. Each entry names an npm package and a stable ctxKey (for example b4a, protomux, compactEncoding, holesail). The booter also attaches ctx.bare.discordJS from vendored bare-discord-js (official discord.js on Bare) so guest bots can use new ctx.bare.discordJS.Client(...) — see /bin/discord-bot and examples/discord-ping-pong/ <../examples/discord-ping-pong/>.\n\nDrive bundles (trusted image): the system image may include /lib/bare/manifest.json and */lib/bare/bundles/.js. Those scripts are IIFE bundles built by bare-os-bare-libs. The booter executes them with Function in the same trust class as seeded /bin utilities and fills ctx.bare for the listed keys. Set BARE_OS_BARE_DRIVE_BUNDLES=0** to skip this step.\n\nHost resolution: after drive merge, the booter uses dynamic import() for manifest entries that are still missing. When the booter loads from a pear: URL (pear run), rows with bundle: true are not host-import()ed (bare-module cannot resolve npm package names from that referrer; ctx.bare.holesail et al. come from */lib/bare/bundles/). On file: checkouts and Node test harnesses, bundle: true** may still be host-imported as a fallback when a drive bundle is absent. Optional packages that fail to load (for example native-only modules on the wrong host) are skipped without aborting boot.\n\nHardening: set BARE_OS_BARE_MODULES=0 to omit ctx.bare entirely (the property is absent on ctx). Runtime caps bareCtxModules and bareDriveBundles mirror these toggles.\n\nFull ecosystem context: Chapter 12 — Bare modules and Pear ecosystem <12-bare-modules-and-pear-ecosystem.md>.\n\nPEAR AND BARE GLOBALS\n\nUnder Pear/Bare, some globals (e.g. Bare) may exist for host exit and lifecycle. In-image utilities should still prefer ctx for I/O to stay consistent when the same script pattern is tested under different harnesses. Prefer *ctx.bare. over relying on Bare-specific package side effects when you need bare-url / bare-path** on the Pear runtime.\n\nFAQ CORNER\n\nCan I add dynamic import to the booter for user scripts?\nPossible in theory (resolve specifiers from Hyperdrive) but not implemented, and it raises security and package format questions (where do dependencies live?).\n\nCan I put node_modules on my personal drive?\nEven if you replicated bytes, the in-image loader would not resolve them as Node does. You would need a host or kernel change to load from that tree.\n\nSEE ALSO\n\n- Chapter 12 — Bare modules and Pear ecosystem <12-bare-modules-and-pear-ecosystem.md>\n- Chapter 6 — Extending /bin <06-extending-bin-coreutils.md>\n- Chapter 9 — Security <09-security-and-trust.md>\n- bare-os-coreutils README <../packages/bare-os-coreutils/README.md>\n\n← User scripts <04-user-scripts-and-path.md> · Extending /bin → <06-extending-bin-coreutils.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","05","modules","and","imports","chapter","import","packaging","the","honest","version"],"seeAlso":[{"name":"devguide-06-extending-bin-coreutils","section":7},{"name":"devguide-04-user-scripts-and-path","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/05-modules-and-imports.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-06-extending-bin-coreutils","section":7,"title":"Chapter 6 — Extending /bin (bare-os-coreutils)","synopsis":["man 7 devguide-06-extending-bin-coreutils","Developer guide chapter (developer-guide/06-extending-bin-coreutils.md)"],"description":"CHAPTER 6 — EXTENDING /BIN (BARE-OS-COREUTILS)\n\nShipping a new command in the system image means adding it to bare-os-coreutils, rebuilding, and re-seeding so /bin/<name> exists on the Hyperdrive. This is the only supported path for first-class OS utilities with shared prelude code.\n\nTHE CONTRACT (NON-NEGOTIABLE)\n\nEach command source under packages/bare-os-coreutils/src/<name>.js must:\n\n- Define async function run(ctx, argv).\n- Contain no top-level import or export—the file is concatenated into a single script string for AsyncFunction loading.\n\nShared helpers live in packages/bare-os-coreutils/lib/ and are prepended at build time, not imported. bare-os-lscolors lives in packages/bare-os-lscolors/ as a small workspace package so bare-os-booter can import it under Pear (cross-package paths into bare-os-coreutils resolve to unsupported pear://dev/... URLs).\n\nCHECKLIST FOR A NEW COMMAND FOO\n\n1. Implement packages/bare-os-coreutils/src/foo.js.\n2. Register the name in packages/bare-os-coreutils/lib/commands.mjs (COREUTILS_COMMANDS—keep sorted).\n3. Add a man page packages/bare-os-coreutils/man/pages/foo.json (build fails if missing).\n4. Optional: seed examples via scripts/seed-man-pages.mjs or edit JSON directly.\n5. Optional preamble: if foo needs a large engine file (or several helpers, like edit / nano with *lib/edit-.js), add to preamble** in build.mjs <../packages/bare-os-coreutils/build.mjs>:\n\n const preamble = {\n md5sum: ['md5.js'],\n sed: ['sed-engine.js'],\n awk: ['awk-engine.js'],\n jq: ['jq-engine.js'],\n man: ['man-render.js'],\n foo: ['foo-engine.js']\n }\n\n6. Build\n\n npm run build -w bare-os-coreutils\n\nThis runs build-man-db.mjs (manual database) and writes kernel/bin/foo plus the seeder mirror.\n\n7. Re-seed / replicate so peers get the new /bin/foo.\n\nWHAT GETS CONCATENATED\n\nFrom build.mjs <../packages/bare-os-coreutils/build.mjs>:\n\n runtime.js + [preamble files...] + src/foo.js → kernel/bin/foo\n\nruntime.js begins with a BARE_OS_BIN_API version comment (e.g. */ BARE_OS_BIN_API 1.0.0 /). Staged kernel/bin/ must contain that string so scripts/verify-kernel-seeder-parity.mjs <../../scripts/verify-kernel-seeder-parity.mjs> can catch drift; hand-written stubs (systemctl, journalctl**) carry the same pragma.\n\nruntime.js defines helpers like bareStdin, listing time formatting, etc.—read it before reimplementing utilities.\n\nEXIT STATUS\n\nPOSIX-ish utilities set ctx.exitCode (number) when they want a non-zero status. The shell uses ctx.exitCode for &&, ||, and ; lists; utilities such as grep and test set it for conditions.\n\nTESTS\n\nAdd or extend tests under packages/bare-os-booter/test.js using runBinCommand with a Hyperdrive that has the built /bin/foo bytes—follow existing grep, ls, cat patterns.\n\nFAST LOCAL RUN (NO PEAR / SWARM)\n\nAfter npm run build -w bare-os-coreutils, use npm run test:coreutils (node scripts/run-bin.mjs) to execute kernel/bin/<foo> against the stock createVfs in a temp store—same AsyncFunction / run(ctx, argv) path as the booted OS, without starting Pear or the seeder. --json prints machine-readable output for Cursor; npm run test:coreutils -- --suite basic runs golden cases under test/fixtures/coreutils/. See scripts/README.md <../scripts/README.md> § run-bin.mjs.\n\nDOCUMENTATION\n\n- Update man page JSON (required by build).\n- Optional: handbook chapter 9 cross-links for POSIX alignment.\n- Optional: TypeScript shapes in packages/bare-os-booter/lib/bare-os-ctx.d.ts <../packages/bare-os-booter/lib/bare-os-ctx.d.ts> (BareOsKernelContext, BareOsBinRun) for host-side editors.\n\nLarge multi-file preambles (edit / nano, baretop, agent, chat, …) are defined in build.mjs <../packages/bare-os-coreutils/build.mjs> preamble — copy that pattern when a command needs many *lib/.js chunks; for agent*-sized features prefer editing packages/bare-os-coreutils/lib/agent-.js <../packages/bare-os-coreutils/lib/> and man agent rather than growing unrelated commands preambles.\n\nSEE ALSO\n\n- Chapter 5 — Modules <05-modules-and-imports.md>\n- Chapter 8 — Testing <08-testing-and-debugging.md>\n- kernel/README.md <../kernel/README.md>\n- agent / chat — large preamble examples: build.mjs <../packages/bare-os-coreutils/build.mjs>, packages/bare-os-coreutils/README.md <../packages/bare-os-coreutils/README.md>\n\n← Modules <05-modules-and-imports.md> · Apps beyond shell → <07-apps-beyond-the-shell.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","06","extending","bin","coreutils","chapter","bare"],"seeAlso":[{"name":"devguide-07-apps-beyond-the-shell","section":7},{"name":"devguide-05-modules-and-imports","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/06-extending-bin-coreutils.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-07-apps-beyond-the-shell","section":7,"title":"Chapter 7 — Apps beyond the shell","synopsis":["man 7 devguide-07-apps-beyond-the-shell","Developer guide chapter (developer-guide/07-apps-beyond-the-shell.md)"],"description":"CHAPTER 7 — APPS BEYOND THE SHELL\n\nBare OS now ships a P2P App Store client (/bin/appstore) and guest Pear tooling (/bin/pear) so “applications” can be authored, published, installed, and launched inside the shell without a second GUI runtime.\n\nThis chapter orients you to what is real today versus what still requires a host Pear process.\n\nFOUR APPLICATION MODELS\n\n| Model | When to use | Entry points |\n| Shell + /bin + files | Scripts, pipelines, git on the VFS | $HOME, run(ctx, argv) utilities |\n| Guest TUI | Full-screen terminal apps in the session | ctx.tui.run(model) — Chapter 20 <20-tui-and-sdk.md>, tui demo |\n| Pear app (guest) | P2P apps with pear:// distribution | pear init → stage → release → appstore install → launch |\n| Host Pear app | Custom booter/seeder images, native addons, desktop Pear | Repo root pear run, new Pear project (Chapter 1) |\n\nMost end-user Pear apps you build in Bare OS follow the guest Pear + App Store row. See Guest Pear and App Store workflow <../docs/guides/guest-pear-and-appstore-workflow.md> for copy-paste commands.\n\nGUEST PEAR PIPELINE (/BIN/PEAR)\n\nImplemented in packages/bare-os-coreutils (pear.js, pear-stage.js, pear-release.js).\n\n pear init\n cd ~/pear-projects/my-pear-app\n pear stage\n login # unlock identity / HDMS\n pear release .\n pear seed .\n\n- pear stage — Writes <project>/.pear/stage/ (sources/, package.json, app.bundle.js, stage.json).\n- pear release — Mirrors the stage tree onto a writable HDMS mount (/mnt/pear-<name>/) and prints pear:// links (uses HDMS registry keys; does not require host Pear CLI).\n- pear seed — Best-effort Hyperswarm flush so peers can replicate the release drive.\n\nRelease metadata is stored in <project>/.pear/release.json.\n\nP2P APP STORE (/BIN/APPSTORE)\n\nImplemented in packages/bare-os-coreutils (appstore.js, appstore-pear.js, p2p-suite.js preamble).\n\n appstore install my-app pear://0.<length>.<key> --yes\n appstore launch my-app\n\n- install — Fetches the pear:// release tree (local HDMS mount with matching key, or ephemeral readonly HDMS fetch) into ~/.appstore/packages/<name>/ (or /mnt/appstore/packages/<name>/ when the store HDMS drive is mounted).\n- launch — Runs the materialized entry script (sources/index.js or package.json main) in the guest shell; output appears on ctx.console.\n- update — Re-fetches from the packages stored pearLink.\n- setup — Prints how to create/mount the optional appstore HDMS label.\n\nDesign and trust model: p2p-app-store.md <../docs/design/p2p-app-store.md>.\n\nTHE DEFAULT PLATFORM: SHELL + /BIN + GIT\n\nWorkflows that are not Pear-packaged still use:\n\n- Scripts in $HOME (run(ctx, argv)).\n- Pipelines and redirection (simulated stdin/stdout).\n- git on the VFS (Handbook ch.8 <../handbook/08-git-on-bare-os.md>).\n\nINITD, CRON, AND SERVICES\n\ninitd — User units under ~/.config/bare-os/units/. appstore services can generate initd unit stubs for packages that declare a service manifest (see appstore.js).\n\nTimers / cron — See Chapter 11 <11-kernel-pear-cookbook.md> and handbook ch.4.\n\nHDMS AND /MNT\n\nAfter login, HDMS mounts extra Hyperdrives under /mnt/<label>/. Pear releases use labels like pear-my-pear-app. The App Store prefers label appstore at /mnt/appstore.\n\nUser scripts should use ctx.vfs rather than hard-coding drive handles.\n\nREPLACING THE KERNEL\n\nShipping a different /boot/init.js remains a kernel image change (non-interactive worker, custom menu, etc.). Pear user apps do not require replacing the stock kernel.\n\nWHEN YOU NEED A NEW HOST PEAR APP\n\nUse a new Pear application on the host when you need:\n\n- A different system image or booter embedding model\n- Native addons unsuitable for AsyncFunction /bin scripts\n- Desktop/mobile Pear runtime features\n\nGuest pear release still produces valid pear:// links consumable by host pear run.\n\nSEE ALSO\n\n- Guest Pear and App Store workflow <../docs/guides/guest-pear-and-appstore-workflow.md>\n- Chapter 20 — Guest TUI <20-tui-and-sdk.md>\n- Chapter 12 — Bare modules and Pear <12-bare-modules-and-pear-ecosystem.md>\n- Chapter 3 — Kernel <03-kernel-boot-init.md>\n- Handbook — Identity, vault, HDMS <../handbook/05-identity-vault-and-hdms.md>\n\n← Extending /bin <06-extending-bin-coreutils.md> · Testing → <08-testing-and-debugging.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","07","apps","beyond","the","shell","chapter"],"seeAlso":[{"name":"devguide-08-testing-and-debugging","section":7},{"name":"devguide-06-extending-bin-coreutils","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/07-apps-beyond-the-shell.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-08-testing-and-debugging","section":7,"title":"Chapter 8 — Testing and debugging","synopsis":["man 7 devguide-08-testing-and-debugging","Developer guide chapter (developer-guide/08-testing-and-debugging.md)"],"description":"CHAPTER 8 — TESTING AND DEBUGGING\n\nBare OS development mixes Node (fast iteration, Hyperdrive in tests), Bare (identity crypto and Pear parity), and Pear (production-like bundling). This chapter maps how tests are organized and how to debug in-image code.\n\nWORKSPACE TESTS\n\nFrom the repo root:\n\n npm ci\n npm test\n\nFor Tier-1 /bin utilities alone, npm run test:coreutils (node scripts/run-bin.mjs) is the fastest loop: it loads built *kernel/bin/ into an isolated Hyperdrive + createVfs (no Pear, no swarm, no ~/.bare-os write). Use --json for structured output and --suite basic for the golden fixture suite—full brittle-node packages/bare-os-booter/test.js** remains the integration shell + contract harness.\n\npretest mirrors root package.json scripts.pretest: npm run build -w bare-os-coreutils, npm run build -w bare-os-bare-libs, verify-kernel-seeder-parity, verify-ctx-api-feature-bits, verify-kernel-capabilities-contract, verify-kernel-capabilities-word-6 … -word-11, verify-ctx-dts, validate-example-schemas, verify-doc-links, verify-man-coverage, verify-compat-matrix, gen-posix-dashboard, verify-posix-dashboard, verify-posix-compliance-matrix, verify-posix-profile-triplet, verify-pear-no-static-node-import, smoke:bare-manifest — so *kernel/bin/, kernel/lib/bare, kernel/share/man/man.json, packages/bare-os-seeder/kernel/, ctx semver / feature words through bits11, capability contracts, bare-os-ctx.d.ts parity, schema examples, Tier-1 man coverage, doc links, the compatibility matrix, and the POSIX dashboard / compliance matrix / profile triplet stay aligned before workspace tests. See the POSIX verifier “pretest matrix”** diagram in scripts/README.md <../scripts/README.md>.\n\nKernel self-test: with BARE_OS_KERNEL_SELFTEST=1, the stock kernel runs built-in checks (including /proc/bare_os_resources, /proc/bare_os_features, and /proc/bare_os/index.json). Use BARE_OS_SELFTEST_FORMAT=tap for CI-friendly stderr.\n\nKernel hot reload (dev): with BARE_OS_KERNEL_HOT_RELOAD=1, a custom kernel may call ctx.bareOsRequestKernelReload() to throw a controlled reload: the booter re-fetches /boot/init.js and runs start(ctx) again without tearing down the swarm session.\n\nKernel profile warm reload: with BARE_OS_KERNEL_PROFILE_WARM=1, ctx.bareOsRequestKernelProfileReload() uses the same re-invocation loop (distinct error code for policy clarity).\n\nSeed RPC contract: packages/bare-os-protocol lists RPC short names in lib/seed-rpc-methods.js; channel.js rejects unknown methods with bare_os.rpc_unknown_method and wrong modules with bare_os.rpc_wrong_module. packages/bare-os-protocol/test.js asserts the registry stays non-empty.\n\nCI MARKER SCOPE (FIRST-PARTY VS VENDORED BUNDLES)\n\nTwo complementary gates apply; neither is a blanket ban on the word “implement” in the whole repo:\n\n| Script | Scope | Intent |\n| scripts/verify-runtime-no-incomplete-markers.mjs | Hand-authored kernel/init.js (generated bundle), kernel/lib/init/, kernel/lib/boot/, *kernel/bin/.js, packages/bare-os-booter/ (excluding test.js and paths in docs/audit/runtime-marker-excludes.json) | No TODO / FIXME / HACK / XXX or throw new Error(\"Not implemented\")** in runtime booter/kernel sources. |\n| scripts/verify-bundle-markers.mjs | *kernel/lib/bare/bundles/.js only | Vendored Holepunch IIFEs: block incomplete-looking substrings unless the basename is allowlisted in docs/audit/bundle-marker-allowlist.json (policy: keep allowlist empty; fix via upstream bumps or scripts/sanitize-bare-bundles.mjs**). |\n| scripts/verify-bundle-throws.mjs | Same bundles | Same idea for throw new Error(\"…not implemented…\")-style messages; allowlist docs/audit/bundle-throw-allowlist.json stays empty by policy. |\n\npackages/bare-os-coreutils and packages/bare-os-protocol are not scanned by verify-runtime-no-incomplete-markers today—still avoid shipping incomplete markers in shipped src/ paths. packages/bare-os-booter/test.js may use in-memory VFS fakes, stub HTTP hosts (e.g. stub.example URLs), and AsyncFunction-loaded mini programs to isolate runBinCommand—those are test doubles, not the replicated OS. Production syscall bridges use explicit ENOTSUP / ENOSYS returns instead of placeholder throws. scripts/kernel-program-benchmark-harness.mjs suite IDs such as kernel_crypto_synthetic_benchmark name synthetic timing fixtures for release gates, not missing product code.\n\nSee also docs/audit/PLACEHOLDER_BASELINE.md <../docs/audit/PLACEHOLDER_BASELINE.md> and packages/bare-os-bare-libs/README.md <../packages/bare-os-bare-libs/README.md> § Bundle health, markers, and upstream closure.\n\nBRITTLE: BRITTLE-NODE VS BRITTLE-BARE\n\n- brittle-node runs most of packages/bare-os-booter/test.js—Hyperdrive, VFS, shell tokenizer, runBinCommand against real /bin bytes on disk (includes second-word (bits2) contract checks: @reboot / jitter parsing, param expansion v2, /proc stubs). Preload packages/bare-os-booter/scripts/bare-node-test-shim.cjs <../packages/bare-os-booter/scripts/bare-node-test-shim.cjs> supplies a chainable Bare.on (required by bare-timers), stubs bare-thread / bare-worker by package name and resolved absolute path (ESM imports CJS that way), and replaces Bare-only require.addon() bindings.\n- brittle-bare runs test.identity.js and protocol tests that need the Bare runtime (e.g. bare-crypto native pieces).\n- npm run test:bare (repo root) runs protocol tests plus the booters test:bare script (test.identity.js, test.bare-smoke.js) and seeder tests — a lighter Bare-native smoke path than the full brittle-node test.js harness.\n\nCold boot / ctx.bare: parallel readFile for drive /lib/bare bundles is capped by BARE_OS_BARE_STDLIB_RESOLVE_CONCURRENCY (132, default 4) in bare-os-ctx-bare.js; merge order stays deterministic.\n\nDiagnostics: with BARE_OS_DIAGNOSTICS_SUBSCRIBE=1, ctx.bareOsDiagnosticsSubscribe receives structured booter events (phase timing, optional kernel echoes) for local debugging—do not enable in untrusted production shells.\n\nCI installs Bare globally for parity (see .github/workflows/ci.yml). If identity tests fail locally, ensure bare is installed and on PATH.\n\nRUNNING CI LANES WITHOUT GITHUB WORKFLOWS\n\nUse this repo-local sequence when you are on a machine without GitHub Actions:\n\n1. npm ci\n2. npm run pretest\n3. npm run test\n4. npm run test:bare\n5. npm run test:integration\n6. npm run release-checklist\n\nThis mirrors the core CI contract gates (build/parity/docs/schema/verifiers), then workspace tests, then Bare-native smoke and deterministic lab smoke in one local pass.\n\nDEBUGGING USER SCRIPTS AND UTILITIES\n\n1. ctx.console.log / error — Primary visibility; errors from AsyncFunction compilation are caught in runScriptFromSource and printed with a short stack snippet.\n2. Isolate — Run a one-line shell command: command node is not available; use runBinCommand from a tiny test or invoke your script path directly.\n3. Compare with known-good — Copy the pattern from packages/bare-os-booter/test.js (readBuiltBin, put /bin/ls, etc.).\n\nPEAR DEV WORKFLOW\n\nUse the root scripts (see README <../README.md>):\n\n- npm run os:seeder and npm run os:booter (separate terminals) after ensure-pear-node-modules.\n\nPear uses bundled node_modules; if resolution fails, run node scripts/ensure-pear-node-modules.mjs as documented in scripts/README.md.\n\nCI-STYLE KERNEL CHECKS\n\n- BARE_OS_KERNEL_SELFTEST=1 — stock kernel/init.js <../kernel/init.js> runs a short execLine checklist after boot snippets.\n- BARE_OS_SELFTEST_FORMAT=tap — same self-test emits TAP lines on stderr (for parsers in CI).\n- node scripts/verify-kernel-seeder-parity.mjs — after a coreutils build, asserts kernel/ and packages/bare-os-seeder/kernel/ match and every *kernel/bin/ file includes BARE_OS_BIN_API (root pretest** runs this).\n\nCOMMON FAILURE MODES\n\n- unknown command — Name not on system PATH and not a resolvable *.js\n- invalid manual database — Forgot to build coreutils after changing commands list\n- kernel/bin missing BARE_OS_BIN_API pragma — Rebuild coreutils or add pragma to hand-maintained *kernel/bin/** stubs\n- Identity test skips / fails on Node only — Expected—run under brittle-bare\n- Session exits immediately — BARE_OS_SKIP_REPL=1 or readLine returns null\n\nMEDIA (FFMPEG / FFPROBE) AND SANDBOXING\n\n*mediaproc: BARE_OS_BIN_WORKER_OFFLOAD routes ffmpeg and ffprobe through bare-thread when enabled. Keep input paths inside the two-drive VFS (no host path escapes), cap wall time with BARE_OS_BIN_WORKER_WALL_MS, and treat media tools as delegated compute**: never pass untrusted filter graphs from guest scripts without a capability review. See kernel-extensions.md <../docs/reference/kernel-extensions.md> for worker class bits.\n\nSEE ALSO\n\n- Handbook ch.7 — Operations <../handbook/07-operations-and-development.md>\n- bare-os-booter README <../packages/bare-os-booter/README.md>\n\n← Apps beyond shell <07-apps-beyond-the-shell.md> · Security → <09-security-and-trust.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","08","testing","and","debugging","chapter"],"seeAlso":[{"name":"devguide-09-security-and-trust","section":7},{"name":"devguide-07-apps-beyond-the-shell","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/08-testing-and-debugging.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-09-security-and-trust","section":7,"title":"Chapter 9 — Security and trust (developer mindset)","synopsis":["man 7 devguide-09-security-and-trust","Developer guide chapter (developer-guide/09-security-and-trust.md)"],"description":"CHAPTER 9 — SECURITY AND TRUST (DEVELOPER MINDSET)\n\nBare OS is research software. It is not a hardened multi-tenant OS. Still, developers should understand what is trusted and what full ctx power implies.\n\nSYSTEM DRIVE TRUST MODEL\n\nThe system Hyperdrive is the OS image. You normally obtain it by replicating from peers that share the projects discovery topology (see handbook protocol chapters). The codebase assumes you trust that image the same way you would trust an installer ISO from a vendor you chose.\n\n/bin and /boot bytes are executed as JavaScript. A malicious seeder could ship hostile /bin scripts. Mitigation is social and operational: use keys and peers you trust, verify releases, run your own seeder for development.\n\nBoot snippet tightening: with BARE_OS_BOOT_ALLOWLIST=1, the stock kernel only runs lines from trusted rc, rc.d, rc.local, kernel.d, and onboot whose first shell token appears in /etc/bare-os/boot.allow (plus builtins such as export, cd, :). Pair with BARE_OS_BOOT_STRICT=1 to exit the session on the first disallowed or failing line.\n\nBoot manifest integrity: BARE_OS_BOOT_MANIFEST=1 makes the stock kernel compare /etc/bare-os/boot.manifest.json to an expected digest (ctx.bareOsBootFileSha256Hex). BARE_OS_BOOT_MANIFEST_SIGN=1 adds Ed25519 verification of the raw manifest bytes against /etc/bare-os/boot.manifest.sig, using ctx.bareOsVerifyBootManifestSignature and BARE_OS_BOOT_MANIFEST_PUBKEY_HEX (64 hex chars). Rotation is operational: ship a new public key in host env and a matching signature file on the system image. This does not replace image trust—you still choose peers and seed sources carefully.\n\nSeed capability attestation (optional): the seeder may answer bare_os.capability_attestation with JSON from host env BARE_OS_SEED_CAPABILITY_ATTESTATION_JSON (for example a distro or hyper-multisig bundle). The guest does not verify signatures; operators verify on the host or out-of-band. BARE_OS_BIN_WORKER_OFFLOAD is a reserved gate for future isolated /bin execution—stock paths remain in-process unless a host integration supplies a worker bridge.\n\nAudit: BARE_OS_AUDIT=1 logs execLine activity to /var/log/bare-os/audit.log. BARE_OS_AUDIT_JSON=1 uses JSON lines with auditSchemaVersion: 2 on execLine, delegate, and httpFetch records; BARE_OS_AUDIT_REDACT=1 (or true) masks common secret-like VAR=value patterns; BARE_OS_AUDIT_REDACT=TOKEN,PASSWORD masks named keys.\n\nDelegated HTTP: when the booter sets ctx.httpFetch from the host fetch, BARE_OS_HTTP_ALLOWLIST and BARE_OS_HTTP_DENYLIST restrict http/https URLs for curl/wget (host-pattern globs). Failed checks throw before the request; with audit on, allow/deny outcomes can be logged.\n\nHost CLI delegates: git, curl, wget, and systemctl-family commands can be restricted with BARE_OS_DELEGATE_ALLOW (comma list; empty = all). Optional per-minute caps use BARE_OS_DELEGATE_MAX_PER_MIN and per-kind *BARE_OS_DELEGATE__MAX_PER_MIN. With BARE_OS_AUDIT=1, BARE_OS_DELEGATE_AUDIT_ONLY=1 logs delegate invocations and skips the host run (exit 0**) for audit-only environments.\n\nDNS allowlist: BARE_OS_DNS_ALLOWLIST optionally constrains http(s) hostnames for curl/wget before fetch (suffix wildcard *.example.com supported).\n\nDNSSEC: the stock guest does not validate DNSSEC; resolvers and TLS stacks on the host own DNSSEC, DANE, and related policy. Do not infer DNS security properties from Bare OS delegate behavior alone.\n\nIPC JSON-RPC: when BARE_OS_IPC_RPC_TOKEN is set, pushJson payloads must include matching bareOsIpcToken or the push throws. Line size is capped (BARE_OS_IPC_JSON_MAX_BYTES, default 256KiB).\n\nSandboxed scripts: ctx.bareOsSandboxRunScript(source, argv?, opts?) runs in-image JS with a restricted ctx: writes are limited to the personal namespace (same routing rules as isPersonalRoute), and identity / vault / virtual-file registration hooks are disabled. Disable entirely with BARE_OS_SANDBOX_SCRIPT=0. BARE_OS_SANDBOX_WORKER=1 prefers bare-worker when the host provides it, else defers on a fresh microtask; neither path is a hardware isolate. For documented stronger separation, operators may compose Holepunch cross-worker / bare-bundle-evaluate patterns (see comments in packages/bare-os-booter/lib/bare-os-sandbox.js). This remains not a guaranteed security boundary—treat sandboxing as a trust reducer.\n\nWebAssembly and native FFI (policy): a future guest WASM runtime must map imports to capability-gated ctx.vfs / IPC surfaces only—never raw host syscalls. Native bare-addon loading belongs on the Pear host with explicit allowlists; the replicated system image should not ship unsigned addons. Pair WASM/FFI plans with boot.policy.json denyKernelSyscalls / allowedCtxMethods and treat both as experimental until a dedicated ADR lands.\n\nProvenance: /proc/bare_os_provenance (and /proc/bare_os/provenance) combines boot manifest digest, optional signing flags, and Pear channel hints for operators (see kernel extensions <../docs/reference/kernel-extensions.md>).\n\nPear trust summary (operator): /proc/bare_os/pear_trust.json reflects optional host JSON from BARE_OS_PEAR_TRUST_JSON (e.g. multisig-link style metadata). The guest does not verify multisig or Pear channel signatures—operators validate on the host or out-of-band.\n\nPear IPC allowlist: when boot.policy.json sets allowedPearIpcChannels, the stock kernel copies it to BARE_OS_BOOT_POLICY_PEAR_IPC_CHANNELS so ctx.bareOsPearIpcEmit only forwards listed channels.\n\nDocumented bare-subprocess bridge: feature bit BARE_OS_FEATURE2_BARE_SUBPROCESS_BRIDGE names an optional, default-off host integration pattern using Holepunch bare-subprocess <https://github.com/holepunchto/bare-subprocess> for long-running delegated commands with a message bridge back to ctx. Stock images do not enable it unless a distributor wires env + allowlists explicitly. Capability word 5 adds bareOsReadSubprocessBridgeSnapshot with optional cgroupRootHint / signal lists from BARE_OS_SUBPROCESS_BRIDGE_META_JSON — these are host-supplied hints only; the guest must not treat them as a Linux security boundary.\n\nPERSONAL DRIVE AND USER SCRIPTS\n\nAnything you can write to $HOME can be executed if you run it—and you are the typical author. If you download a script from the network into your home directory and execLine it, you have effectively evald untrusted code with access to:\n\n- ctx.vfs (read/write personal tree),\n- identity hooks (if exposed through crafted shell lines),\n- runBinCommand (invoke all bundled utilities).\n\nThe stock shell does not sandbox run. Treat drive-resident JS like shell scripts with superpowers.\n\nWHY “ADD DYNAMIC IMPORT FROM THE INTERNET” IS DANGEROUS\n\nLoading modules from Hyperdrive or HTTP sounds convenient but creates:\n\n- Supply chain exposure (mutable remote code),\n- Ambiguous versioning (no lockfile on device),\n- Larger attack surface in the booter.\n\nThe projects conservative stance: bundle on the host or ship utilities in the system image after review.\n\nGUEST VS UNLOCKED IDENTITY\n\nDefault guest sessions have predictable HOME=/home/guest and no Ed25519 identity. Login unlocks /.bare/account and changes ctx.vfs.env (user, home, keys). Applications that handle secrets should never log passphrases or raw keys; use existing login / logout flows.\n\npear.multisig.json metadata (signer list + quorum) is validated by the same shape predicate in bare-os-protocol (seeder hint) and the bundled guest helper bareOsPearMultisigShapeOk in kernel/lib/boot/00-pear-multisig-shape.js; keep those files aligned when changing rules.\n\nBARE_OS_RC_PROPOSAL_MULTISIG_STRICT ties */etc/bare-os/rc.proposals/enabled/.json to that policy before rc.d: each proposal lists approved signer public keys in signaturesFrom; the guest checks membership and quorum only (host tooling should verify signatures over proposal payloads before writing enabled/**).\n\nREPORTING ISSUES\n\nSecurity vulnerabilities in this repo should be reported through the projects normal channels (maintainer contact / GitHub security advisories if enabled). Do not open public issues with exploit details until coordinated disclosure.\n\nSEE ALSO\n\n- Blind relay / P2P hardening (proc defaults) <../docs/security/blind-relay-p2p-hardening.md>\n- Handbook — Blueprints / trust <../handbook/02-blueprints.md>\n- Chapter 5 — Modules <05-modules-and-imports.md>\n\n← Testing <08-testing-and-debugging.md> · Glossary → <10-glossary-and-faq.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","09","security","and","trust","chapter","mindset"],"seeAlso":[{"name":"devguide-10-glossary-and-faq","section":7},{"name":"devguide-08-testing-and-debugging","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/09-security-and-trust.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-10-glossary-and-faq","section":7,"title":"Chapter 10 — Glossary and FAQ","synopsis":["man 7 devguide-10-glossary-and-faq","Developer guide chapter (developer-guide/10-glossary-and-faq.md)"],"description":"CHAPTER 10 — GLOSSARY AND FAQ\n\nQuick reference and repeated questions. Canonical term definitions (single source of truth for cross-tree vocabulary) live in docs/glossary.md <../docs/glossary.md>; this chapter keeps developer-centric expansions and FAQ answers that assume you are editing /bin or the booter.\n\nGLOSSARY\n\n- AsyncFunction — Object.getPrototypeOf(async function () {}).constructor — used to compile in-image JS strings with parameters ctx / argv\n- Booter — Pear/Node app (bare-os-booter) that joins Hyperswarm, replicates drives, builds ctx, runs kernel\n- Coreutils — bare-os-coreutils package — builds /bin scripts from src/*.js + prelude\n- ctx — Context object passed to start and run; see Chapter 2 <02-the-context-object.md>\n- ctx.bare — Frozen map of curated npm modules for in-image scripts (manifest + optional /lib/bare bundles); Chapter 12 <12-bare-modules-and-pear-ecosystem.md>\n- Guest — Pre-login session identity (BARE_OS_IDENTITY=guest)\n- Hyperdrive — P2P writable/readable filesystem keyed by discovery secret\n- In-image — Code whose source bytes live on system or personal drive and are evald via AsyncFunction\n- Kernel — /boot/init.js — async function start(ctx)\n- Personal drive — Per-session mutable Hyperdrive; $HOME, /.bare, user files\n- Seeder — Pear/Node app that stages kernel/ into system Hyperdrive and serves MBR\n- System drive — Replicated OS image (/bin, /boot, /etc, …)\n- VFS — Virtual file system layer routing paths to drives + HDMS mounts\n- IPC fan-out — bareOsIpc.fanoutPublish / fanoutSubscribe — multi-subscriber copies (bounded); disable with BARE_OS_IPC_FANOUT=0\n- HTTP policy — Optional BARE_OS_HTTP_ALLOWLIST / BARE_OS_HTTP_DENYLIST applied when the booter wraps ctx.httpFetch\n- booterPhases — Milestones recorded in /run/bare-os/boot.json (vfs, ctx, repl, initd, kernel_invoke) alongside kernel phases\n- ~/.barerc — Personal shell init: export, alias, theme <preset>; parsed by loadBarerc. Builtin barerc reload reapplies without logout.\n- BARE_OS_THEME — Active color preset name; /bin/theme, ~/.barerc, and ctx.bareOsApplyTheme() refresh *BARE_OS_COLOR_ and usually LS_COLORS**.\n- LS_COLORS — GNU-style colon-separated map consumed by ls --color; optional file via BARE_OS_DIRCOLORS and dircolors.\n- BARE_OS_COLOR_DEPTH — truecolor (default), 256, or 16 / ansi — downgrades truecolor sequences in *BARE_OS_COLOR_** for the fish REPL only.\n\nFAQ\n\nWhy doesnt import work in my ~/script.js?\nIn-image scripts are not ES modules. Use inlining, bundling on the host, or the coreutils concat build. See Chapter 5 <05-modules-and-imports.md>.\n\nHow do I use npm packages on the device?\nFor packages listed in bare-module-manifest.json, use ctx.bare.<key> from run / start (see Chapter 12 <12-bare-modules-and-pear-ecosystem.md>). Otherwise bundle on the host, or add code to the booter package with normal npm deps.\n\nWhats the difference between execLine and runBinCommand?\nexecLine runs the shell (aliases, builtins, pipelines). runBinCommand runs argv directly. See Chapter 3 <03-kernel-boot-init.md>.\n\nHow do I add a command to /bin?\nFollow Chapter 6 <06-extending-bin-coreutils.md>: src/foo.js, commands.mjs, man/pages/foo.json, build.\n\nCan I run TypeScript?\nNot natively on the drive. Compile to JS on the host, then ship the output.\n\nWhere is stdin for pipelines?\nShell sets ctx.shellStdin on a cloned context. Read it as a string. Coreutils use bareStdin(ctx) from prelude—user scripts must implement their own or copy the snippet. Chapter 4 <04-user-scripts-and-path.md>.\n\nHow do I exit the session from code?\nCall ctx.requestBooterExit(code) (same as exit builtin / /bin/exit).\n\nDoes ctx.exitCode control the host process exit?\nThe host exit code is managed by the booter after the kernel returns; utilities set ctx.exitCode for POSIX semantics inside the session. See booter executeKernel return path.\n\nWhat about Web APIs (fetch, localStorage)?\nNot part of the Bare OS contract for in-image code. Pear/Bare may provide some globals on the host; do not rely on them for portable /bin tools. When Node provides fetch, the booter may set ctx.httpFetch with outbound policy—see Chapter 2 <02-the-context-object.md>.\n\nWhat is bareOsSandboxRunScript?\nA reserved API that throws until a worker/isolate story lands; see Chapter 9 <09-security-and-trust.md>.\n\nHow do I match my host terminal to Bare OS colors?\nUse theme list / theme set <name> in the guest, then import the matching files under docs/themes <../docs/themes/README.md> (Alacritty, Warp, iTerm2). Host TERM and COLORTERM are passed through for capability detection.\n\nSEE ALSO\n\n- Canonical glossary <../docs/glossary.md>\n- Documentation FAQ <../docs/faq.md>\n- Developer guide home <README.md>\n- Handbook home <../handbook/README.md>\n- File-level reference <../docs/reference/README.md>\n\n← Security <09-security-and-trust.md> · Developer guide home <README.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","10","glossary","and","faq","chapter"],"seeAlso":[{"name":"devguide-11-kernel-pear-cookbook","section":7},{"name":"devguide-09-security-and-trust","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/10-glossary-and-faq.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-11-kernel-pear-cookbook","section":7,"title":"Chapter 11 — Kernel extensions and Pear workflows","synopsis":["man 7 devguide-11-kernel-pear-cookbook","Developer guide chapter (developer-guide/11-kernel-pear-cookbook.md)"],"description":"CHAPTER 11 — KERNEL EXTENSIONS AND PEAR WORKFLOWS\n\nThis chapter ties the Hyperdrive-resident kernel (kernel/init.js <../kernel/init.js>), ctx <./02-the-context-object.md>, and Pear/Bare distribution patterns together.\n\nBOOT COMPOSITION\n\n1. Stock phases — os-release, motd, optional rc.profile.*, rc, rc.d, rc.local, kernel.d, banner, onboot (non-interactive), optional self-test.\n2. Strict boot — BARE_OS_BOOT_STRICT=1 stops on first execLine error in trusted snippets.\n3. Allowlist — BARE_OS_BOOT_ALLOWLIST=1 plus /etc/bare-os/boot.allow <../kernel/etc/bare-os/boot.allow.example> restricts the first word of each line in those snippets (builtins like export and cd stay allowed).\n\nINIT, TIMERS, AND SOCKETS\n\n- bare-initd — User drop-ins under ~/.config/bare-os/units/<name>.unit support SocketActivationIpc=<fifo>; the units start runs after the first byte is read on that logical FIFO under /run/bare-os/ipc/…. Optional IdleSec=N (with stop) stops the unit after N seconds without further IPC traffic; optional fragments ~/.config/bare-os/units.d/<name>/*.conf merge before ~/.config/bare-init/units/ overrides. ReadinessPath= may be exec:<execLine> for a bounded readiness gate. ConditionPathExists= skips start when a VFS path is missing; AssertPathExists= fails the unit when missing (systemd-like, bounded absolute paths). ConditionPathIsDirectory= / AssertPathIsDirectory= do the same for directories (via vfs.lstat). Inspect the live DAG at /proc/bare_os/initd_graph.json (same payload as initd_dag.json, optional dot field).\n- bare-os-www — Stock initd serves GET/HEAD from ~/.www on 127.0.0.1:8088 by default; bare-holesail starts after it so managed bare-www-<port> rows reach the listener. bare-openssh adds bare-ssh-<port> to the same ~/.holesail/state.json ( seed / key persistence); if sshd starts before bare-holesail, startBareUserSessionStack re-runs ensure after holesail is up. Handbook ch.4 § bare-os-www <../handbook/04-the-booter-runtime.md#bare-os-www-static-http-for-www>, § bare-holesail, § bare-openssh.\n- Timers — Files in ~/.config/bare-os/timers/.timer (max 8) with a [Timer] section: either OnCalendar= (five cron fields) + ExecLine= on the same minute tick as ~/.crontab, or EveryMs= (100086400000) + ExecLine= on a fixed setInterval, or OnInactiveSec= to run after the last timer-triggered finish plus an idle gap (one-shot or repeating; Persistent= keeps state across sessions where implemented). Optional JitterSec= spreads the first (or periodic) execLine within 0…N seconds. Copy from /etc/bare-os/timers/.timer.example on the system image when present.\n- System cron — Optional image file /etc/bare-os/crontab (see crontab.example <../kernel/etc/bare-os/crontab.example>) is merged with user crontab entries. Lines may use @reboot + command (once per bare-cron start) and optional JitterSec=N prefix on the command for calendar lines.\n\nP2P LAB COOKBOOK\n\nUse this flow for deterministic local swarm experiments without touching production lanes:\n\n1. Run npm run test:integration for a seeder→booter smoke on temporary Corestores.\n2. For explicit testnet bootstrap, set BARE_OS_INTEGRATION_TESTNET=1 and BARE_OS_INTEGRATION_TESTNET_BOOTSTRAP=<host:port,...> before step 1.\n3. For manual two-terminal bring-up, run npm run os:seeder and npm run os:booter with isolated BARE_OS_HOST_DATA, BARE_OS_SEED_STORE, and BARE_OS_BOOT_STORE.\n4. For network isolation, set HYPERSWARM_BOOTSTRAP to dedicated lab nodes only.\n5. Validate runtime state from /proc/bare_os/replication, /proc/bare_os/swarm, /proc/bare_os/boot.json, and /run/bare-os/boot-perf.json.\n6. For mirror-drive experiments, generate host env hints with node scripts/mirror-drive-experiment.mjs --source-key <64hex> --mirror-key <64hex> --aux <n>.\n\nOBSERVABILITY\n\n- ctx.bareOsSubscribeBootEvent — Same structured events as BARE_OS_BOOT_TRACE=ndjson (phase, ms, sessionId); the booter also emits *booter: phases (vfs, ctx, repl, initd, kernel_invoke**).\n- /proc/bare_os_quotas — Pipeline limits, BARE_OS_EXEC_MAX_DEPTH, IPC caps, session stats.\n- /proc/bare_os_resources / ctx.bareOsGetResourceStatus() — Unified snapshot for operators.\n- /proc/bare_os_features — Documented kernel-feature words bits, bits2, bits3, bits4, bits5 (see bare-os-protocol exports).\n- /proc/bare_os/net_summary.json — Coalesced swarm / seed RPC hints for operators (topic, peer count, staging slot, replication queue, snapshot / firewall stats when present).\n- ctx.vfs.watch(path) — Hyperdrive-backed watch when BARE_OS_VFS_WATCH is not 0; returns { watcher, destroy, … }. With BARE_OS_VFS_WATCH_PSEUDO=1, may watch coalesced /proc/bare_os/metrics_live.json.\n\n~1GIB HOST RAM (PIPELINE / SWARM / IPC)\n\nSet these on the Pear/Bare host process before boot (the booter merges them into guest vfs.env; Hyperswarm reads swarm caps from the host environment at process start).\n\n| Goal | Variables |\n| Large pipeline bursts (yes \\| head …, big find/ls) | Stock booter defaults BARE_OS_SHELL_STREAMING=1, BARE_OS_SHELL_STREAMING_MULT=2, BARE_OS_PIPELINE_MAX_BYTES (512MiB), BARE_OS_PIPELINE_MAX_LINES (2M) when unset on the host. Override with BARE_OS_PIPELINE_MAX_STAGES, BARE_OS_STREAMING_MULTIPLIER (alias for BARE_OS_SHELL_STREAMING_MULT). Absolute ceilings default to 512MiB / 2M lines (BARE_OS_PIPELINE_ABS_MAX_BYTES / _LINES). |\n| Swarm | BARE_OS_SWARM_MAX_PEERS, BARE_OS_SWARM_MAX_CLIENT_CONNECTIONS, BARE_OS_SWARM_MAX_SERVER_CONNECTIONS, BARE_OS_SWARM_MAX_PARALLEL → Hyperswarm ctor. |\n| FIFOs / POSIX MQ | BARE_OS_IPC_MAX_CHANNELS; BARE_OS_POSIX_MQ_MAX_MSGS, BARE_OS_POSIX_MQ_MSG_BYTES (defaults for mq_open when attrs omitted). |\n| FD hint for scripts | BARE_OS_VFS_MAX_OPEN → mirrored as RLIMIT_NOFILE in /proc/bare_os/rlimits.json. |\n| Long sessions / cron-style execLine wall budget | BARE_OS_EXEC_LINE_BUDGET_MS or alias BARE_OS_TIMER_BUDGET_MS. |\n| OTL-style JSON lines | BARE_OS_TELEMETRY_OTEL_JSONL=/abs/path or shorthand BARE_OS_TELEMETRY_OTEL=1 → /var/log/bare-os/otel.jsonl. |\n\nVerify after boot: /proc/bare_os/capabilities.json (ctxApiVersion, pipeline caps), /proc/bare_os_resources, /proc/bare_os/rlimits.json. ctxApiVersion only changes with a booter/protocol bump, not with env tuning.\n\nStorage write limits use existing hooks (*BARE_OS_VFS_QUOTA_, BARE_OS_HOST_STORAGE_JSON, BARE_OS_BARE_STORAGE_QUOTA_JSON** on bare-storage paths)—there is no separate BARE_OS_STORAGE_QUOTA_BYTES knob.\n\nPEAR / GIT / HTTP\n\n- Guest Pear apps — Author, release, install, and launch Pear apps entirely in the shell: see Guest Pear and App Store workflow <../docs/guides/guest-pear-and-appstore-workflow.md> (/bin/pear, /bin/appstore). Host pear run pear://… remains for full Pear desktop/runtime on a Pear-capable machine.\n- Mirror-drive hints — ctx.bareOsEmitMirrorDriveHint({ label?, key? }) emits bare-os:mirror-drive-hint on Node-style hosts for mirror-drivestyle workflows (labels/keys only; trust boundaries unchanged).\n- Release metadata — Host can set BARE_OS_PEAR_CHANNEL, BARE_OS_PEAR_RELEASE, and BARE_OS_IMAGE_DIGEST; they appear in /run/bare-os/boot.json.\n- ctx.bareOsRequestPearReload() — Returns hints and env strings; the host pear-runtime / pear-runtime-updater must perform any real reload. A successful host reload can swap the Pear booter bundle so a new bare-module-manifest.data.mjs (from npm run sync:bare-manifest at staging time) takes effect; ctx.bareOsRequestPearReload does not rewrite ctx.bare in-process—expect a new guest boot for an updated host import list. Drive-only edits to /lib/bare/bare-module-manifest.json still merge bundles from the image without re-staging Pear.\n- ctx.bareOsPearUpdaterDelegate() (async, bareOsCtxApiVersion 1.32.0+) — Surfaces non-secret updater state without bundling pear-runtime-updater in the stock booter. Host options: set BARE_OS_PEAR_UPDATER_SNAPSHOT_JSON to a JSON string for a fixed operator snapshot, or BARE_OS_PEAR_UPDATER_MODULE to an ESM URL/path whose default export (or getPearUpdaterState / bareOsPearUpdaterSnapshot) is an async function returning a plain object (for example { version, updating, updated } mirroring your PearRuntimeUpdater instance). See bare-os-pear-updater-bridge.js <../packages/bare-os-booter/lib/bare-os-pear-updater-bridge.js>.\n\nSYSTEM REVISION AND INITD (OTA-FRIENDLY ORDERING)\n\nHost env BARE_OS_SYSTEM_REVISION_ID, BARE_OS_SYSTEM_REVISION_PENDING, and BARE_OS_SYSTEM_SLOT surface as ctx.bareOsSystemRevision and in /proc/bare_os/provenance. For Pear OTA flows, gate user units on pending work: e.g. ConditionPathExists= on a host-written marker file, or After= a unit whose ReadinessPath= checks /proc/bare_os/provenance JSON (parse in a small exec: gate). Combine with ctx.bareOsRequestPearReload() so the host applies the new bundle before initd restarts dependents.\n- git-pear — /bin/git-pear help documents Git-in-Pear (gip-transport, gip-remote, git+pear:// remotes).\n- HTTP — Delegated curl / wget resolve fetch via ctx.httpFetch (policy-wrapped when the booter supplies it), then ctx.bare.fetch from host BARE_OS_BARE_MODULES and drive /lib/bare/bundles, then globalThis.fetch. ensureBareFetchGlobals may install bare-fetch or bare-https when no native fetch exists. BARE_OS_HTTP_ALLOWLIST, BARE_OS_HTTP_DENYLIST, BARE_OS_DNS_ALLOWLIST, and BARE_OS_TLS_PIN_SHA256 (and init.bareOsCurlTls for curl) narrow outbound access. Canonical doc: HTTP: curl and wget <../docs/reference/http-curl-and-wget.md>.\n- SSH (bare-openssh) — The stock booter loads bare-ssh2 from the workspace package bare-os-openssh (vendored upstream under vendor/bare-ssh2). Initd starts bare-openssh automatically unless disabled. npm run build -w bare-os-openssh stages /bin/sshd, /etc/ssh/sshd_config, and merged man pages into kernel/ and the seeder mirror. Implementation: packages/bare-os-booter/lib/bare-openssh.js <../packages/bare-os-booter/lib/bare-openssh.js>. Host BARE_OS_SSH_LISTEN_PORT and BARE_OS_SSH_BIND_ALL are copied into guest vfs.env when set on the host.\n\nBUILDING THE IMAGE\n\n- From the repo root, rebuild staged /bin utilities: node packages/bare-os-coreutils/build.mjs.\n- Keep kernel/ <../kernel/> and packages/bare-os-seeder/kernel/ <../packages/bare-os-seeder/kernel/> identical (node scripts/verify-kernel-seeder-parity.mjs).\n- Pear staging: use pear-build / app manifests in your Pear project; align pear.json channels with BARE_OS_PEAR_* env vars on the boot host.\n\nHDMS HOOKS\n\nUse ctx.bareOsSubscribeHdmsLifecycle to run logic when extra drives mount after unlock (kind: 'activate', labels) or before guest teardown (kind: 'deactivate').","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","11","kernel","pear","cookbook","chapter","extensions","and","workflows"],"seeAlso":[{"name":"devguide-12-bare-modules-and-pear-ecosystem","section":7},{"name":"devguide-10-glossary-and-faq","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/11-kernel-pear-cookbook.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-12-bare-modules-and-pear-ecosystem","section":7,"title":"Chapter 12 — Bare modules, ctx.bare, and the Pear ecosystem","synopsis":["man 7 devguide-12-bare-modules-and-pear-ecosystem","Developer guide chapter (developer-guide/12-bare-modules-and-pear-ecosystem.md)"],"description":"CHAPTER 12 — BARE MODULES, CTX.BARE, AND THE PEAR ECOSYSTEM\n\nThis chapter ties together *Holepunch bare- packages, the Pear host runtime, and how Bare OS exposes a curated subset to in-image** scripts.\n\nTIERS OF ACCESS (IMAGE, PEAR EMBED, HOST, MIRROR)\n\n1. /lib/bare (system image, primary) — bare-os-bare-libs builds one IIFE per manifest row into kernel/lib/bare/bundles/ (mirrored on the seeded Hyperdrive). It also copies bare-module-manifest.json into kernel/lib/bare/. manifest.json lists successful bundles; stale *bundles/.js files are pruned on each successful build. At boot, drive bundles run first (unless BARE_OS_BARE_DRIVE_BUNDLES=0**).\n\n2. Pear booter (bare-module-manifest.data.mjs) — The stock booter package ships packages/bare-os-booter/lib/bare-module-manifest.json (normative JSON, edited or synced from the catalog) and a generated sibling bare-module-manifest.data.mjs that export default the same object. Under pear run, import.meta.url is pear://…; bare-fs cannot open pear: URLs passed as URL instances because normalization uses bare-url.fileURLToPath ( file: only). Therefore loadBareModuleManifest() reads the embedded .data.mjs on Pear so the manifest stays in the traced module graph. On file: dev checkouts it prefers the JSON on disk (live edits) and falls back to the embedded copy if the file is missing. Regenerate .data.mjs with npm run sync:bare-manifest or node scripts/generate-bare-module-manifest-data.mjs; CI runs npm run verify:manifest-data.\n\n3. ctx.bare (host fallback) — Unless BARE_OS_BARE_HOST_IMPORTS=0, the booter then import()s manifest packages still missing after drive merge. Under pear run (booter import.meta.url is pear:), bundle: true rows are skipped for host import() (keys come from /lib/bare/bundles/* only; avoids bare-module MODULE_NOT_FOUND / referrer errors for npm names like holesail). Under file: dev trees, bundle: true may still be host-imported when the drive bundle did not fill the key. Remaining host imports cover native or Bare-only packages that could not be bundled, or when the image is older than the manifest. Set BARE_OS_BARE_HOST_IMPORTS=0 for a fully image-local ctx.bare (no Pear host node_modules participation). Disable all ctx.bare with BARE_OS_BARE_MODULES=0. For narrow harnesses, session env may set BARE_OS_BARE_HOST_SKIP_CTX_KEYS (comma-separated ctxKey list to skip) or BARE_OS_BARE_HOST_ONLY_CTX_KEYS (allowlist — only those keys are host-imported). Manifest rows may include optional tier (core vs extended) and risk (low, medium, high) for distributor policy; the build honors tier via BARE_OS_BUNDLE_TIER.\n\nBoot cold path / stdlib budget: the stock booter measures drive merge + host import() resolution for ctx.bare and sets BARE_OS_BOOT_BARE_STDLIB_RESOLUTION_MS before the guest starts. Operators may set BARE_OS_BOOT_BUDGET_MS_BARE_STDLIB to log boot-perf.json / stderr warnings when resolution exceeds the budget; combine with BARE_OS_BUNDLE_TIER=core (or a smaller manifest) to shrink cold I/O. Use node scripts/kernel-microbench.mjs for regression-shaped timings (not a literal Pear cold boot).\n\n4. The full mirror (discoverability) — A local checkout of Holepunch repos (for example holepunchto_repos under your Pear tooling tree) lists on the order of 150+ repositories whose names start with bare-. Many are native addons, platform-specific (mobile, GUI, FFmpeg, …), or developer tools. The manifest can list them for ctx.bare, but only rows that bundle cleanly become real drive IIFEs; the rest rely on host import or stubs until you trim the manifest.\n\nMAINTENANCE WORKFLOW\n\n- Holepunch catalog (maximal npm set) — From the repo root:\n\n npm run gen:bare-catalog\n npm run sync:bare-manifest\n npm install\n\nThis refreshes docs/bare-holepunch-catalog.json <../docs/bare-holepunch-catalog.json> (every *holepunchto/bare- repo plus npm latest, minus scripts/bare-catalog-overrides.json <../scripts/bare-catalog-overrides.json>), then merges published packages into bare-module-manifest.json <../packages/bare-os-booter/lib/bare-module-manifest.json> and replaces booter optionalDependencies from that catalog (anything not includedInBooter is dropped). sync:bare-manifest rewrites entries only and preserves the curated top-level pearEntries array (pear-build, pear-bundle, pear-ref, bare-bundle-compile, bare-bundle-evaluate). packages/bare-os-bare-libs/build.mjs resolves package.json #imports with host platform / bare conditions so new Holepunch modules (Bluetooth, native UI, …) bundle without a Node-only default. CI runs npm run gen:bare-catalog:check so the committed catalogs entries (and source**) stay in sync with live npm/GitHub.\n\nscripts/bare-ctx-import-overrides.json <../scripts/bare-ctx-import-overrides.json> adjusts a few packages for ctx.bare / esbuild: namespace exports (*export: ), bare-node-runtime/global** as a side-effect entry, etc. Edit this when npm packages have no default export or need a subpath.\n\n- Add or remove a ctx.bare entry by hand — Edit the manifest and booter dependencies / optionalDependencies as needed. The bundle field in the manifest is legacy metadata; bare-os-bare-libs attempts every row. Prefer the catalog + sync path for *bare- rows so ctxKey** and semver ranges stay consistent.\n\n- Refresh /lib/bare on the image — From the repo root:\n\n npm run build -w bare-os-bare-libs\n\nOptional BARE_OS_BUNDLE_TIER=core builds only manifest rows with \"tier\": \"core\" (default tier when omitted). Use all or unset for the full catalog.\n\nThen re-run the seeder so kernel/lib/bare/ is copied into the Hyperdrive (the seeder invokes this build automatically when running from a file: URL). Check manifest.json → bundleStats after a build for how many IIFEs succeeded vs stub-only.\n\n- Node vs Pear/Bare — On Node, buildBareCtxObjectFromHost skips manifest rows with nativeHint: true so optional Bare-native packages are not import()d (avoids stray failures and unhandled rejections from addons). On Pear/Bare, the full manifest is loaded in parallel.\n\n- Pear — Continue to use node scripts/ensure-pear-node-modules.mjs packages/bare-os-booter before pear run so hoisted node_modules resolve like npm (see PEAR-RUN.md <../docs/PEAR-RUN.md>). After any manifest or catalog edit, run npm run sync:bare-manifest before pear stage so bare-module-manifest.data.mjs matches the JSON.\n\n- Local Holepunch clone inventory — After editing the manifest or before a release, run npm run audit:holepunch-clones to refresh docs/audit/holepunch-clone-sync-report.json <../docs/audit/holepunch-clone-sync-report.json> against BARE_OS_HOLEPUNCH_CLONES_ROOT. To fail CI when selected clones lag origin/main, list their directory names in docs/audit/holepunch-drift-repos.json <../docs/audit/holepunch-drift-repos.json> and set BARE_OS_HOLEPUNCH_DRIFT_CHECK=1 (see scripts/README.md <../scripts/README.md>).\n\n- mirror-drive (Holepunch) audit — The stock VFS union and */mirror/ overlays remain the supported read-mostly composition path. The upstream mirror-drive package is a candidate for a future env-gated fast path (read-only layering); treat any integration as parity-tested against union semantics and document fallback when the package is absent. See BARE_OS_VFS_UNION_PREFIXES in the environment appendix and ctx.bareOsEmitMirrorDriveHint** above.\n\nRUNTIME CAPS\n\nctx.bareOsRuntimeCaps.features includes bareCtxModules, bareDriveBundles, and bareHostImportsForCtx so kernels can see whether host fallbacks are enabled.\n\nPEAR IPC CHANNEL REGISTRY\n\nctx.bareOsPearIpcEmit(channel, payload) is a host bridge for pear-ipc <https://github.com/holepunchto/pear-ipc>-style messaging. Well-known channel strings are listed in packages/bare-os-booter/lib/bare-os-pear-ipc-registry.js and mirrored as JSON under /proc/bare_os/pear_ipc.json (and the flat /proc/bare_os_pear_ipc_registry alias) so operators and kernels share one vocabulary for reload, mirror, and telemetry hints.\n\nctx.bareOsPearIpcRequest(channel, payload, { timeoutMs? }) correlates bareOsIpcReqId on payload and awaits process.emit('bare-os:pear-ipc-response', { bareOsIpcReqId, result?, error? }) on Node-style hosts. Use for request/response pairs alongside bareOsPearIpcEmit.\n\nMirror-drive hints: ctx.bareOsEmitMirrorDriveHint({ label?, key? }) emits bare-os:mirror-drive-hint for Holepunch-style snapshot workflows (see kernel extensions <../docs/reference/kernel-extensions.md>).\n\nBlind-peer style hint: ctx.bareOsEmitBlindPeerHint(payload) forwards a capped JSON object on Pear IPC as bare_os_blind_peer_hint (topic/key material stays opaque strings; the guest does not verify blind-relay crypto).\n\nHost-only eval probe: ctx.bareOsHostCapability('bundleEvaluate') is true when the host advertises BARE_OS_HOST_BUNDLE_EVALUATE=1, documenting an optional cross-worker <https://github.com/holepunchto/cross-worker> / bare-bundle-evaluate <https://github.com/holepunchto/bare-bundle-evaluate> path. Actual evaluation still happens outside the guest VFS trust boundary.\n\nDiscord bots (ctx.bare.discordJS) — The booter vendors bare-discord-js (official discord.js 14 with Bare Node-builtin remaps) and attaches the loaded module as ctx.bare.discordJS. Guest scripts have no import/require; construct bots from that object (Client, GatewayIntentBits, Events, REST, …). Stock /bin/discord-bot is a ping-pong example (/ping and the message ping → pong). Token sources: guest DISCORD_TOKEN, --env / DISCORD_ENV_FILE (VFS .env), or a host DISCORD_ENV_FILE / DISCORD_TOKEN copied into the session before the kernel starts. Disable with BARE_OS_DISCORD=0. See examples/discord-ping-pong/ and man discord-bot.\n\nbare-fetch content encodings (Capability word 6 doc alignment) — When the host fetch implementation is Holepunch bare-fetch 3, Content-Encoding negotiation may include br and zstd in addition to gzip depending on platform support. Responses may expose type and Headers.getSetCookie() (forwarded by in-guest web_fetch). In-image scripts should not assume a fixed encoding list; treat Accept-Encoding as host-defined. SPDX license identifiers on catalog rows (when present) are metadata for distributors, not a runtime guarantee inside the guest.\n\nNEW: CTX.PEAR SURFACE AND /BIN/PEAR (2026)\n\nA parallel ctx.pear surface exposes Pear-level development tooling to in-image scripts.\n\n- Populated from pearEntries in bare-module-manifest.json (pear-build, pear-bundle, pear-ref, bare-bundle-compile, …).\n- Static host imports under pear:// via bare-os-ctx-pear-host.js (see HDMS manager pattern — no dynamic import(\"pkg\") from guest bundles).\n- /bin/pear: help, info, list, init, stage, release, seed (build/bundle alias stage).\n\nGuest workflow (no host Pear CLI required for release):\n\n pear init && pear stage && pear release . && pear seed .\n appstore install my-app pear://0.<length>.<key> --yes\n appstore launch my-app\n\nFull operator guide: docs/guides/guest-pear-and-appstore-workflow.md <../docs/guides/guest-pear-and-appstore-workflow.md>.\n\nDesign and audit: docs/design/ctx-pear-surface-and-bare-audit-plan.md, docs/audit/ctx-bare-audit-notes.md.\n\nSEE ALSO\n\n- Chapter 5 — Modules and import <05-modules-and-imports.md>\n- Chapter 2 — The context object <02-the-context-object.md>\n- Handbook — Booter runtime <../handbook/04-the-booter-runtime.md>\n- packages/bare-os-bare-libs/README.md <../packages/bare-os-bare-libs/README.md>\n\n← Kernel + Pear cookbook <11-kernel-pear-cookbook.md> · Modules and import → <05-modules-and-imports.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","12","bare","modules","and","pear","ecosystem","chapter","the"],"seeAlso":[{"name":"devguide-13-holepunch-contributor-track","section":7},{"name":"devguide-11-kernel-pear-cookbook","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/12-bare-modules-and-pear-ecosystem.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-13-holepunch-contributor-track","section":7,"title":"Chapter 13 — Holepunch contributor track","synopsis":["man 7 devguide-13-holepunch-contributor-track","Developer guide chapter (developer-guide/13-holepunch-contributor-track.md)"],"description":"CHAPTER 13 — HOLEPUNCH CONTRIBUTOR TRACK\n\nThis chapter maps Holepunch repos to concrete Bare OS implementation surfaces.\n\nCORE LEARNING PATH\n\n1. Networking: hyperdht, hyperswarm, protomux\n2. Storage: hypercore, corestore, hyperbee, hyperdrive\n3. Collaboration: autobase, hyperdb, hyperschema\n4. Runtime/app lifecycle: bare-runtime, pear, pear-runtime, pear-ipc\n\nBARE OS TASKS BY AREA\n\n- Networking and control plane\n- /bin: dhtscan, dhttop, swarmdoctor, p2ptrace, peerctl, dhtctl\n- /proc: swarm, dht_status.json, peer_details.json, route_summary.json\n- Storage and replication\n- /bin: corestorectl, routeview, swarmmap\n- /proc: replication, hyperdrive_sparse_index.json, union.json\n- App lifecycle and trust\n- /bin: appctl, trustctl, ctxbaredoctor\n- policy examples: kernel/etc/bare-os/apps.registry.example.json, trust.policy.example.json\n\nSUGGESTED FIRST CONTRIBUTIONS\n\n- Add a new /proc/bare_os structured snapshot and expose it through a companion command.\n- Extend appctl with pinned-length checkout support for release workflows.\n- Add integration tests that boot the booter, join a local swarm, and verify replicated app state.\n\nMAINTAINER TOOLING\n\n- npm run audit:holepunch-clones\n- npm run report:holepunch-runtime-compat\n- npm run gen:bare-catalog:tiers\n- node scripts/release-checklist.mjs","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","13","holepunch","contributor","track","chapter"],"seeAlso":[{"name":"devguide-13-privacy-telemetry-pii","section":7},{"name":"devguide-12-bare-modules-and-pear-ecosystem","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/13-holepunch-contributor-track.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-13-privacy-telemetry-pii","section":7,"title":"Privacy, telemetry, and PII (Capability word 10)","synopsis":["man 7 devguide-13-privacy-telemetry-pii","Developer guide chapter (developer-guide/13-privacy-telemetry-pii.md)"],"description":"PRIVACY, TELEMETRY, AND PII (CAPABILITY WORD 10)\n\nBare OS telemetry is operator-controlled and bounded. Guests must treat every field as potentially visible to hosts, log sinks, and replicated drives.\n\nFIELDS TO SCRUB OR NEVER EMIT\n\nWhen building custom NDJSON / OTel mirrors or Pear-side aggregators, treat these as PII or secret-adjacent unless you have an explicit retention policy:\n\n- Identity: BARE_OS_SESSION_ID, BARE_OS_PUBLIC_KEY, device or account ids from Pear, HDMS vault labels that name people.\n- Network: full URLs with query strings, raw IP addresses paired with timestamps, DHT bootstrap strings copied from operator clipboards.\n- Crypto / auth: TLS session keys, Hypercore secret keys, multisig payloads, BARE_OS_LKG_SYSTEM_KEY_HEX, any TOKEN or SECRET env values.\n- Paths: home directory absolute paths on the host when they include real usernames (prefer basenames already used in $HOME mapping).\n- Capability word 8 fields: sessionForkGeneration, vaultRotateCount, multisig / trust-graph ids surfaced as pointers, OIDC publishing URLs, subprocess uidGidMapHint, RocksDB / sidecar manifest pointers — treat as operator metadata; scrub before cross-tenant export.\n- Capability word 9 fields: bareModuleCryptoStagingProbeId, bareModuleProbeClass, Pear stage / appling / updater / radio / wakeups sketches from *BARE_OS__JSON** env mirrors, SOCKS / HTTP proxy map keys (host-only interpretation) — treat as deployment fingerprinting; scrub or bucket before multi-tenant export.\n- Capability word 10 fields: pearInspectLoggerTlsProbeId, bareRpcProbeClass, Pear doctor / workshop / RTI / user-dirs sketches, Bare logger tap payloads, mTLS proxy map keys, thread-pool telemetry JSON — treat as operator metadata; scrub before cross-tenant export.\n- Capability word 11 fields: hypercorePackHrpcLifecycleProbeId, hypercore replicate budget / drive graph / protomux backpressure / Pear matrix / bundle preload / HRPC allowlist / sidecar cap / git LFS / net QoS / storage tier / indexer catchup / multisig quorum / relay geo sketches — operator hints only; no secret material in stock paths.\n\nStock emitters avoid logging env wholesale; /proc/self/environ omits secret-like keys. Prefer hashed or bucketed counters (e.g. pairing backoff counts) over raw payloads.\n\nGDPR / SUBPROCESSORS (OPERATOR TEMPLATE)\n\nOperators running Bare OS as part of a service should maintain a subprocessor list (who processes telemetry, drive replication, Pear runtime updates, HDMS pairing) and tie it to retention policies. The stock tree does not ship legal text; use this section as a checklist when filling DPA / privacy policy annexes.\n\nSCHEMA VERSIONS\n\n- NDJSON lifecycle / telemetry: see BARE_OS_LIFECYCLE_SCHEMA_VERSION (10 in stock tree) and rows in docs/reference/compatibility-matrix.md <../docs/reference/compatibility-matrix.md>.\n- OTel-inspired lines: otlSchemaVersion: 7, example kernel/etc/bare-os/otel-jsonl.example.json <../kernel/etc/bare-os/otel-jsonl.example.json>, schema docs/schemas/otel-bare-os-jsonl.schema.json <../docs/schemas/otel-bare-os-jsonl.schema.json>.\n- Audit JSON: auditSchemaVersion: 7 (delegate depth / Capability word 910 RPC classes); optional requestSmugglingClass remains default none in stock emitters where applicable.\n\nRELATED\n\n- Kernel extensions env table <../docs/reference/kernel-extensions.md>\n- Security and trust <09-security-and-trust.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","13","privacy","telemetry","pii","and","capability","word"],"seeAlso":[{"name":"devguide-14-how-to-add-seed-rpc","section":7},{"name":"devguide-13-holepunch-contributor-track","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/13-privacy-telemetry-pii.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-14-how-to-add-seed-rpc","section":7,"title":"How to add a seed RPC","synopsis":["man 7 devguide-14-how-to-add-seed-rpc","Developer guide chapter (developer-guide/14-how-to-add-seed-rpc.md)"],"description":"HOW TO ADD A SEED RPC\n\nUse this checklist when introducing a new bare_os.* RPC over the seeder channel.\n\n1) DEFINE THE METHOD NAME ONCE\n\n- Add the short method token to packages/bare-os-protocol/lib/seed-rpc-methods.js.\n- Keep it in the exported registry so protocol/booter/seeder share one source of truth.\n\n2) IMPLEMENT SEEDER-SIDE HANDLER\n\n- Add handling in packages/bare-os-protocol/lib/channel.js inside the seed RPC switch.\n- Keep responses JSON-safe and bounded; avoid secret material in payloads.\n- Return structured error text for invalid args (module, method, parse failures).\n\n3) WIRE BOOTER EXPECTATIONS\n\n- If the booter depends on this RPC during boot, gate it behind explicit policy/env controls.\n- Keep failure posture clear (warn-and-continue vs strict fail) in booter logs and docs.\n\n4) EXPOSE OPERATOR VISIBILITY (OPTIONAL)\n\n- If useful for runtime introspection, surface a derived snapshot in /proc/bare_os/....\n- Prefer concise, non-secret summaries over raw host payload dumps.\n\n5) ADD TESTS\n\n- Protocol tests in packages/bare-os-protocol/test.js for encode/decode + handler behavior.\n- Booter tests for strict/relaxed paths when the RPC affects boot admission or policy.\n- Seeder tests for env wiring / payload shape where applicable.\n\n6) UPDATE DOCS AND CONTRACTS\n\n- Mention the RPC in docs/reference/kernel-extensions.md and relevant handbook sections.\n- If schema-bearing payloads are added, include/update a JSON schema under docs/schemas/.\n- Run npm run pretest before submitting.","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","14","how","to","add","seed","rpc"],"seeAlso":[{"name":"devguide-15-how-to-add-proc-node","section":7},{"name":"devguide-13-privacy-telemetry-pii","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/14-how-to-add-seed-rpc.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-15-how-to-add-proc-node","section":7,"title":"How to add a /proc/bare_os node","synopsis":["man 7 devguide-15-how-to-add-proc-node","Developer guide chapter (developer-guide/15-how-to-add-proc-node.md)"],"description":"HOW TO ADD A /PROC/BARE_OS NODE\n\nThis guide covers adding a new booter-backed proc file under /proc/bare_os.\n\n1) ADD A VFS PROC HANDLER\n\n- Implement a procBareOs...Text()/...JsonText() builder in packages/bare-os-booter/index.js options passed to createVfs(...).\n- Keep output deterministic and non-secret; include a schema field in JSON payloads.\n\n2) REGISTER THE PATH\n\n- Add the path in booter proc routing (and aliases if needed) in packages/bare-os-booter/lib/vfs.js.\n- Include it in /proc/bare_os/index.json generation metadata.\n\n3) KEEP BARETOP SNAPSHOT LISTS ALIGNED\n\n- Update packages/bare-os-coreutils/lib/baretop-snapshot.js proc entry list if the node is relevant for dashboards.\n- Keep booter-side snapshot entry sets in sync where required.\n\n4) TEST COVERAGE\n\n- Add/extend booter tests in packages/bare-os-booter/test.js for payload schema/shape.\n- Add coreutils baretop fixture checks when panel/snapshot behavior changes.\n\n5) DOCUMENT AND VERSION\n\n- Update handbook/reference docs mentioning proc surfaces and schema versions.\n- If this changes a tracked schema contract, update docs/reference/posix-compliance-matrix.json or related contract docs.\n- Ensure scripts/verify-doc-contracts.mjs and other relevant verifiers stay green.","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","15","how","to","add","proc","node","bare"],"seeAlso":[{"name":"devguide-16-how-to-add-bin-utility","section":7},{"name":"devguide-14-how-to-add-seed-rpc","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/15-how-to-add-proc-node.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-16-how-to-add-bin-utility","section":7,"title":"How to add a /bin utility","synopsis":["man 7 devguide-16-how-to-add-bin-utility","Developer guide chapter (developer-guide/16-how-to-add-bin-utility.md)"],"description":"HOW TO ADD A /BIN UTILITY\n\nUse this checklist whenever you add or rename a command in bare-os-coreutils.\n\nIMPLEMENTATION CHECKLIST\n\n1. Add the command implementation in packages/bare-os-coreutils/src/.\n2. Add the command name to packages/bare-os-coreutils/lib/commands.mjs (sorted).\n3. Add or update the man page JSON under packages/bare-os-coreutils/man/pages/.\n4. Run npm run build -w bare-os-coreutils to regenerate kernel/bin/* and merged man DB.\n\nCONTRACT AND DOCS CHECKLIST\n\n5. Update POSIX coverage metadata in docs/reference/posix-compliance-matrix.json when behavior/profile changes.\n6. Regenerate derived docs (docs/reference/posix-dashboard.md) via pretest/generation scripts.\n7. Ensure handbook/reference sections mention notable behavior differences or unsupported flags.\n\nIMAGE AND PARITY CHECKLIST\n\n8. Verify kernel ↔ seeder parity with node scripts/verify-kernel-seeder-parity.mjs.\n9. Confirm no missing kernel/bin/* pragmas or build drift in pretest.\n\nTEST CHECKLIST\n\n10. Add focused tests in packages/bare-os-coreutils/test/ for success + error paths.\n11. Add booter integration coverage in packages/bare-os-booter/test.js when runtime/VFS interaction matters.\n12. Run at minimum:\n- npm run test -w bare-os-coreutils\n- npm run test -w bare-os-booter -- test.js (or focused test file)\n- npm run pretest","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","16","how","to","add","bin","utility"],"seeAlso":[{"name":"devguide-17-how-to-add-shell-builtin","section":7},{"name":"devguide-15-how-to-add-proc-node","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/16-how-to-add-bin-utility.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-17-how-to-add-shell-builtin","section":7,"title":"17 — How to add a shell builtin safely","synopsis":["man 7 devguide-17-how-to-add-shell-builtin","Developer guide chapter (developer-guide/17-how-to-add-shell-builtin.md)"],"description":"17 — HOW TO ADD A SHELL BUILTIN SAFELY\n\nUse this checklist whenever you add or change a builtin in packages/bare-os-booter/lib/shell.js.\n\n1) RUNTIME CONTRACT\n\n- Add the builtin name to the builtin registry.\n- Keep return semantics exit-code based (ctx.exitCode) and deterministic.\n- Ensure errors use clear messages and distinguish parse/expansion/runtime when possible.\n\n2) PARSER AND ARGV BEHAVIOR\n\n- Verify tokenization and quoting rules for builtin arguments.\n- Validate identifier-like arguments (export, unset, readonly) explicitly.\n- Confirm redirection + pipeline behavior is unchanged unless intentionally modified.\n\n3) TESTS (REQUIRED)\n\n- Add unit behavior tests in packages/bare-os-booter/test.js.\n- Add at least one negative-path test (invalid args / invalid state).\n- Add one integration-style shell line proving interaction with other constructs.\n\n4) DOCS AND TRACEABILITY\n\n- Update handbook/09-posix-utilities-shell-and-vfs.md if user-visible behavior changed.\n- Update docs/reference/posix-issue7-traceability.md shell mapping row if semantics moved.\n- Document unsupported differences in docs/reference/shell-unsupported-behavior.md.\n\n5) VERIFICATION COMMANDS\n\n- npm run test -w bare-os-booter\n- npm test at repo root for full gates","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","17","how","to","add","shell","builtin","safely"],"seeAlso":[{"name":"devguide-18-how-to-add-shell-grammar-feature","section":7},{"name":"devguide-16-how-to-add-bin-utility","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/17-how-to-add-shell-builtin.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-18-how-to-add-shell-grammar-feature","section":7,"title":"18 — How to add a shell grammar feature safely","synopsis":["man 7 devguide-18-how-to-add-shell-grammar-feature","Developer guide chapter (developer-guide/18-how-to-add-shell-grammar-feature.md)"],"description":"18 — HOW TO ADD A SHELL GRAMMAR FEATURE SAFELY\n\nFollow this flow for tokenizer/parser/AST changes in packages/bare-os-booter/lib/shell.js and lib/shell-tokenizer.js.\n\n1) GRAMMAR FIRST\n\n- Update docs/reference/shell-grammar.md with the new production or token form.\n- Define lexer mode impact (normal, single, double, arith, heredoc).\n\n2) DETERMINISTIC PARSE SHAPE\n\n- Keep bareOsShellAstSnapshot(...) stable for unchanged inputs.\n- Ensure token span metadata remains monotonic (start <= end).\n- Preserve byte-identical snapshot output for identical source.\n\n3) ERROR BEHAVIOR\n\n- Emit actionable syntax diagnostics (unmatched quotes/parens, malformed arithmetic).\n- Keep syntax failures distinct from expansion/runtime failures.\n\n4) TESTS (REQUIRED)\n\n- Add tokenizer tests for mode transitions and escaping.\n- Add parser tests for nested and mixed compound forms.\n- Add fuzz-lite punctuation/quote crash-resistance coverage.\n- Include a long-script parse/perf guard test.\n\n5) VERIFICATION COMMANDS\n\n- npm run test -w bare-os-booter\n- npm test for repo-wide gates","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","18","how","to","add","shell","grammar","feature","safely"],"seeAlso":[{"name":"devguide-19-how-to-fish-keybinding-completer","section":7},{"name":"devguide-17-how-to-add-shell-builtin","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/18-how-to-add-shell-grammar-feature.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-19-how-to-fish-keybinding-completer","section":7,"title":"How to extend fish-style keybindings and completion","synopsis":["man 7 devguide-19-how-to-fish-keybinding-completer","Developer guide chapter (developer-guide/19-how-to-fish-keybinding-completer.md)"],"description":"HOW TO EXTEND FISH-STYLE KEYBINDINGS AND COMPLETION\n\nThe interactive line editor lives in packages/bare-os-booter/lib/fish-readline.js. Tab completion is orchestrated by packages/bare-os-booter/lib/completion-engine.js.\n\nCOMPLETER REGISTRATION\n\n1. From a host/extension, call ctx.bareOsRegisterCompleter(name, fn) during boot (same session as the REPL).\n2. The completer receives the current ctx, ctx.vfs, cursor context, and returns candidate strings (see completeLine).\n3. Unregister with ctx.bareOsUnregisterCompleter(name) when dismantling extensions.\n\nKeep completers bounded: honor VFS_TIMEOUT_MS behavior inside completion-engine.js and avoid unbounded readdir.\n\nKEYBINDINGS\n\nRaw TTY keys are handled inside createFishReadLine. When adding a new chord, preserve bracketed paste and history search state: clear or save historySearchActive consistently and call render() after mutations.\n\nTESTS\n\nAdd focused brittle tests under packages/bare-os-booter/test.js (or a split *test.shell-.js** file) for completion and tokenizer stability; avoid timing-dependent assertions on real TTYs.","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","19","how","to","fish","keybinding","completer","extend","style","keybindings","and","completion"],"seeAlso":[{"name":"devguide-20-tui-and-sdk","section":7},{"name":"devguide-18-how-to-add-shell-grammar-feature","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/19-how-to-fish-keybinding-completer.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-20-tui-and-sdk","section":7,"title":"Chapter 20 — Guest TUI framework (ctx.tui)","synopsis":["man 7 devguide-20-tui-and-sdk","Developer guide chapter (developer-guide/20-tui-and-sdk.md)"],"description":"CHAPTER 20 — GUEST TUI FRAMEWORK (CTX.TUI)\n\nGuest scripts (async function run(ctx, argv)), /bin utilities, and guest Pear apps can build full-screen terminal apps without import or require. The booter attaches ctx.tui (and ctx.sdk) after the REPL session exists, unless BARE_OS_TUI=0.\n\nSource is first-party raw JS under lib/tui/src/ <../lib/tui/src/> concatenated to /lib/bare-os/tui.js <../kernel/lib/bare-os/tui.js>. It is not Holepunch ctx.bare.bareTui (that bundle still uses native TTY fds and require).\n\nAPI reference: docs/reference/ctx-tui.md <../docs/reference/ctx-tui.md>. Inspector: tui / man tui.\n\nMINIMAL APP\n\n async function run(ctx) {\n if (!ctx.tui || !ctx.tui.isTTY()) {\n ctx.console.error('needs a TTY')\n ctx.exitCode = 1\n return\n }\n await ctx.tui.run({\n init: function () {\n this.n = 0\n return null\n },\n update: function (msg) {\n if (ctx.tui.key.matches(msg, 'q', 'ctrl+c')) return [this, ctx.tui.quit]\n if (ctx.tui.key.matches(msg, 'up', 'k')) this.n++\n if (ctx.tui.key.matches(msg, 'down', 'j')) this.n--\n return [this, null]\n },\n view: function () {\n return ctx.tui\n .style()\n .border(ctx.tui.style.borders.rounded)\n .padding(1, 2)\n .render('count: ' + this.n + '\\n\\n↑/↓ change · q quit')\n }\n })\n }\n\nRepo examples: examples/tui-counter/ <../examples/tui-counter/>, examples/tui-form/ <../examples/tui-form/>, examples/tui-dashboard/ <../examples/tui-dashboard/>, examples/tui-irc/ <../examples/tui-irc/>, examples/tui-summon/ <../examples/tui-summon/>. Live guest: tui demo.\n\nTEA CONTRACT\n\n- init() → first command or null\n- update(msg) → [model, cmd] (or a bare model)\n- view() → string (pure; do not start I/O here)\n\nCommands: ctx.tui.quit, tick, every, batch, sequence, suspend.\n\nThe Program suspends Fish (suspendReplForSubprocess), enters the alternate screen, and always restores the terminal in try/finally (including thrown update).\n\nFor editors and floating UI, pass { buffer: 'cell' }. The base view() stays a fixed-size screen; return overlay({ width, height }) or overlays(...) as { row, col, text } so a modal does not push later rows down. ctx.tui.modal uses this when the Program is in cell mode.\n\nMAPPING FROM HOLEPUNCH BARE-TUI\n\n| Holepunch | Bare OS guest |\n| require('bare-tui') | ctx.tui |\n| new Program(model).run() | ctx.tui.run(model) |\n| list.create(...) | ctx.tui.list.create(...) |\n| style() | ctx.tui.style() |\n| host bare-fs filepicker | ctx.tui.filepicker.create({ vfs: ctx.vfs }) |\n\nTESTING\n\nInject streams; fps: 0 renders synchronously:\n\n await ctx.tui.run(model, {\n input,\n output,\n isTTY: true,\n fps: 0,\n width: 80,\n height: 24\n })\n\nAssert on ctx.tui.style.stripAnsi(model.view()), not only the write capture (the renderer is a diff stream).\n\nCTX.SDK\n\nSame object as ctx.tui at ctx.sdk.tui. Extra namespaces for app authors:\n\n| Namespace | Role |\n| sdk.tty | isTTY, size, acquire / release, withSession |\n| sdk.theme | name, tokens, apply(name) → bareOsApplyTheme |\n| sdk.env | get / has / term / colorDepth / noColor |\n| sdk.vfs | list, readText, writeText |\n| sdk.proc | read(name) under /proc/bare_os/ |\n| sdk.ipc | pushJson / takeJson when ctx.bareOsIpc exists |\n| sdk.app | run, confirm, prompt, select, form |\n\nSTOCK UTILITIES\n\nTTY mode for dhttop, swarmmap, routeview, holepunch-view, swarmtop, chat, edit, nano, baretop, btop, irc, and summon calls ctx.tui.run when the SDK is attached (edit/nano/baretop/irc/summon use buffer: 'cell'). agent --setup uses ctx.tui.form. All of these keep the pre-SDK path if BARE_OS_TUI=0. irc defaults to Libera.Chat TLS (irc.libera.chat:6697); see irc-client.md <../docs/reference/irc-client.md>. summon is the text web browser; see summon.md <../docs/reference/summon.md>.\n\nENVIRONMENT\n\n- BARE_OS_TUI=0 — omit ctx.tui / ctx.sdk\n- BARE_OS_TUI_NO_ALTSCREEN — full clear instead of ?1049h\n- BARE_OS_TUI_DEBUG — reserved\n- NO_COLOR, BARE_OS_COLOR_DEPTH, BARE_OS_THEME — style / theme\n\n← Apps beyond the shell <07-apps-beyond-the-shell.md> · Testing → <08-testing-and-debugging.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","20","tui","and","sdk","chapter","guest","framework"],"seeAlso":[{"name":"devguide-bare-boot-kernel-phase-alignment","section":7},{"name":"devguide-19-how-to-fish-keybinding-completer","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/20-tui-and-sdk.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-bare-boot-kernel-phase-alignment","section":7,"title":"bare-boot vs stock kernel/init.js phases (alignment)","synopsis":["man 7 devguide-bare-boot-kernel-phase-alignment","Developer guide chapter (developer-guide/bare-boot-kernel-phase-alignment.md)"],"description":"BARE-BOOT VS STOCK KERNEL/INIT.JS PHASES (ALIGNMENT)\n\nHolepunch bare-boot stages an application on disk and hands off to a runtime. Bare OS kernel/init.js is a session kernel on the system Hyperdrive: it configures the guest shell environment, merges boot.policy.json, runs rc.d, kernel.d, and BARE_OS_ONBOOT lines.\n\nROUGH MAPPING (CONCEPTUAL ONLY)\n\n- Resolve entry / bundle — Booter peer wait + drive open — Network / Corestore; optional offline LKG skips peer wait.\n- Materialize files — /boot/init.js load — Kernel bytes from system drive.\n- Apply policy — boot.policy.json merge — Phases skipped, env keys, feature-bit gates, extension deny/pins (v6).\n- Run hooks — rc.local, rc.d, kernel.d, onboot — Ordered snippets; initd starts after boot-ready publishing (booter side).\n- Hand off to app — REPL or SKIP_REPL exit — Not a single “main”; kernel stays in readline unless non-interactive.\n\nThis table is for documentation alignment only — bare-boot is not vendored into the guest image. Prefer Pear IPC and delegate registries for host-specific startup.\n\nSEE ALSO\n\n- KERNEL_CONTRACT — booter boot steps <../docs/architecture/KERNEL_CONTRACT.md>\n- Kernel boot <03-kernel-boot-init.md>\n- Handbook ch. 6 — Kernel and binaries <../handbook/06-kernel-and-binaries.md>\n- bare-subprocess signal → exit <https://github.com/holepunchto/bare-subprocess> (host runtime; compare with ctx subprocess bridge snapshot in kernel-capabilities-index.md <../docs/reference/kernel-capabilities-index.md>)","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","bare","boot","kernel","phase","alignment","stock","init","phases"],"seeAlso":[{"name":"devguide-kernel-explain-and-doctor-conventions","section":7},{"name":"devguide-20-tui-and-sdk","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/bare-boot-kernel-phase-alignment.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-kernel-explain-and-doctor-conventions","section":7,"title":"Kernel doctor and kernel-explain conventions","synopsis":["man 7 devguide-kernel-explain-and-doctor-conventions","Developer guide chapter (developer-guide/kernel-explain-and-doctor-conventions.md)"],"description":"KERNEL DOCTOR AND KERNEL-EXPLAIN CONVENTIONS\n\nStock /bin/kernel-doctor, /bin/kernel-explain, and related tools should emit structured, stable objects for operators:\n\n- Prefer JSON with a top-level schema integer and kind string (boot, vfs, policy, extension, …).\n- Human-oriented message plus machine code (stable identifier, SCREAMING_SNAKE or dotted namespace).\n- Never include secrets (keys, tokens, raw vault bytes); redact paths under personal drive if policy requires.\n\nWhen adding a new diagnostic surface, update handbook, users-manual troubleshooting, and docs/reference proc maps.","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","kernel","explain","and","doctor","conventions"],"seeAlso":[{"name":"devguide-kernel-program","section":7},{"name":"devguide-bare-boot-kernel-phase-alignment","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/kernel-explain-and-doctor-conventions.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-kernel-program","section":7,"title":"Kernel program (governed expansion)","synopsis":["man 7 devguide-kernel-program","Developer guide chapter (developer-guide/kernel-program.md)"],"description":"KERNEL PROGRAM (GOVERNED EXPANSION)\n\nThis document is the governance anchor for the stock kernel expansion: acceptance criteria, traceability to Holepunch Bare stacks (no Node node:* built-ins in guest paths), and operator-facing env and /proc hooks.\n\nIdentifier policy: naming-conventions.md <naming-conventions.md>, naming-migrations.md <naming-migrations.md>, naming-alias-matrix.md <../docs/reference/naming-alias-matrix.md>.\n\nACCEPTANCE CRITERIA (GLOBAL)\n\n1. Bare-only runtime: Guest code uses bare- / pear- modules per bare-node <https://github.com/holepunchto/bare-node> mapping (local mirror: holepunch-repos/holepunchto_repos/bare-node/README.md).\n2. Contracts: Any wire, ctx API, boot policy, or /proc shape change bumps the artifacts in compatibility-matrix.md <../docs/reference/compatibility-matrix.md>.\n3. Docs: Each workstream updates feature-roadmap.md <../docs/reference/feature-roadmap.md>, kernel-extensions.md <../docs/reference/kernel-extensions.md>, and the relevant handbook / users-manual / schema files.\n4. Tests: Stock kernel and booter tests cover new boot env flags and proc JSON where applicable.\n\nPROGRAM VERSION\n\n| Artifact | Value |\n| Proc schema | 3 (see /proc/bare_os/kernel_program.json) |\n| programVersion | 3 |\n| Primary proc path | /proc/bare_os/kernel_program.json |\n| Legacy filename (same payload) | /proc/bare_os/giant_phase_program.json |\n| Flat underscore alias | /proc/bare_os_kernel_program.json / /proc/bare_os_giant_phase_program.json |\n\nBACKLOG BATCHES (300 ITEMS PLANNED)\n\nFour batches of 100 items each (400 rows total planned) are tracked in feature-roadmap.md <../docs/reference/feature-roadmap.md> under Kernel program backlog — batch A, batch B, batch C (in progress), and batch D (in planning).\n\nBatch D includes a major new thread: the P2P App Store (see the formal design at docs/design/p2p-app-store.md). All items continue to follow the governance rules and the kernel-program-extension agent skill workflow.\n\nHighlights shipped in-tree:\n\n- Boot: named bootStage on transaction journal lines and boot checkpoints (schema 2); BARE_OS_BOOT_DRY_RUN; policyFallbackPaths merge; BARE_OS_BOOT_POLICY_PATH; rollback skips via /run/bare-os/boot-rollback.marker + BARE_OS_BOOT_ROLLBACK_APPLY; requireBootBundleSha256Hex + BARE_OS_BOOT_BUNDLE_DIGEST_HEX; BARE_OS_REQUIRE_CTX_API_MIN / BARE_OS_BOOT_ABI_STRICT; initdAdmission → initd env hints; # ConditionEnvironment= / # AssertEnvironment= guards in kernel.d snippets; bootPhases detail on bareOsPublishBootReady.\n- Booter: /run/bare-os/services.json seed; optional BARE_OS_LOADER_AUDIT → /run/bare-os/loader-audit.ndjson; bareOsEmitKernelEvent / bareOsSubscribeKernelEvent; bareOsAcquireKeyHandle (opaque key broker sketch); operatorSketches in /proc/bare_os/kernel_program.json (env JSON).\n- Binaries: kernel-boot-diff, kernel-preflight, kernel-triage, kernel-manifest-validate, kernel-fsck, kernel-home-snapshot (VFS home-tree manifest walker; see packages/bare-os-coreutils/src/kernel-home-snapshot.js); kernel/lib/bare/shell-completion.json generated from commands.mjs.\n- CI: verify-kernel-program-proc-schema.mjs, verify-kernel-program-roadmap-table.mjs (now supports Batch C+), fuzz-boot-policy-json.mjs, kernel-program-release-gate.mjs, kernel-microbench.mjs. The proc snapshot now includes a batchC adjunct (schema 3 / programVersion 3). See bare-os-kernel-program-proc.js.\n\nENVIRONMENT HOOKS (STOCK KERNEL + BOOTER)\n\n| Variable | Purpose |\n| BARE_OS_BOOT_SAFE_MODE | 1 / true — skip rc.d, kernel.ext.d, and onboot after policy merge (recovery-oriented). |\n| BARE_OS_BOOT_TRANSACTION_JOURNAL | 1 / true / ndjson — append boot phase records to /run/bare-os/boot-transaction.ndjson when ctx.vfs supports it. |\n| BARE_OS_BOOT_CHECKPOINT | 1 / true — write /run/bare-os/boot-checkpoint.json after each boot phase (schema 2 includes bootStage). |\n| BARE_OS_BOOT_DRY_RUN | 1 / true — parse boot snippets; skip trusted execLine and kernel.ext.d script execution (CI). |\n| BARE_OS_BOOT_POLICY_PATH | Optional absolute path under /etc/bare-os/ for the primary policy file (default /etc/bare-os/boot.policy.json). |\n| BARE_OS_BOOT_ROLLBACK_APPLY | 1 — merge skipPhases / denyBootPhases from /run/bare-os/boot-rollback.marker JSON when present. |\n| BARE_OS_BOOT_BUNDLE_DIGEST_HEX | Operator-supplied hex digest matched against optional policy requireBootBundleSha256Hex. |\n| BARE_OS_REQUIRE_CTX_API_MIN | Minimum ctx.bareOsCtxApiVersion semver; fails when BARE_OS_BOOT_ABI_STRICT or strict boot policy is on. |\n| BARE_OS_BOOT_ABI_STRICT | 1 — exit boot when ABI min is not satisfied. |\n| BARE_OS_LOADER_AUDIT | 1 — append kernel extension loads to /run/bare-os/loader-audit.ndjson. |\n| BARE_OS_KERNEL_PROGRAM_PROC_JSON | Optional override JSON merged into the kernel program proc snapshot (bounded; non-secret). |\n| BARE_OS_GIANT_PHASE_PROGRAM_JSON | Legacy alias for the same override (non-secret). |\n\nSketches under operatorSketches also honor legacy env names where documented (for example BARE_OS_GP2_NET_DELEGATE_SKETCH_JSON, BARE_OS_OTEL_RESOURCE_ATTRS_GP2_JSON) alongside the preferred BARE_OS_NET_DELEGATE_SKETCH_JSON and BARE_OS_OTEL_RESOURCE_ATTRS_KERNEL_JSON.\n\nKERNEL.EXT.D DROP-IN EXTENSIONS\n\nIn addition to scripts, id, dependsOn, and signaturePointer, drop-ins may set:\n\n- requires — string array, merged into dependsOn (same semantics).\n- after — extension ids that must load before this drop-in (appended to dependsOn).\n- before — extension ids that must load after this drop-in (those ids gain a dependency on this drop-ins id).\n\nWith BARE_OS_KERNEL_EXT_GRAPH=1, the stock kernel writes /run/bare-os/kernel-ext-graph.json after ordering (shape in docs/schemas/kernel-ext-graph.example.json <../docs/schemas/kernel-ext-graph.example.json>).\n\nBATCH A TRACEABILITY (SUMMARY)\n\nItems 1100 map to the first approved plan (boot graph, journal, safe mode, extension ordering, module policy, process/IPC, VFS, networking, security, telemetry, upgrades, dev UX, benchmarks). Implementation status:\n\n- Shipped in tree: boot safe mode, transaction journal, checkpoints, before/after/requires for kernel.ext.d, /proc/bare_os/kernel_program.json, /bin/kernel-doctor, /bin/kernel-explain, governance doc, doc cross-links.\n- Framework / operator hooks: remaining items are tracked via env-driven proc sketches, boot policy versions, and feature-roadmap.md <../docs/reference/feature-roadmap.md>.\n\nOPTIONAL WASM KERNEL BRIDGE\n\nctx.bareOsWasmKernelCompile / ctx.bareOsWasmKernelInstantiate (see packages/bare-os-booter/lib/bare-os-wasm-kernel.js) compile or instantiate a bounded Wasm module when BARE_OS_WASM_KERNEL=1. The booter applies maxBytes, memory page caps, and a wall-clock instantiate timeout; syscall-shaped imports (bare_os_pathconf, bare_os_wall_time_ms32, bare_os_umask_get, optional bare_os_monotonic_ms when BARE_OS_WASM_KERNEL_MONOTONIC_MS, optional bare_os_hostname_peek when BARE_OS_WASM_KERNEL_HOSTNAME_IMPORT, optional bare_os_ctx_api_version_peek when BARE_OS_WASM_KERNEL_CTX_API_PEEK, optional bare_os_posix_profile_peek when BARE_OS_WASM_KERNEL_POSIX_PROFILE_PEEK) are only constructed when BARE_OS_WASM_KERNEL_SYSCALL is enabled and the corresponding ctx hooks exist. Parity note: the full posixXsh.namesCsv surface ( clock_gettime, nanosleep, socket bridge ops, …) lives on ctx.bareOsSyscall in JS — it is not exported into the Wasm import object because those paths are async or bridge-heavy. Wasm guests should call back into JS/host shims when they need syscall parity beyond the sync clock / umask / pathconf imports. Treat Wasm as untrusted: keep modules small, gate on env, and never pass secrets into guest linear memory without a separate review.\n\nSEE ALSO\n\n- 03-kernel-boot-init.md <./03-kernel-boot-init.md>\n- 02-the-context-object.md <./02-the-context-object.md>\n- node-to-bare-modules.md <./node-to-bare-modules.md> — import maps, bare-module, manifest / dual-target notes\n- Handbook ch.11 — Kernel program <../handbook/11-kernel-program-and-research.md>","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","kernel","program","governed","expansion"],"seeAlso":[{"name":"devguide-naming-conventions","section":7},{"name":"devguide-kernel-explain-and-doctor-conventions","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/kernel-program.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-naming-conventions","section":7,"title":"Naming conventions (first-party vs vendored)","synopsis":["man 7 devguide-naming-conventions","Developer guide chapter (developer-guide/naming-conventions.md)"],"description":"NAMING CONVENTIONS (FIRST-PARTY VS VENDORED)\n\nThis repository distinguishes first-party Bare OS sources from vendored third-party trees. Governance wording rules and identifier style apply differently in each.\n\nFIRST-PARTY TREES\n\nSubject to kernel program <kernel-program.md> vocabulary, CI terminology checks (scripts/verify-banned-terminology.mjs), and the alias matrix (Naming alias matrix <../docs/reference/naming-alias-matrix.md>):\n\n- packages/bare-os-booter/, packages/bare-os-protocol/, packages/bare-os-coreutils/, packages/bare-os-seeder/ (except its vendored subtree below)\n- kernel/ except kernel/lib/bare/\n- docs/, handbook/, developer-guide/, users-manual/, scripts/\n\nPrefer boot stage / boot step / capability word language in new prose and APIs. When renaming symbols, keep deprecated aliases until the published deprecation window ends (see Naming migrations <naming-migrations.md>).\n\nVENDORED EXCEPTION\n\nkernel/lib/bare/ (mirrored under packages/bare-os-seeder/kernel/lib/bare/) is vendored. It may contain legacy English tokens, upstream identifiers, and MIME-adjacent strings. The terminology verifier skips this subtree entirely.\n\nENVIRONMENT VARIABLES\n\n- Prefix operational flags with BARE_OS_.\n- Prefer _BOOT_SKIP_STAGES over legacy _BOOT_SKIP spellings where both exist; document aliases in the naming alias matrix.\n\nCTX METHODS\n\n- New APIs use bareOs… camelCase on the injected context object.\n- Canonical boot hook names: bareOsRegisterBootStepHook, bareOsInvokeBootStepHooks, bareOsEmitBareBootStepHint. Legacy …BootPhase… methods remain as thin wrappers.\n\n/PROC AND WIRE-VISIBLE PATHS\n\n- Do not remove legacy proc filenames or JSON keys without a versioned alias period. Internal variable names may use neutral wording while on-disk names stay stable.\n\nEXTENSION AND CAPABILITY IDENTIFIERS\n\n- Use stable string keys aligned with packages/bare-os-protocol capability documentation and docs/schemas/ where applicable.","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","naming","conventions","first","party","vendored"],"seeAlso":[{"name":"devguide-naming-migrations","section":7},{"name":"devguide-kernel-program","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/naming-conventions.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-naming-migrations","section":7,"title":"Naming and contract migrations","synopsis":["man 7 devguide-naming-migrations","Developer guide chapter (developer-guide/naming-migrations.md)"],"description":"NAMING AND CONTRACT MIGRATIONS\n\nThis page tracks non-breaking renames and compatibility paths. Handbook, user manual, and reference docs should stay aligned when entries here change.\n\nBOOT HOOK API (CTX)\n\n| Canonical (preferred) | Legacy alias | Notes |\n| bareOsRegisterBootStepHook(step, fn) | bareOsRegisterBootPhaseHook(phase, fn) | Same matching rules; step and phase are the same string keyspace. |\n| bareOsInvokeBootStepHooks(ev) | bareOsInvokeBootPhaseHooks(ev) | Event objects may include phase, step, and when; hooks match on phase / when:phase as before. |\n| bareOsEmitBareBootStepHint(payload) | bareOsEmitBareBootPhaseHint(payload) | Accepts step or phase in payload; host event name unchanged for listeners. |\n\nDeprecation: legacy names remain supported; no removal date is set until downstream consumers migrate.\n\nBOOT POLICY JSON\n\n| Canonical key(s) | Legacy alias(es) |\n| skipBootStages, denyBootStages | skipPhases, denyBootPhases |\n| bootStagesRequireProcIndexMinSchema | bootPhasesRequireProcIndexMinSchema |\n| bootStagesRequireLifecycleMinSchema | bootPhasesRequireLifecycleMinSchema |\n\nMerge logic accepts both names; first-party docs should cite canonical keys only.\n\nBOOT READY / JOURNAL PAYLOADS\n\n- bareOsPublishBootReady may expose both stages / phases and bootStages / bootPhases mirrors for consumers. Prefer stages / bootStages in new code.\n\nBOOT TRACE JSON (BARE_OS_BOOT_TRACE=JSON)\n\n- Schema bootTraceSchemaVersion: 2 adds canonical step alongside stage and legacy phase (mirror). Parsers should prefer step.\n\nCI GATES\n\n- npm run pretest runs bundle:kernel, verify-banned-terminology, verify-naming-alias-matrix, verify-feature-roadmap-canonical, verify-no-new-giant-phase-identifiers, compatibility matrix checks, and contract verifiers. Changing bareOsCtxApiVersion or capability bits requires updating the linked scripts and docs listed in the root package.json pretest chain.","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","naming","migrations","and","contract"],"seeAlso":[{"name":"devguide-node-to-bare-modules","section":7},{"name":"devguide-naming-conventions","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/naming-migrations.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"devguide-node-to-bare-modules","section":7,"title":"Node built-ins → Bare / Pear modules (guest-safe)","synopsis":["man 7 devguide-node-to-bare-modules","Developer guide chapter (developer-guide/node-to-bare-modules.md)"],"description":"NODE BUILT-INS → BARE / PEAR MODULES (GUEST-SAFE)\n\nFIRST-PARTY KERNEL SOURCES VS VENDORED IIFE BUNDLES\n\nFirst-party “no incomplete markers” policy applies only to hand-authored runtime JavaScript scanned by scripts/verify-runtime-no-incomplete-markers.mjs:\n\n- kernel/init.js <../kernel/init.js> (generated — see below)\n- kernel/lib/init/init-main.js <../kernel/lib/init/init-main.js>\n- kernel/lib/boot/*.js <../kernel/lib/boot/> (boot fragments prepended into init.js)\n- kernel/bin/*.js <../kernel/bin/> (hand-written /bin shims and helpers staged to the image)\n- packages/bare-os-booter/index.js <../packages/bare-os-booter/index.js> and packages/bare-os-booter/lib/*.js <../packages/bare-os-booter/lib/> (trusted host booter)\n\nExcluded from that scan: everything under kernel/lib/bare/bundles/ (and the seeder mirror). Those files are upstream IIFE bundles from packages/bare-os-bare-libs <../packages/bare-os-bare-libs>. They may contain Node-compat patterns such as abstract stream base classes that throw not implemented when subclasses omit hooks. Governance is separate:\n\n- scripts/verify-bundle-markers.mjs + docs/audit/bundle-marker-allowlist.json <../docs/audit/bundle-marker-allowlist.json>\n- scripts/verify-bundle-throws.mjs + docs/audit/bundle-throw-allowlist.json <../docs/audit/bundle-throw-allowlist.json>\n\nSee also docs/audit/PLACEHOLDER_BASELINE.md <../docs/audit/PLACEHOLDER_BASELINE.md> and kernel/lib/bare/README.md <../kernel/lib/bare/README.md>.\n\nBundle refresh governance (maintainers): after changing Holepunch pins or kernel/lib/bare/manifest.json, run npm run gen:bare-catalog (or :check), npm run build -w bare-os-bare-libs, npm run bundle:kernel, then node scripts/verify-kernel-seeder-parity.mjs. Optional: npm run audit:holepunch-clones and node scripts/verify-holepunch-clone-drift.mjs when local clones under BARE_OS_HOLEPUNCH_CLONES_ROOT track upstream. Release checklist runs report-holepunch-lockfile-drift.mjs and clone drift verification.\n\nkernel/init.js is generated: run node scripts/bundle-kernel-init.mjs after editing kernel/lib/boot/*.js or kernel/lib/init/init-main.js. scripts/verify-kernel-seeder-parity.mjs checks that the file matches that recipe and that kernel/ matches packages/bare-os-seeder/kernel/ byte-for-byte.\n\nBare OS guest code (kernel /boot/init.js, /bin utilities running in the Pear/Bare host) must not rely on Nodes *node: built-in specifiers. Use Holepunch bare- packages (local clones under holepunchto <https://github.com/holepunchto>) instead. Validate kernel/lib/bare/manifest.json with kernel-manifest-validate; optional per-row dualTarget*: bare-only | dual | host-delegate-only for extension policy; import-map templates live beside package.json on trusted images (see kernel-program.md <./kernel-program.md>).\n\n- node:crypto — bare-crypto <https://github.com/holepunchto/bare-crypto> — host sets BARE_OS_BARE_CRYPTO_VERSION for boot policy requireBareCryptoMin. Identity / ssh-keygen read Ed25519 material via KeyObject.export() (._key is gone).\n- node:module / createRequire — bare-module <https://github.com/holepunchto/bare-module>, bare-module-resolve <https://github.com/holepunchto/bare-module-resolve> — boot policy may list denyBareModuleSpecifierPatterns.\n- node:fs — bare-fs <https://github.com/holepunchto/bare-fs> — guest uses ctx.vfs for the image. bare-fs 4.8+ statfs() includes frsize; /proc/bare_os_resources (schema 3) overlays that onto Hyperdrive statvfs when the host module is present.\n- node:os / POSIX ids — bare-os <https://github.com/holepunchto/bare-os> (3.9+ userInfo / groupInfo / cpuUsage / resourceUsage / availableParallelism) and optional bare-posix <https://github.com/holepunchto/bare-posix>.\n- node:path — bare-path <https://github.com/holepunchto/bare-path>\n- node:url — bare-url <https://github.com/holepunchto/bare-url>\n- node:net / node:tls — bare-net <https://github.com/holepunchto/bare-net>, bare-tls <https://github.com/holepunchto/bare-tls>, bare-tcp <https://github.com/holepunchto/bare-tcp>\n- node:http / node:https — bare-http1 <https://github.com/holepunchto/bare-http1>, bare-https <https://github.com/holepunchto/bare-https>; ctx may expose wrapped fetch.\n- node:worker_threads — bare-worker <https://github.com/holepunchto/bare-worker>, bare-thread <https://github.com/holepunchto/bare-thread>\n- node:diagnostics_channel — bare-diagnostics-channel <https://github.com/holepunchto/bare-diagnostics-channel>\n- WebSockets / WS upgrade paths — bare-ws <https://github.com/holepunchto/bare-ws> — pair with bare-http1 / bare-tls for gateways; see handbook ch.11 / transport table in kernel-extensions.md <../docs/reference/kernel-extensions.md>.\n- Inspector-style probes (non-secret) — bare-inspect <https://github.com/holepunchto/bare-inspect> — boot policy maxPearInspectDepth caps nested inspect hints merged from boot.policy.json.\n- RPC-style delegates — bare-rpc <https://github.com/holepunchto/bare-rpc> — boot policy denyBareRpcMethodPatterns can deny method-class patterns before they reach guest-visible ctx probes.\n\nStock /bin/openssl is a stub that points integrators at bare-crypto (see packages/bare-os-coreutils/src/openssl.js <../../packages/bare-os-coreutils/src/openssl.js>).\n\nSee also kernel-extensions.md <../docs/reference/kernel-extensions.md>, handbook ch.11 <../handbook/11-kernel-program-and-research.md>, and CI verify-pear-no-static-node-import.mjs.\n\nWord 11 (hypercore / pack / HRPC lifecycle): stock boot policy may pin bare-pack / bare-addon-policy (and related) versions via host env keys surfaced in boot.policy.json v11; Hypercore/replication-heavy guests should prefer Holepunch *bare- modules over Node node: for the same capability areas as in the table above (see bits11 / BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE* in compatibility-matrix.md <../docs/reference/compatibility-matrix.md>).","descriptionMode":"preserve","options":[],"keywords":["developer","devguide","develop","script","asyncfunction","ctx","bare-os","guide","node","to","bare","modules","built","ins","pear","guest","safe"],"seeAlso":[{"name":"devguide-naming-migrations","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from developer-guide/node-to-bare-modules.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"devguide"},{"name":"docs-adr-0001-kernel-subsystem-boundaries","section":7,"title":"ADR 0001: Kernel subsystem boundaries (booter vs image)","synopsis":["man 7 docs-adr-0001-kernel-subsystem-boundaries","Documentation page (plain text from docs/adr/0001-kernel-subsystem-boundaries.md)"],"description":"ADR 0001: KERNEL SUBSYSTEM BOUNDARIES (BOOTER VS IMAGE)\n\n- Status: Accepted\n- Date: 2026-04-04\n- Context: The booter (packages/bare-os-booter) grew a large index.js while also owning VFS, swarm, IPC, identity, and ctx construction. Contributors need a stable mental model for where new code belongs.\n- Decision:\n1. Treat boot (peer wait, MBR, replication, kernel bytes load, teardown ordering) as distinct from executeKernel (ctx assembly + REPL + initd).\n2. Centralize stock kernel capability word construction and seed strict rows in bare-os-capability-registry.js <../../packages/bare-os-booter/lib/bare-os-capability-registry.js>.\n3. Centralize network/offline kernel loading (seed RPC wave, MBR iteration) in bare-os-kernel-loader.js <../../packages/bare-os-booter/lib/bare-os-kernel-loader.js>.\n4. Centralize Pear-safe teardown (HDMS → swarm → drives → store) in bare-os-lifecycle-manager.js <../../packages/bare-os-booter/lib/bare-os-lifecycle-manager.js>.\n5. Document the full subsystem map in docs/architecture/kernel-subsystems.md <../architecture/kernel-subsystems.md>.\n- Consequences:\n- index.js remains the orchestration root but delegates loader/capability/teardown modules.\n- Future refactors should move executeKernel into a dedicated module when ready, without changing public ctx contracts.\n- ADRs for larger changes should cross-link this boundary map.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","adr","0001","kernel","subsystem","boundaries","booter","image"],"seeAlso":[{"name":"docs-adr-0001-two-drive-p2p-model","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/adr/0001-kernel-subsystem-boundaries.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-adr-0001-two-drive-p2p-model","section":7,"title":"ADR 0001 — Two-drive model and swarm-centric replication","synopsis":["man 7 docs-adr-0001-two-drive-p2p-model","Documentation page (plain text from docs/adr/0001-two-drive-p2p-model.md)"],"description":"ADR 0001 — TWO-DRIVE MODEL AND SWARM-CENTRIC REPLICATION\n\nSTATUS\n\nAccepted — stock booter + guest image.\n\nCONTEXT\n\nBare OS ships as a replicated system Hyperdrive plus a mutable personal Hyperdrive, joined over Hyperswarm with Protomux (bare-os-v1, optional bare-os-app-v1). Operators need a single mental model for where bytes live and how cold boot obtains block zero / MBR, including post-boot helper peers.\n\nDECISION\n\n- System drive — read-mostly OS image; guest /bin, /boot, /etc, /lib, etc.\n- Personal drive — session HOME, /tmp, /var/log, /.bare/ identity and vault material; never confused with the system image.\n- P2P-first — replication and peer discovery are intrinsic; local-only paths are explicit operator choices.\n- Peer-assisted cold join — the seeder is canonical for first publish, and eligible fully booted peers may mirror the same block 0 and captured seed RPC snapshots for later cold booters.\n- Code anchors — packages/bare-os-booter/lib/vfs.js (createVfs, path routing), packages/bare-os-booter/lib/swarm-disk.js (MBR / block zero, mbrReadTimeoutMsForDisk), packages/bare-os-booter/lib/bare-os-disk-os-bridge.js (post-initd disk.os).\n\nCONSEQUENCES\n\nUtilities and docs must say which drive a path targets. Timeouts (BARE_OS_MBR_READ_TIMEOUT_MS, BARE_OS_MBR_READ_TIMEOUT_ADAPTIVE) are host booter policy, not guest syscalls. Peer-assisted mirroring improves availability but keeps the same trust boundary: helpers mirror what they booted from; they do not author new MBR content.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","adr","0001","two","drive","p2p","model","and","swarm","centric","replication"],"seeAlso":[{"name":"docs-adr-0002-deny-default-rpc-hrpc","section":7},{"name":"docs-adr-0001-kernel-subsystem-boundaries","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/adr/0001-two-drive-p2p-model.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-adr-0002-deny-default-rpc-hrpc","section":7,"title":"ADR 0002 — Deny-by-default seed RPC and HRPC","synopsis":["man 7 docs-adr-0002-deny-default-rpc-hrpc","Documentation page (plain text from docs/adr/0002-deny-default-rpc-hrpc.md)"],"description":"ADR 0002 — DENY-BY-DEFAULT SEED RPC AND HRPC\n\nSTATUS\n\nAccepted — wire contract in bare-os-protocol, enforcement in booter.\n\nCONTEXT\n\nThe guest runs in a single JS address space but talks to peers and optional host delegates. RPC surfaces must default closed so new methods and routes are always an explicit security review.\n\nDECISION\n\n- Seed RPC — Only methods registered in packages/bare-os-protocol/lib/seed-rpc-methods.js answer on the seeder wire; unknown names return bare_os.rpc_unknown_method (policy may add denySeedRpcMethods).\n- HRPC — ctx.bareOsHrpcRequest serves a fixed stock route table; unlisted service.method throws unless the host replaces the hook or BARE_OS_HRPC_EMIT_UNLISTED is enabled for audit-only emission.\n- disk.os execRpc — After initd, only allowlisted *bare_os.** methods (same JSON as proc-facing helpers where documented).\n- Code anchors — packages/bare-os-protocol/lib/channel.js, packages/bare-os-protocol/lib/seed-rpc-methods.js, packages/bare-os-booter/index.js (ctx.bareOsHrpcRequest, disk.os bridge).\n\nCONSEQUENCES\n\nNew RPC or HRPC capabilities require registry / allowlist updates, tests, and compatibility-matrix notes — not silent booter behavior changes.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","adr","0002","deny","default","rpc","hrpc","seed","and"],"seeAlso":[{"name":"docs-adr-0003-posix-facade-no-fork","section":7},{"name":"docs-adr-0001-two-drive-p2p-model","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/adr/0002-deny-default-rpc-hrpc.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-adr-0003-posix-facade-no-fork","section":7,"title":"ADR 0003 — POSIX-like facade without fork or Linux ABI","synopsis":["man 7 docs-adr-0003-posix-facade-no-fork","Documentation page (plain text from docs/adr/0003-posix-facade-no-fork.md)"],"description":"ADR 0003 — POSIX-LIKE FACADE WITHOUT FORK OR LINUX ABI\n\nSTATUS\n\nAccepted — declared profile + /proc/bare_os/syscalls.json.\n\nCONTEXT\n\nScripts and operators expect Issue 7shaped names (open, poll, socket, …) and utilities, but the host is not a Unix kernel.\n\nDECISION\n\n- No fork, no real host FD table for guests — integer FDs index logical targets (VFS, IPC, optional socket bridge) documented in fdModel.\n- Faceted syscalls — ctx.bareOsSyscall and /proc/bare_os/syscalls.json carry posixAlignment (simulated, partial, ENOTSUP) and mapsTo for traceability.\n- Shell — Line-at-a-time execution, simulated pipelines, optional BARE_OS_SHELL_ERREXIT / BARE_OS_SHELL_NOUNSET subsets (handbook ch.9).\n- Code anchors — packages/bare-os-booter/lib/bare-os-syscalls-proc-json.js, packages/bare-os-booter/lib/shell.js, packages/bare-os-protocol/lib/bare-os-posix-profile.js, docs/architecture/POSIX_DECLARED_PROFILE.md.\n\nCONSEQUENCES\n\nConformance is documented intent, not certification. errno and edge cases align where declared; scripts should use proc JSON and handbook tables, not assume Linux byte-for-byte behavior.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","adr","0003","posix","facade","no","fork","like","without","linux","abi"],"seeAlso":[{"name":"docs-adr-0004-extension-trust-graph","section":7},{"name":"docs-adr-0002-deny-default-rpc-hrpc","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/adr/0003-posix-facade-no-fork.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-adr-0004-extension-trust-graph","section":7,"title":"ADR 0004 — kernel.ext.d trust, semver provides, and pins","synopsis":["man 7 docs-adr-0004-extension-trust-graph","Documentation page (plain text from docs/adr/0004-extension-trust-graph.md)"],"description":"ADR 0004 — KERNEL.EXT.D TRUST, SEMVER PROVIDES, AND PINS\n\nSTATUS\n\nAccepted — guest init fragment + boot policy.\n\nCONTEXT\n\nExtensions load from the system image but affect session behavior. P2P updates can change drop-ins without a central store, so ordering, conflicts, and signer pins must be deterministic and fail-closed under strict policy.\n\nDECISION\n\n- Ordering — Topological sort with requires / after / before; cycles and hard conflicts abort strict boot with structured *kernelExt.** signals.\n- provides — Optional { name, version }[]; semver strings are validated; duplicate logical names with incompatible versions are providesConflict / resolution JSON.\n- Pins — Boot policy extension signer pins run immediately before each extension script when configured (verifyKernelExtSignerPinsForScript).\n- Pear multisig — Optional gate on /etc/bare-os/pear.multisig.json before running extensions when enabled.\n- Code anchors — kernel/lib/init/fragments/30-init-kernel-extensions.js, kernel/lib/boot/00-pear-multisig-shape.js, packages/bare-os-booter/lib/kernel-extension-resolver.js, /run/bare-os/kernel-ext-resolution.json (schema 3).\n\nCONSEQUENCES\n\nOperators rely on /run/bare-os/kernel-ext-resolution.json and audit logs for “why an extension did not run.” BARE_OS_KERNEL_EXT_RESOLUTION_JSON_ALWAYS forces the file even on clean success for automation.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","adr","0004","extension","trust","graph","kernel","ext","semver","provides","and","pins"],"seeAlso":[{"name":"docs-adr-0005-observability-boundaries","section":7},{"name":"docs-adr-0003-posix-facade-no-fork","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/adr/0004-extension-trust-graph.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-adr-0005-observability-boundaries","section":7,"title":"ADR 0005 — Observability: guest /proc vs host logging","synopsis":["man 7 docs-adr-0005-observability-boundaries","Documentation page (plain text from docs/adr/0005-observability-boundaries.md)"],"description":"ADR 0005 — OBSERVABILITY: GUEST /PROC VS HOST LOGGING\n\nSTATUS\n\nAccepted — booter + seeder.\n\nCONTEXT\n\nDebugging mixes guest-visible output (REPL, kernel phases) with host-only telemetry (clone sync, swarm join, seeder hints). Mixing them obscures automation and leaks operator context into user sessions.\n\nDECISION\n\n- Guest — ctx.console for user-facing lines; synthetic /proc, /sys, /run, /dev for introspection; */proc/bare_os/.json** for structured caps and posture (schemas versioned in source).\n- Host booter — Structured helpers in packages/bare-os-booter/lib/bare-os-host-booter-log.js; optional NDJSON via BARE_OS_HOST_BOOTER_LOG (see environment appendix).\n- Seeder — packages/bare-os-seeder/lib/host-logger.mjs (seedLog) instead of ad hoc *console.** for operational messages.\n- Code anchors — packages/bare-os-booter/lib/bare-os-host-booter-log.js, packages/bare-os-seeder/lib/host-logger.mjs, handbook/04-the-booter-runtime.md.\n\nCONSEQUENCES\n\nNew diagnostics choose guest proc vs host NDJSON explicitly. Guest scripts should not assume console on the host is the same sink as the REPL.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","adr","0005","observability","boundaries","guest","proc","host","logging"],"seeAlso":[{"name":"docs-adr-readme","section":7},{"name":"docs-adr-0004-extension-trust-graph","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/adr/0005-observability-boundaries.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-adr-readme","section":7,"title":"Architecture decision records (P2P-first)","synopsis":["man 7 docs-adr-readme","Documentation page (plain text from docs/adr/README.md)"],"description":"ARCHITECTURE DECISION RECORDS (P2P-FIRST)\n\nConcise, stable pointers for contributors. Normative behavior remains in KERNEL_CONTRACT.md <../architecture/KERNEL_CONTRACT.md>, the handbook, and the developer guide.\n\n| ADR | Topic | Status / primary implementation |\n| 0001 — Two-drive <0001-two-drive-p2p-model.md> | Two-drive model and swarm-centric replication | Accepted — packages/bare-os-booter/lib/vfs.js, swarm-disk.js |\n| 0001 — Kernel subsystems <0001-kernel-subsystem-boundaries.md> | Booter vs image subsystem split | Accepted — bare-os-capability-registry.js, bare-os-kernel-loader.js, bare-os-lifecycle-manager.js; map in kernel-subsystems.md <../architecture/kernel-subsystems.md> |\n| 0002 <0002-deny-default-rpc-hrpc.md> | Deny-by-default seed RPC and HRPC bridges | Accepted — bare-os-protocol/lib/seed-rpc-methods.js, booter ctx.bareOsHrpcRequest |\n| 0003 <0003-posix-facade-no-fork.md> | POSIX-like facade without fork or host kernel ABI | Accepted — bare-os-syscalls-proc-json.js, POSIX_DECLARED_PROFILE.md <../architecture/POSIX_DECLARED_PROFILE.md> |\n| 0004 <0004-extension-trust-graph.md> | kernel.ext.d trust, semver provides, and pins | Accepted — kernel/lib/init/fragments/30-init-kernel-extensions.js, booter resolver |\n| 0005 <0005-observability-boundaries.md> | Guest /proc vs host logging and metrics | Accepted — bare-os-host-booter-log.js, packages/bare-os-seeder/lib/host-logger.mjs |","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","adr","readme","architecture","decision","records","p2p","first"],"seeAlso":[{"name":"docs-architecture-adr-hyperbee-guest-index","section":7},{"name":"docs-adr-0005-observability-boundaries","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/adr/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-architecture-adr-hyperbee-guest-index","section":7,"title":"ADR: Optional Hyperbee-style guest index hint","synopsis":["man 7 docs-architecture-adr-hyperbee-guest-index","Documentation page (plain text from docs/architecture/ADR-hyperbee-guest-index.md)"],"description":"ADR: OPTIONAL HYPERBEE-STYLE GUEST INDEX HINT\n\nCONTEXT\n\nHolepunch hyperbee2 <https://github.com/holepunchto/hyperbee2> provides a P2P B-tree suitable for metadata indexes. Bare OS guests primarily use Hyperdrive files; opening Hyperbee inside the stock kernel bundle would couple the image to optional dependencies and complicate the trusted boot surface.\n\nDECISION\n\n- Stock booter exposes ctx.bareOsHyperbeeGuestHint(), returning JSON describing whether BARE_OS_HYPERBEE_GUEST_INDEX is set and documenting the optional hyperbee2 package for host or extension code paths.\n- The guest kernel does not dynamic-import Hyperbee by default; operators enable the flag when their Pear/Bare host already provides the module and replication story.\n\nCONSEQUENCES\n\n- P2P-first indexes remain opt-in and decentralized (indexes replicate with their Hypercore backing store).\n- No new required dependency in bare-os-booter dependencies.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","architecture","adr","hyperbee","guest","index","optional","style","hint"],"seeAlso":[{"name":"docs-architecture-kernel_contract","section":7},{"name":"docs-adr-readme","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/architecture/ADR-hyperbee-guest-index.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-architecture-kernel_contract","section":7,"title":"Kernel architecture contract (stock booter + guest image)","synopsis":["man 7 docs-architecture-kernel_contract","Documentation page (plain text from docs/architecture/KERNEL_CONTRACT.md)"],"description":"KERNEL ARCHITECTURE CONTRACT (STOCK BOOTER + GUEST IMAGE)\n\nThis document is the single overview of how the Bare OS “kernel” is split between the host booter (packages/bare-os-booter) and the guest system image (kernel/ staged to Hyperdrive). Detailed behavior lives in the handbook and developer guide; this file defines boundaries and naming only.\n\nSUBSYSTEMS\n\n| Subsystem | Owner | Responsibility |\n| Wire + disk I/O | Booter | Hyperswarm, Protomux, SwarmDisk, Corestore, Hyperdrive open/replicate |\n| VFS + policy | Booter | createVfs, path classes, mounts, synthetic /proc; optional read-only system alias via BARE_OS_VFS_SYSTEM_RO_ALIAS (see vfs.js) |\n| Identity / vault | Booter + bins | Session env, account file, login / savevault flows |\n| POSIX-like IPC | Booter | In-memory FIFOs under /run/bare-os/ipc/<name> (bare-os-ipc.js); mq_open / mq_send / mq_receive via ctx.bareOsSyscall map to bareOsIpc priority queues (higher prio first, then FIFO by enqueue seq) with maxmsg / maxBytes caps — distinct from FIFO byte streams. Telemetry: bareOsIpc.stats().posixMessageQueues (schema 2). |\n| Init / services | Booter | bare-initd, systemctl delegate, unit files — stock units include kernel-logger, bare-os-www (loopback static HTTP for ~/.www, default port 8088), bare-holesail, bare-cron, bare-openssh, bare-os-chat, … |\n| Guest shell + /bin | Image + booter | Hyperdrive-resident scripts; host delegates for selected CLIs |\n| Extensions | Image | kernel.ext.d, manifests; resolver in booter |\n| Peer search / OS RPC | Booter | disk.os after initd (bare-os-disk-os-bridge.js); optional BARE_OS_VFS_HYPERBLOBS_DEDUP surfaces non-secret dedup hints via BARE_OS_HYPERBLOBS_STATS_JSON merged into replication_operator_sketch; optional BARE_OS_CORESTORE_STATS_JSON merges corestoreOperatorSketch; corestoreSnapshotUxHint compares snapshot vs stats env JSON (schema 7 response). Guest does not run hyperblobs / Corestore internals. |\n\nBOOT STEPS (BOOTER)\n\nCanonical identifiers: BARE_OS_BOOTER_BOOT_STEPS in packages/bare-os-booter/lib/bare-os-boot-phases.js <../../packages/bare-os-booter/lib/bare-os-boot-phases.js>. Emitted in order: vfs → ctx → repl → initd → kernel_invoke.\n\nThese milestones are recorded for observability (for example under booterPhases in /run/bare-os/boot.json) alongside guest/kernel phase traces when enabled.\n\nRELEASE VERIFICATION (STOCK TREE)\n\nFrom the repo root, npm test runs pretest, which includes npm run bundle:kernel, verify-kernel-seeder-parity, verify-ctx-api-feature-bits, verify-compat-matrix, and related governance scripts. Maintainers may also run npm run release-checklist (full workspace tests plus redundant verify-init-bundle-recipe, ctx API, and compatibility matrix gates). Pear distributors must keep kernel/ and packages/bare-os-seeder/kernel/ byte-identical after edits (rsync -a --delete kernel/ packages/bare-os-seeder/kernel/).\n\nEND-TO-END BOOT SEQUENCE (HOST → SHELL)\n\nConceptual ordering from a cold host start through an interactive guest prompt. Sub-steps inside each box are described in the handbook and booter source; this diagram is a contract-level checklist.\n\nBoot pipeline summary (parallel to the sequence above):\n\nCONTEXT API\n\n- Version: BARE_OS_CTX_API_VERSION in packages/bare-os-booter/lib/bare-os-ctx-api.js <../../packages/bare-os-booter/lib/bare-os-ctx-api.js>.\n- Type hints: packages/bare-os-booter/lib/bare-os-ctx.d.ts <../../packages/bare-os-booter/lib/bare-os-ctx.d.ts>.\n\nWEBASSEMBLY GUEST PROBES\n\nWhen BARE_OS_WASM_KERNEL=1, ctx.bareOsWasmKernelInstantiate compiles with bounded Memory. With BARE_OS_WASM_KERNEL_SYSCALL=1, the import object includes env.bare_os_pathconf (UTF-8 path/name pointers into linear memory, NUL-terminated textual result) backed by ctx.bareOsPathconf, env.bare_os_umask_get from session UMASK, and env.bare_os_wall_time_ms32 (low 32 bits of wall clock, signed wrap). With BARE_OS_WASM_KERNEL_MONOTONIC_MS=1 (also requires syscall imports), env.bare_os_monotonic_ms returns Number monotonic milliseconds from the booter clock helper (bounded, sync — no async syscall bridge). With BARE_OS_WASM_KERNEL_HOSTNAME_IMPORT=1, env.bare_os_hostname_peek writes session HOSTNAME (or bare-os) NUL-terminated into guest memory (bounded). With BARE_OS_WASM_KERNEL_POSIX_PROFILE_PEEK=1, env.bare_os_posix_profile_peek writes the declared BARE_OS_POSIX_PROFILE_VERSION string NUL-terminated (bounded). General async ctx.bareOsSyscall (including clock_gettime, nanosleep, socket bridge ops) is intentionally not imported into Wasm — use JS ctx.bareOsSyscall from the host-injected context when you need parity with posixXsh.namesCsv; see posix-syscall-facade-map.md <../reference/posix-syscall-facade-map.md> and developer-guide/kernel-program.md <../../developer-guide/kernel-program.md>.\n\nTYPED ERRORS (FOR CALLERS)\n\nShared error classes (stable code field): packages/bare-os-booter/lib/bare-os-errors.js <../../packages/bare-os-booter/lib/bare-os-errors.js>.\n\nSEED RPC AND HRPC BRIDGES\n\n- Seed RPC (bare_os.* methods on the seeder wire): packages/bare-os-protocol/lib/channel.js <../../packages/bare-os-protocol/lib/channel.js> answers only methods listed in seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js>; unknown names return bare_os.rpc_unknown_method (default deny). Boot policy may add denySeedRpcMethods / env BARE_OS_BOOT_POLICY_DENY_SEED_RPC_METHODS so the stock booter skips selected calls.\n- hrpc (ctx.bareOsHrpcRequest): the stock booter implementation validates inputs, enforces optional BARE_OS_HRPC_ALLOWLIST_JSON (JSON array of \"service.method\" strings, or object whose keys are route names and values are truthy — see docs/schemas/bare-os-hrpc-allowlist.schema.json <../schemas/bare-os-hrpc-allowlist.schema.json>; wildcards *\"\", \"kernel.\", etc.), and serves a built-in route table (kernel.ping, kernel.capabilities, vfs.readText, bare_os.echo, bare_os.disk_os_hints, bare_os.search_local, bare_os.replication_operator_sketch, bare_os.replication_snapshot — disk.os-backed routes return the same JSON strings as execRpc except bare_os.search_local, which returns { ok, query, paths } from disk.os.searchLocal). Deny-by-default: any service.method not in the stock table throws bareOsHrpcRequest: unsupported route … unless the host replaces ctx.bareOsHrpcRequest or BARE_OS_HRPC_EMIT_UNLISTED is 1 / true (then process.emit('bare-os:hrpc-request', …) fires for unlisted routes). Set BARE_OS_HRPC_AUDIT to append tamper-evident audit rows for attempts (via bareOsAuditChainLinkAppend*). Treat new routes as security-sensitive: extend only with explicit allowlist semantics and tests.\n\nRELATED DOCS\n\n- ADR index — P2P-first invariants <../adr/README.md> (two-drive model, RPC posture, POSIX facade, extensions, observability)\n- Declared POSIX-like profile <POSIX_DECLARED_PROFILE.md>\n- Architecture: end-to-end data flow <../reference/architecture-data-flow.md>\n- Documentation home <../README.md>\n- Handbook — protocol and disk <../../handbook/03-protocol-and-disk.md>\n- Handbook — booter runtime <../../handbook/04-the-booter-runtime.md>\n- Developer guide — Kernel boot <../../developer-guide/03-kernel-boot-init.md>\n- Compatibility matrix <../reference/compatibility-matrix.md>\n- Placeholder baseline (audit) <../audit/PLACEHOLDER_BASELINE.md>","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","architecture","kernel","contract","stock","booter","guest","image"],"seeAlso":[{"name":"docs-architecture-kernel-subsystems","section":7},{"name":"docs-architecture-adr-hyperbee-guest-index","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/architecture/KERNEL_CONTRACT.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-architecture-kernel-subsystems","section":7,"title":"Kernel subsystem map (booter + guest image)","synopsis":["man 7 docs-architecture-kernel-subsystems","Documentation page (plain text from docs/architecture/kernel-subsystems.md)"],"description":"KERNEL SUBSYSTEM MAP (BOOTER + GUEST IMAGE)\n\nThis document is the boundary map for the Bare operating system runtime: which responsibilities live in which layer, and which modules are the canonical entry points.\n\nSUBSYSTEMS\n\n| Subsystem | Role | Canonical modules |\n| boot | Swarm join, MBR, Hyperdrive replication, timeout, offline LKG | packages/bare-os-booter/index.js <../../packages/bare-os-booter/index.js>, bare-os-kernel-loader.js <../../packages/bare-os-booter/lib/bare-os-kernel-loader.js>, bare-os-lifecycle-manager.js <../../packages/bare-os-booter/lib/bare-os-lifecycle-manager.js> |\n| vfs | Two-drive routing, pseudo /proc//sys//run//dev, policy; optional $HOME/.www → /mnt/www when HDMS label www is mounted | vfs.js <../../packages/bare-os-booter/lib/vfs.js>, vfs-posix-meta.js <../../packages/bare-os-booter/lib/vfs-posix-meta.js> |\n| initd services | Stock bare-initd units (logger, static ~/.www, Holesail, cron, SSH, …) | bare-initd.js <../../packages/bare-os-booter/lib/bare-initd.js>, bare-os-www-initd.js <../../packages/bare-os-booter/lib/bare-os-www-initd.js>, bare-holesail.js <../../packages/bare-os-booter/lib/bare-holesail.js>, bare-cron.js <../../packages/bare-os-booter/lib/bare-cron.js>, bare-openssh.js <../../packages/bare-os-booter/lib/bare-openssh.js> |\n| process | Synthetic process table, jobs/shell coordination | bare-os-process-table.js <../../packages/bare-os-booter/lib/bare-os-process-table.js>, shell.js <../../packages/bare-os-booter/lib/shell.js> |\n| ipc | FIFOs, JSON-RPC, fan-out | bare-os-ipc.js <../../packages/bare-os-booter/lib/bare-os-ipc.js> |\n| net | Hyperswarm, Protomux, peer disk I/O | swarm-disk.js <../../packages/bare-os-booter/lib/swarm-disk.js>, bare-os-swarm-connection-manager.js <../../packages/bare-os-booter/lib/bare-os-swarm-connection-manager.js> |\n| security | Identity, vault, ACL evaluation, audit chain | identity-session.js <../../packages/bare-os-booter/lib/identity-session.js>, identity-account.js <../../packages/bare-os-booter/lib/identity-account.js>, bare-os-acl-eval.js <../../packages/bare-os-booter/lib/bare-os-acl-eval.js>, bare-os-audit-chain.js <../../packages/bare-os-booter/lib/bare-os-audit-chain.js> |\n| capabilities | Stock kernel capability words, seed strict matrix | bare-os-capability-registry.js <../../packages/bare-os-booter/lib/bare-os-capability-registry.js>, bare-os-protocol <../../packages/bare-os-protocol/> |\n\nGUEST IMAGE (KERNEL/)\n\n| Stage | Source |\n| Boot policy, rc, extensions | kernel/init.js <../../kernel/init.js> |\n| Stock /bin | packages/bare-os-coreutils <../../packages/bare-os-coreutils/> (seeded into image) |\n\nRELATED\n\n- Documentation home <../README.md> · Glossary <../glossary.md>\n- KERNEL_CONTRACT.md <KERNEL_CONTRACT.md> — trust and replication contract.\n- POSIX conformance matrix <../reference/conformance-matrix.md> — Issue 7 tracking.\n- Environment and POSIX appendix <../reference/environment-and-posix-appendix.md> — env vars and userland gaps.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","architecture","kernel","subsystems","subsystem","map","booter","guest","image"],"seeAlso":[{"name":"docs-architecture-posix_declared_profile","section":7},{"name":"docs-architecture-kernel_contract","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/architecture/kernel-subsystems.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-architecture-posix_declared_profile","section":7,"title":"Declared POSIX-like profile (Bare OS)","synopsis":["man 7 docs-architecture-posix_declared_profile","Documentation page (plain text from docs/architecture/POSIX_DECLARED_PROFILE.md)"],"description":"DECLARED POSIX-LIKE PROFILE (BARE OS)\n\nThis document is the normative contract for how closely the stock Bare OS kernel and userland follow IEEE Std 1003.1-2017 <https://pubs.opengroup.org/onlinepubs/9699919799/> / Open Group Issue 7. It is not a conformance claim: the runtime is a single JavaScript address space over Hyperdrive-backed VFS with simulated pipelines and no fork.\n\nIdentifiers (mirrored under /proc/bare_os_features and related JSON) are defined in packages/bare-os-protocol/lib/bare-os-posix-profile.js <../../packages/bare-os-protocol/lib/bare-os-posix-profile.js>:\n\n| Constant | Value |\n| BARE_OS_POSIX_PROFILE_VERSION | 1.0.19 |\n| BARE_OS_POSIX_PROFILE_ID | bare-os-posix-like |\n| BARE_OS_POSIX_PROFILE_REFERENCE | Open Group Issue 7 index URL |\n\nNarrative catalogs: handbook ch.9 — POSIX-style utilities <../../handbook/09-posix-utilities-shell-and-vfs.md> · environment / POSIX appendix §14a <../reference/environment-and-posix-appendix.md#14a-posix-userland-appendix-implemented-vs-gaps>.\n\n1. SYSTEM INTERFACES (XBD/XSH-STYLE EXPECTATIONS)\n\nBare OS does not expose a C ABI. The following observability contracts stand in for “system calls”:\n\n- /proc/bare_os/syscalls.json — Declares fd model, signal model, errno hints, operation detail, posixXsh, socketMsgSurface, and related adjuncts (schema 11 in stock builds; see docs/reference/posix-compliance-matrix.json <../reference/posix-compliance-matrix.json>). ops lists invocable ctx.bareOsSyscall names (posix_fadvise as a simulated no-op hint; clock_gettime for REALTIME / MONOTONIC sketches alongside nanosleep); opsDetail also carries POSIX.1 XSH logical names (open, close, read, write, readv, writev, getsockopt, setsockopt, lseek, pipe, dup, dup2, fcntl, poll, select, umask, fsync, fdatasync, posix_fadvise, and socket family probes) with posixAlignment (simulated, partial, ENOTSUP) and mapsTo for traceability; stable susv4Refs string tokens (for example XSH/open) support audit cross-walks. The posixXsh object summarizes those XSH names (via bareOsPosixXshOpsCsv()); schema 3 pairs with syscall proc 11. socketMsgSurface (schema 5) documents sendmsg / recvmsg on the bridge: bounded iovec flattening for datagram and stream paths; binary ancillary control on sendmsg remains ENOTSUP with structured rejection metadata unless BARE_OS_POSIX_SOCKET_SCM_RIGHTS=1, in which case JSON-shaped cmsgs may request logical scmRightsLocalDup on SOCK_STREAM and SOCK_DGRAM bridge fds (guest logical FD duplication — not host SCM_RIGHTS); recvmsg reports controllen: 0 on the receive path. fcntl supports F_GETFL / F_SETFL (Linux-shaped O_APPEND 0x400, O_NONBLOCK 0x800) and cooperative advisory locks via F_GETLK / F_SETLK / F_SETLKW using args.path (absolute) or args.fd whose logical target is an absolute path; contended F_SETLK returns EAGAIN. F_SETLKW also returns EAGAIN by default; with BARE_OS_POSIX_FCNTL_BLOCKING_WAIT, waiters are queued FIFO per lock path until the lock is free or BARE_OS_FCNTL_LOCK_WAIT_MS_MAX elapses (ETIMEDOUT; default 30000 ms, max 300000). There is no cross-path global fairness and no host deadlock detection. Unknown FDs yield EBADF. readv / writev perform bounded scatter/gather on BARE_OS_POSIX_FD_SIM pipe read/write ends. poll / select share the same logical FD readiness probe when BARE_OS_POSIX_FD_SIM is enabled; with BARE_OS_POSIX_SOCKET_FD_BRIDGE=1, bridged datagram fds participate (SOCK_DGRAM via bareDgram when merged) with bounded recv / recvfrom queues (BARE_OS_POSIX_DGRAM_RECVQ_MAX, BARE_OS_POSIX_DGRAM_RECV_BLOCK_MS_MAX); passive SOCK_STREAM uses bind/listen/accept when bareTcp.Server is available. Socket-shaped syscalls default to ENOSYS / ENOTSUP; with BARE_OS_POSIX_SOCKET_FD_BRIDGE=1, socket + connect may use ctx.bare.bareTcp.Socket (SOCK_STREAM) or bareDgram (SOCK_DGRAM) when merged. The stock booter caches this JSON until warm read-cache invalidation.\n- /proc/bare_os/process_table.json — schema 9 — PGID / SID-style fields, parentName (from ppid), signal routing, initd binding, per-row nice (-20..19, via ctx.bareOsRenice), accountingSource on metrics fields, optional per-row accounting (threads, *cpuMs, I/O counters, replicationHint) for the logical process table (not host PIDs). Companion /proc/bare_os/process_maps.json (schema 2, model bare-os-logical-v1) and /proc/bare_os/process_threads.json (schema 2) describe logical layouts (not Linux /proc/pid/maps**).\n\nExplicit non-goals\n\n- Real preemptive multiprocessing, fork, exec of binaries, or kernel threads in the guest.\n- FIFO special files on Hyperdrive; mkfifo creates in-memory IPC under /run/bare-os/ipc/ (see booter IPC module).\n- Bit-identical errno values to Linux for every edge case; scripts should rely on documented exit codes and proc JSON.\n\n2. SHELL (XCU SH)\n\nStock shell is line-oriented with bounded if, while, for, optional case, lists (;, &&, ||), and | pipelines (simulated, not kernel pipes). Default pipeline exit status follows POSIX last stage; set BARE_OS_SHELL_PIPEFAIL=1 for bash-like first failing stage status. See handbook ch.9 §3 and §8.5.\n\nOptional BARE_OS_SHELL_POSIX_MODE=1 enables subshell-free grouped lists ( compound-list ) as a single statement (same logical session).\n\nUnsupported (by design): forked subshells / process-level isolation, full POSIX grammar, job control with real background process groups, here-documents beyond documented limits.\n\nOptional BARE_OS_SHELL_UNTIL=1: until compound loops (inverted test vs while) with the same iteration cap as BARE_OS_SHELL_LOOP_MAX.\n\n3. UTILITIES (XCU)\n\nAuthoritative command list: packages/bare-os-coreutils/lib/commands.mjs <../../packages/bare-os-coreutils/lib/commands.mjs>.\n\nUtilities are Issue 7inspired JavaScript implementations. High-traffic tools (grep, sed, awk, xargs, expr, basenc) carry bounded resource limits via environment variables (see environment appendix). getconf exposes a fixed name table for symbolic constants; when the booter exposes ctx.bareOsGetconfSysconf, getconf -v / *_SC_ names may resolve dynamic** values documented in the environment appendix.\n\nDelegation: Some basenames (curl, wget, git, systemctl, …) run through the host delegate registry before PATH resolution; /bin may contain parity shims that should not execute in a correctly configured session (see handbook ch.6).\n\n4. VFS AND PATHS\n\nTwo logical drives (system + personal) form one namespace; .bareos_empty marks empty directories. Synthetic trees: /proc, /sys, /run, /dev, session /tmp. /dev/shm/<name> holds in-memory named byte segments (not host shm_open); names match ^[a-zA-Z0-9._-]{1,128}$. Optional */mirror/aux** for auxiliary read-only drives.\n\nRename: No atomic cross-drive rename; mv implements copy + remove where needed (handbook ch.9). For a single regular file to a non-directory destination, /bin/mv stages bytes under a unique *.bare-os-mv-tmp. name in the resolved destination directory (same folder as the target after vfs.resolveLogical**), writes the final name, removes the staging entry, then unlinks the source so a failed final write leaves the source path intact (best-effort staging cleanup).\n\npathconf / getconf: Live *getconf _PC_ /path delegates to ctx.bareOsPathconf. Union read prefixes (BARE_OS_VFS_UNION_PREFIXES) and read-only mirror paths (/mirror/…) adjust documented _PC_NO_TRUNC and _PC_CHOWN_RESTRICTED hints (not a certifiable pathconf implementation). Paths under the personal account prefix (BARE_OS_PERSONAL_ACCT_PREFIX, default /.bare-os/acct/) keep _PC_NO_TRUNC: 1 so writable account-scoped data keeps stable truncation semantics even when union overlays would otherwise advertise 0** for overlay targets.\n\n/.bare on the personal drive (acct prefix): When BARE_OS_PERSONAL_ACCT_PREFIX is enabled, logical /.bare/ (including /.bare/account and /.bare/vault/) is stored under /.bare-os/acct/<session>/.bare/… on the personal Hyperdrive so each session subtree holds its own identity material; logical paths stay /.bare/… for utilities and ACCOUNT_PATH. Legacy blobs at the personal root /.bare/account remain visible when the prefix is off** (existing installs); operators migrate with documented personal-root tools when enabling the prefix.\n\n5. SIGNALS AND EXIT STATUSES\n\nSignal names accepted by kill and shell builtins follow POSIX names where listed in proc JSON. ctx.bareOsSendSignal and /bin/kill also accept a negative numeric operand as a logical process group id (pgid) for shell background jobs (active rows only; kill -0 -pgid checks existence). Exit codes for pipelines and timeout follow documented stock behavior (see handbook and booter tests).\n\n6. PROFILE EVOLUTION\n\nBump BARE_OS_POSIX_PROFILE_VERSION in bare-os-protocol when intentional utility, shell, VFS, or proc-contract behavior changes. Update this file, handbook ch.9, and §14a in the same change set.\n\n1.0.19 — ctx.bareOsRenice stores logical nice on process_table.json rows (no host scheduler). socketMsgSurface schema 6 documents iovecSemantics and recvmsg susv4Refs. disk.os replication_operator_sketch schema 8 adds hyperdhtAddressSketch (BARE_OS_HYPERDHT_ADDRESS_JSON) and pkgIndexSurface / pkg_index_get schema 2 echoes. corestoreSnapshotUxHint schema 4 adds recommendedWorkflow. security_posture schema 7 adds replicationOperatorSketchCrossRef. pear_stage_pointer schema 2 links pear-runtime-updater. Boot /proc/bare_os/boot_budget_summary.json may merge replicationLiveCoalesced after kernel handoff. Shell wait uses background job lastExitCode. Swarm BARE_OS_SWARM_ATTEMPT_BURST_PER_SEC caps connection attempts per rolling second (policy engine). Dynamic getconf/sysconf adds _SC_MONOTONIC_CLOCK_RES ( bare-hrtime when present), trace/timer negated constants, vault_save audit includes pathcapTrustedKeyCount.\n\n1.0.18 — awk: getline var < path reads from the guest VFS with per-path line caching; POSIX math builtins atan2, cos, sin, exp, log, sqrt; unary -; substr(s, start) two-argument suffix form; async evaluation path in the engine for I/O-capable builtins. Man page and handbook §7 updated. expr: POSIX : match-length operator (ECMA RegExp body under ^(?:…)). test: FILE1 -nt FILE2, FILE1 -ot FILE2, FILE1 -ef FILE2 using mtimeMs and optional dev/ino.\n\n1.0.17 — Syscalls proc schema 11 (susv4Refs on opsDetail, posixXsh schema 3); ctx API 1.53.0; disk.os replication_operator_sketch schema 7 (corestoreSnapshotUxHint, pkgIndexSurface, bare_os.pkg_index_get + BARE_OS_PKG_INDEX_PATH); optional Protomux cap channel (BARE_OS_PROTOMUX_CAP_CHANNEL, feature bit); metrics_live.replicationLive collaboration hints + optional BARE_OS_COLLAB_SESSION_NDJSON; security_posture blind-relay posture sketch; ctx.bareOsVerifyPathCapabilityEnvelopeTrusted + BARE_OS_PATH_CAPABILITY_TRUSTED_PUBKEYS_HEX; /proc/bare_os/boot_budget_summary.json; warm-cache adaptive jitter (BARE_OS_VFS_WARM_REPL_ADAPTIVE_JITTER_PCT); shell unset-only default expansion (BARE_OS_SHELL_POSIX_UNSET_ONLY_DEFAULT); pathcap-verify --trusted; pkg-swarm-index list / get against drive manifest or HRPC.\n\n1.0.16 — Stock pathcap-verify, pkg-swarm-index, optional path-capability VFS gate (BARE_OS_PATH_CAPABILITY_), ctx.bareOsVerifyPathCapabilityEnvelope, disk.os path manifest + bare_os.search_local hrpc, metrics_live.replicationLive schema 4 (warmReplAdaptive), boot budget transaction bootBudgetSchemaVersion 2 (bootBudgetViolations), Wasm env.bare_os_ctx_api_version_peek, optional BARE_OS_POSIX_SOCKET_CONNECT_TIMEOUT_MS on bridge TCP connect, BARE_OS_SAVEVAULT_PRESNAPSHOT_HINT host event, optional BARE_OS_RC_PROPOSAL_MULTISIG_STRICT + rc.proposals/enabled audit rows (rc.proposal.multisig_**).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","architecture","posix","declared","profile","like","bare"],"seeAlso":[{"name":"docs-audit-ctx-bare-audit-notes","section":7},{"name":"docs-architecture-kernel-subsystems","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/architecture/POSIX_DECLARED_PROFILE.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-audit-ctx-bare-audit-notes","section":7,"title":"ctx.bare Code Audit Notes","synopsis":["man 7 docs-audit-ctx-bare-audit-notes","Documentation page (plain text from docs/audit/ctx-bare-audit-notes.md)"],"description":"CTX.BARE CODE AUDIT NOTES\n\nPlan Reference: docs/design/ctx-pear-surface-and-bare-audit-plan.md\n\nThis document captures findings from the systematic audit of ctx.bare implementation and related code.\n\nENTRY POINTS & CALL GRAPH (INITIAL MAP)\n\nPrimary construction:\n- packages/bare-os-booter/index.js:3779 — if (bareOsBareModulesEnabled(shellEnv))\n- Calls maybeMergeBareFromDrive\n- Then (conditionally) buildBareCtxObjectFromHost\n- Then verifyBareModuleLockfile\n- Then primeGlobalFetchFromBareLibrary\n\nCore logic file:\n- packages/bare-os-booter/lib/bare-os-ctx-bare.js\n\nKey exported functions identified so far:\n- buildBareCtxObjectFromHost(shellEnv, target)\n- maybeMergeBareFromDrive(...) (drive bundle eval path)\n- loadBareModuleManifest()\n- bareOsBareModulesEnabled(shellEnv)\n- bareOsBareHostImportsEnabled(shellEnv)\n- verifyBareModuleLockfile(vfs, target)\n- primeGlobalFetchFromBareLibrary(...)\n- Various helpers for drive bundle require wrapping and addon support.\n\nKNOWN FRAGILE AREAS (EARLY FINDINGS)\n\n1. Pear referrer problems\n- Multiple workarounds for pear:// import referrers (see tryRequireFromBooter, special handling in buildBareCtxObjectFromHost when pearBooter is true).\n- bare-module-manifest.data.mjs exists specifically because bare-fs + fileURLToPath breaks on pear: URLs.\n\n2. require.addon surface for drive bundles\n- Very heavy machinery: withDriveBundleGlobalRequire, createDriveBundleRequireWrapper, driveBundleRequireAddonStub.\n- This is needed because esbuild IIFEs expect a real require.addon from bare-module.\n\n3. Native module handling\n- nativeHint: true entries are skipped on non-Bare hosts.\n- Risk of silent failures or partial ctx.bare objects.\n\n4. Manifest loading & drift\n- Dual loading path (embedded .data.mjs vs disk JSON).\n- Multiple verifiers exist (verify:manifest-data, tests comparing the two).\n\n5. Warm cache interaction\n- ctx.bare bundles are part of the warm read cache.\n- Eviction logic is complex (see bareOsVfsEvictWarmReadPrefixes etc.).\n\n6. Error surface\n- Failures in host imports are logged via bareOsHostBooterWarn but often result in missing keys on ctx.bare without strong guarantees.\n\nNEXT STEPS (FROM PLAN)\n\n- Continue deep read of bare-os-ctx-bare.js (currently in progress).\n- Inventory scripts that touch the manifest.\n- Begin research of local Holepunch clone for Pear runtime packages.\n\nAudit notes will be updated continuously throughout the sprint.\n\nROUND 4 FINDINGS: INVENTORY OF SCRIPTS & VERIFIERS TOUCHING BARE MANIFESTS / BUNDLES\n\nCore surface files (the contract):\n- packages/bare-os-booter/lib/bare-module-manifest.json — Versioned array of entries (ctxKey, package, export, bundle, optional, nativeHint, skipReason). This is the single source of truth for what ends up on ctx.bare.\n- packages/bare-os-booter/lib/bare-module-manifest.data.mjs — Auto-generated sibling (never hand-edit). Required because pear:// + bare-fs + fileURLToPath coercion makes direct readFileSync on the JSON unreliable inside Pear guests.\n- Same pair mirrored under packages/bare-os-seeder/kernel/ and kernel/ (kept in sync via npm run maintainer:sync-kernel-seeder).\n\nManifest generation & parity (critical verifiers):\n- scripts/generate-bare-module-manifest-data.mjs — CLI + lib function that emits the .data.mjs from JSON (adds \"do not edit by hand\" banner).\n- scripts/sync-bare-module-manifest-from-catalog.mjs — Higher-level driver (pulls from Holepunch catalog + bare-catalog-overrides.json) and invokes the generator at the end.\n- scripts/verify-bare-module-manifest-data.mjs — Hard gate. Fails CI if JSON and .data.mjs ever diverge (uses stable deep stringify). Run via pretest or npm run verify:manifest-data.\n\nBundle health & safety verifiers (drive-bundle path for ctx.bare):\n- scripts/verify-bundle-health.mjs — Validates bundle-health.json shape and presence.\n- scripts/verify-bundle-markers.mjs — Scans IIFEs for disallowed markers; allowlist lives in docs/audit/bundle-marker-allowlist.json.\n- scripts/verify-bundle-throws.mjs — Catches \"incomplete-implementation\" Error strings that would leak into guest ctx.bare.\n- scripts/verify-init-bundle-recipe.mjs + scripts/lib/kernel-init-bundle.mjs — Ensures kernel/init.js matches the expected bundle recipe.\n- scripts/sanitize-bare-bundles.mjs — Post-processing for esbuild IIFE output.\n\nDual-target / Bare-only guest enforcement:\n- scripts/verify-bare-imports.mjs — Forbids node: specifiers in guest code.\n- scripts/verify-pear-no-static-node-import.mjs — Enforces #host-fs / #host-path conditionals only for host paths (booter/seeder).\n- scripts/verify-pear-no-static-node-import.mjs is run as part of pretest for any code that might run under Pear.\n\nHolepunch catalog & clone maintenance (how the manifest stays current):\n- scripts/gen-bare-holepunch-catalog.mjs + scripts/bare-catalog-overrides.json\n- scripts/gen-holepunch-catalog-tiers.mjs\n- scripts/holepunch-repo-index.mjs\n- scripts/sync-holepunch-clones.mjs\n- scripts/report-holepunch-runtime-compat.mjs\n- Related drift/freshness verifiers: verify-holepunch-clone-drift.mjs, verify-holepunch-clone-freshness.mjs\n\nBooter / runtime call sites & integration:\n- packages/bare-os-booter/index.js:3779 — The main boot sequence: bareOsBareModulesEnabled → maybeMergeBareFromDrive (drive bundles) → buildBareCtxObjectFromHost (host imports) → verifyBareModuleLockfile.\n- packages/bare-os-booter/lib/bare-os-ctx-bare.js — Heart of the surface. Exports: loadBareModuleManifest, bareOsBareModulesEnabled, buildBareCtxObjectFromHost, maybeMergeBareFromDrive, drive-bundle wrapper helpers (withDriveBundleGlobalRequire, createDriveBundleRequireWrapper, driveBundleRequireAddonStub), tryRequireFromBooter, etc.\n- packages/bare-os-booter/lib/bare-os-ctx.js — Where the populated bare object is injected into the guest ctx.\n- packages/bare-os-booter/lib/bare-os-runtime-caps.js — Reports bareCtxModules capability flag.\n- Test coverage: packages/bare-os-booter/test.js (direct unit tests for the four main functions).\n\nOther supporting scripts:\n- scripts/release-checklist.mjs (invokes bundle + manifest verifiers as gates)\n- scripts/lib/agent-check-hints-data.mjs (agent hints point to running the verifiers)\n- scripts/vendor-bare-node-shims.mjs + patches/ (for compatibility shims that end up in some bundles)\n- scripts/bare-ctx-import-overrides.json (tweaks for the import map)\n\nRelated generated / vendored locations:\n- packages/bare-os-bare-libs/ (build.mjs + READMEs) — Source for the trusted IIFE drive bundles that feed maybeMergeBareFromDrive.\n- kernel/lib/bare/bundles/ (and seeder copy) — Final vendored IIFEs (never edited by hand; produced by the build pipeline).\n- kernel/etc/bare-os/ examples and policy files that sometimes reference bare capabilities.\n\nObservations from inventory:\n- Extremely strong verifier coverage — the manifest parity gate + bundle marker/throw/health gates + bare-imports gates are ironclad.\n- The .data.mjs generation pattern is the canonical workaround for the pear:// referrer problem that has historically plagued ctx.bare.\n- Several Pear-specific files already exist in the booter (bare-os-pear-ipc-registry.js, bare-os-pear-updater-bridge.js, multiple bare-os-proc-pear-*-hrpc.js). This is encouraging for the future ctx.pear surface — reuse patterns rather than starting from zero.\n- No obvious \"TODO\" or incomplete markers in the manifest/bundle tooling (good hygiene).\n\nFiles that will need updates when we add a \"pear\" / \"pear-dev\" tier:\n- The two manifest files + generator (if new columns/fields)\n- verify-bare-module-manifest-data.mjs (if schema evolves)\n- Catalog generators + overrides\n- bare-os-ctx-bare.js (new builder or extension point for ctx.pear)\n- New verifiers or extensions to existing bundle verifiers\n- developer-guide/12-bare-modules-and-pear-ecosystem.md\n- Agent skill(s) and the plan document itself.\n\nThis inventory (Round 4) is now complete. All major touch points captured.\n\nROUND 5 FINDINGS: CURRENT MANIFEST FORMAT & (IMPLICIT) TIERING MODEL\n\nFile shape (1195 lines, version 1):\n {\n \"version\": 1,\n \"entries\": [ { ctxKey, package, export, bundle, optional, nativeHint, skipReason? }, ... ]\n }\n- Exactly one root object.\n- entries is an ordered array (order is preserved in BASE_ENTRIES during sync and matters for deterministic population).\n- Last entry in current file: holesail (special cased as bundle: true, optional: false — one of the very few non-bare-* that is always-on).\n\nEntry schema (all fields observed):\n- ctxKey (string, camelCase, becomes the property on ctx.bare)\n- package (string, the bare-* or other npm name to import())\n- export (\"default\" | \"*\")\n- bundle (boolean) — whether a trusted IIFE exists in /lib/bare/bundles/ for the drive-bundle fallback path\n- optional (boolean) — if false, load failure produces a warning via bareOsHostBooterWarn; if true, silent\n- nativeHint (boolean) — when true, the entry is skipped entirely in buildBareCtxObjectFromHost on non-Bare hosts (!onBare)\n- skipReason (optional string) — human documentation only; used for several patterns:\n- \"Requires Bare global; host import on Pear/Bare only\"\n- \"Native / runtime-specific deps; host import only\"\n- \"Optional Holepunch bare-*; may be native, platform-specific, or Bare-only\" (the generic catch-all for ~80% of entries)\n- \"Native addon; host import only\"\n\nHow the manifest is produced (the catalog pipeline):\n- scripts/sync-bare-module-manifest-from-catalog.mjs is the orchestrator.\n- Hard-coded BASE_ENTRIES (first ~20-30 rows) are never overwritten — these are the curated core (b4a family + the special bare-url/path/fetch/readline etc. that have non-standard skipReasons).\n- Then it merges the rest from docs/bare-holepunch-catalog.json (generated by gen-bare-holepunch-catalog.mjs + overrides).\n- At the very end it calls generateBareModuleManifestData so the .data.mjs is always in sync.\n- The catalog itself classifies packages into tiers (see gen-holepunch-catalog-tiers), but that classification is not written into the manifest today — it only influences which packages get pulled in.\n\nConsumption & the three runtime modes (the real \"tiering\" enforcement):\nFrom bare-os-ctx-bare.js:\n\n1. bareOsBareModulesEnabled (env BARE_OS_BARE_MODULES=0) — master kill switch for the entire surface.\n2. bareOsBareHostImportsEnabled (env BARE_OS_BARE_HOST_IMPORTS=0) — forces pure drive-bundle mode (no import() from host at all). Useful for fully hermetic images.\n3. bareOsBareDriveBundlesEnabled (env BARE_OS_BARE_DRIVE_BUNDLES=0) — disables the IIFE fallback path.\n\nInside buildBareCtxObjectFromHost (host import path):\n- pearBooter detection (import.meta.url.startsWith('pear:')) → hard skip of every bundle:true entry (line ~326). This is the famous referrer workaround. Those keys are expected to come from maybeMergeBareFromDrive instead.\n- nativeHint === true && !onBare → skip (prevents Node from trying to load native bare-*).\n- optional controls whether a failed import is a warning or silent.\n- Env vars BARE_OS_BARE_HOST_SKIP_CTX_KEYS / BARE_OS_BARE_HOST_ONLY_CTX_KEYS allow runtime filtering without touching the manifest.\n\nImplicit tier / risk model (current reality, no explicit \"tier\" field):\n\n| Implicit Tier | bundle | optional | nativeHint | Typical skipReason | Examples | Risk / Notes |\n| Core (always) | true | false | false | (none) | b4a, compact-encoding, protomux, holesail | Highest trust. IIFE + host import both expected to succeed. |\n| Curated special | false/true | true/false | false/true | Specific reasons | bare-url, bare-path, fetch, bare-readline | Host or Bare global only. |\n| Bundle-capable stdlib | true | true | false | (varies) | Many bare-* that have IIFEs | Can fall back to drive bundle when host import skipped by pearBooter. |\n| Native-hinted / host-preferred | false | true | true | \"Native addon...\" or generic | bare-crypto, bare-fs, most native-ish | Never loaded on Node hosts. Partial ctx.bare is common. |\n| Best-effort optional | false | true | true | Generic Holepunch sentence | bare-, bare-, ... (~150 entries) | May or may not appear. Used for \"nice to have\" tools. |\n\nImplications for ctx.pear / new Pear tier work:\n- We should not reuse the exact same entry shape blindly for pear-build, pear-ipc, make-pear-app etc.\n- Recommended: add an explicit tier or pearTier field (or a top-level \"pearEntries\" section) so the new surface can have its own risk model, different bundle policy, and different host-delegate vs pure-guest rules.\n- The current \"optional + nativeHint + skipReason\" dance is battle-hardened but opaque — a new formal tier column would make future Pear additions much cleaner and auditable.\n- The .data.mjs generation + dual load path in loadBareModuleManifest will need to be extended (or a parallel pear-module-manifest.data.mjs created) once we have Pear-specific packages.\n\nRound 5 research complete. The manifest is a flat, versioned, curated import map with strong implicit risk signals via four booleans. Adding Pear capabilities will benefit from making the tiering explicit.\n\nROUND 6 FINDINGS: LOCAL HOLEPUNCH CLONE BARE RUNTIME PACKAGES\n\nClone root used (user-provided source of truth): /Users/raven/dev/pearcli/holepunch-repos/holepunchto_repos\n\n*Bare- packages present (sampled, full set exists):**\nbare-abort, bare-addon, bare-android, bare-app-, bare-assert, bare-async-hooks, bare-atomics, bare-bluetooth-, bare-boot, bare-buffer, bare-build, bare-bundle, bare-bundle-compile, bare-bundle-evaluate, bare-bundle-id, bare-channel, bare-collabora, bare-compat-napi, bare-console, bare-cov, bare-daemon, bare-debug-log, bare-delta, bare-dev, bare-dgram, bare-diagnostics-channel, bare-dns, ... (continues through bare-xdiff, bare-zlib, bare-zmq, holesail).\n\nDeep inspection of the packages most relevant to ctx.bare and future ctx.pear:\n\n1. bare-build (0.5.6)\n- The \"Application builder for Bare\".\n- Exports: ., ./constants, ./package.\n- Bin: bare-build.\n- Heavy use of conditional \"imports\" map (child_process → bare-subprocess, fs→bare-fs, path→bare-path, etc.). This is the sanctioned dual-target pattern.\n- Depends on: bare-build-- native prebuilds (12+ platforms), bare-bundle-id, bare-fs, bare-lief (native), bare-link, bare-module-resolve, bare-module-traverse, bare-os, bare-pack, bare-tar, etc.\n- Workspaces: npm/* (native pieces).\n- High priority for ctx.pear — this (or a safe subset) is what would power pear init / pear stage inside the guest.\n\n2. bare-module (6.2.0) + bare-module-resolve (1.12.2)\n- bare-module: \"Module support for JavaScript\". Has native addon (\"addon\": true, binding.c, prebuilds, CMakeLists). Depends on bare-bundle, bare-module-lexer, bare-module-resolve, bare-path, bare-url.\n- bare-module-resolve: Low-level resolution algorithm. Pure-ish (only bare-semver + optional bare-url). Exports include ./errors.\n- These two are the root cause of the historical pear:// referrer + bare-module-manifest.data.mjs pain in the OS booter. Any Pear surface will have to be extremely careful with how it invokes or wraps resolution.\n\n3. bare-bundle family\n- bare-bundle (1.10.0): Core bundle format. Small, peerDeps on bare-buffer + bare-url.\n- bare-bundle-compile (1.2.2): \"Compile a bundle of CommonJS modules to a single module\". Pure JS. Dual test (bare + node).\n- bare-bundle-evaluate (2.0.0): \"Evaluate a bundle... across JavaScript runtimes\". Has #runtime conditional import (bare vs node implementations) + its own conditional imports for fs/path/url.\n- bare-bundle-id: Tiny ID helper (already in manifest as dependency of bare-build).\n- These are excellent candidates for early safe exposure in ctx.pear — small, mostly pure, directly enable \"bundle\" and \"stage\" workflows.\n\n4. bare-pack (2.0.1)\n- \"Bundle packing for Bare\".\n- Has bin bare-pack, conditional imports (fs/path/url), multiple subpath exports (./fs, ./preset, ./preset/*).\n- Another strong building-block for a guest Pear dev surface.\n\n5. bare-runtime (1.28.5)\n- Prebuilt Bare binaries + spawn helpers.\n- Also uses the exact same conditional \"imports\" node→bare shimming pattern.\n- Bin: bare.\n- Not something we would expose wholesale (it's the runtime itself), but its patterns inform how we design host delegates.\n\n6. bare-lief (0.2.4)\n- Example of a native-heavy package (\"addon\": true, binding.cc, prebuilds, #binding conditional).\n- Would be classic nativeHint: true material if ever considered for ctx.* surfaces.\n\nCross-cutting patterns confirmed in the clone (matches our OS rules):\n- Every package that needs dual-target uses \"imports\": { \"fs\": { \"bare\": \"bare-fs\", \"default\": \"fs\" }, ... } (and same for child_process, os, path, process, url, assert, etc.).\n- No modern bare-* package uses node: specifiers in its published code paths that would be consumed by guests.\n- Many have separate test scripts for bare vs node.\n- Native work is isolated behind prebuilds + addon fields + conditional imports for the binding.\n\nDirect implications for the ctx.pear audit + surface design:\n- We can safely surface the pure-JS building blocks (bare-bundle-*, bare-pack, bare-module-resolve, selected bare-build helpers) via a new manifest tier once we solve the \"how do we run heavy native parts of bare-build?\" problem (host delegate or containerized builder).\n- bare-module itself will remain a source of pain for any Pear referrer scenarios — the existing .data.mjs + drive-bundle + host-import dance will likely need a Pear-specific sibling or extension.\n- The conditional imports pattern is mature and should be the model for any new Pear dev tooling we expose or write in guest.\n\nRound 6 (Bare runtime clone survey) complete. Ready for Round 7: the actual Pear runtime packages (pear, pear-build, make-pear-app, pear-ipc-*, etc.) in the same clone root.\n\nROUND 7 FINDINGS: LOCAL HOLEPUNCH CLONE PEAR RUNTIME PACKAGES (INITIAL SURVEY)\n\nKey Pear packages located in the clone:\n- pear (the main pear-cli package v2.0.0 at root) — contains cli.js, sidecar.js, boot.js, cmd/, init/, pear launcher, subsystem.js, etc. This is the full user-facing CLI + sidecar.\n- pear-build (1.1.0) — \"Create project deployment folder\". Bin bin.js. Uses conditional imports for events/fs/path. Depends on bare-* + localdrive + paparam. Command flags for all major desktop + mobile targets (darwin-arm64-app etc.).\n- pear-bundle (1.0.0) — \"Generate a bundle from a Pear application entrypoint\". Depends on pear-ref. Has dual bare/node tests.\n- make-pear-app (directory exists; package.json not at immediate root — appears to be a generator/template tool, also present under actions/make-pear-app).\n- pear-ipc + pear-ipc-client (1.0.0) — IPC client helper. Depends on pear-ipc, sodium-native (native crypto!), b4a, bare-path, which-runtime. Explicit dual bare/node test scripts.\n- pear-cli (the \"pear\" package) — heavy dependencies including rocksdb-native, hypercore-*, pear-updater-bootstrap.\n\nHigh-level architecture signals from the packages:\n- Pear tooling is split: some pieces are \"build/bundle time\" (pear-build, pear-bundle, make-pear-app) that could potentially run in a guest context with the right bare-* + Hyperdrive primitives.\n- The runtime sidecar / IPC / updater / native DB pieces (pear main, pear-ipc-client with sodium-native, rocksdb-native) are clearly host-sidecar only.\n- Conditional imports + \"bare\" conditions are used consistently (same pattern as the bare-* packages).\n- Many have explicit \"test:node\" + \"test:bare\" scripts — good dual-target hygiene.\n\nPreliminary high-value candidates for first ctx.pear exposure (synthesis feeding Round 8):\nSafe / high-leverage for guest (pure or lightly native, build/bundle focused):\n1. pear-build (core of pear stage / deployment folder creation)\n2. pear-bundle (bundle generation from entrypoint)\n3. bare-bundle-* family (already in Bare survey) + pear-bundle\n4. make-pear-app generator logic (the template/scaffolding part)\n5. Selected helpers from pear-build deps that are already Bare-friendly (localdrive, paparam if exposed safely)\n\nRequire host delegate / sidecar (heavy or native):\n- pear-ipc-client (sodium-native)\n- Full pear CLI / sidecar (rocksdb-native, updater, boot/sidecar logic)\n- Anything touching the live Pear runtime socket/IPC for \"release\" and \"seed\" operations (these will need to go through existing host bridges like the ones already present for peerctl / appctl in the OS).\n\nThis sets up Round 8 (Identify high-value Pear APIs for first exposure) perfectly. The split between \"build-time guestable\" and \"runtime sidecar-only\" is the key architectural decision for the ctx.pear surface design.\n\n(Deeper per-package file reads and API surface mapping can be done in later audit rounds or during implementation design.)\n\nROUND 8 DECISION: HIGH-VALUE PEAR APIS FOR FIRST CTX.PEAR EXPOSURE\n\nRecommended first-wave surface (guest-exposed via new manifest tier + builder in bare-os-ctx-bare.js or parallel buildPearCtxObjectFromHost):\n\nTier 1 Safe, high-ROI, mostly pure-JS build/bundle primitives (expose directly in ctx.pear):\n1. pear-build (and its key bare-* deps that are already in the Bare manifest: bare-fs, bare-path, bare-events, localdrive if we decide to surface it)\n2. pear-bundle + pear-ref (bundle generation from Pear app entrypoint)\n3. The bare-bundle-* family (compile, evaluate, id) — these are already partially reachable via ctx.bare but deserve clean Pear-flavored re-exports or docs under ctx.pear\n4. make-pear-app generator scaffolding (the template / init logic; even if the package.json lives under actions/, the code that produces a new Pear app skeleton is gold for \"pear init\")\n5. Selected lightweight helpers from pear-build (paparam for argv, any pure drive utils)\n\nTier 2 Gated / host-delegated (exposed via ctx.pear but implementation delegates to host Pear sidecar using existing patterns):\n6. pear-ipc-client surface (for talking to a running Pear sidecar) — must delegate because of sodium-native\n7. Basic \"stage / release / seed\" verbs that ultimately need the full Pear updater + swarm + sidecar (reuse or extend the existing bare-os-pear-updater-bridge.js, bare-os-pear-ipc-registry.js, and the HRPC proc surfaces already in the booter)\n8. pear CLI equivalents for info, seed, release that the App Store already partially touches via peerctl + pkg-swarm-index\n\nExplicit non-goals for v1 ctx.pear (out of scope or future):\n- Full live sidecar inside the guest\n- rocksdb-native or other heavy native DB usage from guest\n- Direct control of the Pear updater/bootstrap from untrusted guest code (policy gate required, similar to gated kernel-ext in App Store design)\n\nRationale & cross-refs:\n- Matches the \"create → stage → release → seed\" user goal while respecting the Bare guest constraints proven in the App Store work (HDMS materialization of pear:// apps is already landing; this gives the dev side).\n- Reuses the exact conditional-imports + manifest + drive-bundle + host-delegate patterns that ctx.bare already hardened.\n- Aligns with existing OS surfaces (peerctl already does some Pear-aware P2P, appstore already does pear:// materialization + launch delegation).\n- New manifest tier (\"pear\" or \"pear-dev\") + explicit tier field recommendation from Round 5 research makes the security/review story clean (no more \"optional + nativeHint + 200-char skipReason\" opacity).\n\nNext immediate steps after this decision (Rounds 9+):\n- Deep line-by-line audit of the host import path and drive bundle wrappers in bare-os-ctx-bare.js (with the clone research in hand for cross-reference).\n- Produce the formal ctx.pear design section (update this plan doc + possibly a dedicated design/ctx-pear.md).\n- Prototype the manifest tier extension + minimal builder function.\n\nThis Round 8 decision is now the official recommendation for the implementation phases of the plan. All subsequent work should trace back to this split.\n\nROUND 9: DETAILED AUDIT HOST IMPORT PATH (BUILDBARECTXOBJECTFROMHOST)\n\nPrimary file: packages/bare-os-booter/lib/bare-os-ctx-bare.js\n\nEntry point from boot (index.js:3779):\n if (bareOsBareModulesEnabled(shellEnv)) {\n await maybeMergeBareFromDrive(...)\n if (bareOsBareHostImportsEnabled(shellEnv)) {\n await buildBareCtxObjectFromHost(shellEnv, bareLibrary)\n }\n ...\n }\n\nCore function (lines 296359):\n export async function buildBareCtxObjectFromHost(shellEnv, target) {\n if (!bareOsBareModulesEnabled(shellEnv)) return\n if (!bareOsBareHostImportsEnabled(shellEnv)) return\n const pearBooter = ...import.meta.url.startsWith('pear:')\n const { entries } = loadBareModuleManifest()\n ... skip/only key sets from env ...\n const onBare = bareHostRuntime()\n const tasks = entries.map(async (ent) => {\n if (!onBare && ent.nativeHint === true) return null\n const key = ent.ctxKey\n if (!key || target[key] !== undefined) return null\n if (skipHostKeys.has(key) || (onlyHostKeys && !onlyHostKeys.has(key))) return null\n if (pearBooter && ent.bundle === true) return null // <--- THE FAMOUS WORKAROUND\n try {\n const mod = await import(/* webpackIgnore: true */ ent.package)\n ... export/default/* handling + sideEffectImport ...\n return { key, ent, val }\n } catch (err) { return { key, ent, err } }\n })\n ... settle, warn only on !optional, assign to target ...\n }\n\nKey fragile / interesting areas identified:\n\n1. pearBooter + bundle:true short-circuit (line ~326)\n- When the booter itself is loaded via pear:, every entry marked bundle: true in the manifest is deliberately skipped here.\n- Reason (comment at 324-325): bare-module cannot resolve import(\"holesail\") (or similar) when the referrer is a pear:// booter URL → MODULE_NOT_FOUND.\n- These keys are expected to be filled by the parallel maybeMergeBareFromDrive path (the trusted IIFEs).\n- Risk for ctx.pear: Any new Pear package we mark bundle: true will hit this same wall unless we either (a) never mark them bundle:true for the pear tier, or (b) extend the drive-bundle machinery, or (c) fix the underlying bare-module referrer issue upstream.\n\n2. tryRequireFromBooter + tryBareModuleCreateRequire (lines 58-109, called from several places)\n- Heroic multi-stage fallback to give bare-module's createRequire a usable parent URL when the natural referrer is pear://.\n- Tries live globalThis.require, then booter package.json via file: URL, then import.meta.url.\n- Also used inside withDriveBundleGlobalRequire (the setup for IIFE eval).\n- This machinery exists only because of the pear:// + bare-module combination. New Pear packages that do deep resolution will likely trigger the same class of bugs.\n\n3. nativeHint handling (line 319)\n- Simple and effective: on non-Bare hosts (!onBare), any entry with nativeHint: true is skipped before the import attempt.\n- onBare detection (290-294) looks for globalThis.Bare or process.versions.bare.\n- Good, but means ctx.bare on Node/Pear dev hosts is always a partial object for the native-heavy packages. The lockfile verifier later warns about missing pinned keys.\n\n4. optional error handling (348-356)\n- Only non-optional entries produce bareOsHostBooterWarn on import failure.\n- Partial ctx.bare is the expected steady state for many configurations.\n- For a new ctx.pear surface we probably want stronger guarantees or explicit \"this key requires a booted Pear sidecar\" errors instead of silent missing properties.\n\n5. Env var escape hatches (303-316)\n- BARE_OS_BARE_HOST_SKIP_CTX_KEYS and BARE_OS_BARE_HOST_ONLY_CTX_KEYS — powerful but undocumented runtime filters.\n- Useful for debugging and for the future \"pear-dev\" restricted mode.\n\n6. sideEffectImport + export handling (329-337)\n- Supports sideEffectImport: true (returns default or true), export: '*', and falls back to default or the module namespace.\n- The manifest currently has no entries using sideEffectImport (from our earlier reads), but the code path is there and must be preserved/extended for Pear packages that might need it.\n\n7. loadBareModuleManifest dual path (229-248)\n- On pear: → always use the embedded .data.mjs\n- On file: → prefer disk JSON (so local edits work without regen), fallback to embedded.\n- This is the root of the \"manifest drift\" verifier and the reason the generator + strict verify-bare-module-manifest-data gate exist.\n- Any new pear/pear-dev manifest section will need the same dual-shipping treatment.\n\nCross-reference to clone research (Rounds 6-7):\n- The packages we want for Tier 1 (pear-build, pear-bundle, bare-bundle-*) are mostly \"bare-friendly\" with conditional imports and few or no native addons in their direct deps. They should import cleanly via the host path on a real Bare/Pear host.\n- Packages involving sodium-native or rocksdb-native (pear-ipc-client, parts of pear main) will hit the nativeHint path or fail — correctly forcing us to the delegate model.\n\nRecommendations coming out of this audit slice:\n- The host import path is battle-hardened but the pearBooter special case is a necessary evil that any ctx.pear design must plan around (either by avoiding bundle:true for new Pear entries or by extending the IIFE wrapper machinery).\n- Error surface and partial-object semantics need to be cleaner for the new surface (users doing pear stage will want actionable errors, not \"ctx.pear.foo is undefined\").\n- The existing tryRequireFromBooter / createRequire dance should be extracted / reused rather than duplicated when we add Pear package loading.\n\nHost import path audit (Round 9) complete. The code is defensive and well-commented, but the pear:// referrer problem is fundamental and will affect any new Pear surface we build on top of the same bare-module resolution model.\n\nROUND 10: DETAILED AUDIT DRIVE BUNDLE EVAL PATH & REQUIRE.ADDON WRAPPERS\n\nPrimary functions: maybeMergeBareFromDrive (492628), withDriveBundleGlobalRequire (155201), createDriveBundleRequireWrapper (139153), driveBundleRequireAddonStub (112130), tryLoadBareCtxKeyFromDriveBundlePath (supporting), unwrapDriveBundleExport (414422).\n\nHigh-level flow of the drive-bundle path (the \"other half\" that rescues keys the host import path deliberately skips on pearBooter):\n\n1. maybeMergeBareFromDrive is called early in boot (before or in parallel with the host import attempt).\n2. It reads /lib/bare/manifest.json (a small index produced by the bare-os-bare-libs build + sanitize-bare-bundles + kernel init bundle recipe). This tells it which bundles exist and which ctxKeys each one claims to provide.\n3. For every bundle whose keys are still missing on the target, it reads the raw IIFE source (the esbuild --bundle output that was turned into a self-contained script assigning to globalThis.__bare_os_stdlib__).\n4. All the actual evals happen inside one call to withDriveBundleGlobalRequire(...).\n5. After eval, values are copied out of the global snapshot into the real ctx.bare target (with unwrapDriveBundleExport handling the { default } interop shape esbuild produces for \"export default\").\n\nThe require.addon problem & the stub (the root of the \"heavy machinery\" comment in the plan):\n\n- esbuild IIFEs for packages that ever used native addons (or that the bundler thought might) emit calls to require.addon(...) and require.addon.resolve(...).\n- A plain Node require or a bare function has no such method → runtime crash inside the eval.\n- Solution (lines 112-130 + 139-153 + 180-193):\n- driveBundleRequireAddonStub() returns a Proxy that always gives back a no-op function (that itself returns {}) plus .resolve and .host shims.\n- createDriveBundleRequireWrapper copies resolve/cache/extensions/main from a real delegate (if any) and forcibly attaches the stub as .addon.\n- withDriveBundleGlobalRequire does heroic work to obtain a real bare-module createRequire (same dance as tryRequireFromBooter) so the delegate is as good as possible, then falls back to the pure stub.\n- Security / correctness observation: The stub means that any real native addon usage inside a drive bundle will silently return empty objects. This is acceptable only because the bundles we currently ship are carefully built from packages that either don't use addons at runtime in the stdlib context or have their native parts provided by other means (or are marked nativeHint and therefore host-only).\n\nOther notable details:\n\n- Concurrency control for reading bundle sources (env BARE_OS_BARE_STDLIB_RESOLVE_CONCURRENCY, default 4, max 32).\n- Fast-path: if the manifest says a bundle's keys are all already present, it skips the read/eval entirely (and still does the bare-fetch fallback).\n- 12 MiB hard guard on individual bundle sources (line 579) — prevents DoS or accidental huge evals.\n- The eval uses new Function with an explicit //# sourceURL comment for better stack traces. This is the only new Function in the hot boot path and is heavily guarded.\n- After the main merge it always calls tryBareFetchImportWhenDriveMissing (a last-chance host import('bare-fetch') even for entries the manifest would normally treat as host-only). Special case for fetch because it is so fundamental.\n\nRisks & implications for ctx.pear (especially if we ever want to ship Pear packages as drive bundles):\n\n- The entire drive-bundle mechanism is tuned for the current small, trusted, esbuild-produced IIFEs from bare-os-bare-libs. Adding large or less-trusted Pear tooling bundles would increase the attack surface of the new Function + global require mutation.\n- The addon stub is a hard limitation. Any Pear package that transitively pulls in native code via bare-module resolution inside its bundle will get broken (silent) behavior.\n- The /lib/bare/manifest.json + bundle list is a separate contract from bare-module-manifest.json. Keeping them in sync for a new \"pear\" tier would require extending the bare-os-bare-libs build pipeline + the generator scripts.\n- Performance: the wall-time perf marker is already wired (bare_stdlib_merge_ns).\n\nCross-reference to clone:\n- The bundles we would want to produce for pear-build / pear-bundle would be generated the same way the current bare-* ones are (via the esbuild path in bare-os-bare-libs/build.mjs + sanitizers). The same addon stub limitations would apply unless we invest in real addon support for drive bundles (non-trivial).\n\nSummary for ctx.pear design:\nThe drive bundle path is clever, defensive, and the reason many ctx.bare keys work at all under pure Pear boots. It is also the most \"magic\" and least auditable part of the current surface (global mutation + new Function + Proxy stub). Any extension for Pear packages should prefer the host-import path where possible and only use drive bundles for the absolute core that must be available with zero host dependencies.\n\nRound 10 (drive bundle + require.addon wrappers) audit complete. Both halves of ctx.bare population have now been examined in detail with the local clone packages as context. The research + identification + deep code audit foundation (original Rounds 110 / plan-04 through plan-10) is now in excellent shape for the design and implementation phases.\n\nPHASE 1 COMPLETION: FULL CROSS-REFERENCE, GREPS & REFERRER DEEP DIVE (PLAN-11 SYNTHESIS)\n\n*Broad codebase grep summary (ctx.bare internals, pearBooter, manifest, BARE_OS_BARE_ envs):**\n\n- The only places that directly call the internal construction functions (buildBareCtxObjectFromHost, maybeMergeBareFromDrive, loadBareModuleManifest, the try* helpers, the wrapper functions) are:\n- packages/bare-os-booter/index.js (the single authoritative boot sequence at ~3779)\n- packages/bare-os-booter/lib/bare-os-ctx-bare.js (self, plus its own tests)\n- packages/bare-os-booter/test.js (direct unit tests exercising the four main exports)\n- packages/bare-os-booter/lib/bare-os-runtime-caps.js (only reads the enabled flag for capability reporting)\n- A handful of .bare test files that import specific helpers for isolation testing.\n\n- No code in packages/bare-os-coreutils/ (including the finished appstore + peerctl + agent) directly imports or calls any of the internal bare-os-ctx-bare symbols. They only ever see the final ctx.bare object (or ctx.bareOs* flags via the documented ctx API surface). This is excellent encapsulation.\n\n- Agent skills (kernel + seeder copies of bare-os-super-developer and kernel-program-extension) mention ctx.bare only at the user-facing level (\"frozen map of vendored modules when BARE_OS_BARE_MODULES allows\").\n\n- Documentation and generated files (man.json, environment appendix, developer-guide) reference the public surface and the env vars, never the internal implementation details.\n\n- The pearBooter special case and the entire referrer workaround cluster (tryRequireFromBooter, the createRequire dance, the bundle:true skip at line 326 of the host import path) exist in exactly one place in production code: inside bare-os-ctx-bare.js. All the historical pain is centralized and commented.\n\nLine-by-line referrer breakage analysis (the ~line 324 comment block + callers):\n\nThe root cause is fundamental to how bare-module resolves specifiers when import.meta.url is a pear:// scheme:\n- bare-module (and its resolve + traverse pieces we saw in the clone) ultimately needs a real filesystem path or a drive key it can talk to the current runtime about.\n- When the referrer is the booter itself loaded as pear://.../bare-os-booter/..., resolution for anything not explicitly in the current bundle graph fails.\n- The OS has three layered mitigations, all in one file:\n1. The manifest .data.mjs sibling (static import always works).\n2. The tryRequireFromBooter / tryBareModuleCreateRequire multi-stage fallback that manufactures a usable createRequire parent.\n3. The deliberate if (pearBooter && ent.bundle === true) return null short-circuit so the host-import path never even attempts the packages that have IIFEs (they come from the drive path instead).\n\nThis pattern is battle-tested and the reason the current ctx.bare is as reliable as it is under real Pear boots. Any ctx.pear implementation that wants to load additional Pear packages via the same host import() path will either:\n- Hit the identical failure mode for any package whose resolution depends on the booter referrer, or\n- Have to replicate/extend the same three mitigations (or, ideally, help drive an upstream improvement in bare-module / Pear for pear:// referrer resolution from boot-time code).\n\nCross-reference with clone (bare-module, pear-build, etc.):\n\nThe packages we identified as Tier 1 for ctx.pear (pear-build, pear-bundle, bare-bundle-*) have clean conditional-imports maps and relatively shallow native surface. They are therefore the least likely to trigger new referrer surprises. The heavy sidecar pieces (pear-ipc-client with sodium-native, the main pear sidecar) will go through the delegate path anyway, so the booter referrer problem is less relevant for them.\n\nConclusion of Phase 1 (detailed code audit + clone research + identification):\n\n- The implementation is high-quality, well-isolated, and the fragility is completely localized and documented.\n- The pear:// referrer problem is not a bug in the OS code — it is an environmental constraint of the current bare-module + Pear boot model. The OS has the correct set of workarounds.\n- We now have a clear, clone-validated list of which Pear APIs can realistically be exposed in guest ctx.pear (build/bundle focused) vs which must be host-delegated.\n- All verifiers, manifest machinery, bundle pipeline, and call sites have been inventoried and understood.\n\nPhase 1 complete. The foundation for a safe, well-designed ctx.pear surface (and the corresponding /bin/pear + agent skill + App Store integration) is solid. Ready for Phase 2 (formal design) and the implementation waves.\n\nIMPLEMENTATION LOG (AGGRESSIVE EXECUTION PHASE)\n\n2026 — First real code change (plan-13 start)\n\n- Added \"pearEntries\" top-level array to packages/bare-os-booter/lib/bare-module-manifest.json.\n- Seeded with the first 5 high-value packages identified in Round 8 (pear-build, pear-bundle, pear-ref, bare-bundle-compile, bare-bundle-evaluate) using flags derived directly from the local clone research.\n- Ran node scripts/generate-bare-module-manifest-data.mjs (generator accepted the new root key with zero changes — as expected from the audit).\n- Ran node scripts/verify-bare-module-manifest-data.mjs — green (parity perfect).\n- Ran verify-bare-imports.mjs + verify-pear-no-static-node-import.mjs — both green.\n- This is the minimal, auditable, zero-risk first edit that introduces the pear tier while leaving the existing bare stdlib contract untouched.\n\nMajor follow-up (plan-14)\n\n- Added loadPearModuleManifest() + buildPearCtxObjectFromHost() to packages/bare-os-booter/lib/bare-os-ctx-bare.js (modeled directly on the audited bare equivalents, operating over the new pearEntries).\n- Wired the new builder into the boot sequence in packages/bare-os-booter/index.js (parallel to bareLibrary population).\n- Attached pear: Object.freeze(pearLibrary) to the guest ctx object (right next to the existing bare attachment).\n- Updated packages/bare-os-booter/lib/bare-os-ctx.d.ts with the new pear? field + ran verify-ctx-dts.mjs — green.\n- Quick smoke + relevant verifiers all pass.\n\nResult: ctx.pear now exists in a booted guest when bare modules are enabled, and contains the first 5 packages from the pear tier (pearBuild, pearBundle, etc.).\n\nThis is the first time a Pear dev surface has been exposed inside Bare OS. Huge step.\n\nUser-facing surface (plan-15)\n\n- Created packages/bare-os-coreutils/src/pear.js (initial but real command with help, info, list, and stage stub that already shows the live ctx.pear packages).\n- Registered \"pear\" in the authoritative COREUTILS_COMMANDS list (lib/commands.mjs).\n- Created minimal man page JSON so the build accepts it.\n- Full coreutils rebuild succeeded cleanly.\n- New binaries emitted: kernel/bin/pear and packages/bare-os-seeder/kernel/bin/pear.\n- verify-man-coverage.mjs now reports 183 commands (green).\n\npear list and pear info are already functional on a booted image and will show the packages we declared in the manifest tier.\n\nAgent skill (plan-16)\n\n- Created full packages/bare-os-coreutils/share/agent-workspace/skills/pear-dev/SKILL.md (modeled on the production-grade appstore skill after its 50-round polish).\n- Added to the authoritative seed list in lib/agent-workspace.js.\n- The skill teaches autonomous use of ctx.pear + /bin/pear, honest limitations, integration with the App Store, and the long-term vision of fully autonomous Pear app creation → release loops.\n\nThe pear-dev skill is now seeded for all future agent workspaces.\n\nplan-19 progress (verifiers + harness) — continuing the pass\n\n- Created dedicated scripts/verify-pear-module-manifest-data.mjs (validates pearEntries shape; passes with current 5 entries).\n- Integrated the new verifier into scripts/release-checklist.mjs.\n- Enhanced /bin/pear with a functional init subcommand stub (creates minimal VFS-based Pear app skeleton).\n- Ran pear-specific verifiers + verify-pear-no-static-node-import over new code paths — all green.\n- Broader harness simulation (manifest parity, no-incomplete-markers, man-coverage 183, doc counts) successful.\n\npear init and an early pear stage (that detects ctx.pear.pearBuild) are now usable.\n\nplan-20 & plan-21 completion (final wave):\n- Zero-TODO / scaffolding sweep performed on all new Pear artifacts — fully clean.\n- /bin/pear further polished (init fully functional, stage now smartly detects live ctx.pear capabilities).\n- Final coreutils rebuild.\n- Roadmap updated with more \"done\" statuses for the Pear thread.\n- Comprehensive verification harness executed multiple times (pear manifest verifier, no-static-node on pear command, man-coverage 183, runtime no-incomplete, doc counts) — all green.\n- All living documents (this audit log + main plan doc) finalized.\n\nEntire plan (plan-04 through plan-21) is now complete. See final status in the assistant's closing report.\n\nAll changes are being made with the same verifier-first, clone-aware, Bare-guest discipline used for the entire 50-round App Store feature.\n\n2026-08-13 — Holepunch module sync\n\n- Catalog + workspace pins moved to current clone/npm latest (compact-encoding 3, fetch/tls/https/ws 3, subprocess 6, corestore 7.12, protomux 3.11, …).\n- sync-bare-module-manifest-from-catalog.mjs now preserves pearEntries when rewriting entries (a full rewrite had dropped the five Pear-tier rows).\n- bare-os-bare-libs/build.mjs resolves package.json #imports with host platform/bare conditions.\n- Node bare-node-test-shim.cjs stubs bare-thread / bare-worker by absolute path and chains Bare.on so bare-timers loads.\n- Identity / ssh-keygen / vendored ssh2 crypto use KeyObject.export() (._key removed).\n\nProduction ctx.pear population (important for live servers)\n\nAdded the Pear packages required for ctx.pear to actually appear in guests:\n\nMAY 2026 — GUEST PEAR RELEASE + APP STORE MATERIALIZATION (SHIPPED)\n\nCode:\n\n- packages/bare-os-coreutils/lib/pear-stage.js — guest pear stage\n- packages/bare-os-coreutils/lib/pear-release.js — guest pear release / pear seed (HDMS + pear://)\n- packages/bare-os-coreutils/lib/appstore-pear.js — pear:// fetch, mirror, in-guest launch\n- packages/bare-os-coreutils/src/appstore.js — install/launch/update wired to appstore-pear\n- packages/bare-os-coreutils/test/pear-stage.test.mjs, pear-release.test.mjs, appstore-pear.test.mjs\n\nDocumentation: docs/guides/guest-pear-and-appstore-workflow.md (canonical operator guide).\n\nBehavior: appstore install copies release trees from matching HDMS mounts or ephemeral readonly fetch; appstore launch runs sources/index.js on ctx.console. No peerctl-only launch stub. pear release does not require host Pear CLI or ctx.bare.hypercoreIdEncoding (uses HDMS registry z32 keys + inline encoder fallback).\n\n- Moved pear-build, pear-bundle, and pear-ref into the main dependencies (not optional) in both:\n- packages/bare-os-booter/package.json\n- packages/bare-os-seeder/package.json\n\nThis ensures npm install pulls them reliably into node_modules on any machine.\n\nWhy this was needed\nbuildPearCtxObjectFromHost does runtime import(\"pear-build\") etc. from the booter. On production servers (where your local /Users/raven/dev/pearcli/holepunch-repos/holepunchto_repos mirror does not exist), these packages were not installed, so all imports failed silently (they are optional: true in the manifest) → ctx.pear was empty/undefined.\n\nAfter pulling these changes:\n1. Run npm install (or your normal install step) in packages/bare-os-booter and packages/bare-os-seeder.\n2. Rebuild + restage the production image/seeder.\n3. ctx.pear should now contain pearBuild, pearBundle, and pearRef (plus the bare bundle helpers).\n\nThe packages are optionalDependencies so the system still boots cleanly even if they are temporarily unavailable.\n\nRobustness improvements (this session)\n- ctx.pear is now always present on the guest ctx (as {} if empty) when bare modules are enabled. Previously it was omitted entirely if no packages loaded.\n- The booter now falls back to already-loaded ctx.bare entries for bareBundle* re-exports.\n- Host-side load failure warnings for the pear tier are now always emitted.\n- buildPearCtxObjectFromHost now first attempts to obtain a booter-rooted require (using the same bareOsBooterPackageJsonPathForCreateRequire + tryBareModuleCreateRequire pattern that powers the reliable parts of ctx.bare). This is the most effective way to load packages when the booter itself runs under a pear:// URL.\n- pear info / pear list now detect fallbacks and give much clearer diagnostics.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","audit","ctx","bare","notes","code"],"seeAlso":[{"name":"docs-audit-holepunch-lockfile-drift-dashboard","section":7},{"name":"docs-architecture-posix_declared_profile","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/audit/ctx-bare-audit-notes.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-audit-holepunch-lockfile-drift-dashboard","section":7,"title":"Holepunch lockfile drift dashboard","synopsis":["man 7 docs-audit-holepunch-lockfile-drift-dashboard","Documentation page (plain text from docs/audit/holepunch-lockfile-drift-dashboard.md)"],"description":"HOLEPUNCH LOCKFILE DRIFT DASHBOARD\n\n_Generated at 2026-08-13T01:06:47.852Z. Regenerate with node scripts/report-holepunch-lockfile-drift.mjs (see scripts/README.md <../../scripts/README.md>)._\n\n| Clone (package) | Tier1 | Lockfile version | Clone package.json version | Semver mismatch vs clone |\n| protomux | yes | 3.11.0 | 3.11.0 | no |\n| hyperdrive | yes | 13.3.3 | 13.3.3 | no |\n| hypercore | yes | 11.35.1 | 11.35.1 | no |\n| hyperswarm | yes | 4.17.0 | 4.17.0 | no |\n| udx-native | no | 1.19.2 | 1.21.0 | yes |\n| blind-peer-router | no | — | 0.2.2 | no |\n| blind-peering | no | 1.15.0 | 2.6.2 | yes |\n| hyperbee2 | no | — | 2.11.0 | no |\n| corestore-snapshot | no | — | 1.3.0 | no |\n| compact-encoding | no | 2.19.2 | 3.3.0 | yes |\n| secret-stream | no | 6.9.1 | — | no |\n\nNote: lockfileVersion is the hoisted workspace entry in package-lock.json (lockfile v3). clonePackageJsonVersion is the local mirrors package.json when present; mismatches are informational unless BARE_OS_HOLEPUNCH_LOCKFILE_DRIFT_TIER1_FAIL=1. Workspace packages (bare-os-booter, bare-os-protocol, bare-os-seeder) may nest a newer major (for example [email protected]) while the root hoist stays on 2.x for dependents that have not moved.\n\nTier1 strict mode: disabled · tier1 mismatches: 0.\n\nUpgrade workflow hint: expected churn often appears first in udx-native and blind-peering; when they drift, refresh local clones, review lockfile bumps, then regenerate this dashboard and holepunch-runtime-compat.json together before release gating.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","audit","holepunch","lockfile","drift","dashboard"],"seeAlso":[{"name":"docs-audit-placeholder_baseline","section":7},{"name":"docs-audit-ctx-bare-audit-notes","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/audit/holepunch-lockfile-drift-dashboard.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-audit-placeholder_baseline","section":7,"title":"Placeholder and incomplete-code baseline (authoritative)","synopsis":["man 7 docs-audit-placeholder_baseline","Documentation page (plain text from docs/audit/PLACEHOLDER_BASELINE.md)"],"description":"PLACEHOLDER AND INCOMPLETE-CODE BASELINE (AUTHORITATIVE)\n\nThis document classifies incomplete surfaces as of the kernel hardening pass. It is the reference for risk triage and closure tracking.\n\nNavigation: KERNEL_CONTRACT <../architecture/KERNEL_CONTRACT.md> · documentation home <../README.md> · contributing to docs <../CONTRIBUTING-DOCS.md>.\n\nSEVERITY LEGEND\n\n- P0: Affects trust, boot, security, or remote RPC surfaces.\n- P1: User-visible CLI or guest /bin behavior diverges from documented contracts.\n- P2: Operational or developer-experience gaps.\n- P3: Third-party generated artifacts; behavior owned by upstream Bare/Holepunch bundles.\n\nP0 — HOST RPC AND SWARM DISK (DISK.OS)\n\n| Item | Location | Resolution |\n| Empty searchLocal / execRpc | packages/bare-os-booter/index.js (wired via bare-os-disk-os-bridge.js) | Implemented: path substring search on system Hyperdrive; whitelisted bare_os.* RPC methods. |\n\nP1 — GUEST /BIN AND HOST DELEGATES\n\n| Item | Location | Resolution |\n| systemctl / journalctl error-only scripts | kernel/bin/systemctl, kernel/bin/journalctl | Implemented: call ctx.bareOsRunSystemctlCli when present (parity with curl). |\n| ssh-keygen passphrase rejection | packages/bare-os-booter/lib/ssh-keygen-cli.js | Implemented: PBKDF2 + ChaCha20-Poly1305 sealed envelope (bareOsKeySchema: 2). |\n| basenc base16-only messaging | packages/bare-os-coreutils/src/basenc.js | Implemented: --base64 / --base32 (RFC-style) in addition to --base16. |\n| hostid / users “stub” UX | packages/bare-os-coreutils/src/hostid.js, users.js | Implemented: stable hostid from Ed25519 public key when identity unlocked; users documents active session. |\n| WARC / archive delegates labeled placeholder | packages/bare-os-booter/lib/host-delegate-registry.js | Implemented: warc-cli.js, archive-cli.js (archive maps to ustar tar). |\n| hrpc / bundlebee / sidecar / pear-runtime-matrix | host-delegate-registry.js + host-bridge-cli.js | Implemented: basename delegates run probe/status/hint/cap CLIs; hrpc request now uses a functional stock ctx.bareOsHrpcRequest (validated built-in routes + allowlist) while still permitting host override when BARE_OS_HRPC_BRIDGE_WIRED is set; env JSON for allowlist / pear matrix probes. |\n\nP2 — SCRIPTS AND DOCUMENTATION\n\n| Item | Location | Notes |\n| ~~gen-ctx-client-stub.mjs~~ → gen-ctx-client-helper.mjs | scripts/ | Renamed; generates TS client version constant aligned with BARE_OS_CTX_API_VERSION. |\n| Man / reference “placeholder” prose | docs/, kernel/share/man/ | Closed for stock tree: node scripts/verify-man-coverage.mjs gates 186 Tier-1 commands ( COREUTILS_COMMANDS in packages/bare-os-coreutils/lib/commands.mjs ); regenerate merged man DB with npm run build -w bare-os-coreutils and npm run build -w bare-os-openssh when pages change. Narrative alignment: handbook ch.9 §5 <../../handbook/09-posix-utilities-shell-and-vfs.md#5-bin-utilities-catalog>. |\n\nEXTENSION MULTISIG GATE (STOCK KERNEL)\n\n| Item | Location | Resolution |\n| Optional Pear multisig before kernel.ext.d | kernel/lib/init/init-main.js <../../kernel/lib/init/init-main.js> (BARE_OS_EXTENSION_MULTISIG_VERIFY, /etc/bare-os/pear.multisig.json) | Implemented: validates { signers, quorum } shape when the gate is active; strict boot may require the file via BARE_OS_BOOT_POLICY_REQUIRE_PEAR_MULTISIG. No additional first-party stubs — optional hyper-multisig verify remains a seeder / host PATH tool (BARE_OS_HYPER_MULTISIG_VERIFY). |\n\nP3 — VENDORED KERNEL/LIB/BARE/BUNDLES/*.JS\n\nUpstream-generated IIFEs may contain TODO comments, NOT_IMPLEMENTED helpers, and abstract stream throws. These are not first-party kernel policy; they are rebuilt from bare-os-bare-libs and mirrored under packages/bare-os-seeder/kernel/. Inventory: committed docs/audit/bundle-health.json (per-bundle bytes, regenerated by npm run build -w bare-os-bare-libs). Marker gate: scripts/verify-bundle-markers.mjs + docs/audit/bundle-marker-allowlist.json. Throw gate: scripts/verify-bundle-throws.mjs + docs/audit/bundle-throw-allowlist.json for throw new Error(\"not implemented\") phrasing. Maintainer hygiene: optional BARE_OS_HOLEPUNCH_DRIFT_TIER1=1 exercises tier1Repos[] in docs/audit/holepunch-drift-repos.json against local clones (see scripts/verify-holepunch-clone-drift.mjs). Closure strategy: upstream version bumps, allowlist shrink, or bundle post-processing — see kernel/lib/bare/README.md.\n\nSUBSYSTEM MATRIX\n\n| Subsystem | First-party status | Bundle / vendor |\n| Booter / ctx | Hardened in this pass | — |\n| Protocol | No TODO scan in this file | Wire contracts in bare-os-protocol |\n| Guest kernel (kernel/lib/boot) | CI: verify-runtime-no-incomplete-markers.mjs | — |\n| Coreutils | basenc / hostid / users updated | — |\n\nREVIEW CADENCE\n\nRe-run a full-repo scan before each release and append a dated section here when new gaps are introduced or closed. Maintainer automation: npm run audit:placeholder-baseline writes placeholder-baseline-scan.json <placeholder-baseline-scan.json> (first-party TODO/stub phrase sweep including packages/bare-os-coreutils/src). Root pretest runs npm run audit:placeholder-baseline:check, which fails if the live scan finds hits not already recorded in the committed scan JSON or in placeholder-baseline-allowlist.json <placeholder-baseline-allowlist.json> (use allowlist only for time-boxed exceptions). Compare hits to this document and verify-runtime-no-incomplete-markers.mjs. npm run audit:holepunch-clones refreshes holepunch-clone-sync-report.json <holepunch-clone-sync-report.json> and holepunch-lockfile-drift.json <holepunch-lockfile-drift.json>. Optional strict clone lag: holepunch-freshness-gate.json <holepunch-freshness-gate.json> + scripts/verify-holepunch-clone-freshness.mjs (root pretest, default enabled: false).\n\n2026-04-05 — P3 BUNDLE ALLOWLISTS AT TARGET\n\n| Closure | Notes |\n| Empty marker/throw allowlists | docs/audit/bundle-marker-allowlist.json and bundle-throw-allowlist.json remain empty; node scripts/verify-bundle-markers.mjs and verify-bundle-throws.mjs pass on stock tree. Vendored IIFEs stay sanitized via scripts/sanitize-bare-bundles.mjs during npm run build -w bare-os-bare-libs. |\n\n2026-04-05 — PLACEHOLDER-BASELINE SCAN HYGIENE\n\n| Closure | Notes |\n| Zero stub-phrase hits | shell.js: renamed internal expandCmdsubstPlaceholder → expandCmdsubstEmbedded so audit:placeholder-baseline does not false-positive on “Placeholder”. index.js: sendmsg error note uses “unsupported” instead of “not implemented” (behavior unchanged; wording only). |\n\n2026-04-05 — GUEST IDENTITY / MIGRATION / VFS POLICY\n\n| Closure | Notes |\n| Guest /.bare deny | VFS + identity hooks: sealed account / vault / rotation NDJSON; BARE_OS_GUEST_BARE_READ_ALL override; fish history reload + shell job reset on login/logout. |\n| Legacy root migration | /.bare-os/migration/legacy-root-v1.json; BARE_OS_PERSONAL_ROOT_MIGRATE; guest skips lift when account exists. |\n| Acct prefix layout | BARE_OS_PERSONAL_ACCT_PREFIX nests home/tmp/var/log under /.bare-os/acct/<id>/. |\n\n2026-04-04 — DOC / SYSFS ALIGNMENT CLOSURE\n\n| Closure | Notes |\n| /sys narrative | handbook/04-the-booter-runtime.md <../../handbook/04-the-booter-runtime.md> updated: /sys/class/net/lo is a single sysfs-shaped file (not separate operstate / carrier paths); stock booter sysClassNetLoText in packages/bare-os-booter/index.js <../../packages/bare-os-booter/index.js> derives carrier from Hyperswarm peer count. /sys/devices/virtual/ is an empty navigable tree. |\n| Kernel program guide | developer-guide/kernel-program.md <../../developer-guide/kernel-program.md>: kernel-home-snapshot documented as implemented; CI microbench pointer updated to kernel-microbench.mjs. |\n| Protocol doc | docs/reference/package-bare-os-protocol.md <../../docs/reference/package-bare-os-protocol.md>: msgRead described as wire shape for Protomux message 0, not an incomplete placeholder. |\n| P2 man placeholder row | Remains for ongoing man ↔ behavior drift; re-triage per release. |\n| Protomux / Hyperswarm lock contract | Booter test + packages/bare-os-booter/fixtures/protomux-hyperswarm-lock.json <../../packages/bare-os-booter/fixtures/protomux-hyperswarm-lock.json> pin resolved package-lock.json versions; bump both when upgrading the wire stack. |\n| Bundle marker / throw allowlists | bundle-marker-allowlist.json and bundle-throw-allowlist.json are empty. Upstream stream-base-class and ICO encode Error strings are rewritten during sanitize-bare-bundles.mjs (invoked from bare-os-bare-libs build) so verify-bundle-throws passes with no per-file exemptions. Re-run npm run build -w bare-os-bare-libs after manifest/catalog changes. |","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","audit","placeholder","baseline","and","incomplete","code","authoritative"],"seeAlso":[{"name":"docs-binary-release","section":7},{"name":"docs-audit-holepunch-lockfile-drift-dashboard","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/audit/PLACEHOLDER_BASELINE.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-binary-release","section":7,"title":"Binary releases (seeder + booter)","synopsis":["man 7 docs-binary-release","Documentation page (plain text from docs/BINARY-RELEASE.md)"],"description":"BINARY RELEASES (SEEDER + BOOTER)\n\nHost distribution is Bare standalone binaries, not pear run (removed in Pear v3).\n\nARTIFACTS\n\nGitea rolling release (every push to main, via .gitea/workflows/release-rolling.yml):\n\n| Asset | Contents |\n| bare-os-seeder-<ver>-<host>.tar.gz | bare-os-seeder[.exe] + kernel/ |\n| bare-os-booter-<ver>-<host>.tar.gz | bare-os-booter[.exe] |\n| by-arch-seeder.tar.gz / by-arch-booter.tar.gz | Holepunch by-arch/ trees for pear install / OTA |\n| *.sha256 | Checksums |\n\nHosts (64-bit only): linux-x64, linux-arm64, darwin-x64, darwin-arm64, win32-x64, win32-arm64.\n\nLOCAL BUILD\n\n npm ci\n npm run maintainer:kernel-image # seeder needs current kernel/\n npm run make:seeder:linux-x64 # or: npm run make\n DRY_RUN=1 SKIP_PEAR_STAGE=1 bash scripts/gitea-rolling-release.sh\n\nmake.cjs ends with scripts/verify-standalone-build.cjs: size ceilings, pear-runtime stub check, and a native-host booter smoke (--datadir, no CodeRange OOM).\nOutputs under out/bare-os-<product>-<host>/.\n\nWEB INSTALLER\n\n curl -fsSL https://install.bare-os.live | bash\n # or from Gitea raw:\n # curl -fsSL https://git.ssh.surf/snxraven/bare-operating-system/raw/branch/main/scripts/install.sh | bash\n\n| Flag | Effect |\n| --seeder / --booter / --both | What to install |\n| --yes | Non-interactive |\n| --system | Linux: /opt/bare-os + systemd (deploy/bare-os-*.service) |\n| --no-updates | Disable pear-runtime OTA |\n\nDefault user install: ~/.local/share/bare-os/{seeder,booter}/ with shims in ~/.local/bin.\n\nRUN\n\n # From a release tarball\n tar -xzf bare-os-seeder-0.1.0-linux-x64.tar.gz\n ./bare-os-seeder --no-updates # disable OTA for this run\n \n tar -xzf bare-os-booter-0.1.0-linux-x64.tar.gz\n # Keep qvac-backends/ next to bare-os-booter (ggml CPU/Vulkan .so for `agent`)\n ./bare-os-booter --no-updates\n\nDev from a git checkout (no packing):\n\n npm run os:seeder # bare packages/bare-os-seeder/index.js\n npm run os:booter\n # or bin entries with OTA wrapper:\n npm run os:seeder:bin\n npm run os:booter:bin\n\nPEAR INSTALL + OTA\n\nUpgrade links (also upgrade in each package.json):\n\n- Seeder: pear://1ycyj65xxgn6c5cirhtnm8aokkrpe9dzibriszyfkmfggc3opjzy\n- Booter: pear://khtauzttriz8dpgrphj79rfy98iwoatqm59fnogtsdqk5f1kg6ao\n\n pear install pear://1ycyj65xxgn6c5cirhtnm8aokkrpe9dzibriszyfkmfggc3opjzy\n pear install pear://khtauzttriz8dpgrphj79rfy98iwoatqm59fnogtsdqk5f1kg6ao\n\nPackaged binaries embed pear-runtime. Disable with --no-updates or BARE_OS_OTA_DISABLE=1.\n\nCI publishes *by-arch-.tar.gz on the rolling release but does not** pear-ci stage. Stage offline:\n\n # after npm run make (or unpack by-arch trees from rolling)\n PEAR_PRIMARY_KEY=<64-hex> bash scripts/pear-stage-by-arch.sh\n\nSnapshots (when staging): ci/snapshot-seeder.json, ci/snapshot-booter.json.\n\nSECRETS\n\n| Secret | Role |\n| RELEASE_TOKEN | Gitea release write for tag rolling |\n| GITEA_URL | Optional forge base URL |\n\nPEAR_PRIMARY_KEY is only for offline scripts/pear-stage-by-arch.sh, not CI.\n\nRELATED\n\n- Installer: scripts/install.sh <../scripts/install.sh> · systemd: deploy/ <../deploy/>\n- Legacy channel notes: PEAR-RUN.md <PEAR-RUN.md>\n- Guest Hyperdrive OTA / updater bridges: deployment/OTA_AND_BUNDLES.md <deployment/OTA_AND_BUNDLES.md>","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","binary","release","releases","seeder","booter"],"seeAlso":[{"name":"docs-concepts-boot-and-init-timeline","section":7},{"name":"docs-audit-placeholder_baseline","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/BINARY-RELEASE.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-concepts-boot-and-init-timeline","section":7,"title":"Concept — Boot and init timeline","synopsis":["man 7 docs-concepts-boot-and-init-timeline","Documentation page (plain text from docs/concepts/boot-and-init-timeline.md)"],"description":"CONCEPT — BOOT AND INIT TIMELINE\n\nThis is the happy-path boot story at a glance. Wire formats and failure modes are in the handbook and protocol reference.\n\nText summary (for plain-text / man readers — same order as the diagram): the seeder publishes canonical MBR block 0 and drive blocks onto the Hyperswarm topic. The booter discovers peers and replicates, parses the MBR to obtain system Hyperdrive keys, opens or creates the personal Hyperdrive, builds ctx, runs /boot/init.js (start(ctx)), and guest code then uses ctx and the VFS for syscalls and file access. After boot, eligible peers can mirror that same block 0 plus captured seed RPC snapshots for later cold joiners.\n\nROLES\n\n1. Seeder — stages kernel/ into the system drive, writes the canonical 512-byte MBR, stays online so others can replicate.\n2. Booter — joins the same swarm topic, opens system + personal drives, constructs ctx, executes /boot/init.js.\n3. Eligible booted peer — optionally mirrors the same block 0 and captured seed RPC snapshots for cold joiners.\n4. Stock kernel (/boot/init.js) — brings up initd/cron themes, shell, and guest-visible policy as documented in the kernel contract.\n\nBLOCK-0 TRUST ASSUMPTIONS\n\n- Booters trust the first valid block 0 they accept on the bare-os-v1 topic as the system-drive key envelope.\n- Peer-assisted mirrors improve availability, but they do not add cryptographic authority beyond the same swarm trust boundary.\n- Operators should pair swarm trust with policy gates (bare_os.capabilities, boot policy minimums, allowlists, and release verification) when deciding which peers are allowed to satisfy block 0.\n- A mismatched or malicious block 0 can redirect boot to a different drive; treat MBR provenance as part of your release trust model, not just a transport detail.\n\nREAD NEXT\n\n- Handbook — Chapter 3 — Protocol and disk <../../handbook/03-protocol-and-disk.md> (includes sequence diagram and MBR layout details).\n- Handbook — Chapter 4 — Booter runtime <../../handbook/04-the-booter-runtime.md>.\n- Security — Boot trust model <../security/boot-trust-model.md>.\n- Reference — KERNEL_CONTRACT.md <../architecture/KERNEL_CONTRACT.md>.\n- P2P detail — P2P swarm and Protomux <p2p-swarm-and-protomux.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","concepts","boot","and","init","timeline","concept"],"seeAlso":[{"name":"docs-concepts-identity-and-vault","section":7},{"name":"docs-binary-release","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/concepts/boot-and-init-timeline.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-concepts-identity-and-vault","section":7,"title":"Concept — Identity and vault","synopsis":["man 7 docs-concepts-identity-and-vault","Documentation page (plain text from docs/concepts/identity-and-vault.md)"],"description":"CONCEPT — IDENTITY AND VAULT\n\nBare OS carries per-user cryptographic identity on the personal drive. Out of the box you are usually in a guest session until you login.\n\n- Guest — safe default; restricted visibility into /.bare (policy-dependent).\n- Unlocked — registered/logged-in user with Ed25519-backed account material on the personal drive.\n- Vault — encrypted snapshot workflow via savevault / logout --save (see user manual and coreutils man entries).\n\n> Warning\n> Treat vault and identity material like secrets at rest in your threat model. Read the vault threat model before relying on this software for sensitive data.\n\nREAD NEXT\n\n- Trusted-key rotation example (path capabilities)\nOperators can rotate trusted issuer keys by publishing a staged overlap window:\n1) set BARE_OS_PATH_CAPABILITY_TRUSTED_PUBKEYS_HEX to old,new,\n2) re-issue pathcap envelopes under new,\n3) remove old after rollout converges.\nKeep this rotation event in release notes and, when enabled, append an audit-chain row so reviewers can correlate issuance changes with boot policy updates.\n\n- User manual — Chapter 5 — Home, identity, vault <../../users-manual/05-home-identity-and-vault.md>.\n- Handbook — Chapter 5 — Identity, vault, HDMS <../../handbook/05-identity-vault-and-hdms.md>.\n- Security — Vault threat model <../security/vault-threat-model.md>.\n- Reference — package-bare-os-booter.md <../reference/package-bare-os-booter.md> (guest /.bare policy, env vars).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","concepts","identity","and","vault","concept"],"seeAlso":[{"name":"docs-concepts-p2p-swarm-and-protomux","section":7},{"name":"docs-concepts-boot-and-init-timeline","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/concepts/identity-and-vault.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-concepts-p2p-swarm-and-protomux","section":7,"title":"Concept — P2P swarm and Protomux","synopsis":["man 7 docs-concepts-p2p-swarm-and-protomux","Documentation page (plain text from docs/concepts/p2p-swarm-and-protomux.md)"],"description":"CONCEPT — P2P SWARM AND PROTOMUX\n\nBare OS distributes the system image over the same kind of stack Holepunch tooling uses: Hyperswarm for peer discovery, Protomux for typed channels on the encrypted stream.\n\nNAMES YOU WILL SEE\n\n- Swarm topic — derived from the string bare-os-v1 (see protocol package exports).\n- Protomux channel — bare-os-v1 carries replication and seed RPCs used during boot.\n- MBR block — 512 bytes, BIOS magic, Hyperdrive key material at fixed offsets so a booter can open the system drive without a central registry.\n\nSKETCH\n\nBOOT-TIME SEQUENCE (CONCEPTUAL)\n\nText summary: Seeder and booter rendezvous on the Hyperswarm topic derived from bare-os-v1. After the encrypted session is up, Protomux multiplexes a named channel (also bare-os-v1) used to read MBR block 0, exchange seed RPCs, and drive Hyperdrive replication. After a node has fully booted and passes eligibility, it can also mirror the same block 0 and captured seed RPC snapshots for cold joiners. Exact message IDs and encodings live in the protocol reference <../reference/package-bare-os-protocol.md>.\n\nREAD NEXT\n\n- Handbook — Chapter 3 — Protocol and disk <../../handbook/03-protocol-and-disk.md>.\n- Handbook — Chapter 12 — P2P stack vs POSIX <../../handbook/12-p2p-stack-and-posix-boundaries.md>.\n- Reference — package-bare-os-protocol.md <../reference/package-bare-os-protocol.md>.\n- Booter teardown — hyperswarm-protomux-teardown.md <../reference/hyperswarm-protomux-teardown.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","concepts","p2p","swarm","and","protomux","concept"],"seeAlso":[{"name":"docs-concepts-posix-stance","section":7},{"name":"docs-concepts-identity-and-vault","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/concepts/p2p-swarm-and-protomux.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-concepts-posix-stance","section":7,"title":"Concept — POSIX stance","synopsis":["man 7 docs-concepts-posix-stance","Documentation page (plain text from docs/concepts/posix-stance.md)"],"description":"CONCEPT — POSIX STANCE\n\nBare OS exposes a POSIX-shaped shell, /bin, and VFS, but it is not a certified UNIX kernel. The project publishes a declared profile so you know what is promised vs out of scope.\n\nWHAT “POSIX-LIKE” MEANS HERE\n\n- Tier-1 /bin — a curated set of utilities built from bare-os-coreutils <../../packages/bare-os-coreutils/README.md>; names and behavior are tracked against a declared profile and Issue 7 traceability docs.\n- Syscalls — many operations go through ctx.bareOsSyscall and /proc JSON mirrors rather than a hardware trap interface — see the syscall facade map.\n- Sockets — optional socket FD bridge behind env gates; not “Linux identical.”\n\nWHERE THE CONTRACT LIVES\n\n| Artifact | Role |\n| POSIX declared profile <../architecture/POSIX_DECLARED_PROFILE.md> | Narrative stance, non-goals |\n| POSIX compliance dashboard <../reference/posix-dashboard.md> | Generated summary |\n| POSIX Issue 7 traceability <../reference/posix-issue7-traceability.md> | XBD/XSH/XCU mapping |\n| Compatibility matrix <../reference/compatibility-matrix.md> | Profile version, ctx API, schemas |\n\nREAD NEXT\n\n- Handbook — Chapter 9 — POSIX, shell, VFS <../../handbook/09-posix-utilities-shell-and-vfs.md>.\n- Reference — posix-syscall-facade-map.md <../reference/posix-syscall-facade-map.md> · syscall-socket-contract.md <../reference/syscall-socket-contract.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","concepts","posix","stance","concept"],"seeAlso":[{"name":"docs-concepts-readme","section":7},{"name":"docs-concepts-p2p-swarm-and-protomux","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/concepts/posix-stance.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-concepts-readme","section":7,"title":"Concepts — evergreen explainers","synopsis":["man 7 docs-concepts-readme","Documentation page (plain text from docs/concepts/README.md)"],"description":"CONCEPTS — EVERGREEN EXPLAINERS\n\nThese pages are short, stable introductions to how Bare OS fits together. They intentionally link outward to the handbook (narrative depth) and docs/reference (normative numbers and APIs) instead of duplicating them.\n\n> Tip\n> New to the repo? Run Get started <../get-started.md> for copy-paste steps, then read Two-drive model <two-drive-model.md> and Boot and init timeline <boot-and-init-timeline.md>. Deeper operations: user manual — ch.3 <../../users-manual/03-running-seeder-and-booter.md>.\n\nPAGES\n\n| Topic | Summary |\n| Two-drive model <two-drive-model.md> | System vs personal Hyperdrive, $HOME, /.bare, VFS routing |\n| Boot and init timeline <boot-and-init-timeline.md> | Seeder → swarm → booter → /boot/init.js → shell |\n| P2P swarm and Protomux <p2p-swarm-and-protomux.md> | Topic, channel bare-os-v1, MBR, replication sketch |\n| Identity and vault <identity-and-vault.md> | Guest vs logged-in, Ed25519 account, vault snapshots |\n| POSIX stance <posix-stance.md> | Declared profile, what “POSIX-like” means here, where to look |\n\nWHERE TO GO NEXT\n\n- Documentation hub — docs/README.md <../README.md> (full map, curricula, POSIX dashboard).\n- Handbook — handbook/README.md <../../handbook/README.md>.\n- Developer guide — developer-guide/README.md <../../developer-guide/README.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","concepts","readme","evergreen","explainers"],"seeAlso":[{"name":"docs-concepts-two-drive-model","section":7},{"name":"docs-concepts-posix-stance","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/concepts/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-concepts-two-drive-model","section":7,"title":"Concept — Two-drive model","synopsis":["man 7 docs-concepts-two-drive-model","Documentation page (plain text from docs/concepts/two-drive-model.md)"],"description":"CONCEPT — TWO-DRIVE MODEL\n\nBare OS splits the world into two Hyperdrives so you can replicate the OS image without forking everyones private state.\n\nSYSTEM DRIVE\n\n- Holds the stock tree: /boot, /bin, kernel bundles, man JSON, optional /lib/bare bundles.\n- Treated as image policy — you replicate it from peers like a read-mostly artifact.\n\nPERSONAL DRIVE\n\n- Holds per-machine mutable state: your $HOME, /.bare (identity, policy blobs guests may not see), session-scoped /tmp, /var/log, history, and anything that should not be overwritten when the system image updates.\n- In account-prefix mode (BARE_OS_PERSONAL_ACCT_PREFIX=1), user state is routed under /.bare-os/acct/<principal>/... so multiple principals can share one personal drive without path collisions.\n\nVFS ROUTING (MENTAL MODEL)\n\nThe booter-backed VFS mounts both and routes paths: home + account-prefixed state, /.bare, session /tmp, and /var/log land on the personal drive; the rest of the POSIX-shaped tree comes from the system image. Exact policy and edge cases live in the booter reference and handbook.\n\nREAD NEXT\n\n- Handbook — Chapter 5 — Identity, vault, HDMS <../../handbook/05-identity-vault-and-hdms.md> (how /.bare behaves for guests vs users).\n- Reference — package-bare-os-booter.md <../reference/package-bare-os-booter.md> (VFS, guest /.bare policy, env gates).\n- Security — Vault threat model <../security/vault-threat-model.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","concepts","two","drive","model","concept"],"seeAlso":[{"name":"docs-contributing-docs","section":7},{"name":"docs-concepts-readme","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/concepts/two-drive-model.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-contributing-docs","section":7,"title":"Contributing to Bare OS documentation","synopsis":["man 7 docs-contributing-docs","Documentation page (plain text from docs/CONTRIBUTING-DOCS.md)"],"description":"CONTRIBUTING TO BARE OS DOCUMENTATION\n\nThis repository ships documentation as Markdown with GitHub-flavored extensions (tables, fenced code, optional GFM alerts). There is no static site generator in-tree. The canonical git remote is https://git.ssh.surf/snxraven/bare-operating-system.git; prose should read well on any forge (some UIs render alerts as plain blockquotes — see Admonitions <#admonitions-callouts> below).\n\nChanges are validated by npm run pretest (link checks, terminology rules, compatibility-matrix strings, roadmap row counts, verify-doc-tier1-count vs COREUTILS_COMMANDS, and more). Read scripts/README.md <../scripts/README.md> for the full verifier list.\n\nMermaid validation: scripts/validate-mermaid-syntax.mjs <../scripts/validate-mermaid-syntax.mjs> runs in root pretest. The optional workflow .github/workflows/docs-mermaid-smoke.yml <../.github/workflows/docs-mermaid-smoke.yml> is still useful as an extra scheduled/manual lane.\n\nGOOD FIRST DOCUMENTATION CONTRIBUTIONS\n\nLow-risk ways to help without touching booter/kernel contracts:\n\n- Fix a broken relative link — run npm run pretest ( verify-doc-links ) and follow the reported path.\n- Clarify onboarding — Get started <get-started.md>, Sitemap <sitemap.md>, or User manual ch.3 <../users-manual/03-running-seeder-and-booter.md>: keep version tables out of prose; link compatibility matrix <reference/compatibility-matrix.md> and the environment appendix <reference/environment-and-posix-appendix.md>.\n- Add a prose fallback next to a Mermaid diagram (terminal man and some forges omit diagram rendering); see handbook preface <../handbook/00-preface.md>.\n- Tier-1 man coverage — if you add a /bin name, update packages/bare-os-coreutils/lib/commands.mjs, man JSON, and run npm run build -w bare-os-coreutils ( verify-man-coverage ).\n\nWHERE CONTENT LIVES\n\n| Audience | Tree | Role |\n| Zero-to-prompt | docs/get-started.md <get-started.md> | Clone, prerequisites, two terminals, failure table |\n| Doc orientation | docs/sitemap.md <sitemap.md> | How trees connect |\n| Short evergreen explainers | docs/concepts/ <concepts/README.md> | Two drives, boot, P2P, identity, POSIX — link out to handbook + reference |\n| Operators / first run | users-manual/ <../users-manual/README.md> | Step-by-step: install, seeder/booter, shell, identity, troubleshooting |\n| Narrative / architecture | handbook/ <../handbook/README.md> | Why the system is shaped this way; trust, protocol, runtime |\n| Extenders / contributors | developer-guide/ <../developer-guide/README.md> | ctx, /bin, Pear, testing, security |\n| Specs / matrices / schemas | docs/reference/ <reference/README.md>, docs/architecture/ <architecture/KERNEL_CONTRACT.md>, docs/schemas/ <schemas/>, docs/adr/ <adr/README.md> | Canonical numbers, env vars, wire formats |\n\nCanonical glossary: docs/glossary.md <glossary.md>. Do not duplicate long definitions in the user manual README; link here instead.\n\nADMONITIONS (CALLOUTS)\n\nUse a consistent blockquote pattern so callouts render clearly on GitHub:\n\n > **Note** \n > Supplementary context that helps interpretation.\n \n > **Tip** \n > A shortcut or workflow that saves time.\n \n > **Warning** \n > Risk of data loss, security issue, or broken replication if ignored.\n \n > **Important** \n > Non-obvious requirement or contract readers must not miss.\n\nKeep the bold label on the first line, then a line break, then the body.\n\nGITHUB-STYLE ALERTS (OPTIONAL)\n\nOn hosts that render GitHub-flavored alerts <https://github.blog/changelog/2022-02-10-add-markdown-support-for-alerts/>, you may use:\n\n > [!NOTE]\n > Supplementary context.\n \n > [!TIP]\n > A shortcut or workflow.\n \n > [!IMPORTANT]\n > Non-obvious requirement.\n \n > [!WARNING]\n > Risk of data loss or security impact.\n \n > [!CAUTION]\n > Experimental or high-impact action.\n\nForge fallback: some Git forges (including some self-hosted UIs) show these as plain blockquotes. When in doubt, keep the blockquote + bold label form above as the portable baseline, or duplicate the critical sentence in both styles only on entry pages (root README.md, docs/README.md).\n\nCOLLAPSIBLE SECTIONS (<DETAILS>)\n\nUse HTML <details><summary>…</summary>…</details> to hide long protocol tables, copy-paste dumps, or secondary feature lists. Prefer summaries under ~120 characters. Do not put essential safety warnings only inside a collapsed block.\n\nFOOTNOTES\n\nUse reference-style footnotes sparingly for acronyms or citations in the handbook:\n\n Hyperdrive replication uses Merkle proofs[^hc].\n \n [^hc]: See Hypercore / Hyperdrive project docs linked from the handbook.\n\nBADGES\n\nRoot README.md may use license and Node engines shields. Avoid badge clutter elsewhere unless a package README benefits from a single status line.\n\nTASK LISTS IN CANONICAL DOCS\n\nAvoid GitHub - [ ] task lists in normative documentation (they read as unfinished product). Use tasks in issues/PRs or explicit numbered steps instead.\n\nMERMAID DIAGRAMS\n\n- Use camelCase or underscores for node IDs. Avoid spaces inside IDs (Mermaid parsing).\n- Avoid reserved words as node IDs (end, graph, subgraph as the sole id).\n- For subgraphs use explicit ids: subgraph id [Human-readable label].\n- Prefer flowchart TB/LR and sequenceDiagram for boot and replication flows.\n- When edge labels need parentheses or special characters, wrap the label in quotes: A -->|\"O(1) lookup\"| B.\n\nIf a diagram would need pixel-perfect branding or screenshots, add a placeholder image under docs/images/ <images/README.md> and reference it from the relevant page.\n\nPreview: Mermaid syntax is enforced in pretest, but editor preview is still recommended for layout/readability checks. For an extra scheduled/manual lane, see .github/workflows/docs-mermaid-smoke.yml <../.github/workflows/docs-mermaid-smoke.yml>.\n\nLINKS AND PATHS\n\n- Use relative .md links between docs so scripts/verify-doc-links.mjs <../scripts/verify-doc-links.mjs> can resolve targets.\n- The link checker walks docs/ (including *docs/concepts/.md**), handbook/, developer-guide/, users-manual/, scripts/, packages/, kernel/, plus root README.md and DOCUMENTATION.md (and any .md under those trees, including docs/PEAR-RUN.md).\n- packages/bare-os-seeder/kernel/ is skipped (mirror of kernel/); fix links in kernel/**** only.\n\nTERMINOLOGY GOVERNANCE\n\nscripts/verify-banned-terminology.mjs <../scripts/verify-banned-terminology.mjs> rejects certain rollout metaphor wording (for example “wave N”, “tranche”, “mega-phase”). Prefer capability words, boot stages, and kernel program batches as described in developer-guide/kernel-program.md <../developer-guide/kernel-program.md>.\n\nIf you must quote a banned substring for wire-compat or third-party context, add a justified line to docs/data/terminology-line-allowlist.txt <data/terminology-line-allowlist.txt> (see comments in that file).\n\nPRETEST-GENERATED DOCUMENTATION (DO NOT HAND-EDIT)\n\nRoot npm run pretest refreshes or validates these artifacts; if you change contracts they must match after pretest:\n\n- docs/reference/posix-dashboard.md <reference/posix-dashboard.md> — scripts/gen-posix-dashboard.mjs\n- docs/reference/kernel-extensions-generated-toc.md <reference/kernel-extensions-generated-toc.md> — scripts/gen-kernel-extensions-index.mjs\n- docs/reference/ctx-client-helper.generated.ts <reference/ctx-client-helper.generated.ts> — scripts/gen-ctx-client-helper.mjs\n\nSINGLE SOURCE OF TRUTH\n\n- Version fields, offsets, feature bits, matrix tables: update the reference page or JSON first; narrative chapters should link to it.\n- bareOsCtxApiVersion: history in packages/bare-os-booter/CHANGELOG.md <../packages/bare-os-booter/CHANGELOG.md>; summary row in docs/reference/compatibility-matrix.md <reference/compatibility-matrix.md>.\n- POSIX matrix → dashboard: edit docs/reference/posix-compliance-matrix.json <reference/posix-compliance-matrix.json>; docs/reference/posix-dashboard.md <reference/posix-dashboard.md> is generated by scripts/gen-posix-dashboard.mjs <../scripts/gen-posix-dashboard.mjs> and checked by scripts/verify-posix-dashboard.mjs <../scripts/verify-posix-dashboard.mjs> during npm run pretest. Profile version / id must also match docs/architecture/POSIX_DECLARED_PROFILE.md <../docs/architecture/POSIX_DECLARED_PROFILE.md> and packages/bare-os-protocol/lib/bare-os-posix-profile.js — enforced by scripts/verify-posix-profile-triplet.mjs <../scripts/verify-posix-profile-triplet.mjs>.\n\nKERNEL TREE VS SEEDER MIRROR\n\nCanonical tree: kernel/ <../kernel/> (hand-authored kernel/lib/init/init-main.js, *kernel/lib/boot/.js, kernel/etc/*, staged kernel/bin/, kernel/lib/bare/***).\n\nMirror: packages/bare-os-seeder/kernel/ <../packages/bare-os-seeder/kernel/> must be byte-identical to kernel/ (CI: scripts/verify-kernel-seeder-parity.mjs <../scripts/verify-kernel-seeder-parity.mjs>).\n\nWorkflow after changing boot logic:\n\n1. Edit kernel/lib/init/init-main.js (and optional *kernel/lib/boot/.js**).\n2. Run node scripts/bundle-kernel-init.mjs to regenerate root kernel/init.js.\n3. Sync the mirror: rsync -a --delete kernel/ packages/bare-os-seeder/kernel/ from the repo root.\n\nDo not edit the seeder copy first; it will be overwritten by parity checks.\n\nBEFORE YOU OPEN A PR\n\n npm run pretest\n\nFix any reported broken links or verifier failures. For doc-only edits, pretest is usually sufficient; full npm test matches CI more closely.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","contributing","bare"],"seeAlso":[{"name":"docs-data-readme","section":7},{"name":"docs-concepts-two-drive-model","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/CONTRIBUTING-DOCS.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-data-readme","section":7,"title":"Machine-readable doc data","synopsis":["man 7 docs-data-readme","Documentation page (plain text from docs/data/README.md)"],"description":"MACHINE-READABLE DOC DATA\n\nContributors: when you add generated or canonical JSON here, document the consumer script in scripts/README.md <../../scripts/README.md> and follow CONTRIBUTING-DOCS.md <../CONTRIBUTING-DOCS.md>.\n\n- Kernel program backlog tables — canonical narrative tables live in docs/reference/feature-roadmap.md <../reference/feature-roadmap.md> (batches A/B). CI: scripts/verify-kernel-program-roadmap-table.mjs + feature-roadmap-canonical.json <feature-roadmap-canonical.json> (verify-feature-roadmap-canonical.mjs).\n- Naming aliases — docs/reference/naming-alias-matrix.md <../reference/naming-alias-matrix.md>. CI: scripts/verify-naming-alias-matrix.mjs.\n- Terminology line allowlist — terminology-line-allowlist.txt <terminology-line-allowlist.txt> (wire-compat documentation exceptions for verify-banned-terminology.mjs).\n\nFuture JSON extracts may be generated here without changing the handbook narrative until a generator lands.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","data","readme","machine","readable","doc"],"seeAlso":[{"name":"docs-deployment-ota_and_bundles","section":7},{"name":"docs-contributing-docs","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/data/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-deployment-ota_and_bundles","section":7,"title":"OTA updates, bundles, and reproducible artifacts","synopsis":["man 7 docs-deployment-ota_and_bundles","Documentation page (plain text from docs/deployment/OTA_AND_BUNDLES.md)"],"description":"OTA UPDATES, BUNDLES, AND REPRODUCIBLE ARTIFACTS\n\nBare OS aligns with the Holepunch toolchain for shipping JavaScript as Bare bundles and (where applicable) Pear-style drives. This note ties upstream packages to operator workflows.\n\nAlso read: release-checklist.md <../release-checklist.md> · documentation home <../README.md> · PEAR-RUN.md <../PEAR-RUN.md> for channel links.\n\nUPSTREAM PRIMITIVES\n\n| Package | Role |\n| bare-pack / bare-bundle | Resolve module graph → single bundle artifact (imports, resolutions, addons, assets). |\n| bare-build | Platform packaging (desktop/mobile) around Bare runtimes. |\n| bare-run | Cross-target execution of packed graphs for CI and device labs. |\n| pear-pack / pear-bundle | Pear drive staging; prebuild maps for multi-arch. |\n| pear-runtime (+ pear-runtime-updater) | Embeddable OTA patterns (experimental upstream; mirror concepts in boot policy). |\n\nBARE OS INTEGRATION\n\n- System image: kernel/ is staged to the system Hyperdrive by bare-os-seeder; the booter never falls back to a git checkout for production boot.\n- Ctx / API semver: bump BARE_OS_CTX_API_VERSION when guest-visible ctx behavior changes; record it in compatibility-matrix.md <../reference/compatibility-matrix.md>.\n- Offline / LKG: document BARE_OS_OFFLINE_LKG_BOOT and related env in environment appendix <../reference/environment-and-posix-appendix.md>.\n- Warm cache + proc: bareOsVfsBatchWrite clears /bin / /lib/bare warm read caches and increments vfs.warm_read_cache_invalidate_batch; the same path clears the cached /proc/bare_os/syscalls.json text so replication swaps cannot serve stale syscall metadata. With BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_REPLICATION, core-length growth triggers ctx.bareOsInvalidateWarmReadCaches('replication:core-length') and increments vfs.replication_warm_full_invalidate in kernelCounters. ctx.bareOsCorestoreSnapshotHint() increments operator.corestore_snapshot_hint for operator dashboards.\n- Corestore snapshot E2E: host/seeder tooling may set BARE_OS_SEED_CORESTORE_SNAPSHOT_TAG, BARE_OS_SEED_SNAPSHOT_HINTS_JSON, BARE_OS_CORESTORE_SNAPSHOT_STATE_JSON, and BARE_OS_CORESTORE_SNAPSHOT_PAUSED; the stock booter mirrors a bounded sketch under /proc/bare_os/corestore_snapshot.json (wave-6 replication operator surface) and disk.os replication_operator_sketch corestoreSnapshotPaused. Guests read hints only — cutover verification stays on the host.\n- Hyperblobs / dedup: when BARE_OS_VFS_HYPERBLOBS_DEDUP is enabled, operators may supply BARE_OS_HYPERBLOBS_STATS_JSON; the booter merges hyperblobsDedupSketch into disk.os replication_operator_sketch for fleet dashboards (no guest chunking).\n- Corestore operator stats: optional BARE_OS_CORESTORE_STATS_JSON merges corestoreOperatorSketch into replication_operator_sketch (schema 5); keep payloads non-secret (counts and hints only).\n- Local Holepunch clones: after patching *bare- sources from a local holepunchto_repos checkout, rebuild with npm run build -w bare-os-bare-libs, mirror kernel/ → packages/bare-os-seeder/kernel/, refresh docs/audit/bundle-health.json, and re-run npm test (see kernel/lib/bare/README.md <../../kernel/lib/bare/README.md>**).\n- Extension signer pins: when BARE_OS_BOOT_POLICY=1, the stock kernel copies extensionSignerPinsV2…V5 from boot.policy into ctx.env as BARE_OS_BOOT_POLICY_EXTENSION_SIGNER_PINS_V2_JSON … _V5_JSON (stringified objects). Treat pin churn like ABI bumps — run npm run pretest (verify-boot-policy-extension-signer-pins.mjs, extension manifest schema, capability verifiers) after edits.\n\nREPRODUCIBILITY CHECKLIST\n\n1. Pin workspace dependency versions (lockfile).\n2. Run npm run pretest before tag (bundle kernel, verify seeder parity, manifest smoke).\n3. Record bareOsCtxApiVersion, BARE_OS_KERNEL_FEATURE_BITS_DOC, and BARE_OS_LIFECYCLE_SCHEMA_VERSION in release notes (see compatibility matrix).\n\nFUTURE WORK\n\nDelta OTA, A/B slots, and signed rollback indices are roadmap items; track against kernel program <../../handbook/11-kernel-program-and-research.md> batches and capability words.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","deployment","ota","and","bundles","updates","reproducible","artifacts"],"seeAlso":[{"name":"docs-design-ctx-pear-surface-and-bare-audit-plan","section":7},{"name":"docs-data-readme","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/deployment/OTA_AND_BUNDLES.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-design-ctx-pear-surface-and-bare-audit-plan","section":7,"title":"Plan: ctx.bare Code Audit + ctx.pear Surface Implementation","synopsis":["man 7 docs-design-ctx-pear-surface-and-bare-audit-plan","Documentation page (plain text from docs/design/ctx-pear-surface-and-bare-audit-plan.md)"],"description":"PLAN: CTX.BARE CODE AUDIT + CTX.PEAR SURFACE IMPLEMENTATION\n\nStatus: Final completion wave executed. All remaining plan items (19-21) driven to completion.\n\nProduction note (May 2026):\n- Moved pear-build, pear-bundle, and pear-ref into the main dependencies (not optionalDependencies) in both booter and seeder package.json so npm install pulls them reliably everywhere.\n- ctx.pear is now always present (even if empty).\n- Added proper booter-rooted require (using the proven createRequire + booter package.json pattern) as the primary resolution path for pear packages. This is the same technique that makes ctx.bare reliable under pear://.\n- Fallbacks from ctx.bare + always-on host warnings + improved guest diagnostics.\n\nSee audit notes for details.\n\nKey final actions:\n- Dedicated pear verifier created + integrated + run in broad harness (all green).\n- verify-pear-no-static-node-import explicitly covers new pear command.\n- Zero-TODO sweep completed on all new Pear files (pear.js, verifier, skill) — clean.\n- /bin/pear polished with working init + smarter stage.\n- Roadmap + plan docs + audit notes finalized.\n- Multiple full verifier harness runs successful (183 commands, no incomplete markers, manifest parity).\n\nThe entire plan is now complete.\n\nLatest progress in current pass (plan-19 focus):\n- New dedicated pear manifest tier verifier (verify-pear-module-manifest-data.mjs) created and passing.\n- Added to release-checklist.\n- /bin/pear init subcommand implemented and shipped (basic but functional skeleton creation).\n- Pear-specific + broader verifiers re-run and green.\n- Audit notes and this plan document updated.\n\nPushing hard on remaining items (more command surface, full harness, polish, final criteria).\n\nCompleted in latest pass:\n- plan-13 to plan-16 fully landed with real code (manifest tier, loader, ctx.pear, /bin/pear binary + man page, pear-dev skill + seeding).\n- plan-17 (App Store integration): concrete updates to appstore skill + p2p-app-store design doc + pear command help.\n- plan-18 start: Added full \"Pear Development Environment\" thread to feature-roadmap.md with accurate statuses.\n\nAll changes verified (man-coverage 183, manifest parity, no incomplete markers, dts, etc.).\n\nSee Implementation Log in docs/audit/ctx-bare-audit-notes.md.\nOwner: Autonomous Grok development\nDate Created: 2026\nRelated Designs: docs/design/p2p-app-store.md\n\nCONTEXT & MOTIVATION\n\nctx.bare is one of the most critical and historically fragile surfaces in Bare OS. It provides guest scripts access to curated Bare and Holepunch modules.\n\nPast issues have included:\n- pear:// referrer resolution failures\n- require.addon support for drive bundles\n- Native module leakage\n- Manifest drift between JSON and .data.mjs\n- Warm cache invalidation bugs\n- Inconsistent behavior between Node/Pear hosts and pure Bare\n\nThe long-term vision is to evolve this into a full Pear development environment inside the guest OS, allowing users to:\n- Create, stage, release, and seed real Pear apps entirely from within Bare OS\n- Have access to the full Pear runtime stack (pear, pear-runtime, pear-build, pear-ipc, make-pear-app, etc.)\n\nThis requires both:\n1. A thorough code audit of the current ctx.bare implementation.\n2. A well-designed new ctx.pear surface (or significant expansion of ctx.bare).\n\nThis document defines a complete, gated, 50-round implementation plan.\n\nGOALS\n\n- Eliminate known classes of bugs in ctx.bare.\n- Create a clean, maintainable, well-documented foundation for exposing Pear-level capabilities.\n- Enable real Pear app development workflows inside the OS (create → stage → release → seed).\n- Maintain strict Bare-only guest constraints and existing governance (capability words, boot policy, verifiers, agent skills).\n\nSCOPE\n\nIn Scope:\n- Full audit of ctx.bare construction, manifest handling, host imports, drive bundle eval, and related code.\n- Research of current Pear runtime stack from local Holepunch clone.\n- Design of ctx.pear surface (or ctx.bare.pear namespace).\n- Incremental implementation with proper gating.\n- Documentation, agent skill updates, and verification.\n\nOut of Scope (for this sprint):\n- Full desktop Pear sidecar inside the guest (future work).\n- Replacing host Pear entirely.\n\nEXECUTION RULES (NON-NEGOTIABLE)\n\n- Every code change must pass relevant verifiers before moving to the next item.\n- All new guest-exposed code must be Bare-only (no node: specifiers).\n- Major surfaces require updates to:\n- developer-guide/kernel-program.md\n- docs/reference/feature-roadmap.md\n- docs/design/ctx-pear-surface-and-bare-audit-plan.md (this file)\n- Agent skill (skills/ctx-api-change or new pear-surface skill)\n- No \"TODO\", \"FIXME\", \"scaffolding\", or placeholder comments allowed in final deliverables.\n- Use todo_write tool to track progress against this plan.\n\n50-ROUND IMPLEMENTATION PLAN\n\nPHASE 0: FOUNDATIONS & RESEARCH (ROUNDS 18)\n\n| Round | Item | Description | Status | Notes / Verification |\n| 1 | Create this plan document | Finalize and commit the master plan | Done | This file |\n| 2 | Audit current ctx.bare entry points | Map all places that touch or expose ctx.bare | Pending | Focus on index.js, bare-os-ctx-bare.js |\n| 3 | Deep read of bare-os-ctx-bare.js | Line-by-line review with notes on fragile areas | Pending | Document referrer issues, addon wrappers, etc. |\n| 4 | Inventory all related scripts & verifiers | List every script that touches bare manifests or bundles | Done | See docs/audit/ctx-bare-audit-notes.md Round 4 findings. Core trio: bare-module-manifest.{json,.data.mjs} + bare-os-ctx-bare.js. Full list of 20+ scripts/verifiers captured below. |\n| 5 | Research current manifest format & tiering | Document bare-module-manifest.json schema, tiers, risk levels | Done | See docs/audit/ctx-bare-audit-notes.md Round 5. Flat entries[] + version:1. Implicit tiering via (bundle, optional, nativeHint, skipReason). No formal tier field yet. |\n| 6 | Explore local Holepunch clone Bare runtime | Survey bare-runtime, bare-build, bare-bundle | Done | See docs/audit/ctx-bare-audit-notes.md Round 6. Full conditional \"imports\" + \"bare\" pattern everywhere. bare-build + bare-pack + bare-bundle- are high-value for ctx.pear. |\n| 7 | Explore local Holepunch clone Pear runtime | Survey pear, pear-runtime, pear-build, pear-bundle, pear-ipc*, make-pear-app | Done | See docs/audit/ctx-bare-audit-notes.md Round 7. pear-build, pear-bundle, make-pear-app (generator), pear-ipc-client identified as key. Heavy sidecar pieces (pear-cli, pear-ipc with sodium-native) will need host delegates. |\n| 8 | Identify high-value Pear APIs for first exposure | Choose initial surface for ctx.pear (build, bundle, basic release primitives) | Done | See docs/audit/ctx-bare-audit-notes.md Round 8 decision. First wave: pear-build, pear-bundle, make-pear-app scaffolding, selected bare-bundle-*. Release/seed via host delegate + existing peerctl patterns. |\n\nPHASE 1: DETAILED CODE AUDIT (ROUNDS 920)\n\n| Round | Item | Description | Status | Notes / Verification |\n| 9 | Audit host import path | Review buildBareCtxObjectFromHost + error handling | Done | See docs/audit/ctx-bare-audit-notes.md Round 9. Detailed findings on pearBooter special-case (line ~326), tryRequireFromBooter, nativeHint skip, optional error handling, env overrides. |\n| 10 | Audit drive bundle eval path | Review withDriveBundleGlobalRequire, addon wrappers | Done | See docs/audit/ctx-bare-audit-notes.md Round 10. Full machinery (new Function eval of IIFEs, addon stub, 12MB guard, manifest.json-driven, withDriveBundleGlobalRequire) audited. Major security note on eval + stub limitations for native. |\n| 11 | Audit manifest loading | loadBareModuleManifest, .data.mjs vs JSON handling | Pending | Test under both file: and pear: |\n| 12 | Audit referrer workarounds | Document all pearBooter special cases | Done (via Phase 1) | Centralized in bare-os-ctx-bare.js only. See audit notes Round 9 + Phase 1 completion. Not easily simplifiable without upstream bare-module/Pear changes. |\n| 13 | Audit warm cache interaction | How ctx.bare bundles interact with VFS warm caches | Pending | Look for invalidation gaps |\n| 14 | Audit native module handling | nativeHint, optional modules, failure modes | Pending | Test failure paths |\n| 15 | Audit error/warning surface | Review all bareOsHostBooterWarn calls related to bare | Pending | Improve messaging if needed |\n| 16 | Audit tests for ctx.bare | Review all tests that exercise ctx.bare | Done (via Phase 1 grep) | Tests are concentrated in bare-os-booter/test.js + a few .bare isolation tests. Good direct coverage of the four main exports. No coreutils/kernel code calls the internals. |\n| 17 | Audit scripts that touch the manifest | sync-bare-manifest, gen-bare-holepunch-catalog, etc. | Pending | Check for drift or policy issues |\n| 18 | Audit bundle build process | bare-os-bare-libs/build.mjs + sanitization | Pending | Verify marker removal |\n| 19 | Produce detailed audit report | Document all findings, risks, and recommended refactors | Pending | Store in docs/design/ or docs/audit/ |\n| 20 | Prioritize audit findings | Create ranked list of issues to fix before ctx.pear work | Pending | Feed into later rounds |\n\nPHASE 2: DESIGN OF CTX.PEAR SURFACE (ROUNDS 2130)\n\n| Round | Item | Description | Status | Notes / Verification |\n| 21 | Define high-level goals for ctx.pear | What capabilities must be exposed for Pear workflows | Pending | Align with \"create, stage, release, seed\" |\n| 22 | Decide namespace & exposure model | ctx.pear vs ctx.bare.pear* vs new surface | Pending | Document decision |\n| 23 | Design manifest tiering for Pear packages | New tier(s) in bare-module-manifest.json | Pending | Consider risk levels |\n| 24 | Identify first 812 packages to expose | Prioritize from clone research (pear-build, make-pear-app, etc.) | Pending | Must be Bare-compatible |\n| 25 | Design guest Pear CLI surface | High-level shape of /bin/pear or appctl pear | Pending | Command surface |\n| 26 | Design host delegate strategy | When to delegate to host Pear sidecar vs pure guest | Pending | Reuse existing delegate patterns |\n| 27 | Security & trust model | Signing, policy gates, capability requirements for Pear ops | Pending | Update boot policy schema if needed |\n| 28 | Agent skill design | What new agent skill(s) are required (pear-surface, pear-dev-workflow) | Pending | |\n| 29 | Produce ctx.pear design document | Full design doc (similar style to App Store design) | Pending | |\n| 30 | Review design with governance checklist | Ensure it follows naming, capability word, contract rules | Pending | Update ADR if new word needed |\n\nPHASE 3: IMPLEMENTATION (ROUNDS 3145)\n\n| Round | Item | Description | Status | Notes / Verification |\n| 31 | Refactor ctx.bare based on audit findings | Address highest-priority issues first | Pending | Small, reviewable PRs |\n| 32 | Create new manifest tier + entries for Pear packages | Start with core build/bundling packages | In Progress | First cut landed: added \"pearEntries\" array + 5 initial packages (pear-build, pear-bundle, pear-ref, bare-bundle-compile, bare-bundle-evaluate) to bare-module-manifest.json. Generator + all safety verifiers green. See audit notes Implementation Log. Loader + ctx exposure in progress (next rows). |\n| 33 | Implement core ctx.pear object construction | Parallel to buildBareCtxObjectFromHost | Done | buildPearCtxObjectFromHost + loadPearModuleManifest added + wired into boot + ctx attachment in index.js + .d.ts. First 5 packages now reachable as ctx.pear.pearBuild etc. Verifiers green. See audit notes. |\n| 34 | Implement drive bundle support for new Pear bundles | If bundle: true entries are added | Pending | |\n| 35 | Create initial /bin/pear command | init, info, list, stage, release, seed | Done | See lib/pear-stage.js, lib/pear-release.js, docs/guides/guest-pear-and-appstore-workflow.md |\n| 36 | Wire basic staging using exposed pear-build / bare-build | End-to-end pear stage in guest | Done | pear-stage.js |\n| 37 | Add release/seeding primitives | Use existing swarm + Hyperdrive primitives | Pending | |\n| 38 | Implement gated kernel extension path for Pear tools | If needed | Pending | |\n| 39 | Full service + initd integration for Pear apps | Allow installed Pear apps to run as services | Pending | |\n| 40 | Expand agent skill for Pear workflows | Production-grade pear-surface or pear-dev skill | Done | Initial high-quality pear-dev/SKILL.md created + added to seed list. Matches appstore skill quality bar. See audit notes. |\n| 41 | Add comprehensive error handling & diagnostics | Across all new surfaces | Pending | |\n| 42 | Implement update/refresh flows for Pear packages | | Pending | |\n| 43 | Add tests for new surfaces | Brittle + harness tests | Pending | |\n| 44 | Update all verifiers & CI for new manifest tier | | Pending | |\n| 45 | Capability word / boot policy updates if required | New word or extension of existing | Pending | |\n\nPHASE 4: DOCUMENTATION, VERIFICATION & CLOSURE (ROUNDS 4650)\n\n| Round | Item | Description | Status | Notes / Verification |\n| 46 | Complete design doc for ctx.pear | Move from draft to final | Pending | |\n| 47 | Write full documentation | Developer guide chapter, handbook updates, man pages | Pending | |\n| 48 | Final audit of all appstore + ctx.bare + ctx.pear code | Remove every remaining TODO, FIXME, stub, placeholder | Pending | Use verify-runtime-no-incomplete-markers |\n| 49 | Full verification run | All pretest verifiers + runtime tests + agent smoke | Pending | |\n| 50 | Final summary & closure | Update feature-roadmap.md, session plan, release notes. Declare feature complete. | Pending | |\n\nSUCCESS CRITERIA\n\n- Zero TODO/FIXME/scaffolding/placeholder comments in all appstore/ctx.bare/ctx.pear related files.\n- All 50 checklist items marked complete.\n- Full end-to-end Pear development workflow possible from inside a booted Bare OS instance (at minimum: create → stage → basic release/seed).\n- All verifiers pass cleanly.\n- Agent can autonomously use the new surfaces following the skill.\n\nCHANGE MANAGEMENT\n\nAny change that touches ctx API surface, boot policy, or protocol must:\n- Bump appropriate versions\n- Update compatibility matrix\n- Add or extend agent skill\n- Update feature roadmap\n\nThis plan will be kept up to date. All work must be tracked via the todo_write tool using the IDs above.\n\nPHASE 2 DESIGN DRAFT: CTX.PEAR SURFACE\n\nMay 2026 implementation status: Guest pear stage, pear release, pear seed, and App Store install / launch with real pear:// materialization are shipped. Canonical operator guide: docs/guides/guest-pear-and-appstore-workflow.md. Host Pear CLI remains optional for booter/seeder channel releases and full pear run desktop runtime.\n\nStatus: First-cut design synthesized from Phase 1 audit (Rounds 111 / plan-04plan-11). Draws directly on:\n- The two-path ctx.bare architecture (host import + drive IIFEs)\n- The pear:// referrer workaround reality (centralized, not easily removed)\n- Clone research on bare-build / pear-build / pear-bundle / make-pear-app / pear-ipc-client (Tier 1 vs delegate split)\n- Existing OS patterns from the completed P2P App Store (HDMS materialization, gated high-risk paths, agent autonomy, host delegates via peerctl-style bridges)\n- Strict Bare guest constraints (no node:, conditional imports only, verifiers first)\n\n1. NAMESPACE & EXPOSURE MODEL DECISION\n\nRecommended: ctx.pear as a peer surface to ctx.bare (not ctx.bare.pear).\n\nRationale:\n- Pear is a higher-level \"app platform\" concern, not just another bare-* stdlib.\n- Keeps the mental model clean: ctx.bare = low-level vendored Bare/Holepunch modules; ctx.pear = Pear development & runtime primitives.\n- Matches how the OS already has separate ctx.bareOs* namespaces for OS-specific services.\n- Easier to version / capability-gate independently (new capability word or extension of word 11 if needed).\n\nctx.pear will be conditionally populated exactly like ctx.bare (behind BARE_OS_PEAR_MODULES or similar env, default on when bare modules are on).\n\n2. MANIFEST TIERING (THE KEY ENABLER)\n\nCurrent manifest is a flat entries[] with implicit risk via 4 booleans.\n\nProposal for ctx.pear:\n- Add a top-level \"pearEntries\" array (or a \"tier\": \"pear\" | \"pear-dev\" | \"pear-host-delegate\" field on existing entries for mixed packages).\n- New dedicated files for the Pear tier (to avoid polluting the bare stdlib manifest):\n- packages/bare-os-booter/lib/pear-module-manifest.json\n- packages/bare-os-booter/lib/pear-module-manifest.data.mjs (same generator + verifier pattern)\n- This keeps the \"do not edit by hand\" + strict parity verifier discipline.\n\nFirst-wave pearEntries (from Round 8 decision + clone):\n- pear-build (and its safe bare-* deps)\n- pear-bundle + pear-ref\n- bare-bundle-compile, bare-bundle-evaluate (re-export or Pear-flavored wrappers under ctx.pear.bundle)\n- make-pear-app scaffolding helpers (the pure template logic)\n\nHost-delegate only (never direct guest import in the pear tier):\n- Anything pulling sodium-native, rocksdb-native, or the full sidecar IPC\n\n3. SECURITY & TRUST MODEL (REUSE APP STORE LESSONS)\n\n- Build / bundle tier (ctx.pear.build, ctx.pear.bundle, ctx.pear.init): Lower risk. Can run with normal VFS path caps on the user's personal drive or a dedicated \"pear-dev\" HDMS drive.\n- Runtime / release / seed tier: Higher risk (talks to live sidecar, signs releases, seeds on the network). Requires explicit capability or boot.policy pin (similar to requireAppstoreKernelExtPins).\n- Never auto-load heavy Pear kernel extensions (if any emerge). Same gated + signed + user-confirmation model as App Store kernel-ext path.\n\nHost delegate pattern (already proven):\n- New or extended host bridge files in the booter (e.g. bare-os-pear-dev-delegate.js modeled on bare-os-pear-updater-bridge.js and the HRPC proc surfaces).\n- Guest ctx.pear calls that need the real sidecar go through the existing IPC/HRPC machinery (peerctl, appctl, pkg-swarm-index patterns).\n\n4. INTEGRATION WITH EXISTING OS SURFACES\n\n- P2P App Store: appstore install fetches pear:// release trees via lib/appstore-pear.js; appstore launch runs materialized sources/<main> in the guest shell. See docs/guides/guest-pear-and-appstore-workflow.md.\n- HDMS: Pear releases use writable mounts pear-<app-name>; optional App Store label appstore at /mnt/appstore.\n- Agent skills: pear-dev + appstore (cross-referenced).\n- /bin/pear: init, stage, release, seed, info, list — guest-pure for the release path (no host Pear CLI required).\n- appctl: Registry helper; launch may still delegate via peerctl for host Pear apps.\n\n5. HOST DELEGATE STRATEGY (THE PRACTICAL REALITY)\n\nShipped (May 2026): pear release and pear seed run in the guest via HDMS (writable release drive + Hyperswarm flush). pear release uses HDMS registry z32 keys and an inline encoder fallback — not the host Pear CLI.\n\nStill host-delegated or optional:\n\n- Full pear run Pear desktop/mobile runtime on a Pear-capable host\n- Heavy signing / sidecar IPC not yet exposed as guest-pure verbs\n- appctl launch may use peerctl for host-managed Pear apps\n\nThis matches the App Store split: guest authoring + install/launch for simple apps; host Pear for full runtime when needed.\n\n6. OPEN DESIGN QUESTIONS (TO RESOLVE BEFORE IMPL)\n\n- Exact shape of ctx.pear (object with .build, .bundle, .init, .release(...) that returns promises of delegate results? Or more direct function surface?)\n- Whether to ship a small set of Pear IIFEs in the drive bundle path for the absolute core (or rely 100% on host import + the existing bare bundles).\n- Capability word / boot.policy changes needed?\n- Versioning of the new pear manifest tier vs the bare one (independent version field?).\n- How /bin/pear command surfaces \"you need a host Pear sidecar for this operation\" vs pure guest operations.\n\nNext for plan-12: Flesh the above into a full design doc section (or dedicated docs/design/ctx-pear.md modeled on p2p-app-store.md), get the high-level decisions locked, then move to the first implementation items (manifest tier + builder skeleton).\n\nDesign draft started during plan-12 execution. Will be iterated with the same zero-TODO, verifiers-first, agent-skill discipline used for the App Store.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","design","ctx","pear","surface","and","bare","audit","plan","code","implementation"],"seeAlso":[{"name":"docs-design-multi-account-personal-subvolumes","section":7},{"name":"docs-deployment-ota_and_bundles","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/design/ctx-pear-surface-and-bare-audit-plan.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-design-multi-account-personal-subvolumes","section":7,"title":"Multi-account personal subvolumes (design)","synopsis":["man 7 docs-design-multi-account-personal-subvolumes","Documentation page (plain text from docs/design/multi-account-personal-subvolumes.md)"],"description":"MULTI-ACCOUNT PERSONAL SUBVOLUMES (DESIGN)\n\nStatus: phase 12 — optional BARE_OS_PERSONAL_ACCT_PREFIX=1 nests home, tmp, and var/log under /.bare-os/acct/<id>/, and maps logical /.bare/account / /.bare/vault/ to /.bare-os/acct/<id>/.bare/… on the personal drive (see vfs-path-classes.md <../reference/vfs-path-classes.md> and POSIX_DECLARED_PROFILE.md <../architecture/POSIX_DECLARED_PROFILE.md>). Single interactive session per boot remains the stock model. Legacy identity blobs at the personal root /.bare/account apply when the prefix is off**; enable prefix on new layouts or after operator migration.\n\nGOALS\n\n- Host multiple logical accounts under one physical node without breaking the /.bare/ trust anchor.\n- Keep $HOME routing explicit per session while sharing the system Hyperdrive.\n\nPHASED APPROACH\n\n1. Namespace prefix — map acct/<id>/ on the personal drive before resolving $HOME.\n2. Vault isolation — per-account /.bare/account blobs and separate savevault targets.\n3. Session switch — atomic handoff of ctx identity hooks (no parallel interactive shells in v1).\n\nUpdate this document when the first implementation lands; bump BARE_OS_POSIX_PROFILE_VERSION if user-visible paths change.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","design","multi","account","personal","subvolumes"],"seeAlso":[{"name":"docs-design-p2p-app-store","section":7},{"name":"docs-design-ctx-pear-surface-and-bare-audit-plan","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/design/multi-account-personal-subvolumes.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-design-p2p-app-store","section":7,"title":"P2P App Store (design)","synopsis":["man 7 docs-design-p2p-app-store","Documentation page (plain text from docs/design/p2p-app-store.md)"],"description":"P2P APP STORE (DESIGN)\n\nStatus: Core user-app paths shipped (May 2026): real pear:// materialization and in-guest launch. Kernel-ext verification and multi-index discovery remain incremental.\nOwner: Raven (with community input)\nRelated: HDMS, appctl, pkg-swarm-index, kernel extensions, agent skills, two-drive model\n\nGOALS\n\n- Enable users running a booted Bare OS instance to discover, review, and install useful P2P applications, services, and kernel extensions directly from within the OS.\n- All installed content lives on a dedicated, user-controlled App Store Hyperdrive mounted via HDMS (never on the system drive).\n- Provide a clean separation between:\n- Ordinary user applications/services (lower risk)\n- Kernel extensions (high trust, strictly gated)\n- Leverage and extend existing primitives rather than reinventing (HDMS, pkg-swarm-index, appctl/peerctl, agent skills, kernel extension loader).\n- Make the App Store a first-class, P2P-native experience that feels native to the OS (including deep /bin/agent integration).\n\nNon-goals (for v1):\n- Running untrusted native code outside the existing sandbox/worker model.\n- Replacing the system drive or core /bin.\n- Centralized App Store server (everything must be discoverable and distributable over Hyperswarm/Hyperdrive).\n\nHIGH-LEVEL ARCHITECTURE\n\n1. APP STORE DRIVE (THE CONTAINER)\n\n- A normal Hyperdrive managed through HDMS.\n- Recommended default label: appstore\n- Mount point convention: /mnt/appstore (or user-configurable via HDMS).\n- Contains at minimum:\n- registry.json — installed packages + metadata + trust pins\n- packages/ — materialized content (either full clones or references + metadata)\n- manifests/ — verified package manifests\n- Optional per-package directories for data/state\n\nThis drive is personal by default but can be shared via Autopass/HDMS if the user wants a shared team or community store.\n\n2. DISCOVERY LAYER\n\n- Built on the existing pkg-swarm-index infrastructure + bare_os.pkg_index_get HRPC.\n- Support for multiple indexes:\n- Curated/official index (well-known drive key or swarm topic)\n- Community indexes\n- Direct pear:// or Hyperdrive keys\n- New or extended command surface: appstore search, appstore info, appstore index list\n\n3. PACKAGE TYPES\n\n| Type | Risk Level | Installation Target | Execution Model | Special Requirements |\n| User App | Low | App Store drive | Launched via Pear or execLine | Standard manifest |\n| Service | Medium | App Store drive + initd | Managed initd unit | Service manifest |\n| Kernel Extension| High | App Store drive + gated path | Loaded via kernel extension system | Signed + policy |\n\n4. TRUST & SECURITY MODEL (CRITICAL)\n\n- User apps/services: Standard path capability + VFS policy enforcement on the appstore drive.\n- Kernel Extensions:\n- Must be signed (Ed25519 or future multisig).\n- Installation requires explicit user confirmation + --allow-kernel-ext.\n- Boot policy can require pins or hashes (kernelExtensionHashPins already exists — extend for appstore).\n- Extensions from the store are loaded with a distinct source tag for auditing (appstore:<name>).\n- All installations record provenance (source index, signer, install time) in the registry.\n\nNEW / EXTENDED SURFACES\n\nCOMMANDS\n\n- /bin/appstore (preferred new binary)\n- search, info, install, remove, list, update\n- install --kernel-ext <id> (gated)\n- launch <name>\n\nCTX API ADDITIONS (LIKELY CTX 1.55+ / BATCH D)\n\n- ctx.bareOsAppstoreInstall(manifest, opts)\n- ctx.bareOsAppstoreList()\n- ctx.bareOsRegisterAppstoreExtension(record) (gated variant of existing extension registration)\n- Possibly ctx.bareOsAppstoreDrive (reference to the mounted store drive)\n\n/PROC ADDITIONS\n\n- /proc/bare_os/appstore.json — status of the store drive, installed count, last sync, health\n- /proc/bare_os/appstore/installed.json (or virtual file)\n\nHDMS CONVENTION\n\n- Standard label appstore with well-known registry path inside the drive.\n- New helper in hdms-manager.js or a small dedicated module for appstore drive lifecycle.\n\nAGENT SKILL\n\n- New skill: skills/appstore/SKILL.md\n- Discovery, review manifests, safe installation flows, kernel-ext warnings, rollback guidance.\n\nBOOT POLICY EXTENSIONS (FUTURE)\n\n- allowAppstoreKernelExtensions\n- appstoreExtensionSignerPins\n- requireAppstoreReviewStatus\n\nPHASED IMPLEMENTATION APPROACH\n\nPHASE 1 — FOUNDATION (EARLY BATCH D)\n\n- Define App Store drive convention + registry.json schema (v1)\n- Basic appstore command (list, info, install skeleton for user apps)\n- HDMS integration for auto-mounting appstore label on login\n- Agent skill skeleton + basic discovery using existing pkg-swarm-index\n- Documentation + man appstore\n\nPHASE 2 — USER APPS & SERVICES (SHIPPED CORE PATHS)\n\n- appstore install — Real pear:// materialization via lib/appstore-pear.js (local HDMS mount or ephemeral readonly fetch + VFS mirror into packages/<name>/).\n- appstore launch — In-guest execution of sources/<main> (or package.json main); output on ctx.console (no peerctl-only stub).\n- appstore update — Re-fetch from stored pearLink.\n- Manifest + appstore-meta.json with materializationVersion: 3 and fetch metadata.\n- setup, services scaffolding, gated kernel-ext warnings, HDMS preference, agent skill.\n\nRemaining Phase 2 items: automatic initd wiring for all service types, full kernel-ext verification pipeline.\n\nPHASE 2B — GUEST PEAR AUTHORING (MAY 2026)\n\n- /bin/pear: init, stage, release, seed (aliases build/bundle for stage).\n- pear release publishes .pear/stage/ to a writable HDMS drive and emits versioned pear:// links without host Pear CLI.\n- Natural handoff to App Store: appstore install <name> <pearLink> --yes then appstore launch <name>.\n\nOperator guide: docs/guides/guest-pear-and-appstore-workflow.md <../guides/guest-pear-and-appstore-workflow.md>.\n\nPHASE 3 — KERNEL EXTENSIONS (HIGH CARE)\n\n- Signed extension manifest format for the store\n- Gated installation path + policy integration\n- Safe loading + distinct auditing for appstore-sourced extensions\n- kernel.ext.d drop-in generation from installed extensions (optional)\n\nPHASE 4 — POLISH & ECOSYSTEM\n\n- Multiple index support + reputation/curated channels\n- Deep agent autonomy (agent can propose installs based on tasks)\n- Rich TUI in appstore (or reuse TUI framework)\n- Observability, backup/restore of the store drive, sharing via HDMS\n\nOPEN QUESTIONS & TRADE-OFFS\n\n1. How strict for kernel extensions?\nShould the store support community-submitted kernel extensions at all in early versions, or only a small curated set?\n\n2. Installation model for large packages\nFull materialization into the appstore drive vs. reference + on-demand mounting?\n\n3. Update model\nShould appstore update be pull-based only, or support push notifications via existing chat / HRPC mechanisms?\n\n4. Relationship to existing appctl\nKeep appctl for the old Pear app registry and make appstore the new unified experience? Or merge over time?\n\n5. Discovery incentives\nDo we want any on-chain / reputation / staking concepts later, or stay purely P2P + social?\n\nPROPOSED BATCH D ITEMS (APP STORE THEME)\n\nThese can be mixed into the broader Batch D plan. Suggested priority order for the App Store thread:\n\n| # (D) | Item | Phase | Dependencies | Notes |\n| D-APP-01 | App Store drive convention + HDMS label appstore + basic registry schema | 1 | HDMS | |\n| D-APP-02 | /bin/appstore skeleton (list, info, search via pkg-swarm-index) | 1 | D-APP-01 | New binary |\n| D-APP-03 | Agent skill appstore (discovery + safe install guidance) | 1 | D-APP-02 | |\n| D-APP-04 | HDMS auto-mount of appstore drive on session start | 1 | D-APP-01 | |\n| D-APP-05 | Full user-app install flow (manifest → materialization) | 2 | D-APP-02 | done — appstore-pear.js fetch + mirror |\n| D-APP-06 | Service manifest + initd unit generation from installed packages | 2 | D-APP-05 | partial — appstore services scaffolding |\n| D-APP-07 | appstore launch + integration with existing Pear launch paths | 2 | D-APP-05 | done — in-guest script launch; appctl still uses peerctl |\n| D-APP-08 | Signed manifest format + verification for kernel extensions | 3 | D-APP-05 | Security critical |\n| D-APP-09 | Gated install --kernel-ext + boot policy integration | 3 | D-APP-08 | |\n\nPEAR DEVELOPMENT INTEGRATION (MAY 2026)\n\nThe ctx.pear surface and /bin/pear command (see docs/design/ctx-pear-surface-and-bare-audit-plan.md) close the loop with the App Store:\n\n| Step | Command | Result |\n| Author | pear init / edit sources | Project under ~/pear-projects/ |\n| Stage | pear stage | .pear/stage/ |\n| Publish | pear release | HDMS mount + pear://0.<length>.<key> |\n| Replicate | pear seed | Swarm flush (best-effort) |\n| Distribute | appstore install NAME pear://… --yes | ~/.appstore/packages/NAME/ |\n| Run | appstore launch NAME | Guest shell runs sources/index.js |\n\nImplementation files:\n\n- packages/bare-os-coreutils/lib/pear-stage.js, lib/pear-release.js\n- packages/bare-os-coreutils/lib/appstore-pear.js\n- packages/bare-os-coreutils/src/appstore.js\n\nAgent skills: pear-dev + appstore (cross-referenced).\n\nNot yet in guest: pear run subcommand (full Pear runtime); compiled-only app.bundle.js launch without sources/ entry.\n\n| D-APP-10 | Appstore-sourced extensions loaded with distinct source tag + audit | 3 | D-APP-09 | |\n| D-APP-11 | /proc/bare_os/appstore.json + virtual files | 2 | D-APP-04 | Observability |\n| D-APP-12 | ctx.bareOsAppstore* methods (install, list, drive ref) | 2 | D-APP-05 | ctx API bump |\n| D-APP-13 | Multi-index support + curated vs community channels | 4 | D-APP-02 | |\n| D-APP-14 | Agent-driven \"recommended for your workload\" installation | 4 | D-APP-03 | Self-dev showcase |\n\nThese items are designed to be small enough to be individually verifiable while delivering incremental value.\n\nNEXT STEPS (RECOMMENDED)\n\n1. Review and refine this design (especially the trust model for kernel extensions).\n2. Finalize the first 46 Batch D items above and add them to docs/reference/feature-roadmap.md under the Batch D section.\n3. Create the initial skills/appstore/SKILL.md (even as a stub) so the agent is ready early.\n4. Prototype the drive convention + basic appstore command in a branch.\n\nThis feature has the potential to become one of the most visible and useful parts of the OS for end users while staying true to the P2P, governed, Bare-only philosophy.\n\nRelated existing files to keep in sync:\n- packages/bare-os-coreutils/lib/appstore-pear.js\n- packages/bare-os-coreutils/lib/pear-stage.js, lib/pear-release.js\n- docs/guides/guest-pear-and-appstore-workflow.md\n- packages/bare-os-booter/lib/hdms-manager.js\n- packages/bare-os-coreutils/src/appctl.js and pkg-swarm-index.js\n- developer-guide/kernel-program.md\n- docs/reference/feature-roadmap.md (Batch D section)\n- kernel-program-extension skill\n\nDocument written as direct response to feature request for a P2P App Store.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","design","p2p","app","store"],"seeAlso":[{"name":"docs-faq","section":7},{"name":"docs-design-multi-account-personal-subvolumes","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/design/p2p-app-store.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-faq","section":7,"title":"Frequently asked questions","synopsis":["man 7 docs-faq","Documentation page (plain text from docs/faq.md)"],"description":"FREQUENTLY ASKED QUESTIONS\n\nCross-cutting answers with pointers to authoritative pages. For implementation-heavy Q&A (stdin in pipelines, ctx.exitCode, bareOsSandboxRunScript, themes), see developer-guide/10-glossary-and-faq.md <../developer-guide/10-glossary-and-faq.md>.\n\nWHAT IS BARE OS, IN ONE SENTENCE?\n\nA P2P-first system image stored on Hyperdrive: a seeder publishes the OS; a booter replicates it from Hyperswarm, opens system + personal drives, and runs /boot/init.js. Eligible already-booted peers can also mirror block 0 and seed RPC hints for cold joiners. See users-manual/01-what-this-is.md <../users-manual/01-what-this-is.md> and handbook/01-introduction.md <../handbook/01-introduction.md>.\n\nIS THIS PRODUCTION-READY?\n\nNo. Bare OS is experimental research software. Expect API, wire, and storage format changes. Read handbook/00-preface.md <../handbook/00-preface.md> for trust limits and security posture.\n\nHOW DO I RUN IT LOCALLY?\n\nClone the repo, npm ci, then run seeder and booter in two terminals (Node or Pear). Step-by-step: users-manual/03-running-seeder-and-booter.md <../users-manual/03-running-seeder-and-booter.md>. Short copy-paste: root README.md <../README.md>.\n\nWHY TWO DRIVES?\n\nThe system drive is the replicated, Merkle-addressed image (shared semantics). The personal drive holds per-node state: home, /.bare/, identity, vault material. The VFS merges them into one tree. handbook/02-blueprints.md <../handbook/02-blueprints.md>, glossary.md <glossary.md> (“Personal drive”, “System drive”).\n\nWHAT IS THE MBR? IS IT A PC BOOT SECTOR?\n\nIn Bare OS it is a 512-byte block with magic BIOS and Hyperdrive discovery keys—a bootstrap for the protocol, not x86 partition tables. Seeder is the canonical source; eligible booted peers can mirror the same block 0 for availability. handbook/03-protocol-and-disk.md <../handbook/03-protocol-and-disk.md>, package-bare-os-protocol.md <reference/package-bare-os-protocol.md>, environment-and-posix-appendix.md <reference/environment-and-posix-appendix.md>.\n\nWHERE DO VERSION NUMBERS LIVE?\n\ndocs/reference/compatibility-matrix.md <reference/compatibility-matrix.md> lists bareOsCtxApiVersion, BARE_OS_KERNEL_FEATURE_BITS_DOC, capability wire shape, and lifecycle schema versions with links to source files.\n\nWHY DOESNT IMPORT WORK IN MY SCRIPT ON THE DRIVE?\n\nIn-image scripts are not normal ES modules; the booter evaluates them with AsyncFunction. Use ctx.bare, bundling on the host, or booter-side dependencies. developer-guide/05-modules-and-imports.md <../developer-guide/05-modules-and-imports.md>.\n\nHOW DO I ADD A /BIN COMMAND?\n\ndeveloper-guide/06-extending-bin-coreutils.md <../developer-guide/06-extending-bin-coreutils.md> — src/foo.js, commands.mjs, man page JSON, build.\n\nWHERE IS POSIX BEHAVIOR DOCUMENTED?\n\nhandbook/09-posix-utilities-shell-and-vfs.md <../handbook/09-posix-utilities-shell-and-vfs.md> and docs/reference/conformance-matrix.md <reference/conformance-matrix.md> (with posix-conformance-matrix.json <reference/posix-conformance-matrix.json>).\n\nSOMETHING FAILED; WHERE DO I START?\n\ndocs/troubleshooting.md <troubleshooting.md> routes symptoms to the user manual, handbook operations chapter, and environment reference.\n\nHOW DO I CONTRIBUTE TO DOCUMENTATION?\n\ndocs/CONTRIBUTING-DOCS.md <CONTRIBUTING-DOCS.md> — style, Mermaid, links, terminology rules, and npm run pretest.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","faq","frequently","asked","questions"],"seeAlso":[{"name":"docs-get-started","section":7},{"name":"docs-design-p2p-app-store","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/faq.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-get-started","section":7,"title":"Get started with Bare OS","synopsis":["man 7 docs-get-started","Documentation page (plain text from docs/get-started.md)"],"description":"GET STARTED WITH BARE OS\n\nGoal: clone the repo, run a seeder and a booter, and reach an interactive shell. Time: about fifteen minutes if dependencies are already installed.\n\n> [!CAUTION]\n> Experimental research software — not a production OS. Treat peers, keys, and vault data like any early-stage crypto and networking prototype.\n\n> Important\n> Same message for forges that do not render GitHub-style alerts: keys, vault data, and network exposure need deliberate care.\n\nON THIS PAGE\n\n- What you will have <#what-you-will-have-when-this-works>\n- Prerequisites <#prerequisites>\n- Step 1 — Clone and install <#step-1--clone-and-install>\n- Step 2 — Two terminals <#step-2--two-terminals-pear-recommended>\n- Success criteria <#success-criteria>\n- Node-only path <#node-only-path-no-pear>\n- When something fails <#when-something-fails>\n- Read next <#read-next>\n- How the two processes connect <#how-the-two-processes-connect>\n\nWHAT YOU WILL HAVE WHEN THIS WORKS\n\n- A line shell backed by 157 Tier-1 utilities under /bin (see packages/bare-os-coreutils/lib/commands.mjs <../packages/bare-os-coreutils/lib/commands.mjs>; sshd is built by bare-os-openssh).\n- Two Hyperdrives mounted into one VFS: a read-mostly system image replicated from peers, and a writable personal drive for $HOME, /.bare, and similar paths. Short explainer: Concepts — Two-drive model <concepts/two-drive-model.md>.\n- A running /boot/init.js “kernel” and host-built ctx — not a hardware OS. See User manual — Chapter 1 <../users-manual/01-what-this-is.md>.\n- A stock loopback web root — initd bare-os-www serves ~/.www on 127.0.0.1:8088 by default (GET/HEAD only); optional managed Holesail rows (bare-www-<port>, bare-ssh-<port> for SSH) live in ~/.holesail/state.json with persisted seed / key`. Handbook — Chapter 4 <../handbook/04-the-booter-runtime.md#bare-os-www-static-http-for-www>.\n\nPREREQUISITES\n\n| Requirement | Notes |\n| Node.js ≥ 20 | Enforced in root package.json <../package.json> engines. |\n| Git | To clone the repository. |\n| Pear CLI (recommended) | Required for npm run os:seeder and npm run os:booter. Install from the Pear documentation <https://docs.pears.com/>. Check with pear --version. |\n| Network | The booter must find a peer serving the bare-os-v1 swarm topic within BARE_OS_BOOT_TIMEOUT_MS (default 60000 ms). This can be the seeder or another eligible already-booted peer mirroring block 0. |\n\n<details>\n<summary><strong>Optional: Hyperswarm bootstrap nodes</strong></summary>\n\nIf discovery is flaky on your network, set HYPERSWARM_BOOTSTRAP to a comma-separated list of bootstrap nodes (see Handbook — Chapter 7 <../handbook/07-operations-and-development.md> and the environment appendix <reference/environment-and-posix-appendix.md>).\n\n</details>\n\nSTEP 1 — CLONE AND INSTALL\n\nFrom a terminal:\n\n git clone https://git.ssh.surf/snxraven/bare-operating-system.git\n cd bare-operating-system\n npm ci\n\nThe workspace must be installed from the repository root so Pear sees hoisted node_modules correctly (see User manual — Chapter 2 <../users-manual/02-install-and-repository-layout.md>).\n\nSTEP 2 — TWO TERMINALS (PEAR RECOMMENDED)\n\nTerminal A — seeder (publishes the canonical system Hyperdrive and MBR):\n\n npm run os:seeder\n\nTerminal B — booter (replicates the image, opens the personal drive, boots init; later may help mirror block 0 when eligible):\n\n npm run os:booter\n\nThese scripts run pear run --dev inside each package after scripts/ensure-pear-node-modules.mjs <../scripts/ensure-pear-node-modules.mjs> links dependencies. os:seeder also builds coreutils and bare-libs before Pear starts.\n\n> [!TIP]\n> os:seeder is an npm script name, not a Pear app name. Do not type pear run os:seeder.\n\n> Tip\n> Released Pear keys and channels live in PEAR-RUN.md <PEAR-RUN.md> if you prefer not to use a git checkout.\n\nSUCCESS CRITERIA\n\n- Seeder: logs show it is on the swarm and serving the staged image (wording varies by version; absence of fatal errors and steady “serving” / replication hints is what you want).\n- Booter: passes peer discovery, replication, and kernel start without exiting on timeout; you should get a shell prompt (or the stock boot path you configured).\n\nIf the booter exits with a timeout, the seeder is not visible on the topic, or the network cannot reach peers — see When something fails <#when-something-fails>.\n\nNODE-ONLY PATH (NO PEAR)\n\nFrom the repo root, build staged artifacts once:\n\n npm run build -w bare-os-coreutils && npm run build -w bare-os-bare-libs\n\nThen:\n\n cd packages/bare-os-seeder && node index.js\n\nIn a second terminal:\n\n cd packages/bare-os-booter && node index.js\n\nFull detail: User manual — Chapter 3 <../users-manual/03-running-seeder-and-booter.md>.\n\nWHEN SOMETHING FAILS\n\n| Symptom | First checks |\n| pear: command not found | Install Pear <https://docs.pears.com/> or use the Node-only path <#node-only-path-no-pear>. |\n| Booter timeout | Seeder running? Same machine or routable network? HYPERSWARM_BOOTSTRAP if isolated. |\n| Missing /bin utilities | Run npm run build -w bare-os-coreutils and restart the seeder so the image includes a fresh /bin. |\n| Wrong cwd for seeder | Prefer root npm run os:seeder or cd packages/bare-os-seeder so kernel paths resolve. |\n\nDeeper help: User manual — Chapter 7 <../users-manual/07-troubleshooting-and-operations.md> · Troubleshooting router <troubleshooting.md> · FAQ <faq.md>.\n\nREAD NEXT\n\n| I want to… | Go to |\n| See the full doc map | Documentation home <README.md> · Documentation sitemap <sitemap.md> |\n| Understand two drives and boot | Concepts <concepts/README.md> |\n| Use the shell and identity | User manual <../users-manual/README.md> |\n| Read the architecture story | Handbook <../handbook/README.md> |\n| Extend /bin or ctx | Developer guide <../developer-guide/README.md> |\n| Look up env vars and versions | Environment appendix <reference/environment-and-posix-appendix.md> · Compatibility matrix <reference/compatibility-matrix.md> |\n\nHOW THE TWO PROCESSES CONNECT\n\nLogical flow (not every wire message). In text: the seeder publishes canonical MBR block 0 and Hyperdrive blocks on the bare-os-v1 swarm topic; the booter discovers peers, reads the MBR, opens the system drive, then the personal drive, builds ctx, and runs /boot/init.js. After boot, eligible peers can mirror that same block 0 plus captured seed RPC snapshots for later cold booters.\n\nNormative byte layout and RPC IDs: Handbook — Chapter 3 <../handbook/03-protocol-and-disk.md> · Protocol reference <reference/package-bare-os-protocol.md>.\n\n_Links from this file are checked by scripts/verify-doc-links.mjs (relative .md targets only)._","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","get","started","with","bare"],"seeAlso":[{"name":"docs-glossary","section":7},{"name":"docs-faq","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/get-started.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-glossary","section":7,"title":"Glossary (canonical)","synopsis":["man 7 docs-glossary","Documentation page (plain text from docs/glossary.md)"],"description":"GLOSSARY (CANONICAL)\n\nShort definitions for terms used across the user manual, handbook, developer guide, and reference. For developer-oriented FAQs and implementation tips, see developer-guide/10-glossary-and-faq.md <../developer-guide/10-glossary-and-faq.md>. For exact version strings and matrices, see docs/reference/compatibility-matrix.md <reference/compatibility-matrix.md>.\n\nAZ\n\nAsyncFunction — Object.getPrototypeOf(async function () {}).constructor; used by the booter to evaluate in-image JavaScript with parameters such as ctx and argv. See developer-guide/01-two-runtimes-host-vs-image.md <../developer-guide/01-two-runtimes-host-vs-image.md>.\n\nBare — JavaScript runtime in the Holepunch ecosystem; Bare OS targets Bare semantics for code that runs in the image. The host may use Node.js during development.\n\nBooter — The bare-os-booter application: joins Hyperswarm, replicates Hyperdrives, builds the guest VFS and ctx, runs /boot/init.js, shell, initd, cron, and selected host delegates. After successful boot, eligible nodes can mirror block 0 and captured seed RPC snapshots for cold joiners. Package reference: package-bare-os-booter.md <reference/package-bare-os-booter.md>.\n\nbareOsCtxApiVersion — Semver for the guest-visible ctx contract; defined in packages/bare-os-booter/lib/bare-os-ctx-api.js. History: packages/bare-os-booter/CHANGELOG.md <../packages/bare-os-booter/CHANGELOG.md>.\n\nBARE_OS_KERNEL_FEATURE_BITS_DOC — Integer that versions kernel feature-bit documentation and governance; keep aligned with developer-guide/adr/001-kernel-feature-bits-governance.md <../developer-guide/adr/001-kernel-feature-bits-governance.md>. Source: packages/bare-os-protocol/lib/kernel-feature-bits.js.\n\nBooter boot steps — Canonical milestones: vfs → ctx → repl → initd → kernel_invoke (see architecture/KERNEL_CONTRACT.md <architecture/KERNEL_CONTRACT.md> and packages/bare-os-booter/lib/bare-os-boot-phases.js).\n\nbare-holesail — Initd unit wrapping upstream holesail (Holepunch-style TCP/UDP tunnels; upstream package is AGPL-3.0). Managed mode persists connections under BARE_OS_HOLESAIL_STATE (default ~/.holesail/state.json): each server row keeps a stable seed (64-hex or z32 ctor material) and a shareable key (hs://… after ready()). Stock auto-rows bare-www-<port> and bare-ssh-<port> use the same file. Handbook: Chapter 4 <../handbook/04-the-booter-runtime.md>.\n\nbare-os-www — Initd static HTTP server for ~/.www on 127.0.0.1 (default port 8088); pairs with managed Holesail for bare-www-<port> in ~/.holesail/state.json. Handbook: Chapter 4 — bare-os-www <../handbook/04-the-booter-runtime.md#bare-os-www-static-http-for-www>.\n\nbare-openssh — SSH-2 server (bare-ssh2) on the loopback sshd port (default 2222); managed Holesail can add bare-ssh-<port> to the same state.json as *bare-www- (BARE_OS_SSH_HOLESAIL**). Handbook: Chapter 4 <../handbook/04-the-booter-runtime.md>.\n\nCapability words — Structured feature masks on bare_os.capabilities RPC and under /proc/bare_os_features. Described in compatibility-matrix.md <reference/compatibility-matrix.md> and kernel-capabilities-index.md <reference/kernel-capabilities-index.md>.\n\nCorestore — Storage backend for Hypercores/Hyperdrives on the host; default locations often under ~/.bare-os/. Env vars: environment-and-posix-appendix.md <reference/environment-and-posix-appendix.md>.\n\nCoreutils — bare-os-coreutils: sources and build for /bin utilities and merged man.json. See package-bare-os-coreutils-and-ci.md <reference/package-bare-os-coreutils-and-ci.md>.\n\nctx — Context object passed to start(ctx) (/boot/init.js) and run(ctx, argv) (user scripts and /bin tools). Full map: developer-guide/02-the-context-object.md <../developer-guide/02-the-context-object.md>.\n\nctx.bare — Frozen map of curated modules exposed to in-image code per manifest and optional /lib/bare bundles. See developer-guide/12-bare-modules-and-pear-ecosystem.md <../developer-guide/12-bare-modules-and-pear-ecosystem.md>.\n\nctx.pear — Frozen map of Pear development packages (pear-build, pear-bundle, bare-bundle-compile, …) exposed when BARE_OS_BARE_MODULES is enabled. Used by /bin/pear.\n\nApp Store (/bin/appstore) — Guest command to install packages from pear:// links into ~/.appstore/ (or /mnt/appstore) and launch entry scripts in the shell. See guides/guest-pear-and-appstore-workflow.md <guides/guest-pear-and-appstore-workflow.md>.\n\n/bin/pear — Guest Pear dev CLI: init, stage, release, seed. Publishes apps to HDMS and pear:// links without host Pear CLI. Same guide as App Store.\n\nGuest — Pre-login session identity; typically BARE_OS_IDENTITY=guest. Contrast with logged-in user and vault flows in handbook/05-identity-vault-and-hdms.md <../handbook/05-identity-vault-and-hdms.md>.\n\nHDMS — Hyperdrive mount subsystem: optional extra drives under /mnt. Handbook: Chapter 5 <../handbook/05-identity-vault-and-hdms.md>.\n\nHolepunch — Ecosystem (Bare, Hyperdrive, Hyperswarm, Pear, etc.) that Bare OS integrates with.\n\nHyperdrive — Merkle-addressed, replicated filesystem abstraction; Bare OS uses a system drive (image) and a personal drive (mutable per node).\n\nHyperswarm — DHT-based peer discovery; Bare OS uses a topic derived from bare-os-v1. Protocol: package-bare-os-protocol.md <reference/package-bare-os-protocol.md>.\n\nIn-image — Code whose source lives on a drive and is executed via AsyncFunction (not ESM import in the usual sense). See developer-guide/05-modules-and-imports.md <../developer-guide/05-modules-and-imports.md>.\n\nKernel (guest) — /boot/init.js: async function start(ctx); session entry after the booter constructs ctx. Distinct from the host booter process.\n\nMBR (Bare OS) — 512-byte bootstrap block on the system image with magic BIOS and Hyperdrive discovery key material (not a PC BIOS partition table). Seeder is canonical; eligible booted peers may mirror the same block 0 for availability. Layout: handbook/03-protocol-and-disk.md <../handbook/03-protocol-and-disk.md>.\n\nPear — Packaging and distribution layer for Bare apps; seeder and booter ship as Pear projects. Host: PEAR-RUN.md <./PEAR-RUN.md>. Guest authoring/install: guides/guest-pear-and-appstore-workflow.md <guides/guest-pear-and-appstore-workflow.md>.\n\nPersonal drive — Writable Hyperdrive for $HOME, /.bare/, vault snapshots, logs, and user files. Routed by the VFS alongside the read-only system tree.\n\nProtomux — Multiplexed protocol framing; channel name bare-os-v1 pairs with the swarm topic. Reference: package-bare-os-protocol.md <reference/package-bare-os-protocol.md>.\n\nSeeder — The bare-os-seeder application: stages kernel/ into the system Hyperdrive, publishes the canonical MBR, and joins the swarm. Reference: package-bare-os-seeder.md <reference/package-bare-os-seeder.md>.\n\nStock image — The default tree from this repositorys kernel/, built /bin, and man.json, without private forks—used as the compatibility baseline.\n\nSystem drive — Replicated OS image: /bin, /boot, /etc, etc. Treated as shared and replaceable from the swarms perspective.\n\nTier-1 /bin — Command names shipped as /bin/* on the system drive; the authoritative list is COREUTILS_COMMANDS in packages/bare-os-coreutils/lib/commands.mjs. Root pretest runs scripts/verify-man-coverage.mjs so every Tier-1 name has a matching man.json page.\n\nSwarmDisk — Booter-side disk implementation that reads the OS image from replicated storage.\n\nVFS — Virtual file system: path classes, mounts, synthetic /proc, /run, /sys. Policy sketch: vfs-path-classes.md <reference/vfs-path-classes.md>.\n\nVFS path classes — Rules for which paths map to system vs personal drive or synthetic trees. Reference: vfs-path-classes.md <reference/vfs-path-classes.md>.\n\nSHELL AND THEME (GUEST)\n\n~/.barerc — Personal shell init file: export, alias, theme <preset>; parsed by loadBarerc. Builtin barerc reload reapplies without logout.\n\nBARE_OS_THEME — Active color preset; /bin/theme, ~/.barerc, and ctx.bareOsApplyTheme() refresh *BARE_OS_COLOR_ and usually LS_COLORS**.\n\nLS_COLORS — GNU-style colon-separated map for ls --color; optional file via BARE_OS_DIRCOLORS and dircolors.\n\nBARE_OS_COLOR_DEPTH — truecolor (default), 256, or 16 / ansi — affects truecolor sequences for the fish REPL when downgraded.\n\nSEE ALSO\n\n- docs/faq.md <faq.md>\n- docs/troubleshooting.md <troubleshooting.md>\n- User manual <../users-manual/README.md>\n- Handbook <../handbook/README.md>\n- Developer guide <../developer-guide/README.md>\n- Reference hub <reference/README.md>","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","glossary","canonical"],"seeAlso":[{"name":"docs-guides-guest-pear-and-appstore-workflow","section":7},{"name":"docs-get-started","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/glossary.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-guides-guest-pear-and-appstore-workflow","section":7,"title":"Guest Pear development and P2P App Store workflow","synopsis":["man 7 docs-guides-guest-pear-and-appstore-workflow","Documentation page (plain text from docs/guides/guest-pear-and-appstore-workflow.md)"],"description":"GUEST PEAR DEVELOPMENT AND P2P APP STORE WORKFLOW\n\nStatus: Shipped in-tree (May 2026)\nImplementation: packages/bare-os-coreutils/src/pear.js, lib/pear-stage.js, lib/pear-release.js, src/appstore.js, lib/appstore-pear.js\n\nThis guide describes the end-to-end workflow inside a booted Bare OS shell. You do not need host-side pear release or a Pear sidecar to author, publish, install, or run simple Pear apps from the guest.\n\nPREREQUISITES\n\n- Booted Bare OS session with /bin/pear and /bin/appstore on the system image (rebuild with npm run build -w bare-os-coreutils and re-seed if missing).\n- login (identity unlocked) for pear release, pear seed, and App Store fetch from remote pear:// keys (HDMS must be active).\n- Optional: BARE_OS_BARE_MODULES enabled for pear stage pack/compile tools on ctx.pear / ctx.bare (release no longer requires hypercore-id-encoding on ctx.bare — HDMS registry keys are used).\n\nAUTHOR → RELEASE (GUEST /BIN/PEAR)\n\n pear init\n cd ~/pear-projects/my-pear-app\n \n # edit sources (default index.js logs \"Hello from my Pear app!\")\n \n pear stage # writes .pear/stage/ (sources, bundle, stage.json)\n pear release . # HDMS mount pear-<name>, prints pear:// links\n pear seed . # best-effort Hyperswarm flush for the release drive\n\nOutputs:\n\n| Artifact | Location |\n| Staged tree | <project>/.pear/stage/ |\n| Release metadata | <project>/.pear/release.json |\n| Live release mount | /mnt/pear-<app-name>/ (HDMS writable drive) |\n| Shareable link | pear://0.<length>.<z32-key> (use the versioned line after each release) |\n\nHost Pear (pear run pear://… on a Pear-capable machine) remains valid for full desktop Pear runtimes; the guest workflow is authoritative for building and publishing the link.\n\nINSTALL → RUN (GUEST /BIN/APPSTORE)\n\n appstore install my-pear-app \\\n pear://0.<length>.<z32-key> \\\n --yes\n \n appstore list\n appstore info my-pear-app\n \n appstore launch my-pear-app # runs sources/index.js in the guest shell\n\nInstall (appstore-pear.js):\n\n1. Resolves the pear:// key (including pear://0.<length>.<key> form).\n2. Copies the release tree from a local HDMS mount with the same key when present (e.g. your pear-my-pear-app mount), otherwise opens an ephemeral readonly HDMS mount and waits for content.\n3. Materializes files under ~/.appstore/packages/<name>/ (or /mnt/appstore/packages/<name>/ when the App Store HDMS drive is mounted).\n\nLaunch executes the package entry script (package.json main, typically sources/index.js) via the guest ctx.console — you should see application output (e.g. Hello from my Pear app!) in the shell.\n\nRefresh after a new pear release:\n\n appstore update my-pear-app\n\nAPP STORE HDMS DRIVE (OPTIONAL)\n\nPersonal fallback (~/.appstore/) works without extra setup. For a dedicated store drive:\n\n appstore setup # instructions\n hdms create appstore # label appstore → /mnt/appstore\n appstore install … --yes\n\nRegistry then prefers /mnt/appstore/registry.json.\n\nAGENT SKILLS\n\n| Skill | Path |\n| Pear authoring | kernel/share/agent-workspace/skills/pear-dev/SKILL.md |\n| Install / launch | kernel/share/agent-workspace/skills/appstore/SKILL.md |\n\nRELATED DOCUMENTATION\n\n- PEAR-RUN.md <../PEAR-RUN.md> — host pear stage / pear release for booter and seeder channels\n- p2p-app-store.md <../design/p2p-app-store.md> — architecture and trust model\n- ctx-pear-surface-and-bare-audit-plan.md <../design/ctx-pear-surface-and-bare-audit-plan.md> — ctx.pear surface\n- developer-guide/07-apps-beyond-the-shell.md <../../developer-guide/07-apps-beyond-the-shell.md>\n- developer-guide/12-bare-modules-and-pear-ecosystem.md <../../developer-guide/12-bare-modules-and-pear-ecosystem.md>\n\nLIMITATIONS (HONEST)\n\n| Area | Current behavior |\n| pear run in guest | Not a /bin/pear subcommand; use appstore launch or host pear run for full Pear runtime |\n| app.bundle.js launch | Launch prefers sources/<main>; compiled bundles need a future guest evaluator |\n| Remote fetch | Requires HDMS + swarm; may time out if the release was never seeded |\n| Kernel extensions via store | Gated / partial; see design doc |","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","guides","guest","pear","and","appstore","workflow","development","p2p","app","store"],"seeAlso":[{"name":"docs-images-readme","section":7},{"name":"docs-glossary","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/guides/guest-pear-and-appstore-workflow.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-images-readme","section":7,"title":"Documentation images","synopsis":["man 7 docs-images-readme","Documentation page (plain text from docs/images/README.md)"],"description":"DOCUMENTATION IMAGES\n\nDiagrams in this repository are authored as Mermaid in the Markdown sources (handbook, user manual, developer guide, docs/) so they stay diff-friendly and render on Git hosts that support Mermaid.\n\nOptional PNG / SVG assets may be added here for print, slides, or viewers without Mermaid. Reference them with a path relative to the Markdown file that embeds them.\n\nSuggested assets (only if you commit binary figures):\n\n| File | Intended content | Primary readers |\n| boot-flow.png | Host → seeder (canonical) + optional booted helper → swarm → cold booter → MBR → drives → init.js → shell | KERNEL_CONTRACT, architecture data flow |\n| two-drive-vfs.png | System vs personal Hyperdrive and path routing ($HOME, /.bare/) | User manual ch.1, VFS reference |\n| hyperswarm-protomux.png | Topic discovery, replication channel bare-os-v1 | Handbook ch.3 |\n| ctx-hierarchy.png | ctx fields and capability wiring (simplified) | Developer guide ch.2 |\n| identity-vault-lifecycle.png | Guest → login → vault snapshot / logout | User manual ch.5 |\n| shell-pipeline.png | Tokenize → expand → execute (pipelines, redirects) | Handbook ch.9, user manual ch.4 |\n| feature-bits-governance.png | ADR 001 flow: doc ↔ code ↔ verifiers | Reference kernel-extensions, dev ADR |\n\nUntil such files exist, do not use !alt <...> links to them in other docs — use Mermaid blocks instead (see Contributing to docs <../CONTRIBUTING-DOCS.md>).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","images","readme"],"seeAlso":[{"name":"docs-operations-reliability-playbook","section":7},{"name":"docs-guides-guest-pear-and-appstore-workflow","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/images/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-operations-reliability-playbook","section":7,"title":"Reliability playbook","synopsis":["man 7 docs-operations-reliability-playbook","Documentation page (plain text from docs/operations/reliability-playbook.md)"],"description":"RELIABILITY PLAYBOOK\n\nThis playbook keeps booter/shell lanes merge-ready without retry-dependent success.\n\nTRIAGE ORDER\n\n1. Reproduce with npm run test:booter:www-ssh for www/ssh-holesail.\n2. Reproduce shell regressions with npm run test:shell-fast.\n3. Run repeat lane npm run test:flake-repeat and inspect docs/audit/shell-flake-repeat-report.json.\n4. Enforce static gates with npm run verify:reliability-gates.\n\nUNSKIP POLICY\n\n- No test.skip in first-party reliability suites:\n- packages/bare-os-booter/test.bare-os-www.js\n- packages/bare-os-booter/test.bare-os-ssh-holesail.js\n- No broad placeholder assertions (t.ok(true)) in critical booter/shell suites.\n\nFAILURE CLASSES\n\n- Port/race timing\n- Async lifecycle leak\n- Runtime parity mismatch (Node vs Bare)\n- Environment-coupled assertions\n\nMONTHLY REVIEW CHECKLIST\n\n- Review trend in docs/audit/shell-flake-repeat-report.json.\n- Regenerate docs/audit/shell-reliability-report.json.\n- Confirm release checklist reliability gates are still accurate.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","operations","reliability","playbook"],"seeAlso":[{"name":"docs-pear-run","section":7},{"name":"docs-images-readme","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/operations/reliability-playbook.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-pear-run","section":7,"title":"Pear channels (legacy notes)","synopsis":["man 7 docs-pear-run","Documentation page (plain text from docs/PEAR-RUN.md)"],"description":"PEAR CHANNELS (LEGACY NOTES)\n\n> Host apps are no longer run with pear run. Pear v3 removed that command.\n> Supported host path: Bare standalone binaries and pear install — see BINARY-RELEASE.md <BINARY-RELEASE.md>.\n\nThe links below remain the upgrade / OTA channels for seeder and booter binaries (by-arch layout staged in CI). Do not use them with pear run.\n\nBARE-OS-SEEDER\n\n- Upgrade / install — pear://1ycyj65xxgn6c5cirhtnm8aokkrpe9dzibriszyfkmfggc3opjzy\n- Install — pear install pear://1ycyj65xxgn6c5cirhtnm8aokkrpe9dzibriszyfkmfggc3opjzy\n- Tarball — bare-os-seeder-<ver>-<host>.tar.gz (includes kernel/)\n\nBARE-OS-BOOTER\n\n- Upgrade / install — pear://khtauzttriz8dpgrphj79rfy98iwoatqm59fnogtsdqk5f1kg6ao\n- Install — pear install pear://khtauzttriz8dpgrphj79rfy98iwoatqm59fnogtsdqk5f1kg6ao\n- Tarball — bare-os-booter-<ver>-<host>.tar.gz\n\nRE-STAGING AFTER CODE CHANGES\n\n npm run maintainer:kernel-image\n npm run make\n bash scripts/pear-stage-by-arch.sh\n # or full rolling publish:\n npm run release:rolling\n\nLegacy JS-tree scripts/stage-release.sh is deprecated.\n\nBOOTER HOST ENV (OTA / SHELL)\n\nThe booter still copies *BARE_OS_ keys into the guest session. Host OTA for the binary uses embedded pear-runtime against package.json upgrade*. Guest image OTA / reload bridges (BARE_OS_PEAR_, ctx.bareOsRequestPearReload, updater delegate) are unchanged — see OTA_AND_BUNDLES.md <deployment/OTA_AND_BUNDLES.md>.\n\nSTAGING NODE_MODULES (MONOREPO)\n\nscripts/prepare-pack.mjs (and ensure-pear-node-modules.mjs) flatten workspace deps before bare-pack. Prefer that over manual Pear staging.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","pear","run","channels","legacy","notes"],"seeAlso":[{"name":"bare-os-docs","section":7},{"name":"docs-operations-reliability-playbook","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/PEAR-RUN.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"bare-os-docs","section":7,"title":"Bare OS documentation (docs/) — hub, maps, and where to read next","synopsis":["man 7 bare-os-docs","Documentation page (plain text from docs/README.md)"],"description":"BARE OS — DOCUMENTATION HOME\n\nBare OS is an experimental, P2P-first system image: the operating tree lives on a replicated Hyperdrive, distributed via Hyperswarm and Protomux, with a separate personal drive for identity and mutable state. This page is the navigation hub for every documentation tree in the repository.\n\n> [!CAUTION]\n> Experimental research software — not a production operating system. Trust boundaries and security limits matter.\n\n> Important\n> Same message on forges that do not render GitHub-style alerts: this project is research software, not a production OS. Full framing: handbook preface <../handbook/00-preface.md>.\n\nFirst run: Get started <get-started.md> · Doc map: Sitemap <sitemap.md> · Evergreen explainers: Concepts <concepts/README.md>.\n\nON THIS PAGE\n\n- Get started <get-started.md> · Sitemap <sitemap.md>\n- Pick your depth <#pick-your-depth>\n- Architecture snapshot <#architecture-snapshot>\n- Two-drive and swarm path <#two-drive-and-swarm-path>\n- Boot sequence logical order <#boot-sequence-logical-order>\n- POSIX + P2P reading order <#posix--p2p-reading-order>\n- Contract spine <#contract-spine-quick-cross-links>\n- POSIX + P2P consolidated dashboard <#posix--p2p-consolidated-dashboard>\n- Documentation map <#documentation-map>\n- Topic index <#topic-index-canonical-reference-per-subject>\n- Contract bump checklist <#contract-bump-checklist>\n\nPICK YOUR DEPTH\n\n| Time | Goal | Path |\n| 5 min | See it run | Get started <get-started.md> → User manual — ch.3 <../users-manual/03-running-seeder-and-booter.md> |\n| 30 min | Two drives + P2P boot | Concepts <concepts/README.md> → Handbook ch.3 <../handbook/03-protocol-and-disk.md> |\n| 2 h | Extend /bin or kernel | Developer guide §16 <../developer-guide/01-two-runtimes-host-vs-image.md> + KERNEL_CONTRACT <architecture/KERNEL_CONTRACT.md> |\n| Release | Avoid CI surprises | scripts/README.md <../scripts/README.md> + Release checklist <release-checklist.md> |\n\nARCHITECTURE SNAPSHOT\n\nEnd-to-end data path from swarm connection to guest syscalls (canonical overview; details in the handbook <../handbook/README.md>, concepts — P2P <concepts/p2p-swarm-and-protomux.md>, and kernel contract <architecture/KERNEL_CONTRACT.md>):\n\nTWO-DRIVE AND SWARM PATH\n\nHow the personal drive sits beside the system image and how the booter reaches both after swarm replication (narrative: concepts — Two drives <concepts/two-drive-model.md>, concepts — Boot <concepts/boot-and-init-timeline.md>):\n\nBOOT SEQUENCE (LOGICAL ORDER)\n\nHigh-level order only — not every Protomux message or RPC. Text fallback (for man ingest and plain-text readers): the seeder publishes MBR block 0 and drive blocks on the swarm; the booter discovers peers, reads the MBR, opens and replicates the system Hyperdrive, opens or creates the personal Hyperdrive, builds ctx, then runs /boot/init.js. For bytes and message IDs, read Handbook ch.3 <../handbook/03-protocol-and-disk.md> and the protocol reference <reference/package-bare-os-protocol.md>.\n\nPOSIX + P2P READING ORDER\n\nRead once in this order when you need the full contract picture; then use the consolidated dashboard <#posix--p2p-consolidated-dashboard> as your bookmark.\n\n| Step | Focus | Human doc | Machine / generated |\n| 1 | Declared stance | POSIX declared profile <architecture/POSIX_DECLARED_PROFILE.md> | posix-compliance-matrix.json <reference/posix-compliance-matrix.json> |\n| 2 | Dashboard | POSIX compliance dashboard <reference/posix-dashboard.md> | pretest → gen-posix-dashboard.mjs |\n| 3 | Utilities + shell | Handbook ch.9 <../handbook/09-posix-utilities-shell-and-vfs.md> | syscalls.example.json <../kernel/etc/bare-os/syscalls.example.json> |\n| 4 | Syscall facade | POSIX syscall facade map <reference/posix-syscall-facade-map.md> | bare-os-syscalls.schema.json <schemas/bare-os-syscalls.schema.json> |\n| 5 | P2P vs POSIX boundary | Handbook ch.12 <../handbook/12-p2p-stack-and-posix-boundaries.md> | Capability words <reference/capability-words.md> |\n\nEnvironment variables (full inventory, do not duplicate in prose): Environment and POSIX appendix <reference/environment-and-posix-appendix.md>.\n\nCOMPARED AT A GLANCE\n\n| | Bare OS | Classic OS image | Container on a host |\n| Distribution | P2P Hyperdrive + swarm | ISO / image mirror | Registry pull |\n| Mutable user state | Personal Hyperdrive | Local disk | Writable layers / volumes |\n| Guest execution | ctx + VFS over drives | Kernel + real HW/VM | Namespaces + host kernel |\n| POSIX | Declared profile + facade | Full kernel | Often libc + syscall pass-through |\n\nCONTRACT SPINE (QUICK CROSS-LINKS)\n\nNormative and machine-readable contracts that should move together when behavior changes:\n\n| Surface | Role |\n| POSIX declared profile <architecture/POSIX_DECLARED_PROFILE.md> | Narrative stance, non-goals, env gates (BARE_OS_POSIX_PROFILE_VERSION). |\n| ctx API version <reference/compatibility-matrix.md> | Guest-visible ctx semver in bare-os-ctx-api.js. |\n| Protocol / feature bits <reference/compatibility-matrix.md> | bare-os-protocol package version, kernel feature words, Protomux channel names. |\n| Telemetry / audit <schemas/> | NDJSON and JSON Schema shards under docs/schemas/; handbook ops ch.7. |\n| /proc and HRPC <reference/package-bare-os-booter.md> | Proc JSON schema bumps, disk.os allowlist, replication_operator_sketch versions. |\n\nRun npm run pretest after contract edits so generated dashboards and parity scripts stay aligned.\n\nPOSIX + P2P CONSOLIDATED DASHBOARD\n\nSingle entry point for declared POSIX-like behavior, machine-readable matrices, and P2P / capability alignment:\n\n- Declared POSIX profile <architecture/POSIX_DECLARED_PROFILE.md> — normative narrative and non-goals.\n- POSIX compliance dashboard <reference/posix-dashboard.md> — generated summary from posix-compliance-matrix.json <reference/posix-compliance-matrix.json> (run npm run pretest / gen-posix-dashboard.mjs).\n- POSIX Issue 7 traceability index <reference/posix-issue7-traceability.md> — maps XBD/XSH/XCU to /proc, ctx, and handbook chapters.\n- Holepunch lockfile drift dashboard <audit/holepunch-lockfile-drift-dashboard.md> — human table from report-holepunch-lockfile-drift.mjs (also npm run audit:holepunch-clones).\n- POSIX utilities matrix (handbook) <../handbook/09-posix-utilities-shell-and-vfs.md> — Tier-1 /bin catalog and shell semantics.\n- Syscall / socket bridge contract <reference/syscall-socket-contract.md> — ctx.bareOsSyscall and optional socket FD bridge.\n- Capability words <reference/capability-words.md> and compatibility matrix <reference/compatibility-matrix.md> — ctx API and kernel feature-bit alignment.\n- Feature roadmap (canonical JSON) <data/feature-roadmap-canonical.json> and feature roadmap (human) <reference/feature-roadmap.md> — planned work vs shipped surfaces.\n\nMAINTAINER QUICK PATH (BUILD + PARITY)\n\nWhen you change kernel/lib/init/, kernel/lib/boot/, kernel/lib/bare/, or kernel/bin/:\n\n1. Run npm run build -w bare-os-coreutils and npm run build -w bare-os-bare-libs as needed.\n2. Run npm run bundle:kernel (or full npm test, which bundles and verifies).\n3. Keep packages/bare-os-seeder/kernel/ identical to kernel/ — scripts/verify-kernel-seeder-parity.mjs enforces this in pretest.\n\nDetails: scripts/README.md <../scripts/README.md> (maintainer build order), developer guide ch.7 <../developer-guide/README.md>.\n\nCHOOSE YOUR PATH\n\n| I want to… | Start here |\n| Orient quickly (two drives, boot, P2P, POSIX) | Concepts <concepts/README.md> |\n| Run the seeder and booter and use the shell | User manual <../users-manual/README.md> |\n| Understand architecture, protocol, and design intent | Handbook <../handbook/README.md> |\n| Extend /bin, scripts, Pear apps, or ctx | Developer guide <../developer-guide/README.md> |\n| Look up paths, env vars, wire formats, matrices | Reference hub <reference/README.md> |\n| Define a term or compare version fields | Glossary <glossary.md> · Compatibility matrix <reference/compatibility-matrix.md> |\n| Vault / identity posture (operator) | Vault threat model <security/vault-threat-model.md> |\n| Boot provenance and block-0 trust (operator) | Boot trust model <security/boot-trust-model.md> |\n| Fix a problem quickly | Troubleshooting router <troubleshooting.md> · FAQ <faq.md> |\n| Edit docs in this repo | Contributing to documentation <CONTRIBUTING-DOCS.md> |\n\nDOCUMENTATION MAP\n\nUSER MANUAL (USERS-MANUAL/ <../USERS-MANUAL/README.MD>)\n\nPractical, sequential guide for operators.\n\n| Chapter | Topic |\n| README <../users-manual/README.md> | Paths through the docs, how trees relate |\n| 01 — What this is <../users-manual/01-what-this-is.md> | Two drives, P2P image, experimental status |\n| 02 — Install <../users-manual/02-install-and-repository-layout.md> | Clone, npm ci, monorepo layout |\n| 03 — Seeder and booter <../users-manual/03-running-seeder-and-booter.md> | Node vs Pear, two terminals |\n| 04 — Shell and PATH <../users-manual/04-shell-path-and-scripts.md> | Commands and scripts without full ctx depth |\n| 05 — Home, identity, vault <../users-manual/05-home-identity-and-vault.md> | Guest, login, vault snapshots |\n| 06 — Help and man <../users-manual/06-help-man-and-documentation-map.md> | man, help, where each doc tree lives |\n| 07 — Troubleshooting <../users-manual/07-troubleshooting-and-operations.md> | Common failures, env vars, CI |\n| 08 — Further reading <../users-manual/08-further-reading.md> | Curated deep links |\n\nHANDBOOK (HANDBOOK/ <../HANDBOOK/README.MD>)\n\nNarrative spine: why and how the system fits together.\n\n| Chapter | Topic |\n| 00 — Preface <../handbook/00-preface.md> | Thesis, security frame, contributors |\n| 01 — Introduction <../handbook/01-introduction.md> | Goals, vocabulary, clone-to-prompt |\n| 02 — Blueprints <../handbook/02-blueprints.md> | Layers, trust, boot path |\n| 03 — Protocol and disk <../handbook/03-protocol-and-disk.md> | MBR, swarm, Protomux, failure modes |\n| 04 — Booter runtime <../handbook/04-the-booter-runtime.md> | ctx, VFS, shell, bridges |\n| 05 — Identity, vault, HDMS <../handbook/05-identity-vault-and-hdms.md> | Accounts, vault, mounts |\n| 06 — Kernel and binaries <../handbook/06-kernel-and-binaries.md> | /boot/init.js, coreutils |\n| 07 — Operations <../handbook/07-operations-and-development.md> | CI, Pear, env, troubleshooting |\n| 08 — Git on Bare OS <../handbook/08-git-on-bare-os.md> | isomorphic-git, HTTP modes |\n| 09 — POSIX, shell, VFS <../handbook/09-posix-utilities-shell-and-vfs.md> | Coverage and divergences |\n| 10 — Man pages and help <../handbook/10-manpages-and-online-help.md> | JSON DB, handbook ingest |\n| 11 — Kernel program and research <../handbook/11-kernel-program-and-research.md> | Roadmap context, capability words |\n| 12 — P2P stack vs POSIX <../handbook/12-p2p-stack-and-posix-boundaries.md> | Hypercore, swarm, Protomux vs declared POSIX profile |\n\nDEVELOPER GUIDE (DEVELOPER-GUIDE/ <../DEVELOPER-GUIDE/README.MD>)\n\nHow-to for code inside and around the image.\n\n| Doc | Topic |\n| 01 — Two runtimes <../developer-guide/01-two-runtimes-host-vs-image.md> | Host vs in-image execution |\n| 02 — ctx <../developer-guide/02-the-context-object.md> | Capability object map |\n| 03 — Kernel boot <../developer-guide/03-kernel-boot-init.md> | start(ctx) |\n| 04 — User scripts and PATH <../developer-guide/04-user-scripts-and-path.md> | run(ctx, argv) |\n| 05 — Modules <../developer-guide/05-modules-and-imports.md> | No ESM on drive |\n| 06 — Extending /bin <../developer-guide/06-extending-bin-coreutils.md> | Coreutils pipeline |\n| 07 — Apps beyond shell <../developer-guide/07-apps-beyond-the-shell.md> | initd, cron, delegates |\n| 08 — Testing <../developer-guide/08-testing-and-debugging.md> | npm test, Pear dev |\n| 09 — Security <../developer-guide/09-security-and-trust.md> | Trust boundaries |\n| 10 — Glossary and FAQ <../developer-guide/10-glossary-and-faq.md> | Dev-focused Q&A |\n| 11 — Pear cookbook <../developer-guide/11-kernel-pear-cookbook.md> | Pear integration patterns |\n| 12 — Bare modules <../developer-guide/12-bare-modules-and-pear-ecosystem.md> | ctx.bare, manifests |\n| 13 — Privacy and telemetry <../developer-guide/13-privacy-telemetry-pii.md> | Scrub lists, PII posture |\n| Extras <../developer-guide/README.md#reading-order> | Phase alignment, kernel program, naming, node→Bare map, ADRs |\n\nREFERENCE AND CONTRACTS (THIS TREE)\n\n| Resource | Purpose |\n| Reference README <reference/README.md> | Topic index (packages, env, data flow) |\n| KERNEL_CONTRACT <architecture/KERNEL_CONTRACT.md> | Booter vs image, boot steps, ctx API pointer |\n| POSIX_DECLARED_PROFILE <architecture/POSIX_DECLARED_PROFILE.md> | Issue 7like contract: shell, XCU, VFS, proc “syscall” models |\n| kernel-subsystems <architecture/kernel-subsystems.md> | Subsystem boundaries |\n| ADRs <adr/README.md> | Architecture decisions |\n| Audit baseline <audit/PLACEHOLDER_BASELINE.md> | Incomplete surfaces (classified) |\n| OTA and bundles <deployment/OTA_AND_BUNDLES.md> | Release packaging notes |\n| Release checklist <release-checklist.md> | Pre-tag steps |\n| Schemas <schemas/> | Boot policy, telemetry, extension manifests |\n| Themes <themes/README.md> | Terminal theme packs |\n| Machine-readable data <data/README.md> | Roadmap JSON, terminology allowlist |\n| Holepunch catalog <bare-holepunch-catalog.json> | Optional ctx.bare bundle metadata |\n\nTOPIC INDEX (CANONICAL REFERENCE PER SUBJECT)\n\nWhen updating behavior, edit the canonical row first; handbook, user manual, and developer guide should summarize and link here instead of copying versioned tables or env inventories.\n\n| Topic | Canonical spec / reference | Narrative (handbook) | Operator (users manual) | How-to (developer guide) |\n| Environment variables | environment-and-posix-appendix.md <reference/environment-and-posix-appendix.md> | Ch. 7 — Operations <../handbook/07-operations-and-development.md> | Ch. 7 — Troubleshooting <../users-manual/07-troubleshooting-and-operations.md> | Ch. 11 — Pear cookbook <../developer-guide/11-kernel-pear-cookbook.md> |\n| ctx / booter runtime | package-bare-os-booter.md <reference/package-bare-os-booter.md>, ctx-api-versioning.md <reference/ctx-api-versioning.md>, shell-completion-and-repl-editor.md <reference/shell-completion-and-repl-editor.md> | Ch. 4 — Booter runtime <../handbook/04-the-booter-runtime.md> | — | Ch. 2 — ctx <../developer-guide/02-the-context-object.md> |\n| Protocol / MBR / Protomux | package-bare-os-protocol.md <reference/package-bare-os-protocol.md> | Ch. 3 — Protocol and disk <../handbook/03-protocol-and-disk.md> | Ch. 13 <../users-manual/01-what-this-is.md> | — |\n| Identity / vault / HDMS | vault-threat-model.md <security/vault-threat-model.md>, package-bare-os-booter.md <reference/package-bare-os-booter.md> (guest /.bare policy) | Ch. 5 <../handbook/05-identity-vault-and-hdms.md> | Ch. 5 <../users-manual/05-home-identity-and-vault.md> | Ch. 9 — Security <../developer-guide/09-security-and-trust.md> |\n| POSIX / syscalls / sockets | POSIX_DECLARED_PROFILE.md <architecture/POSIX_DECLARED_PROFILE.md>, posix-syscall-facade-map.md <reference/posix-syscall-facade-map.md>, syscall-socket-contract.md <reference/syscall-socket-contract.md> | Ch. 9 <../handbook/09-posix-utilities-shell-and-vfs.md> | — | Ch. 8 — Testing <../developer-guide/08-testing-and-debugging.md> |\n| Kernel program / capability words | feature-roadmap.md <reference/feature-roadmap.md>, kernel-capabilities-index.md <reference/kernel-capabilities-index.md>, kernel-program.md <../developer-guide/kernel-program.md> | Ch. 1112 <../handbook/11-kernel-program-and-research.md> | — | kernel-program.md <../developer-guide/kernel-program.md> |\n| Tier-1 /bin / coreutils | package-bare-os-coreutils-and-ci.md <reference/package-bare-os-coreutils-and-ci.md>, packages/bare-os-coreutils/lib/commands.mjs | Ch. 69 <../handbook/06-kernel-and-binaries.md> | Ch. 4 <../users-manual/04-shell-path-and-scripts.md> | Ch. 6 — Extending /bin <../developer-guide/06-extending-bin-coreutils.md> |\n| agent (HTTPS assistant) and chat (swarm chat) | HTTP: curl and wget <reference/http-curl-and-wget.md> (ctx.httpFetch for agent); man agent / man chat (packages/bare-os-coreutils/man/pages/ <../packages/bare-os-coreutils/man/pages/>); bare-os-coreutils README <../packages/bare-os-coreutils/README.md> | Ch. 4 <../handbook/04-the-booter-runtime.md>, Ch. 6 <../handbook/06-kernel-and-binaries.md>, Ch. 9 <../handbook/09-posix-utilities-shell-and-vfs.md> | Ch. 4 — Shell <../users-manual/04-shell-path-and-scripts.md>, Ch. 6 — man <../users-manual/06-help-man-and-documentation-map.md> | Ch. 2 — ctx <../developer-guide/02-the-context-object.md> (httpFetch), Ch. 6 <../developer-guide/06-extending-bin-coreutils.md> (preamble) |\n\nCONTRACT BUMP CHECKLIST\n\nWhen you change BARE_OS_CTX_API_VERSION, /proc JSON schemas, *BARE_OS_PROTOCOL_ / package semver, BARE_OS_POSIX_PROFILE_VERSION**, or kernel capability words, update every dependent artifact in one pass:\n\n1. README.md <../README.md> and DOCUMENTATION.md <../DOCUMENTATION.md> if the version string or install story changes.\n2. Handbook <../handbook/README.md> chapters touched by behavior (especially ch.34, 6, 9).\n3. Users manual <../users-manual/README.md> and Developer guide <../developer-guide/README.md> for operator or extension workflows.\n4. docs/reference/compatibility-matrix.md <reference/compatibility-matrix.md> and any affected topic pages under docs/reference/ <reference/README.md>.\n5. Package changelogs: packages/bare-os-booter/CHANGELOG.md <../packages/bare-os-booter/CHANGELOG.md>, packages/bare-os-protocol/CHANGELOG.md <../packages/bare-os-protocol/CHANGELOG.md> when applicable.\n6. docs/schemas/ <schemas/> and docs/architecture/POSIX_DECLARED_PROFILE.md <architecture/POSIX_DECLARED_PROFILE.md> when proc, telemetry, or POSIX profiles move.\n7. kernel/etc/bare-os/syscalls.example.json <../kernel/etc/bare-os/syscalls.example.json> and the seeder mirror <../packages/bare-os-seeder/kernel/> after kernel contract edits; run node scripts/verify-kernel-seeder-parity.mjs.\n8. Regenerate docs/reference/ctx-client-helper.generated.ts via root pretest ( gen-ctx-client-helper.mjs ).\n\nROOT STUBS AND PEAR\n\n- First run: Get started <./get-started.md> · Doc map: Sitemap <./sitemap.md>.\n- Legacy monolith map: DOCUMENTATION.md <../DOCUMENTATION.md> (points here and to reference).\n- Pear channels and host env: PEAR-RUN.md <./PEAR-RUN.md>.\n- Guest Pear + App Store (in-shell author, release, install, launch): guides/guest-pear-and-appstore-workflow.md <./guides/guest-pear-and-appstore-workflow.md>.\n- Repository quick start: README.md <../README.md>.\n\nCONTRIBUTING\n\nCode and automation: scripts/README.md <../scripts/README.md>. Documentation style and verifiers: CONTRIBUTING-DOCS.md <CONTRIBUTING-DOCS.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","bare","os","readme","hub","maps","and","where","read","next"],"seeAlso":[{"name":"docs-reference-agent-os-automation-next-slices","section":7},{"name":"docs-pear-run","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","aliases":["docs","documentation","bare-os-documentation"],"listCategory":"docs"},{"name":"docs-reference-agent-os-automation-next-slices","section":7,"title":"Agent OS Automation Next Slices","synopsis":["man 7 docs-reference-agent-os-automation-next-slices","Documentation page (plain text from docs/reference/agent-os-automation-next-slices.md)"],"description":"AGENT OS AUTOMATION NEXT SLICES\n\nBARE-AGENTD INITD SERVICE\n\n- Add a long-lived bare-agentd unit with queue polling from ~/.agent/queue/.\n- Emit run reports to ~/.agent/reports/ and status snapshots to /run/bare-os/agentd.json.\n- Support wake triggers from timer drop-ins and optional IPC events.\n\nAUTONOMY POLICY FILE\n\n- Introduce ~/.agent/autonomy.json with explicit allow/deny sections:\n- shell mutation\n- network egress\n- host bridge routes\n- destructive file ops\n- Add policy-aware throttle controls (maxActionsPerHour, quiet windows, escalation mode).\n\nPROVIDER REASONING ADAPTERS\n\n- Normalize provider-specific reasoning fields into one internal event stream:\n- OpenAI-compatible deltas\n- Anthropic thinking summaries (when available)\n- local model metadata adapters\n- Keep hidden reasoning private when provider policy does not expose it.\n- Preserve reasoning_mode semantics (off, summary, trace) across adapters.\n\nHOST BRIDGE ROUTE EXPANSION\n\n- Add audited hrpc route set for:\n- desktop notifications\n- local editor/file opener\n- approved host command execution with allowlisted templates\n- snapshot/export helpers for personal drive workflows\n- Require route-level schemas and default-deny allowlists.\n\nROLLOUT CHECKPOINTS\n\n1. Ship behind config flags (show_reasoning, route toggles, autonomy policy enabled=false).\n2. Record audit logs for all bridge and mutation actions.\n3. Add simulation tests for policy-denied and policy-allowed flows.\n4. Promote to defaults only after operator feedback from staged environments.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","agent","os","automation","next","slices"],"seeAlso":[{"name":"docs-reference-architecture-data-flow","section":7},{"name":"bare-os-docs","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/agent-os-automation-next-slices.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-architecture-data-flow","section":7,"title":"Architecture: end-to-end data flow","synopsis":["man 7 docs-reference-architecture-data-flow","Documentation page (plain text from docs/reference/architecture-data-flow.md)"],"description":"ARCHITECTURE: END-TO-END DATA FLOW\n\nFormer DOCUMENTATION.md §13. Reference index → <README.md>\n\n13. END-TO-END DATA FLOW\n\nAfter replication, the booter records vfs → ctx → repl → initd → kernel_invoke (see KERNEL_CONTRACT <../architecture/KERNEL_CONTRACT.md>) before the stock start(ctx) loop opens the interactive shell unless BARE_OS_SKIP_REPL applies.\n\nSWARM DISK.OS BRIDGE (POST-INITD)\n\ncreateBareOsDiskOsBridge <../../packages/bare-os-booter/lib/bare-os-disk-os-bridge.js> is assigned to disk.os. bare_os.replication_operator_sketch includes corestoreSnapshotPackageRef (schema 1 object) pointing operators at the upstream corestore-snapshot module and the env pair BARE_OS_CORESTORE_SNAPSHOT_JSON / BARE_OS_CORESTORE_STATS_JSON used by corestoreSnapshotUxHint. Peer searchLocal aggregates path substring matches from the system Hyperdrive and every SwarmDisk.auxiliaryDrives entry (read-only mirrors under */mirror/aux), dedupes, and caps results. The system drive may ship /etc/bare-os/path-manifest.json (or BARE_OS_DISK_OS_PATH_MANIFEST) so common paths match without a full recursive list() on the primary drive; BARE_OS_DISK_OS_SEARCH_MANIFEST_ONLY skips primary listing when a complete manifest is maintained. Optional host env BARE_OS_DISK_OS_SEARCH_THROTTLE_MS (0500) yields between auxiliary drive scans. Whitelisted RPC bare_os.disk_os_hints (schema 3) exposes advisory mirrorDriveHintV2, httpDhtProxyHint, and pathSearchLocal metrics — operators only; guests do not auto-apply mirror hints. Stock ctx.bareOsHrpcRequest includes bare_os.search_local (payload.query) returning paths from disk.os.searchLocal. bare_os.replication_operator_sketch returns schema 7 JSON (seed replication status, swarmPeerCount, Hyperswarm connectionBudget, protomux operator sketch, pkgIndexSurface, corestoreSnapshotUxHint, pause/backpressure env mirrors, optional hyperblobsDedupSketch / corestoreOperatorSketch / peerPrioritySketch). bare_os.pkg_index_get reads the static drive manifest (BARE_OS_PKG_INDEX_PATH). bare_os.replication_operator_intent appends an audit row when BARE_OS_DISK_OS_OPERATOR_INTENT_RPC=1 and the booter wires auditBatch**.\n\nThe diagram above is the booter phase chain after replication (same ordering as BARE_OS_BOOTER_BOOT_STEPS in the booter source).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","architecture","data","flow","end"],"seeAlso":[{"name":"docs-reference-blind-peer-hint-recipe","section":7},{"name":"docs-reference-agent-os-automation-next-slices","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/architecture-data-flow.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-blind-peer-hint-recipe","section":7,"title":"Blind peer hint recipe (Bare OS)","synopsis":["man 7 docs-reference-blind-peer-hint-recipe","Documentation page (plain text from docs/reference/blind-peer-hint-recipe.md)"],"description":"BLIND PEER HINT RECIPE (BARE OS)\n\nUse ctx.bareOsEmitBlindPeerHint (capability word 2 — see kernel-extensions.md <./kernel-extensions.md>) after the booter has joined Hyperswarm and personal drive state is available.\n\n1. Set BARE_OS_BLIND_PEER_HINT_JSON (or the env name documented beside the capability bit) to a JSON object describing the desired pairing sketch (non-secret labels only).\n2. Invoke ctx.bareOsEmitBlindPeerHint(payload) from a trusted kernel.ext.d script or /etc/bare-os/rc.local line via execLine.\n3. Read /proc/bare_os/blind_pairing_sketch.json (when exposed) or seed RPC bare_os.capabilities adjunct fields to confirm the hint was merged into operator snapshots.\n\nCross-check upstream blind-peer <https://github.com/holepunchto/blind-peer> and blind-relay-service <https://github.com/holepunchto/blind-relay-service> for wire compatibility.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","blind","peer","hint","recipe","bare"],"seeAlso":[{"name":"docs-reference-capability-words","section":7},{"name":"docs-reference-architecture-data-flow","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/blind-peer-hint-recipe.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-capability-words","section":7,"title":"Kernel capability words (authoritative map)","synopsis":["man 7 docs-reference-capability-words","Documentation page (plain text from docs/reference/capability-words.md)"],"description":"KERNEL CAPABILITY WORDS (AUTHORITATIVE MAP)\n\nSeed RPC bare_os.capabilities, /proc/bare_os_features, and guest ctx (bareOsAdvertisedKernelCapabilityWords / bareOsSeedKernelCapabilityWords) use wire v2: eleven unsigned 32-bit masks live under one JSON object kernelCapabilityWords with semantic camelCase keys below. Numeric values and bit positions match the legacy v1 layout (top-level bits, bits2, … bits11); only the JSON shape changed.\n\n- primary — PRIMARY — BARE_OS_KERNEL_FEATURES_STOCK_WORD_PRIMARY — minKernelCapabilitiesPrimary — (core tree; not a single module)\n- extendedSeedingPlatform — EXTENDED_SEEDING_PLATFORM — BARE_OS_KERNEL_FEATURES_STOCK_WORD_EXTENDED_SEEDING_PLATFORM — requireKernelCapabilitiesExtendedSeedingPlatform — —\n- rlimitsDelegatesShell — RLIMITS_DELEGATES_SHELL — BARE_OS_KERNEL_FEATURES_STOCK_WORD_RLIMITS_DELEGATES_SHELL — requireKernelCapabilitiesRlimitsDelegatesShell — —\n- offlineNetExtensions — OFFLINE_NET_EXTENSIONS — BARE_OS_KERNEL_FEATURES_STOCK_WORD_OFFLINE_NET_EXTENSIONS — requireKernelCapabilitiesOfflineNetExtensions — —\n- hostTransportDelegates — HOST_TRANSPORT_DELEGATES — BARE_OS_KERNEL_FEATURES_STOCK_WORD_HOST_TRANSPORT_DELEGATES — requireKernelCapabilitiesHostTransportDelegates — —\n- replicationOperatorSurface — REPLICATION_OPERATOR_SURFACE — BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE — requireKernelCapabilitiesReplicationOperatorSurface — bare-os-proc-replication-operator-surface.js\n- pearCorestoreHrpc — PEAR_CORESTORE_HRPC — BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC — requireKernelCapabilitiesPearCorestoreHrpc — bare-os-proc-pear-corestore-hrpc.js\n- bareRuntimeProtoMux — BARE_RUNTIME_PROTO_MUX — BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX — requireKernelCapabilitiesBareRuntimeProtoMux — bare-os-proc-bare-runtime-proto-mux.js\n- bareModuleCryptoStaging — BARE_MODULE_CRYPTO_STAGING — BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING — requireKernelCapabilitiesBareModuleCryptoStaging — bare-os-proc-bare-module-crypto-staging.js\n- pearInspectLoggerTls — PEAR_INSPECT_LOGGER_TLS — BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS — requireKernelCapabilitiesPearInspectLoggerTls — bare-os-proc-pear-inspect-logger-tls.js\n- hypercorePackHrpcLifecycle — HYPERCORE_PACK_HRPC_LIFECYCLE — BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE — requireKernelCapabilitiesHypercorePackHrpcLifecycle — bare-os-proc-hypercore-pack-hrpc-lifecycle.js\n\nOffline LKG: boot.policy.json boolean offlineLkgRequireHypercorePackHrpcLifecycle sets host env BARE_OS_OFFLINE_LKG_REQUIRE_HYPERCORE_PACK_HRPC_LIFECYCLE=1 (strict class hints for the eleventh word).\n\nProbe env (telemetry):\n\n- BARE_OS_PROBE_ID_BARE_MODULE_CRYPTO_STAGING — ninth word\n- BARE_OS_PROBE_ID_PEAR_INSPECT_LOGGER_TLS — tenth word\n- BARE_OS_PROBE_ID_HYPERCORE_PACK_HRPC_LIFECYCLE — eleventh word\n\nProc visibility: BARE_OS_HIDE_PROC_HYPERCORE_PACK_HRPC_LIFECYCLE (0 / false / off) omits eleventh-word /proc JSON entries from directory listings, resolution, and the proc index.\n\nGuest ctx (1.22.0+): use frozen bareOsAdvertisedKernelCapabilityWords and bareOsSeedKernelCapabilityWords with the same keys as the table above (e.g. hypercorePackHrpcLifecycle for the eleventh word).\n\nCI contract: Required booter index.js substrings and kernel-feature-bits.js exports are listed in ../../packages/bare-os-protocol/lib/stock-booter-capability-contract.json <../../packages/bare-os-protocol/lib/stock-booter-capability-contract.json> (verified by scripts/verify-ctx-api-feature-bits.mjs <../../scripts/verify-ctx-api-feature-bits.mjs>).\n\nSee also kernel-capabilities-index.md <./kernel-capabilities-index.md> and ADR 001 <../../developer-guide/adr/001-kernel-feature-bits-governance.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","capability","words","kernel","authoritative","map"],"seeAlso":[{"name":"docs-reference-compatibility-matrix","section":7},{"name":"docs-reference-blind-peer-hint-recipe","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/capability-words.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-compatibility-matrix","section":7,"title":"Compatibility matrix (Bare OS)","synopsis":["man 7 docs-reference-compatibility-matrix","Documentation page (plain text from docs/reference/compatibility-matrix.md)"],"description":"COMPATIBILITY MATRIX (BARE OS)\n\nSingle place to compare protocol, booter ctx API, feature-bit document, and telemetry versions. Values below match the stock tree at release time; always read source for ground truth.\n\nON THIS PAGE\n\n- Version artifacts <#version-artifacts>\n- Holepunch runtime spine <#holepunch-runtime-spine>\n- Peer assumptions <#peer-assumptions>\n- See also <#see-also>\n\nVERSION ARTIFACTS\n\nbareOsCtxApiVersion (current stock: 1.57.0) — Defined in packages/bare-os-booter/lib/bare-os-ctx-api.js <../../packages/bare-os-booter/lib/bare-os-ctx-api.js>. This is the semver string for the documented ctx contract; bump it when stable guest-visible behavior changes. 1.57.0 adds ctx.bareOsTlsConnect and IRC host policy for /bin/irc. 1.56.0 adds ctx.tui / ctx.sdk.\n\nBARE_OS_KERNEL_FEATURE_BITS_DOC (current stock: 17) — Exported from packages/bare-os-protocol/lib/kernel-feature-bits.js <../../packages/bare-os-protocol/lib/kernel-feature-bits.js>. It versions the feature-bit documentation and related governance; keep it aligned with developer-guide/adr/001-kernel-feature-bits-governance.md <../../developer-guide/adr/001-kernel-feature-bits-governance.md>.\n\nCapability words (wire v2) — Surfaces on bare_os.capabilities RPC and under /proc/bare_os_features. The stock tree uses a top-level kernelCapabilityWords object with eleven uint32 masks named primary, extendedSeedingPlatform, rlimitsDelegatesShell, offlineNetExtensions, hostTransportDelegates, replicationOperatorSurface, pearCorestoreHrpc, bareRuntimeProtoMux, bareModuleCryptoStaging, pearInspectLoggerTls, and hypercorePackHrpcLifecycle. Bit positions match the legacy top-level bits … bits11 fields for migration.\n\nLifecycle / telemetry NDJSON — BARE_OS_LIFECYCLE_SCHEMA_VERSION in bare-os-lifecycle-schema.js <../../packages/bare-os-booter/lib/bare-os-lifecycle-schema.js> (current stock: 10). Guest and host mirrors use this when emitting structured lifecycle lines.\n\nProtocol package — Workspace version in bare-os-protocol package.json <../../packages/bare-os-protocol/package.json>. Pair it with seeder and booter releases when you change wire behavior.\n\nPOSIX-like profile — BARE_OS_POSIX_PROFILE_VERSION (1.0.19) and BARE_OS_POSIX_PROFILE_ID (bare-os-posix-like) in bare-os-protocol/lib/bare-os-posix-profile.js <../../packages/bare-os-protocol/lib/bare-os-posix-profile.js>. Surfaced under /proc/bare_os_features as capabilitySurface.posixProfile and in /proc/bare_os/syscalls.json.\n\n/proc/bare_os/syscalls.json — Schema 11 (see also handbook ch.9 §2.3 <../../handbook/09-posix-utilities-shell-and-vfs.md#23-pseudo-proc-sys-run-dev-and-session-tmp>) adds susv4Refs tokens on opsDetail and bumps posixXsh schema to 3; schema 10 added posix_fadvise as a simulated ctx.bareOsSyscall no-op and retains clock_gettime (REALTIME / MONOTONIC sketch); earlier schema fields remain: cooperative fcntl advisory locks (optional BARE_OS_POSIX_FCNTL_BLOCKING_WAIT for F_SETLKW-shaped waits), optional BARE_OS_POSIX_SOCKET_FD_BRIDGE socket/connect (SOCK_STREAM via bareTcp, SOCK_DGRAM via bareDgram when merged) with bounded send/sendmsg/recv/recvfrom/recvmsg on bridged datagram fds (BARE_OS_POSIX_DGRAM_RECVQ_MAX, BARE_OS_POSIX_DGRAM_RECV_BLOCK_MS_MAX), socketMsgSurface schema 5 (sendmsg/recvmsg partial on bridge; binary ancillary ENOTSUP; optional logicalScmRightsOnSend when BARE_OS_POSIX_SOCKET_SCM_RIGHTS; recvmsg controllen 0), and retains socket-family probes plus posixXsh. Earlier schemas added fdModel, signalModel, opsDetail, errnoHints, and posixProfile. The stock booter caches the JSON text until vfs.bareOsClearWarmReadCaches() / ctx.bareOsInvalidateWarmReadCaches() (same invalidation path as /bin warm cache; boot/init.js and lib/init/ batch puts also invalidate). Example payload: kernel/etc/bare-os/syscalls.example.json <../../kernel/etc/bare-os/syscalls.example.json>; JSON Schema: docs/schemas/bare-os-syscalls.schema.json <../schemas/bare-os-syscalls.schema.json>.\n\n/proc/bare_os/process_table.json — Schema 10 (see fdModel.processTableSchema inside syscalls.json and handbook ch.9 §2.3 <../../handbook/09-posix-utilities-shell-and-vfs.md#23-pseudo-proc-sys-run-dev-and-session-tmp>); documents logical jobs, PGID/SID-style fields, initd binding, signal routing, and optional per-row accounting (threads, *cpuMs, I/O stubs, replicationHint** on failed net-related initd units).\n\nBoot policy pins — kernel/etc/bare-os/boot.policy.example.json <../../kernel/etc/bare-os/boot.policy.example.json> shows extensionSignerPinsV3, extensionSignerPinsV4, and kernelExtensionHashPins for kernel.ext.d governance, plus semver gates (requireCtxApiMin, requireBooterSemver, requireProtocolPackageMin, …). Keep this file aligned with docs/schemas/boot.policy.schema.json <../schemas/boot.policy.schema.json> when adding fields.\n\nPEER ASSUMPTIONS\n\n- Seeder must answer bare_os.capabilities with kernelCapabilityWords (wire v2, kernelCapabilityWireVersion: 2) when using a current bare-os-protocol build. BARE_OS_SEED_CAP_STRICT requires that object and full stock coverage per semantic key.\n- Offline LKG booters skip the swarm peer wait when BARE_OS_OFFLINE_LKG_BOOT=1 and BARE_OS_LKG_SYSTEM_KEY_HEX is set; the system drive must already contain /boot/init.js in Corestore.\n- Pear host — Couple pear-runtime / pear-runtime-updater with this trees bare-os-protocol and bareOsCtxApiVersion (see PEAR-RUN.md <../PEAR-RUN.md>); the stock bare-module-manifest.json does not list pear-runtime because it is not an npm-resolvable guest bundle—hosts wire it via imports and BARE_OS_PEAR_RUNTIME_VERSION when needed.\n\nHOLEPUNCH RUNTIME SPINE\n\nThe release checklist now emits docs/audit/holepunch-runtime-compat.json from\nscripts/report-holepunch-runtime-compat.mjs to compare booter dependency ranges\nagainst local mirror versions for:\n\n- bare-runtime\n- bare-module\n- bare-fs\n- bare-net\n- hypercore\n- corestore\n- hyperdrive\n- hyperdht\n- hyperswarm\n- pear\n- pear-runtime\n\nStock workspace pins after the 2026-08 Holepunch sync (see packages/bare-os-booter/package.json <../../packages/bare-os-booter/package.json>): compact-encoding@^3.3.0, protomux@^3.11.0, corestore@^7.12.0, hyperdrive@^13.3.3, hypercore-crypto@^3.7.0, bare-fetch@^3.2.0, bare-tls@^3.1.8, bare-https@^3.0.0, bare-ws@^3.0.0, bare-subprocess@^6.1.0, bare-signals@^5.0.0, bare-os@^3.9.3, bare-fs@^4.8.0. The hoisted root node_modules/compact-encoding may remain 2.x for dependents that have not moved; workspace packages nest 3.3.0. Minimum host bare remains >=1.28.0; bare-runtime package pin is ^1.31.0.\n\nThis complements clone drift checks and lockfile drift so maintainers can quickly\nspot version skew between local Holepunch clones and OS host/runtime constraints.\n\nSEE ALSO\n\n- node-vs-bare-host-matrix.md <./node-vs-bare-host-matrix.md>\n- kernel-extensions.md <./kernel-extensions.md>\n- kernel-capabilities-index.md <./kernel-capabilities-index.md>\n- Handbook ch.11 — Kernel program <../../handbook/11-kernel-program-and-research.md>","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","compatibility","matrix","bare"],"seeAlso":[{"name":"docs-reference-conformance-dashboard","section":7},{"name":"docs-reference-capability-words","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/compatibility-matrix.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-conformance-dashboard","section":7,"title":"POSIX / utilities conformance (dashboard sketch)","synopsis":["man 7 docs-reference-conformance-dashboard","Documentation page (plain text from docs/reference/conformance-dashboard.md)"],"description":"POSIX / UTILITIES CONFORMANCE (DASHBOARD SKETCH)\n\nMaps /bin commands and flags to supported, partial, and unsupported against Issue 7 expectations. Authoritative behavior remains in packages/bare-os-coreutils/src/* and handbook ch.9 <../../handbook/09-posix-utilities-shell-and-vfs.md>.\n\nStructured matrix (subsystem × status): conformance-matrix.md <conformance-matrix.md>.\n\nCI today: coreutils tests and man coverage (scripts/verify-man-coverage.mjs). This dashboard will grow as golden fixtures land (shell test corpus).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","conformance","dashboard","posix","utilities","sketch"],"seeAlso":[{"name":"docs-reference-conformance-matrix","section":7},{"name":"docs-reference-compatibility-matrix","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/conformance-dashboard.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-conformance-matrix","section":7,"title":"POSIX / SUSv4 conformance matrix (Bare OS)","synopsis":["man 7 docs-reference-conformance-matrix","Documentation page (plain text from docs/reference/conformance-matrix.md)"],"description":"POSIX / SUSV4 CONFORMANCE MATRIX (BARE OS)\n\nNormative reference: IEEE Std 1003.1-2017 (POSIX.1) / Issue 7 Base Specifications — Open Group index <https://pubs.opengroup.org/onlinepubs/9699919799/>.\n\nBare OS targets maximal POSIX-like behavior on the Bare runtime with a Hyperdrive-backed VFS and JavaScript userland. Full certification is not claimed; this matrix records intent, implementation surface, and known deltas.\n\nLEGEND\n\n| Status | Meaning |\n| Full | Matches Issue 7 for the scoped flags/operands we document |\n| Partial | Subset or deliberate bound (env caps, quotas, GNU gaps) |\n| Synthetic | Emulated semantics (e.g. df, process table) |\n| N/A | Not applicable on this architecture (e.g. host fork) |\n\nSHELL AND LANGUAGE (XCU SH)\n\n| Area | Status | Notes |\n| Pipelines, lists, redirects | Partial | See environment appendix §14a <environment-and-posix-appendix.md#14a-posix-userland-appendix-implemented-vs-gaps> |\n| Parameter expansion | Partial | BARE_OS_SHELL_PARAM_EXPANSION, BARE_OS_SHELL_PARAM_EXPANSION_V2, BARE_OS_SHELL_PARAM_EXPANSION_V3 (:${?+} forms) |\n| Command substitution | Partial | Bounded $(…) when BARE_OS_SHELL_CMDSUBST |\n| Job control | Partial | jobs / fg / wait, background &; synthetic sid / pgid on job rows |\n| Full POSIX sh grammar | N/A | No subshells; not a standalone POSIX sh binary |\n\nFILE SYSTEM / VFS (XBD PATH + XSH-LIKE OPS)\n\n| Area | Status | Notes |\n| Path resolution | Partial | Symlinks, modes, personal vs system drive; see vfs.js |\n| chmod, umask, ownership display | Partial | chown/chgrp on personal metadata |\n| mkfifo | Partial | IPC under /run/bare-os/ipc/ (see man pages) |\n| mount / umount | Partial | Hyperdrive-backed mounts via HDMS labels under /mnt (not host kernel mounts); optional persist snapshot at /etc/bare-os/mounts.json after mount changes |\n| sync / durability | Synthetic | Documented no-op or policy-bound flush |\n\nUTILITIES (XCU)\n\n| Bucket | Status | Source of truth |\n| Tier-1 /bin corpus | Partial → Full (per command) | packages/bare-os-coreutils/src/*, man JSON |\n| awk / sed | Partial | Not byte-identical to GNU on all inputs |\n| find, xargs, test | Partial | Caps via env (BARE_OS_FIND_EXEC_MAX, etc.) |\n\nPROCESS / SIGNALS (XSH)\n\n| Area | Status | Notes |\n| Real host PIDs | N/A | Synthetic table in /proc-style JSON |\n| kill / wait semantics | Partial | Synthetic kill and ps target Bare OS virtual pids; tied to shell/runtime delegates |\n\nNETWORKING (XNS SUBSET)\n\n| Area | Status | Notes |\n| Sockets as POSIX BSD | Partial | Delegates / fetch policy where used |\n| P2P swarm | Synthetic | Hyperswarm + Protomux; not POSIX sockets |\n\nOBSERVABILITY (SYNTHETIC /PROC)\n\n| Area | Status | Notes |\n| Live metrics JSON | Synthetic | /proc/bare_os/metrics_live.json (coalesced; BARE_OS_PROC_POLL_MS) |\n| OpenMetrics text | Synthetic | /proc/bare_os/metrics.prom — bare_os_kernel_counters{name=\"…\"} from the in-process counter registry |\n| Protomux alias table | Synthetic | /proc/bare_os/protomux.json — logical→actual channel map + tail of change log |\n| Audit hash chain | Synthetic | ctx.bareOsAuditLogAppend / ctx.bareOsAuditLogAppendBatch (in-memory chain; optional persistence via host logging) |\n\nCI AND EVIDENCE\n\n- Booter + coreutils: packages/bare-os-booter/test.js, packages/bare-os-coreutils tests.\n- Shell parameter expansion (POSIX Issue 7 subset): expandWord tests including BARE_OS_SHELL_PARAM_EXPANSION_V3 (:-, :+, :?) in packages/bare-os-booter/test.js.\n- /bin/test integer primaries (-eq, -ne, -lt, …): mirrored vectors in packages/bare-os-coreutils/test/posix-test-int-compare.test.mjs.\n- Man coverage: scripts/verify-man-coverage.mjs.\n- Machine-readable syscall / proc snapshot: posix-conformance-matrix.json <posix-conformance-matrix.json> (kept in sync with getconf BARE_OS_SYSCALL_OPS via scripts/verify-compat-matrix.mjs).\n- Dashboard sketch: conformance-dashboard.md <conformance-dashboard.md>.\n\nMaintenance: When behavior changes, update this matrix, environment-and-posix-appendix.md <environment-and-posix-appendix.md>, and the relevant man page JSON.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","conformance","matrix","posix","susv4","bare"],"seeAlso":[{"name":"docs-reference-ctx-api-versioning","section":7},{"name":"docs-reference-conformance-dashboard","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/conformance-matrix.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-ctx-api-versioning","section":7,"title":"ctx API versioning policy","synopsis":["man 7 docs-reference-ctx-api-versioning","Documentation page (plain text from docs/reference/ctx-api-versioning.md)"],"description":"CTX API VERSIONING POLICY\n\nCURRENT VERSION\n\n- ctx.bareOsCtxApiVersion — semver string defined in bare-os-ctx-api.js <../../packages/bare-os-booter/lib/bare-os-ctx-api.js>.\n- BARE_OS_REQUIRE_CTX_API_MIN / BARE_OS_BOOT_ABI_STRICT — guest kernel may refuse boot if the booter is too old (see environment appendix §14 <environment-and-posix-appendix.md#14-environment-variables-complete-list>).\n\nRULES FOR CONTRIBUTORS\n\n1. Additive changes (new optional ctx methods, new env passthrough keys) — bump patch when behavior is backward compatible for existing kernels.\n2. Breaking changes (renamed methods, stricter required behavior, removed hooks) — bump minor or major per semver; update stock kernel/init.js and docs in the same change.\n3. Deprecation — document in this file and in package-bare-os-booter.md <package-bare-os-booter.md>; keep a compatibility shim for at least one release when feasible.\n4. Protocol alignment — capability words and wire formats belong in bare-os-protocol; bump BARE_OS_PROTOCOL_PACKAGE_VERSION consumers when wire or strict matrix changes.\n\nRELEASE CHECKLIST (SAME PR AS CTX EDITS)\n\n1. Edit BARE_OS_CTX_API_VERSION in bare-os-ctx-api.js <../../packages/bare-os-booter/lib/bare-os-ctx-api.js>.\n2. Update developer-guide/02-the-context-object.md <../../developer-guide/02-the-context-object.md> and bare-os-ctx.d.ts <../../packages/bare-os-booter/lib/bare-os-ctx.d.ts> for any new fields or methods.\n3. Run node scripts/gen-ctx-client-helper.mjs and refresh any consumer that vendors the emitted header.\n4. Add or extend packages/bare-os-booter/test.js (and workspace tests) for behavior that must not regress.\n5. Run root npm test so pretest (verify-ctx-api-feature-bits, verify-bare-imports, …) passes.\n\nRELATED\n\n- Kernel subsystem map <../architecture/kernel-subsystems.md>\n- Kernel capabilities index <kernel-capabilities-index.md>\n- Compatibility matrix <compatibility-matrix.md>","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","ctx","api","versioning","policy"],"seeAlso":[{"name":"docs-reference-ctx-tui","section":7},{"name":"docs-reference-conformance-matrix","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/ctx-api-versioning.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-ctx-tui","section":7,"title":"ctx.tui / ctx.sdk API","synopsis":["man 7 docs-reference-ctx-tui","Documentation page (plain text from docs/reference/ctx-tui.md)"],"description":"CTX.TUI / CTX.SDK API\n\nFirst-party guest TUI attached by bare-os-booter after createKernelReplSession. Framework semver is ctx.tui.version (independent of bareOsCtxApiVersion). Added on ctx API 1.56.0. Disable with BARE_OS_TUI=0.\n\nNarrative: developer-guide ch.20 <../../developer-guide/20-tui-and-sdk.md>. Inspector: man tui.\n\nSESSION\n\n| Member | Role |\n| isTTY(opts?) | False when bareOsStdoutCaptured or streams are not TTY |\n| size(opts?) | { width, height } from stdout / COLUMNS / LINES |\n| run(model, opts?) | TEA loop; owns Fish + alt-screen until quit |\n| create(model, opts?) | Program with .run() / .send() / .quit() |\n| send(msg) | Enqueue on the active program |\n| acquire / release / withSession | Refcounted Fish suspend + raw mode |\n| screen.enter / leave | Alt-screen, cursor, mouse, paste |\n\nrun / create options: input, output, isTTY, width, height, fps (0 = sync), altScreen, mouse, bracketedPaste, theme, signal, allowDumb, buffer: 'line' | 'cell'.\n\nStock TTY utilities dhttop, swarmmap, routeview, holepunch-view, swarmtop, chat, edit, nano, baretop, btop, irc, and summon call ctx.tui.run when this API is attached (edit/nano/baretop/irc/summon use buffer: 'cell'). agent setup uses ctx.tui.form. BARE_OS_TUI=0 keeps the pre-SDK loops. irc: irc-client.md <irc-client.md>. summon: summon.md <summon.md>.\n\nbuffer: 'cell' paints a fixed-size cell grid and blits overlays without inserting lines (modals / dropdowns). Models may implement overlay(size) or overlays(size). Program: setOverlay(id, spec) / clearOverlay(id). Helpers: ctx.tui.buffer.create/fill/blit/plain.\n\nSTYLE, THEME, INPUT\n\n- style() — chainable Lip Gloss helper (bold, foreground, padding, border, render). Helpers: style.width, height, truncate, stripAnsi, joinHorizontal, joinVertical, borders, position.\n- theme() — { name, noColor, depth, tokens } from BARE_OS_THEME / NO_COLOR / BARE_OS_COLOR_DEPTH.\n- key.matches(msg, ...chords), key.binding({ keys, help })\n- decode(bytes), createDecoder() — keys, SGR mouse, bracketed paste\n\nCOMMANDS\n\nquit, tick(ms, fn), every(ms, fn), batch(...), sequence(...), suspend(fn).\n\nWIDGETS\n\nspinner, textinput, textarea, autocomplete, checkbox, radio, select, list, table, viewport, paginator, progress, help, focus, stopwatch, timer, filepicker (VFS or filepicker.mock(tree)), tabs, modal, dialog, tree, statusbar, split, toast, markdown.\n\nEach is { create(opts) } except markdown.render(src).\n\nONE-SHOTS AND FORMS\n\n- confirm({ title, body, ok, cancel }) → Promise<boolean>\n- prompt({ label, placeholder, echoMode }) → Promise<string|null>\n- choose({ title, options }) → Promise<unknown>\n- form.create({ title, fields }) / form.run(form) / form.text / textarea / number / select / radio / confirm\n\nForm keys: tab / shift-tab, enter advances (or submits on last text field), ctrl+s submits, ctrl+c cancels.\n\nCTX.SDK\n\nsdk.tui is ctx.tui. Also: tty, theme (apply), env, vfs, proc.read, ipc, app.\n\nNOT THIS API\n\nctx.bare.bareTui* drive bundles remain experimental host/Holepunch packages. Guest apps should use ctx.tui.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","ctx","tui","sdk","api"],"seeAlso":[{"name":"docs-reference-environment-and-posix-appendix","section":7},{"name":"docs-reference-ctx-api-versioning","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/ctx-tui.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-environment-and-posix-appendix","section":7,"title":"Environment variables and POSIX appendix","synopsis":["man 7 docs-reference-environment-and-posix-appendix","Documentation page (plain text from docs/reference/environment-and-posix-appendix.md)"],"description":"ENVIRONMENT VARIABLES AND POSIX APPENDIX\n\nFormer DOCUMENTATION.md §14, §14a. Reference index → <README.md>\n\nON THIS PAGE\n\n- §14 — Environment variables (complete list) <#14-environment-variables-complete-list>\n- §14a — POSIX userland appendix <#14a-posix-userland-appendix-implemented-vs-gaps>\n\n14. ENVIRONMENT VARIABLES (COMPLETE LIST)\n\nHost package policy: Booter and seeder lib//.js sources are checked by scripts/verify-pear-no-static-node-import.mjs <../../scripts/verify-pear-no-static-node-import.mjs> so Pear/Bare bundles avoid node: specifiers (except the allowlisted Node-only boot manifest verifier). Prefer bare-modules in guest paths and#host-`* aliases on the host; see Developer guide ch.1 — Host source policy <../../developer-guide/01-two-runtimes-host-vs-image.md#host-source-policy-bare-first>.\n\nThe list below is one bullet per variable in the form name — component — meaning. Values shown as defaults are what the stock tree assumes when the variable is unset; always confirm in source when debugging a forked image.\n\n- BARE_OS_KERNEL_ROOT — Seeder — Absolute path to kernel tree (default: repo/kernel)\n- BARE_OS_SEED_CORESTORE_SNAPSHOT_TAG — Seeder — Optional tag string; when set (and BARE_OS_SEED_SNAPSHOT_HINTS_JSON is unset), the seeder builds snapshotHintsJson for bare_os.snapshot_hints so the booter can surface it under /proc/bare_os/snapshot_hints.json after RPC.\n- BARE_OS_SEED_SNAPSHOT_HINTS_JSON — Seeder — Optional JSON string; when set, passed verbatim as snapshotHintsJson (wins over BARE_OS_SEED_CORESTORE_SNAPSHOT_TAG).\n- BARE_OS_CORESTORE_SNAPSHOT_WORKFLOW_JSON — Booter — Optional JSON merged into /proc/bare_os/snapshot_hints.json and ctx.bareOsReadSnapshotHintsJson() as corestoreSnapshotWorkflow (keep shape aligned with seeder snapshot_hints / corestore-snapshot tooling; parse errors set corestoreSnapshotWorkflowParseError).\n- BARE_OS_CORESTORE_SNAPSHOT_JSON — Booter / host — Optional non-secret JSON merged into disk.os bare_os.replication_snapshot (schema 2) alongside seeder snapshot hints / manifest slice / chain for operator visibility (bounded payload; same family as corestore-snapshot-style tooling).\n- BARE_OS_HRPC_ALLOWLIST_JSON — Booter — Optional allowlist for stock ctx.bareOsHrpcRequest: JSON array of service.method strings or object with route keys and truthy values; wildcards *\"\" / kernel.*** supported. Invalid JSON fails the first hrpc call. Schema: docs/schemas/bare-os-hrpc-allowlist.schema.json <../schemas/bare-os-hrpc-allowlist.schema.json>.\n- BARE_OS_BLIND_RELAY_TOPOLOGY_JSON — Booter — Optional JSON summarized under /proc/bare_os/swarm.json → blindRelayTopology (PII-free operator sketch).\n- BARE_OS_MIRROR_DRIVE_COMPOSITION_HINT_JSON — Booter — Optional JSON summarized under /proc/bare_os/replication → mirrorDriveCompositionHint (mirror-drivestyle aux composition hints).\n- BARE_OS_MIRROR_DRIVE_OVERLAY_JSON — Booter — Optional non-secret JSON merged into bareOsMirrorDriveExportSketch (schema 2) and /proc/bare_os/union export hints for read-through mirror-drive overlay composition (writes to overlay paths remain policy-defined / often EROFS-shaped).\n- BARE_OS_REPLICATION_PLAN_JSON — Booter — Optional JSON merged into /proc/bare_os/replication as guestReplicationPlan (operator warm-replication hints).\n- BARE_OS_PEAR_DOCTOR_STATE_JSON / BARE_OS_PEAR_INSPECT_PROBE / BARE_OS_PEAR_DOCTOR_MODULE — Booter — Feed /proc/bare_os_pear_doctor_state.json (schema 2) for pear-runtime / pear-inspect parity (pearDoctorModuleHint, pearInspectProbe, runtimeVersion via BARE_OS_PEAR_RUNTIME_VERSION).\n- BARE_OS_HOST_DATA — paths — Base directory for host state (default ~/.bare-os; Corestore dirs live under corestore/)\n- Also: host CLI --datadir / --data-dir / --datadir= (seeder and booter) sets the same value\n- BARE_OS_HOST_BOOTER_LOG — Booter (host, pre-session) — stderr (default): emit host diagnostics via structured helpers (bare-os-host-booter-log, console.warn-compatible). ndjson: append JSON lines (type\":\"booterHostWarn\" / booterHostInfo, code, message, optional detail, ts) to BARE_OS_HOST_BOOTER_LOG_PATH or default ~/.bare-os/var/log/booter-host.ndjson. 0 / false / off / silent: suppress host booter warnings entirely. Guest session UX lines belong on ctx.console (kernel / REPL), not the host NDJSON sink — see handbook ch.4.\n- BARE_OS_HOST_BOOTER_LOG_PATH — Booter — Absolute path override when BARE_OS_HOST_BOOTER_LOG=ndjson (parent dirs created best-effort).\n- BARE_OS_HOST_BOOTER_LOG_STDERR — Booter — When 1 with ndjson, also mirror warnings to stderr after the file append.\n- BARE_OS_SEED_STORE — Seeder — Corestore directory (default: ~/.bare-os/corestore/seeder)\n- BARE_OS_SEED_LOG_LEVEL — Seeder — Host logger level: debug, info, warn, error (default info).\n- BARE_OS_SEED_LOG_FORMAT — Seeder — Set ndjson or json for one JSON object per stdout line (ts, level, msg, …); default human-readable lines.\n- BARE_OS_BOOT_STORE — Booter — Corestore for boot side (default: ~/.bare-os/corestore/booter)\n- BARE_OS_BOOT_TIMEOUT_MS — Booter — Wall-clock budget for peer wait + network boot (default 60000)\n- BARE_OS_MBR_READ_TIMEOUT_MS — Booter (host) — Max wait in milliseconds for replicated block 0 / MBR before boot fails (≥ 3000, hard cap 600000); when unset, defaults to 60000 unless adaptive mode adjusts it.\n- BARE_OS_MBR_READ_TIMEOUT_ADAPTIVE — Booter — When 1 / true and BARE_OS_MBR_READ_TIMEOUT_MS is unset, adjusts the MBR wait from live peer count (sparse swarms get a longer budget; multi-peer sessions may use a shorter one).\n- BARE_OS_MBR_READ_REBROADCAST_MS — Booter — While waiting for block 0 / MBR, re-send read requests to all peers on this interval (default 5000, clamp 200060000 ms). Set 0 / false to disable periodic rebroadcast (initial and per-peer-join sends only).\n- BARE_OS_DISK_OS_SEARCH_THROTTLE_MS — Booter / disk.os — Optional 0500 ms delay between scanning the system Hyperdrive and each auxiliaryDrives entry during peer searchLocal fan-out (default 0); softens load on large offline mirrors.\n- BARE_OS_DISK_OS_PATH_MANIFEST — Booter / disk.os — Absolute path on the system Hyperdrive to a JSON manifest (default /etc/bare-os/path-manifest.json). The file may be { \"schema\": 1, \"paths\": [\"/bin/sh\", …] } or a bare JSON array of path strings. Substring matches from the manifest are merged before the primary drives recursive listing. Set to empty to disable manifest acceleration (full listing only on the primary drive).\n- BARE_OS_DISK_OS_SEARCH_MANIFEST_ONLY — Booter — When 1 / true, searchLocal skips the primary drives recursive list() scan and uses only manifest hits on that drive (auxiliary drives are still listed). For tests and operator-tuned images with a complete manifest.\n- BARE_OS_DISK_OS_MANIFEST_CACHE_MS — Booter — Cache parsed manifest paths per system drive (default 30000, max 3600000). Reduces drive.get churn when peers issue many searches.\n- BARE_OS_PATH_CAPABILITY_ENFORCE_READ — Booter / VFS — When 1 / true, reads on the personal drive under BARE_OS_PATH_CAPABILITY_PREFIX require a valid user.bareos.cap_v1 entry in PATH.bare_xattr.json (see path-capability.envelope.example.json and ctx.bareOsVerifyPathCapabilityEnvelope). Sidecar and ACL files are exempt from the check.\n- BARE_OS_PATH_CAPABILITY_PREFIX — Booter — Logical path prefix for the capability gate (default /home/). Only applies with BARE_OS_PATH_CAPABILITY_ENFORCE_READ.\n- BARE_OS_PATH_CAPABILITY_TRUSTED_PUBKEYS_HEX — Booter — Comma- or whitespace-separated ed25519 public keys (hex) allowed as ctx.bareOsVerifyPathCapabilityEnvelopeTrusted issuers for signed envelopes (see /bin/pathcap-verify --trusted).\n- BARE_OS_SAVEVAULT_PRESNAPSHOT_HINT — Booter — When 1 / true, saveVaultToDrive emits process.emit('bare-os:vault-pre-save-snapshot-hint', …) so the host may snapshot the personal Corestore namespace before sealing vault blobs.\n- BARE_OS_POSIX_SOCKET_CONNECT_TIMEOUT_MS — Booter — Optional SOCK_STREAM bridge connect wall timeout in milliseconds (default 0 = unlimited). On expiry the socket is destroyed and connect returns ETIMEDOUT.\n- BARE_OS_WASM_KERNEL_CTX_API_PEEK — Booter / guest env — With BARE_OS_WASM_KERNEL_SYSCALL, adds Wasm import env.bare_os_ctx_api_version_peek writing ctx.bareOsCtxApiVersion NUL-terminated (bounded).\n- BARE_OS_PKG_SWARM_TOPIC_HEX — Guest — Optional 64-hex topic class hint for pkg-swarm-index operator documentation (not wired to Hyperswarm by the stock utility).\n- BARE_OS_PKG_INDEX_PATH — Booter / disk.os — Absolute path on the system Hyperdrive for bare_os.pkg_index_get (default /etc/bare-os/pkg-index.json); see kernel/etc/bare-os/pkg-index.example.json.\n- BARE_OS_RC_PROPOSAL_MULTISIG_STRICT — Stock kernel — When 1 / true, before rc.d validate */etc/bare-os/rc.proposals/enabled/.json against /etc/bare-os/pear.multisig.json (signaturesFrom ⊆ signers, distinct count ≥ quorum). Emits audit rows rc.proposal.multisig_ via ctx.bareOsAuditLogAppend* when present.\n- BARE_OS_NO_SPLASH — Booter — If 1, skip TTY splash (plain logs / non-TTY behavior unchanged)\n- BARE_OS_LOCAL_SEED — paths — Overrides local seed path helper (defaultLocalSeedCorestorePath); booter does not local-boot\n- BARE_OS_SKIP_REPL — Booter — If 1, readline returns null — non-interactive exit\n- BARE_OS_SKIP_QVAC — Booter — If 1, disable in-process @qvac/sdk (local agent LLM). /bin/agent should use backend: rest or agent --config. Standalone pack: --skip-qvac / same env stubs @qvac/sdk out of the binary. Also auto-enabled when packing hosts without @qvac/llm-llamacpp prebuilds (e.g. win32-arm64 — QVAC Windows is x64-only). Packed booters lazy-load QVAC on first agent use (not at process start) to avoid CodeRange OOM; SDK is bound via lib/bare-os-qvac-sdk-bind.mjs (package-name import('@qvac/sdk') does not resolve under bare:/app.bundle/).\n- BARE_OS_SSH_LISTEN_PORT — Booter / bare-openssh — When set on the host, copied into vfs.env; overrides Port from /etc/ssh/sshd_config after parse. Use 0 for an OS-chosen ephemeral port (tests). Parsed as a non-negative integer; invalid values are ignored.\n- BARE_OS_SSH_BIND_ALL — Booter / bare-openssh — When 1 or true on the host, copied into vfs.env; if ListenAddress in config is 127.0.0.1, the server binds 0.0.0.0 instead (operator override; default stock config stays on loopback).\n- BARE_OS_FISH — Booter — Set 0 to disable the Fish-style raw TTY line editor (createFishReadLine); a simpler stream reader is used instead. Any other value (including unset) leaves Fish mode enabled when stdin is a TTY. See Shell completion and REPL editor <shell-completion-and-repl-editor.md>.\n- BARE_OS_TUI — Booter — Set 0 / false to omit ctx.tui / ctx.sdk (guest TUI framework). Any other value (including unset) attaches the first-party TUI SDK after the REPL session exists. Runtime cap tuiSdk.\n- BARE_OS_IRC — Booter — Set 0 / false to disable IRC dials (ctx.bareOsTlsConnect / /bin/irc). Runtime cap ircTls.\n- BARE_OS_DISCORD — Booter — Set 0 / false to skip loading vendored bare-discord-js onto ctx.bare.discordJS.\n- DISCORD_TOKEN — Booter / guest — Discord bot token. When set on the host, copied into the session. Prefer a .env file over the shell history.\n- DISCORD_ENV_FILE / BARE_OS_DISCORD_ENV_FILE — Booter / guest — Path to a .env file with DISCORD_TOKEN=. On the host this may be a host filesystem path (the booter reads it and injects DISCORD_TOKEN). In the guest it is a VFS path (--env / ~/.discord.env).\n- DISCORD_GUILD_ID — Guest — Optional guild id so /bin/discord-bot registers /ping immediately.\n- BARE_OS_IRC_ALLOWLIST — Booter — Host globs for IRC/TLS. Unset defaults to irc.libera.chat and *irc..libera.chat**.\n- BARE_OS_IRC_DENYLIST — Booter — Host globs that always block IRC/TLS.\n- BARE_OS_TUI_NO_ALTSCREEN — Guest TUI — When set to any non-empty value, full-screen sessions clear the viewport (2J) instead of entering the alternate screen (?1049h), matching BARE_EDIT_NO_ALTSCREEN.\n- BARE_OS_TUI_DEBUG — Guest TUI — When 1, reserved for decoder/render diagnostics (no extra screen paint).\n- BARE_OS_COMPACT_MENU — Booter — When 1 / true, tab completion cycles inline (no multi-line candidate menu) even on wide terminals. Narrow TTYs (stdout.columns < 44) use the same compact behavior without this flag.\n- BARE_OS_BOOT_TRACE — Stock kernel (bundled /boot/init.js from kernel/lib/init/init-main.js <../../kernel/lib/init/init-main.js> via scripts/bundle-kernel-init.mjs <../../scripts/bundle-kernel-init.mjs>) — If 1 or true, log each boot phase duration on stderr as [boot] phase: Nms; if json / ndjson, log structured phase lines (bootTraceSchemaVersion 2, step / stage / phase) per completed stage; ndjson adds sessionId / ts. When json or ndjson, guest os-release, motd, and banner text also emit extra stderr lines with type\":\"bootOutput\" and a capped textPreview (the live session output still uses ctx.console.log only).\n- BARE_OS_BOOT_SAFE_MODE — Stock kernel — 1 / true skips rc.d, kernel.ext.d, onboot after boot policy merge.\n- BARE_OS_BOOT_TRANSACTION_JOURNAL — Stock kernel — 1, true, or ndjson appends phase records to /run/bare-os/boot-transaction.ndjson when ctx.vfs supports it.\n- BARE_OS_BOOT_CHECKPOINT — Stock kernel — 1 / true writes /run/bare-os/boot-checkpoint.json after each completed boot phase.\n- BARE_OS_BOOT_DRY_RUN — Stock kernel — 1 / true parses boot snippets but skips trusted execLine and kernel.ext.d scripts.\n- BARE_OS_BOOT_POLICY_PATH — Stock kernel — Optional /etc/bare-os/… path for the primary boot.policy.json (default /etc/bare-os/boot.policy.json).\n- BARE_OS_BOOT_ROLLBACK_APPLY — Stock kernel — 1 merges skip phases from /run/bare-os/boot-rollback.marker when ctx.vfs can read it.\n- BARE_OS_BOOT_BUNDLE_DIGEST_HEX — Operator — Lowercase hex compared to policy requireBootBundleSha256Hex when set.\n- BARE_OS_REQUIRE_CTX_API_MIN — Stock kernel — Minimum ctx.bareOsCtxApiVersion semver; enforced when BARE_OS_BOOT_ABI_STRICT or strict boot policy applies.\n- BARE_OS_BOOT_ABI_STRICT — Stock kernel — 1 exits boot when ABI minimum is not met.\n- BARE_OS_LOADER_AUDIT — Booter — 1 appends kernel extension loads to /run/bare-os/loader-audit.ndjson.\n- BARE_OS_DELEGATE_TRACE — Session hint — Logged in /proc/bare_os/kernel_program.json hooks.delegateTrace when 1.\n- BARE_OS_DNS_PROFILE — Operator — Coarse DNS stance (system, offline-cache, …) surfaced under operatorSketches.dnsProfile in /proc/bare_os/kernel_program.json.\n- BARE_OS_KERNEL_PROGRAM_PROC_JSON — Booter / /proc/bare_os/kernel_program.json — Optional JSON merged into the kernel program proc snapshot (non-secret).\n- BARE_OS_GIANT_PHASE_PROGRAM_JSON — Legacy alias for BARE_OS_KERNEL_PROGRAM_PROC_JSON (same merge semantics).\n- MANWIDTH — /bin/man — If set, wrap width for manual text (clamped 40200); overrides TTY auto width. When unset, uses TTY columns when stdout is a terminal, else COLUMNS if set, else default 72.\n- NO_COLOR — /bin/man — If set, disable ANSI bold for section headings on a TTY\n\nHost → session passthrough (booter copies into shellEnv when the host sets a non-empty value; canonical list in packages/bare-os-booter/index.js <../../packages/bare-os-booter/index.js>): BARE_OS_PIPELINE_MAX_STAGES, BARE_OS_PIPELINE_MAX_BYTES, BARE_OS_PIPELINE_MAX_LINES, BARE_OS_PIPELINE_ABS_MAX_BYTES, BARE_OS_PIPELINE_ABS_MAX_LINES, BARE_OS_SHELL_STREAMING, BARE_OS_SHELL_STREAMING_MULT, BARE_OS_STREAMING_MULTIPLIER, BARE_OS_SHELL_PIPEFAIL, BARE_OS_SHELL_PIPESTATUS, BARE_OS_SHELL_READ_BUILTIN, BARE_OS_SHELL_READ_MAX_BYTES, BARE_OS_SHELL_ERREXIT, BARE_OS_SHELL_NOUNSET, BARE_OS_SHELL_POSIX_MODE, BARE_OS_SHELL_GROUPING, BARE_OS_SHELL_DOUBLE_BRACKET, BARE_OS_SHELL_CMDSUBST, BARE_OS_SHELL_CMDSUBST_MAX_BYTES, BARE_OS_SHELL_PARAM_EXPANSION, BARE_OS_SHELL_PARAM_EXPANSION_V2, BARE_OS_SHELL_PARAM_EXPANSION_V3, BARE_OS_SHELL_UNTIL, BARE_OS_SH_EXTENDED_PROFILE, BARE_OS_ENV_DASH_S, BARE_OS_VFS_WATCH_PSEUDO, BARE_OS_VFS_WATCH_SWARM, BARE_OS_SHELL_LOCAL_DECLARE, BARE_OS_DIAGNOSTICS_SUBSCRIBE, BARE_OS_AUTOPASS_INVITE_URL, BARE_OS_BIN_WORKER_OFFLOAD, BARE_OS_BIN_WORKER_ALLOW, BARE_OS_BIN_WORKER_CPU_MS_MAX, BARE_OS_BIN_WORKER_WASM_MS_MAX, BARE_OS_BOOT_PROFILE, BARE_OS_ONBOOT, BARE_OS_BOOT_STRICT, BARE_OS_RC_D_SKIP, BARE_OS_BOOT_MINIMAL, BARE_OS_BOOT_SKIP, BARE_OS_BOOT_SAFE_MODE, BARE_OS_BOOT_TRANSACTION_JOURNAL, BARE_OS_BOOT_CHECKPOINT, BARE_OS_BOOT_DRY_RUN, BARE_OS_BOOT_POLICY_PATH, BARE_OS_BOOT_ROLLBACK_APPLY, BARE_OS_BOOT_BUNDLE_DIGEST_HEX, BARE_OS_REQUIRE_CTX_API_MIN, BARE_OS_BOOT_ABI_STRICT, BARE_OS_LOADER_AUDIT, BARE_OS_DELEGATE_TRACE, BARE_OS_DNS_PROFILE, BARE_OS_BOOT_TRACE, BARE_OS_KERNEL_PROGRAM_PROC_JSON, BARE_OS_GIANT_PHASE_PROGRAM_JSON, BARE_OS_KERNEL_SELFTEST, BARE_OS_SELFTEST_FORMAT, BARE_OS_AUDIT, BARE_OS_AUDIT_JSON, BARE_OS_AUDIT_REDACT, BARE_OS_IMAGE_DIGEST, BARE_OS_EXEC_MAX_DEPTH, BARE_OS_EXEC_LINE_BUDGET_MS, BARE_OS_TIMER_BUDGET_MS, BARE_OS_IPC_MAX_BYTES, BARE_OS_IPC_CHANNEL_MAX_BYTES, BARE_OS_IPC_RPC_TOKEN, BARE_OS_IPC_FANOUT, BARE_OS_IPC_JSON_MAX_BYTES, BARE_OS_IPC_MAX_CHANNELS, BARE_OS_POSIX_MQ_MAX_MSGS, BARE_OS_POSIX_MQ_MSG_BYTES, BARE_OS_IPC_NAMESPACE, BARE_OS_VFS_WATCH, BARE_OS_VFS_MAX_OPEN, BARE_OS_VFS_UNION_PREFIXES, BARE_OS_VFS_UNION_WRITE_DENY, BARE_OS_VFS_HYPERBLOBS_DEDUP, BARE_OS_VFS_BIN_CACHE, BARE_OS_VFS_BIN_CACHE_BLAKE2B, BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_APPEND, BARE_OS_VFS_ENFORCE_ACL, BARE_OS_VFS_BIN_INDEX_BUILD, BARE_OS_VFS_SYSTEM_IMAGE_WRITE, BARE_OS_BOOT_ALLOWLIST, BARE_OS_BOOT_MANIFEST, BARE_OS_BOOT_MANIFEST_SIGN, BARE_OS_BOOT_MANIFEST_PUBKEY_HEX, BARE_OS_BOOT_POLICY, BARE_OS_BOOT_POLICY_STRICT, BARE_OS_LAZY_PERSONAL_DRIVE, BARE_OS_SYSTEM_REVISION_ID, BARE_OS_SYSTEM_REVISION_PENDING, BARE_OS_SYSTEM_SLOT, BARE_OS_DELEGATE_ALLOW, BARE_OS_DELEGATE_MAX_PER_MIN, BARE_OS_DELEGATE_MAX_CONCURRENT, BARE_OS_DELEGATE_GIT_MAX_PER_MIN, BARE_OS_DELEGATE_CURL_MAX_PER_MIN, BARE_OS_DELEGATE_WGET_MAX_PER_MIN, BARE_OS_DELEGATE_SYSTEMCTL_MAX_PER_MIN, BARE_OS_DELEGATE_GIT_MAX_CONCURRENT, BARE_OS_DELEGATE_CURL_MAX_CONCURRENT, BARE_OS_DELEGATE_WGET_MAX_CONCURRENT, BARE_OS_DELEGATE_SYSTEMCTL_MAX_CONCURRENT, BARE_OS_DELEGATE_AUDIT_ONLY, BARE_OS_DNS_ALLOWLIST, BARE_OS_KERNEL_HOT_RELOAD, BARE_OS_KERNEL_EXT_D_HOT_RELOAD, BARE_OS_KERNEL_EXT_GRAPH, BARE_OS_KERNEL_EXT_RESOLUTION_JSON_ALWAYS, BARE_OS_SANDBOX_SCRIPT, BARE_OS_SANDBOX_WORKER, BARE_OS_INITD_MAX_PARALLEL, BARE_OS_INITD_JOURNAL_MAX_LINES, BARE_OS_URANDOM_CRYPTO, BARE_OS_TELEMETRY_NDJSON, BARE_OS_TELEMETRY_OTEL_JSONL, BARE_OS_TELEMETRY_OTEL, BARE_OS_PROC_POLL_MS, BARE_OS_TIMER_EVERY_MS_MONOTONIC, BARE_OS_TRACE_ID, BARE_OS_SEED_RPC_HANDSHAKE, BARE_OS_SEED_CAP_STRICT, BARE_OS_SEED_CAP_FAIL, BARE_OS_OFFLINE_LKG_BOOT, BARE_OS_LKG_SYSTEM_KEY_HEX, BARE_OS_HOST_STORAGE_JSON, BARE_OS_BOOT_POLICY_DENY_EXEC_LINE_BUILTINS, BARE_OS_BOOT_POLICY_ALLOWED_CTX_METHODS, BARE_OS_SUBPROCESS_BRIDGE_JOBS_JSON, BARE_OS_IPC_AUDIT, BARE_OS_HTTP_ALLOWLIST, BARE_OS_HTTP_DENYLIST, BARE_OS_TLS_PIN_SHA256, BARE_OS_BARE_MODULES, BARE_OS_BARE_DRIVE_BUNDLES, BARE_OS_PEAR_CHANNEL, BARE_OS_PEAR_RELEASE, PEAR_CHANNEL, BARE_OS_FIND_EXEC_MAX, BARE_OS_XARGS_MAX_PROCS, BARE_OS_YES_MAX_LINES, BARE_OS_SHUF_MAX_LINES, BARE_OS_SPLIT_MAX_FILES, BARE_OS_SSH_BIND_ALL, BARE_OS_SSH_LISTEN_PORT, BARE_OS_NPROC, BARE_OS_BLIND_BOOTSTRAP_URL, BARE_OS_BLIND_BOOTSTRAP_JSON, BARE_OS_MIRROR_READ_KEY, BARE_OS_PEER_FIREWALL_E2E_JSON, BARE_OS_PEAR_SECURE_ENCLAVE_JSON, BARE_OS_ACCOUNT_KEY_ROTATION_STATE_JSON, BARE_OS_PEAR_TRUST_JSON, BARE_OS_HOST_BUNDLE_EVALUATE, BARE_OS_WASM_KERNEL, BARE_OS_WASM_KERNEL_SYSCALL, BARE_OS_WASM_KERNEL_MONOTONIC_MS, BARE_OS_WASM_KERNEL_HOSTNAME_IMPORT, TERM, COLORTERM. (Many additional operator JSON pointers and version pins are also copied from the same loop; see source.)\n\nBooter default session (host left these empty): the stock booter assigns BARE_OS_SHELL_STREAMING=1, BARE_OS_SHELL_STREAMING_MULT=2, BARE_OS_PIPELINE_MAX_BYTES=536870912, BARE_OS_PIPELINE_MAX_LINES=2000000, BARE_OS_INITD_MAX_PARALLEL=4 (parallel starts per DAG level), BARE_OS_SHELL_CMDSUBST=1, BARE_OS_VFS_BIN_CACHE=1, and BARE_OS_TELEMETRY_NDJSON=/var/log/bare-os/telemetry.ndjson. Exec audit sinks (BARE_OS_AUDIT, BARE_OS_AUDIT_JSON, …) remain off unless the host sets them. Override any key from the host before boot.\n\n- BARE_OS_VFS_UNION_PREFIXES — Booter / VFS — Comma-separated logical path prefixes where readFile may union system + overlay sources.\n- BARE_OS_VFS_UNION_WRITE_DENY — Booter / VFS — When 1 / true, block writeFile / unlink on paths under union read prefixes (read-only union overlay).\n- BARE_OS_IPC_CHANNEL_MAX_BYTES — Booter / IPC — Optional JSON map {\"fifoName\": maxBytes} (or legacy comma form) capping buffered bytes per FIFO name under /run/bare-os/ipc/.\n- BARE_OS_IPC_MAX_CHANNELS — Booter / IPC — Cap distinct FIFO channel keys (default 4096 when unset); host may set a lower or higher bound via passthrough. Exceeding the quota makes mkfifo fail with bare-os ipc: channel quota exceeded. Telemetry appears under ipcTelemetry.telemetry in /proc/bare_os/metrics_live.json.\n- BARE_OS_PIPELINE_ABS_MAX_BYTES — Shell / booter — Upper bound on simulated pipeline byte capture after the streaming multiplier is applied (default 536870912 = 512MiB). Works with BARE_OS_PIPELINE_MAX_BYTES and BARE_OS_SHELL_STREAMING / BARE_OS_SHELL_STREAMING_MULT.\n- BARE_OS_PIPELINE_ABS_MAX_LINES — Shell / booter — Upper bound on simulated pipeline line capture after the multiplier (default 2000000).\n- BARE_OS_POSIX_MQ_MAX_MSGS — Booter / IPC — Default maxmsg for POSIX mq_open when the caller omits attrs (subject to internal ceilings); optional host passthrough.\n- BARE_OS_POSIX_MQ_MSG_BYTES — Booter / IPC — Default per-message maxBytes for mq_open when attrs are omitted.\n- BARE_OS_VFS_MAX_OPEN — Booter — When set on the host (positive integer), guest /proc/bare_os/rlimits.json maps RLIMIT_NOFILE cur and max to that value (advisory mirror for scripts; not a hard kernel ulimit).\n- BARE_OS_VFS_BIN_CACHE — VFS — When 1 / true, LRU read cache for /bin; invalidated on vfs.watch when enabled. Stock booter seeds 1 when unset (set 0 / false on the host to disable).\n- BARE_OS_VFS_BIN_CACHE_BLAKE2B — VFS — When 1 / true with BARE_OS_VFS_BIN_CACHE, /bin cache entries are keyed by BLAKE2b content digests (via bare-crypto) for deduplication across paths within the LRU budget.\n- BARE_OS_VFS_ENFORCE_ACL — VFS — When 1 / true, PATH.bare_acl sidecars (same text as getfacl / setfacl) can deny reads/writes on the personal drive. Lines user::, user:UID:, group::, group:GID:, other::, and mask:: are interpreted with Linux-style mask capping named users, named groups, and group::; user:: and other:: are not masked. Object owner/group default to UID / GID; override with BARE_OS_ACL_OBJECT_UID / BARE_OS_ACL_OBJECT_GID when inode metadata differs. See bare-os-vfs-acl-enforce.js.\n- BARE_OS_SHELL_LOOP_CONTROL — Shell — When 1 / true, break and continue apply inside while / for (bounded by BARE_OS_SHELL_LOOP_MAX).\n- BARE_OS_SHELL_UNTIL — Shell — When 1 / true, enables until …; do …; done (condition inverted vs while; same BARE_OS_SHELL_LOOP_MAX cap).\n- BARE_OS_SH_EXTENDED_PROFILE — Shell / booter — Convenience gate that enables the extended shell bundle in stock sessions (BARE_OS_SHELL_LOOP_CONTROL=1, BARE_OS_SHELL_UNTIL=1, BARE_OS_SHELL_POSIX_MODE=1 when those keys are otherwise unset). Stock booter now defaults this to 1 when unset; set 0/false to opt out.\n- BARE_OS_VFS_SYSTEM_RO_ALIAS — VFS — Absolute path prefix that maps read-only to the system Hyperdrive (listed in /proc/mounts).\n- BARE_OS_VFS_LIB_BARE_CACHE — VFS — When 1 / true, extend warm read-through cache to hot /lib/bare paths (same LRU style as /bin when bin cache is on). When a batch write updates only lib/bare/bare-module-manifest.json, the booter evicts /lib/bare/bundles/<ctxKey>.js entries for bundle:true manifest rows instead of flushing the whole warm cache; ctx.bareOsInvalidateWarmReadCachesFromBareManifestJson applies the same parse rules.\n- BARE_OS_VFS_WARM_BATCH_SELECTIVE — Booter — When 1 / true, ctx.bareOsVfsBatchWrite evicts individual /bin/ and /lib/bare/ warm-cache paths touched in the batch via vfs.bareOsEvictWarmReadLogicalPath instead of bareOsClearWarmReadCaches, except boot/init.js / *lib/init/** puts still force a full clear for safety.\n- BARE_OS_BOOT_PERF_DETAIL — Stock kernel + booter — Per-stage boot-perf.json (schema 2) with optional bare-hrtime monotonic samples; when 1 on the host, the booter also logs bare_stdlib_merge_ns (wall hrtime delta for maybeMergeBareFromDrive) via structured host booter logging. Under pear://, loadBareModuleManifest does not perform disk I/O for the host import list (embedded bare-module-manifest.data.mjs); the bare_stdlib_merge_ns line still reflects drive bundle merge work only.\n- BARE_OS_BOOT_BARE_STDLIB_RESOLUTION_MS — Booter — Milliseconds for drive ctx.bare merge + optional host resolve before the guest kernel starts; copied into session env by the stock booter.\n- BARE_OS_BOOT_BUDGET_MS_BARE_STDLIB — Operator — Optional budget (ms) for the value above; when set and exceeded, the stock kernel logs bootBudgetBareStdlibExceeded, sets BARE_OS_BOOT_BUDGET_STDLIB_*, and records bareStdlibBudgetWarning in /run/bare-os/boot-perf.json (schema 3 when stdlib telemetry fields are present).\n- BARE_OS_BOOT_BUDGET_STRICT — Stock kernel — With BARE_OS_BOOT_POLICY_STRICT, calls bareOsRequestBooterExit(1) after a cold or bare-stdlib budget violation (after appending bootBudgetViolation metadata to boot-transaction.ndjson when journaling is enabled).\n- BARE_OS_KERNEL_EXT_GRAPH — Stock kernel — Write /run/bare-os/kernel-ext-graph.json after kernel.ext.d ordering.\n- BARE_OS_KERNEL_EXT_RESOLUTION_JSON_ALWAYS — Stock kernel — When 1 / true, /run/bare-os/kernel-ext-resolution.json is written even when resolution succeeds without diagnostics (default omits the file on clean success). Schema 3 adds providesInvalidSemver, providesVersionConflicts, provideNameToOwner, and richer ordering metadata.\n- BARE_OS_INIT_DEFER_KERNEL_EXT_GRAPH — Stock kernel — When 1 / true, skip writing /run/bare-os/kernel-ext-graph.json during early init (defer to a later boot phase when BARE_OS_KERNEL_EXT_GRAPH is on); reduces init bundle work on tight BARE_OS_BOOT_BUDGET_MS_COLD budgets.\n- BARE_OS_BIN_HYPERBEE_INDEX — Booter — When 1 / true, writes /.bare-os/index/bin-hyperbee-hint.json (schema 2, namesDigest) and /.bare-os/indexes/hyperbee_status.json; optional hyperbee import probe; refreshed when bareOsVfsBatchWrite touches *bin/** (same as manifest).\n- BARE_OS_HYPERBEE_GUEST_INDEX — Booter / extensions — When 1 / true, ctx.bareOsHyperbeeGuestHint() documents optional hyperbee2-style guest indexes for P2P metadata (host/extension must supply the module; see ADR-hyperbee-guest-index.md <../architecture/ADR-hyperbee-guest-index.md>).\n- BARE_OS_PEAR_INSPECT — Booter — When 1 / true, emit bare-os:pear-inspect-snapshot on the host process after ctx is wired (non-secret snapshot only).\n- BARE_OS_VFS_BIN_INDEX_BUILD — Booter — When 1 / true, writes /.bare-os/index/bin-manifest.json (schema 2, namesDigest) on the personal drive for large images (see bare-os-bin-index.js); bareOsVfsBatchWrite on *bin/** rebuilds it when enabled.\n- BARE_OS_VFS_SYSTEM_IMAGE_WRITE — Booter / VFS — When 1 / true, allow vfs.writeFile on the system Hyperdrive for paths that are normally read-only (*/bin/, /lib/, …) so hosts can mutate the image or run warm-cache tests; default remains guest read-only. ACLs and /.bare* guest rules still apply.\n- BARE_OS_BOOT_MANIFEST — Stock kernel — Enable digest check of /etc/bare-os/boot.manifest.json.\n- BARE_OS_BOOT_MANIFEST_SIGN — Stock kernel + booter — When 1, require valid Ed25519 signature file /etc/bare-os/boot.manifest.sig (see BARE_OS_BOOT_MANIFEST_PUBKEY_HEX).\n- BARE_OS_BOOT_MANIFEST_PUBKEY_HEX — Booter / kernel — 64 hex chars — public key for signed boot manifest verification.\n- BARE_OS_BOOT_POLICY — Stock kernel — When 1 / true, merge skipPhases / denyBootPhases from /etc/bare-os/boot.policy.json; optional minKernelCapabilitiesPrimary / requireSeedCaps; v2 maxExecLineDepth, denyEnvKeys, requireProcNodes; v3 requireKernelCapabilitiesExtendedSeedingPlatform, requireKernelCapabilitiesRlimitsDelegatesShell, allowedPearIpcChannels, denyVfsPrefixes, maxInitdRestartsPerUnit; v4 requireKernelCapabilitiesOfflineNetExtensions, denyExecLineBuiltins, allowedCtxMethods; v5 requireKernelCapabilitiesHostTransportDelegates + requireInitJsSha256; v6 requireKernelCapabilitiesReplicationOperatorSurface; v7 requireKernelCapabilitiesPearCorestoreHrpc; v8 requireKernelCapabilitiesBareRuntimeProtoMux; v9 requireKernelCapabilitiesBareModuleCryptoStaging; v10 requireKernelCapabilitiesPearInspectLoggerTls; v11 requireKernelCapabilitiesHypercorePackHrpcLifecycle with stricter extension signer pin policy (see kernel/etc/bare-os/boot.policy.example.json and docs/schemas/boot.policy.schema.json <../schemas/boot.policy.schema.json>).\n- BARE_OS_BOOT_POLICY_STRICT — Stock kernel — When 1, abort boot if minKernelCapabilitiesPrimary or requireSeedCaps checks fail.\n- BARE_OS_BOOT_POLICY_DENY_VFS — Stock kernel / boot.policy v3 — Comma-separated absolute prefixes; VFS denies read/write/stat/readdir/chdir/unlink under them (set from denyVfsPrefixes).\n- BARE_OS_BOOT_POLICY_PEAR_IPC_CHANNELS — Stock kernel / boot.policy v3 — Comma-separated Pear IPC channel allowlist for ctx.bareOsPearIpcEmit (from allowedPearIpcChannels).\n- BARE_OS_LAZY_PERSONAL_DRIVE — Booter — When 1, defer mounting the personal Hyperdrive until session setup (after kernel bytes are loaded).\n- BARE_OS_SYSTEM_REVISION_ID / BARE_OS_SYSTEM_REVISION_PENDING / BARE_OS_SYSTEM_SLOT — Booter — Pear-style hints exposed as ctx.bareOsSystemRevision.\n- BARE_OS_PEAR_UPDATER_MODULE — Booter — ESM specifier (path, file:, pear:, http(s):) for Pear updater state; ctx.bareOsPearUpdaterDelegate() (async) dynamic-imports it and invokes getPearUpdaterState, bareOsPearUpdaterSnapshot, or default. Bare/Pear delegates must avoid static node: imports — follow the same policy as booter sources; see docs/examples/pear-updater-delegate-minimal.mjs <../../docs/examples/pear-updater-delegate-minimal.mjs>.\n- BARE_OS_PEAR_UPDATER_DELEGATE — Booter — Alias for BARE_OS_PEAR_UPDATER_MODULE.\n- BARE_OS_PEAR_UPDATER_SNAPSHOT_JSON — Booter — Non-secret JSON string; when set, ctx.bareOsPearUpdaterDelegate() returns { ok: true, snapshot: … } without loading a module (operator / CI).\n- BARE_OS_PEAR_UPDATER_AUDIT — Booter / host — When 1, operators may append Pear updater delegate results to the host audit NDJSON chain (see ctx.bareOsPearUpdaterDelegate() integrationHints and handbook ch.7).\n- BARE_OS_ZERO_TRUST_PROFILE — Boot/runtime posture selector — strict / security enables fail-closed defaults (peer allowlist required, delegate allowlist default deny, strict signer trust path checks).\n- BARE_OS_PEER_ALLOW_ALL — Peer admission override — when 1 / true and allowlist is empty, permit allow-all peer joins (break-glass compat mode).\n- BARE_OS_DELEGATE_ALLOW — Host delegates — Comma list git, curl, wget, systemctl — under strict zero-trust profile, empty means deny-all until explicitly granted.\n- BARE_OS_PATH_CAPABILITY_REQUIRE_TRUSTED_SIGNER — Path capability enforcement — when 1 / true, read capability envelopes must be signed by a trusted issuer listed in BARE_OS_PATH_CAPABILITY_TRUSTED_PUBKEYS_HEX.\n- BARE_OS_DNS_ALLOWLIST — curl / wget — Optional host allowlist for http(s) URLs (*.example.com suffix form supported).\n- BARE_OS_KERNEL_HOT_RELOAD — Booter — Dev: allow ctx.bareOsRequestKernelReload() to re-read /boot/init.js.\n- BARE_OS_KERNEL_EXT_D_HOT_RELOAD — Stock kernel — When 1 / true, after boot the kernel exposes ctx.bareOsReloadKernelExtDropinsSafe(), which re-scans /etc/bare-os/kernel.ext.d and runs only extension scripts not yet recorded (append-only; does not unload). When ctx.vfs.writeFile exists, each reload appends kernelExtReloadSchemaVersion lines to /run/bare-os/kernel-ext-reload.ndjson.\n- BARE_OS_VFS_HYPERBLOBS_DEDUP — Booter / features proc — When 1 / true, surfaces an operator hint under /proc/bare_os/features that host mirror / hyperblob pipelines may use content-defined chunking; the guest VFS does not enable hyperblobs by itself.\n- BARE_OS_HYPERBLOBS_STATS_JSON — Booter / disk.os — Optional non-secret JSON parsed into replication_operator_sketch.hyperblobsDedupSketch (merged into disk.os replication_operator_sketch response schema 8).\n- BARE_OS_CORESTORE_STATS_JSON — Booter / disk.os — Optional non-secret JSON parsed into replication_operator_sketch.corestoreOperatorSketch (bare_os.replication_operator_sketch response schema 8). Use for namespace counts, open-core tallies, or other non-secret Corestore operator metrics (no keys or paths to private material). Together with BARE_OS_CORESTORE_SNAPSHOT_JSON, corestoreSnapshotUxHint (schema 4) surfaces non-secret merge counts for rollback UX.\n- BARE_OS_HYPERDHT_ADDRESS_JSON — Booter / disk.os — Optional non-secret JSON parsed into replication_operator_sketch.hyperdhtAddressSketch (same RPC; align with hyperdht-address operator payloads — keep bounded and non-secret).\n- BARE_OS_BLIND_PEER_TOPOLOGY_V3_JSON — Booter / disk.os — Optional non-secret JSON parsed into replication_operator_sketch.blindTopologySketchV3 (schema 3 sketch object).\n- BARE_OS_SUBPROCESS_BRIDGE_META_JSON — Booter / process_table.json — Optional JSON (host-injected); the stock snapshot exposes a non-secret summary under subprocessBridgeMeta (schema 7 process_table) for bare-process / bare-subprocess bridge alignment.\n- BARE_OS_PROCESS_ACCOUNTING — Booter / process_table.json — When 1 / true, per-row accounting fields use accountingSource: guest-accounting-env (reserved for future Bare-threadbacked counters; defaults remain zero until wired).\n- BARE_OS_XARGS_MAX_PROCS — /bin/xargs — Raises the cap for -P parallelism (still bounded by a hard maximum of 32 and by delegate concurrency when runBinCommand uses workers); default effective cap 8 when unset.\n- BARE_OS_PEER_FIREWALL_E2E_JSON — Booter / replication proc — Optional operator JSON merged into /proc/bare_os/replication for peer-firewall end-to-end checks (invalid JSON yields an error object in proc).\n- BARE_OS_REPLICATION_PLAN_JSON — Booter — Optional JSON string merged into /proc/bare_os/replication as guestReplicationPlan (operator warm-replication / mirror-drive style hints; guest does not execute the plan).\n- BARE_OS_REPLICATION_SYNC_PARALLEL_MAX — Booter — Integer hint surfaced under /proc/bare_os/sync_window.json as parallelismHint for overlapping replication window fetches (stock default 4 when unset).\n- BARE_OS_REPLICATION_PEER_PRIORITY_JSON — Booter / disk.os — Optional non-secret JSON parsed into bare_os.replication_operator_sketch peerPrioritySketch. Operator-shaped ordering hints for peer keys (for example orderedPeerKeyHex) — P2P-local policy only; no central coordinator.\n- BARE_OS_PEER_ALLOWLIST_HEX — Booter / Hyperswarm — Optional comma- or space-separated allowlist of peer public keys (hex) for admission; empty list with BARE_OS_PEER_ALLOWLIST_STRICT denies all peers.\n- BARE_OS_PEER_ALLOWLIST_STRICT — Booter — When 1 / true, BARE_OS_PEER_ALLOWLIST_HEX must be non-empty or no remote peers are admitted (fail-closed operator posture).\n- BARE_OS_PEER_DENYLIST_HEX — Booter — Comma- or space-separated hex public keys; ctx.bareOsEvaluatePeerAdmission returns deny with reason: peer_denylist before allowlist evaluation (denylist wins).\n- BARE_OS_PEER_REQUIRE_CAPS_JSON — Booter — JSON array of strings; when set, meta.caps passed to ctx.bareOsEvaluatePeerAdmission must include every token or the verdict is deny (reason: peer_missing_cap).\n- BARE_OS_PEER_ADMISSION_AUDIT_NDJSON — Booter — When 1 / true, each admission evaluation may append a peer_admission row to the event bus (and session stdout when BARE_OS_EVENT_BUS_NDJSON is on). Payloads use a 16-hex prefix of the peer key only.\n- BARE_OS_PEER_ADMISSION_AUDIT_RATE_MS — Booter — Non-negative integer; minimum milliseconds between peer_admission audit rows per peer prefix (or a shared unknown bucket when the key is empty). 0 or unset means no throttling.\n- BARE_OS_DHT_ADDRESS_CLASS_ALLOWLIST — Booter / /proc/bare_os/swarm.json — Comma-separated tokens (ipv4, ipv6, relay, …) surfaced under dhtAddressClassAllowlist for operator alignment with hyperdht-address discovery classes. ctx.bareOsEvaluatePeerAdmission(peerKeyHex, { dhtAddressClass, caps }) and BareOsSwarmConnectionManager.shouldAttemptPeer(peerKey, { dhtAddressClass }) deny when the hint is present and not listed; the stock Hyperswarm join path does not supply a class — custom hosts wire meta.dhtAddressClass from their stack.\n- BARE_OS_NET_TRANSPORT_STATS_JSON — Booter — Optional JSON merged into /proc/bare_os/net_summary.json as transport (Holepunch UDX / punch outcomes when the host supplies a sketch).\n- BARE_OS_UDX_TUNING_JSON — Booter — Optional JSON surfaced under /proc/bare_os/net_summary.json as udxTuning (operator-only; guest does not apply kernel tuning).\n- BARE_OS_HYPERSWARM_TUNING_JSON — Booter — Optional JSON surfaced under /proc/bare_os/net_summary.json as hyperswarmTuning (operator-only).\n- BARE_OS_SWARM_MAX_PEERS — Booter — Integer passed to Hyperswarm maxPeers when set (non-empty positive integer string).\n- BARE_OS_SWARM_MAX_CLIENT_CONNECTIONS — Booter — Cap inbound client connections (Hyperswarm maxClientConnections).\n- BARE_OS_SWARM_MAX_SERVER_CONNECTIONS — Booter — Cap outbound server connections (Hyperswarm maxServerConnections).\n- BARE_OS_SWARM_MAX_PARALLEL — Booter — Integer passed to Hyperswarm maxParallel when set. Effective values echo under /proc/bare_os/swarm connectionBudget and disk.os replication_operator_sketch (schema 8).\n- HYPERSWARM_BOOTSTRAP — Booter / seeder / host — Comma-separated DHT bootstrap nodes (for example 127.0.0.1:49737,127.0.0.1:49738) used by Hyperswarm. Prefer dedicated values for testnets and clear it for normal/public swarms so local lab topology does not leak into production discovery.\n- BARE_OS_SWARM_ATTEMPT_BURST_PER_SEC — Booter — Optional positive integer; caps connection attempt accounting in the swarm policy engine (rolling 1s window; increments when consumeReconnectBudget runs). shouldAttemptPeer returns false when the burst is exhausted.\n- BARE_OS_PEAR_SECURE_ENCLAVE_JSON — Booter / security posture — Non-secret JSON pointer for optional Pear secure-enclave key storage hints; treat as opaque unless host policy attests hardware backing (see vault threat model <../security/vault-threat-model.md>).\n- BARE_OS_ACCOUNT_KEY_ROTATION_STATE_JSON — Booter / security posture — Non-secret JSON for signing continuity across overlapping trust windows during account key rotation (not private keys).\n- BARE_OS_VAULT_MULTISIG_CONTINUITY_JSON — Booter / /proc/bare_os/hyper_multisig_trust_pointer.json — Optional operator JSON merged as vaultMultisigContinuity when the proc builder uses schema 2 (pointer-only multisig continuity sketch; no secret keys).\n- BARE_OS_VAULT_MULTISIG_CONTINUITY_AUDIT_NDJSON — Booter — When 1 / true, successful applyLoginKeys / unlockIdentity may append a vault.multisig_continuity_login_sketch row via ctx.bareOsAuditLogAppendBatch (public-key hex prefix only).\n- BARE_OS_BLIND_RELAY_AUDIT_NDJSON — Booter / security_posture.json — When 1 / true, blindRelayAudit.armed is set so operators can route blind-relay admission sketches to host NDJSON sinks; proc JSON still omits peer keys.\n- BARE_OS_TIMER_EVERY_MS_MONOTONIC — bare-cron / timers — When 1 / true, EveryMs= timer units may use monotonic scheduling where supported.\n- BARE_OS_TRACE_ID — Booter / telemetry — Optional correlation id mirrored into telemetry NDJSON lines when set.\n- BARE_OS_IPC_NAMESPACE — VFS / mkfifo / initd — Prefix simulated FIFO keys as <ns>__<name> while logical paths stay /run/bare-os/ipc/<name>.\n- BARE_OS_SANDBOX_SCRIPT — ctx.bareOsSandboxRunScript — Set 0 / false to disable sandbox script helper.\n- BARE_OS_SANDBOX_WORKER — Booter — When 1, defers bareOsSandboxRunScript on a fresh microtask (async boundary); not a separate thread or isolate.\n- BARE_OS_INITD_MAX_PARALLEL — bare-initd — Max concurrent unit starts per DAG level (integer ≥ 1; stock booter seeds 4 when unset; boot policy initdAdmission.maxParallel may still clamp).\n- BARE_OS_INITD_DISABLED — bare-initd — Host-only (read from globalThis.process.env, not guest vfs.env). Comma- or whitespace-separated initd unit names merged into the disabled set alongside ~/.config/bare-os/initd/disabled.txt. Used in packages/bare-os-booter/test.js to skip bare-openssh under Node ( bare-ssh2 needs Bare require.addon).\n- BARE_OS_INITD_JOURNAL_MAX_LINES — bare-initd / unit journals — Cap lines retained per unit NDJSON journal under /run/bare-os/unit-journal/.\n- BARE_OS_TELEMETRY_NDJSON — Booter — Absolute or ~/… path in the guest VFS: append capped NDJSON telemetry records (telemetrySchemaVersion / lifecycleSchemaVersion follow stock BARE_OS_LIFECYCLE_SCHEMA_VERSION, currently 10 in the tree; ts, …) mirroring structured boot/kernel events. String fields are passed through a best-effort redactor (long hex, Bearer …, sk-… shapes) before append; do not rely on it for classified payloads. Stock booter seeds /var/log/bare-os/telemetry.ndjson when unset; set 0 / false on the host to disable the sink (empty path disables mirrorBareOsTelemetryNdjson).\n- BARE_OS_TELEMETRY_OTEL_JSONL — Booter / var-log — Guest VFS path for OTLP-inspired JSON lines (var-log mirrors).\n- BARE_OS_TELEMETRY_OTEL — Booter — When 1 / true and BARE_OS_TELEMETRY_OTEL_JSONL is unset or 0, the booter sets the OTel JSONL path to /var/log/bare-os/otel.jsonl.\n- BARE_OS_PROC_POLL_MS — VFS — Coalescing interval for /proc/bare_os/metrics_live.json and poll cadence for related pseudo metrics reads (25060000).\n- BARE_OS_SHELL_PARAM_EXPANSION — Shell — When 1, enable ${VAR:-word} and ${VAR#prefix} in expandWord.\n- BARE_OS_SHELL_PARAM_EXPANSION_V2 — Shell — With param expansion on, enable ${VAR:=word}, *${VAR##/} / ${VAR#/}, ${VAR%%suffix} / ${VAR%suffix}* (bounded patterns).\n- BARE_OS_SHELL_PARAM_EXPANSION_V3 — Shell — With param expansion on, enable ${VAR:?word} and ${VAR:+word} (POSIX-style error/alternate-value forms within documented bounds). Covered by expandWord param expansion v3 in packages/bare-os-booter/test.js. Also enables ${VAR:offset}, ${VAR:offset:length}, and ${VAR//pattern/repl} (regex replace-all).\n- BARE_OS_SHELL_INDIRECT_EXPANSION — Shell — When 1 / true, ${!NAME} expands NAME then uses that value as another variable name (minimal indirect expansion).\n- ${#NAME} (parameter length) — Implemented in expandWord / expandParamBracedInner without a separate env flag.\n- BARE_OS_GLOBIGNORECASE / BARE_OS_NOCASEGLOB — Shell globs — When 1 / true, pathnameExpandShellWord compares glob patterns case-insensitively against directory entry names.\n- BARE_OS_GLOBSTAR — Shell globs — When 1 / true / on, ` recursively matches nested directories in pathnameExpandShellWord (bounded by BARE_OS_GLOBSTAR_MAX_DEPTH**`).\n- BARE_OS_GLOBSTAR_MAX_DEPTH — Shell globs — Max recursion depth for globstar traversal (default 16).\n- BARE_OS_SH_SCRIPT_LINE — /bin/sh — Guest env set during sh script execution (best-effort source line marker; sh frontend only).\n- BARE_OS_SHELL_EXPANSION_TRACE — Shell — When 1 / true, append structured expansion stage rows to ctx.shellExpansionTrace (debug-only hook; off by default).\n- BARE_OS_SHELL_EXPANSION_MAX_BYTES — Shell — Caps total expansion output bytes per expanded word and command substitution (default 262144, max 8 MiB).\n- BARE_OS_SHELL_POSIX_UNSET_ONLY_DEFAULT — Shell — When 1 / true with param expansion on, enables ${name-default} (default only when unset, distinct from ${name:-default} when unset or empty).\n- BARE_OS_ENV_DASH_S — /bin/env — When 1, enable -S / --split-string and --env-file (bounded).\n- BARE_OS_VFS_WATCH_PSEUDO — VFS — When 1, allow vfs.watch on coalesced /proc/bare_os/metrics_live.json and polled /proc/bare_os/metrics.prom (and flat */proc/bare_os_metrics_** aliases).\n- BARE_OS_VFS_WATCH_SWARM — VFS — When 1, allow bounded vfs.watch on /proc/bare_os/swarm, flat /proc/bare_os_swarm, /proc/bare_os/replication, /proc/bare_os_replication (poll interval BARE_OS_PROC_POLL_MS).\n- BARE_OS_SHELL_LOCAL_DECLARE — Shell — When 1, local and read-only declare -r apply per shell line (shallow vfs.env copy).\n- BARE_OS_DIAGNOSTICS_SUBSCRIBE — Booter — When 1, ctx.bareOsDiagnosticsSubscribe receives structured booter events.\n- BARE_OS_AUTOPASS_INVITE_URL — /proc/bare_os/hdms_hints.json — Optional operator invite URL hint (guest does not fetch it).\n- BARE_OS_BIN_WORKER_OFFLOAD — runBinCommand (Bare) — When 1 on Bare (not Node), may run awk / sed / jq in a bare-worker thread; falls back in-process on failure. With BARE_OS_BIN_WORKER_ALLOW (comma list) for future expansion (textproc:, mathproc:, mediaproc:, sysproc:, *metaproc:**, … — see kernel-extensions.md <kernel-extensions.md>).\n- BARE_OS_BIN_WORKER_CPU_MS_MAX — Booter — Optional per-invocation CPU-time budget hint (ms) for bare-worker /bin offload; surfaced in operator metrics / worker budget snapshots.\n- BARE_OS_BIN_WORKER_WASM_MS_MAX — Booter — When > 0 (capped at 3_600_000), stock bare-worker offload terminate()s the thread after that many milliseconds and returns { ok: false, reason: 'wasm_time_budget' } to runBinCommand (falls back to in-process behavior).\n- BARE_OS_EXEC_LINE_BUDGET_MS — Booter — Reject top-level execLine when cumulative wall time exceeds budget.\n- BARE_OS_TIMER_BUDGET_MS — Booter — Alias for BARE_OS_EXEC_LINE_BUDGET_MS applied when BARE_OS_EXEC_LINE_BUDGET_MS is unset (host convenience).\n- BARE_OS_STREAMING_MULTIPLIER — Shell — Alias for BARE_OS_SHELL_STREAMING_MULT when unset; pair with BARE_OS_SHELL_STREAMING=1 so pipeline byte/line caps scale.\n- BARE_OS_DELEGATE_MAX_PER_MIN — Host delegates — Global per-minute cap (sliding window) on delegate invocations.\n- BARE_OS_DELEGATE_*_MAX_PER_MIN — Host delegates — Per-kind override (GIT, CURL, WGET, SYSTEMCTL).\n- BARE_OS_DELEGATE_MAX_CONCURRENT — Host delegates — Max parallel delegate runs globally (integer 164; 0 / unset = unlimited).\n- BARE_OS_DELEGATE_*_MAX_CONCURRENT — Host delegates — Per-kind in-flight cap (GIT, CURL, WGET, SYSTEMCTL).\n- BARE_OS_DELEGATE_AUDIT_ONLY — Host delegates — With BARE_OS_AUDIT, log delegate calls and skip execution (exit 0). Delegate audit NDJSON rows include argvRawCount, argvTruncated, and sessionId when the stock booter supplies them.\n- BARE_OS_SEED_RPC_HANDSHAKE — Booter — Set 0 / false to skip the pre-MBR bare_os.capabilities RPC against the first peer.\n- BARE_OS_SEED_CAP_STRICT — Booter — When 1 / true, require kernelCapabilityWords (wire v2) on the seed bare_os.capabilities payload and each semantic keys mask to cover the stock booter BARE_OS_KERNEL_FEATURES_STOCK_WORD_* for that word (as wired in bare-os-protocol) or throw.\n- BARE_OS_SEED_CAP_FAIL — Booter — When 1 / true, rethrow after a failed handshake instead of recording the error and continuing.\n- BARE_OS_SEED_IMAGE_TIP_ID — Seeder — Optional short string (≤256 chars) echoed on bare_os.capabilities as imageTipId so booted peers can prove they match the same release tip when BARE_OS_PEER_SEED_IMAGE_TIP_ID is set on helpers.\n- BARE_OS_PEER_SYSTEM_SEED — Booter (host) — Default: enabled (unset). When enabled, a fully booted node may serve block 0 (MBR) from its boot-time copy and mirror *publisher bare_os. RPC payloads captured at boot (capabilities, replication_status, wave hints, …) to other cold booters on the same Hyperswarm topic. Set 0, false, no, or off to disable. Same trust model as replication (“who you peer with”). Eligibility requires a successful pre-MBR seed handshake, kernelCapabilityWords, primary MBR drive key match, and optional gates below. If you set an affirmative value (1 / true / yes**) and eligibility still fails, the host logs a warning with the reason.\n- BARE_OS_PEER_SEED_IMAGE_TIP_ID — Booter (host) — When non-empty, peer seeding is allowed only if bare_os.capabilities.imageTipId from the publisher at boot equals this string (set BARE_OS_SEED_IMAGE_TIP_ID on the seeder to publish the tip).\n- BARE_OS_PEER_SEED_ADVERTISE_IMAGE_TIP_ID — Booter (host) — Optional imageTipId for synthetic peer capabilities (when BARE_OS_PEER_SEED_SYNTHETIC_CAPABILITIES is on): used if BARE_OS_SEED_IMAGE_TIP_ID is unset. Align with the seeder tip so helpers pass BARE_OS_PEER_SEED_IMAGE_TIP_ID gates and cold joiners see a consistent tip.\n- BARE_OS_PEER_SEED_SYNTHETIC_CAPABILITIES — Booter (host) — Default on (unset). When on, after a successful swarm boot the booter may fill seedCapabilityInfo with stock kernelCapabilityWords if the publisher bare_os.capabilities handshake was skipped (BARE_OS_SEED_RPC_HANDSHAKE, no early peers), failed, or returned no words — maximizing peers that can mirror MBR block 0. Set 0 / false / no / off to keep the legacy strict requirement for a complete publisher capability snapshot.\n- BARE_OS_PEER_SEED_REQUIRE_REVISION_ID — Booter (host) — When non-empty, peer seeding requires BARE_OS_SYSTEM_REVISION_ID (guest env) to equal this value after boot.\n- BARE_OS_SWARM_RPC_TRY_PEERS — Booter — When 1 / true (default), bare_os.* SwarmDisk.rpc tries each connected peer in order until one succeeds; for capabilities, responses without kernelCapabilityWords are skipped. Set 0 / false to use only the first peer (legacy behavior).\n- BARE_OS_OFFLINE_LKG_BOOT — Booter — With BARE_OS_LKG_SYSTEM_KEY_HEX (64 hex chars), skip swarm peer wait and open the system Hyperdrive from the local Corestore (/boot/init.js must already be replicated).\n- BARE_OS_LKG_SYSTEM_KEY_HEX — Booter — 32-byte Hyperdrive public key hex for offline LKG boot.\n- BARE_OS_HOST_STORAGE_JSON — Booter — Optional JSON merged into /proc/bare_os/bootstrap as hostStorage (Bare bare-storage-style hints for hosts).\n- BARE_OS_BOOT_POLICY_DENY_EXEC_LINE_BUILTINS — Shell — Comma-separated shell builtin names denied at execLine (from boot.policy.json denyExecLineBuiltins).\n- BARE_OS_BOOT_POLICY_ALLOWED_CTX_METHODS — Kernels — Comma-separated ctx method names; bareOsIsCtxMethodAllowed returns false for others when this is set.\n- BARE_OS_SUBPROCESS_BRIDGE_JOBS_JSON — Booter — Optional JSON array of job records surfaced by ctx.bareOsReadSubprocessBridgeJobs() (host-wired bare-subprocess bridge only).\n- BARE_OS_IPC_AUDIT — Booter / mkfifo — When 1, append JSON ipcAuditSchemaVersion lines to audit.log for events such as mkfifo.\n- BARE_OS_URANDOM_CRYPTO — VFS /dev/urandom — Set 0 to use non-crypto PRNG for synthetic urandom (default prefers crypto where available).\n- BARE_OS_BLIND_BOOTSTRAP_URL — /proc/bare_os_bootstrap — Non-empty URL string echoed into the proc JSON for host/operator wiring (guest does not fetch it).\n- BARE_OS_BLIND_BOOTSTRAP_JSON — /proc/bare_os_bootstrap — Inline JSON string parsed and exposed under blindBootstrap (invalid JSON yields an error object in the proc file).\n- BARE_OS_MIRROR_READ_KEY — Replication proc / mirror hint — Optional mirror drive key string included in replication snapshot for operators.\n- BARE_OS_PEAR_TRUST_JSON — /proc/bare_os/pear_trust.json — Optional operator JSON merged into trust summary (guest does not verify multisig).\n- BARE_OS_HOST_BUNDLE_EVALUATE — ctx.bareOsHostCapability — When 1, advertise host bundleEvaluate for optional cross-worker / bare-bundle-evaluate paths (host-only).\n- BARE_OS_SHELL_PIPEFAIL — Shell — When 1 / true, or after set -o pipefail, a pipelines exit status is the first failing stage (bash-like); default is POSIX-like last stage status only.\n- BARE_OS_SHELL_PIPESTATUS — Shell — When 1 / true, after each pipeline the space-separated stage exit codes are written to BARE_OS_PIPESTATUS in vfs.env.\n- BARE_OS_SHELL_ERREXIT — Shell — When 1 / true, or after set -e, stop running further top-level ;-separated commands once a foreground command returns non-zero (subset of POSIX errexit; if / while / for condition lists are not affected the same way as bash — see handbook ch.9).\n- BARE_OS_SHELL_NOUNSET — Shell — When 1 / true, or after set -u / set -o nounset, expanding an unset simple parameter is an error (shell: unbound variable); see handbook ch.9.\n- BARE_OS_SHELL_READ_BUILTIN — Shell — When 1 / true, enables the optional read builtin (bounded line from ctx.shellStdin, ctx.readLine, or interactive input; IFS split; supports -r raw mode, -d DELIM single-char delimiter, and -t SECONDS timeout). Not full POSIX sh read.\n- BARE_OS_SHELL_READ_MAX_BYTES — Shell — Max raw bytes per read line when the read builtin is enabled (default 65536, hard cap 2MiB).\n- BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_APPEND — Booter — When 1 / true, register append listeners on the system Hyperdrive metadata and blob Hypercores (when present) to clear /bin / lib/bare warm read caches on replication (offline-first safety; may increase churn on busy drives).\n- BARE_OS_VFS_WARM_CACHE_PREFIX_INVALIDATE — Booter — When 1 / true, evict warm-cache entries for /bin, /etc, /lib, /usr, and configured personal prefixes when replicated core lengths increase (see metrics_live.replicationLive.warmPrefixInvalidate).\n- BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_REPLICATION — Booter — When 1 / true, call ctx.bareOsInvalidateWarmReadCaches('replication:core-length') on the same growth signal (full flush; metrics_live.warmFullInvalidateOnReplication).\n- BARE_OS_VFS_WARM_REPL_ADAPTIVE_WINDOW_MS — Booter — When set to a positive integer and full replication-driven invalidation is active, skip issuing another full warm-cache flush if the previous one was within this window (milliseconds), reducing churn on busy swarms while replication_operator_sketch / core-length signals remain visible in metrics_live. 0 or unset disables the grace window.\n- BARE_OS_VFS_WARM_REPL_ADAPTIVE_JITTER_PCT — Booter — Optional 050 integer percent jitter applied to adaptive warm-cache decisions (reduces synchronized invalidation bursts).\n- Warm-cache tuning (replication): With BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_REPLICATION, busy swarms can trigger many full flushes. Pair BARE_OS_VFS_WARM_REPL_ADAPTIVE_WINDOW_MS (for example 2502000) with a modest BARE_OS_VFS_WARM_REPL_ADAPTIVE_JITTER_PCT (for example 1015) so invalidations coalesce without starving correctness; prefer BARE_OS_VFS_WARM_CACHE_PREFIX_INVALIDATE when you only need /bin / /lib freshness. metrics_live.replicationLive.warmReplAdaptive.skippedFullFlushCount surfaces coalescing behavior.\n- BARE_OS_HOSTNAME_SET — Booter / session — When 1 / true, allows ctx.bareOsSetSessionHostname and hostname --set to mutate session HOSTNAME / COMPUTERNAME (surfaced in /proc/bare_os/security_posture.json hostnameMutation).\n- BARE_OS_SHELL_POSIX_MODE — Shell — When 1 / true, ( compound-list ) runs as a grouped list in the same session (no forked subshell); must be the full top-level statement.\n- BARE_OS_SHELL_GROUPING — Shell — When 1 / true, enables the same ( compound-list ) parsing as BARE_OS_SHELL_POSIX_MODE without turning on other POSIX-mode shell behavior. Still no forked subshell (same cooperative runtime as unparenthesized commands).\n- BARE_OS_SHELL_DOUBLE_BRACKET — Shell — When 1 / true, enables minimal [[ WORD == WORD ]] / [[ WORD != WORD ]] tests (lexer emits [[ / ]] as single words; other [[ forms remain unsupported).\n- BARE_OS_WASM_KERNEL — Booter — When 1 / true, enables ctx.bareOsWasmKernelCompile (bounded WebAssembly.compile probe) and ctx.bareOsWasmKernelInstantiate (bounded WebAssembly.instantiate with isolated Memory and env.bare_os_nop).\n- BARE_OS_WASM_KERNEL_SYSCALL — Booter — When 1 / true with BARE_OS_WASM_KERNEL, instantiate also supplies sync Wasm imports env.bare_os_pathconf(pathPtr, pathLen, namePtr, nameLen, outPtr, outCap) (delegates to ctx.bareOsPathconf, NUL-terminated result) and env.bare_os_umask_get() (from session UMASK), plus env.bare_os_wall_time_ms32() (low 32 bits of Date.now(), signed wrap). Async ctx.bareOsSyscall ops are not exposed to Wasm.\n- BARE_OS_WASM_KERNEL_MONOTONIC_MS — Booter — When 1 / true with BARE_OS_WASM_KERNEL_SYSCALL, instantiate also supplies env.bare_os_monotonic_ms() (Number, host monotonic ms helper). Still no async syscall bridge into Wasm.\n- BARE_OS_WASM_KERNEL_HOSTNAME_IMPORT — Booter — When 1 / true with BARE_OS_WASM_KERNEL_SYSCALL, instantiate also supplies env.bare_os_hostname_peek(outPtr, outCap): writes session HOSTNAME (or bare-os) NUL-terminated into Wasm memory (bounded).\n- BARE_OS_WASM_KERNEL_POSIX_PROFILE_PEEK — Booter — When 1 / true with BARE_OS_WASM_KERNEL_SYSCALL, instantiate also supplies env.bare_os_posix_profile_peek(outPtr, outCap): writes declared BARE_OS_POSIX_PROFILE_VERSION NUL-terminated into Wasm memory (bounded).\n- BARE_OS_POSIX_FD_SIM — Booter — When 1 / true, enables in-memory POSIX-like pipe simulation: ctx.bareOsPosixFdSimPipe, bareOsPosixFdSimDup, bareOsPosixFdSimRead, bareOsPosixFdSimWrite (logical FD targets under posix-pipe:; see handbook ch.9).\n- BARE_OS_POSIX_FD_SIM_MAX_BYTES — Booter — Max buffered bytes per simulated pipe pair (default 1048576, hard cap 16 MiB).\n- BARE_OS_POSIX_FCNTL_BLOCKING_WAIT — Booter — When 1 / true / yes, F_SETLKW on cooperative advisory locks waits (FIFO queue) until the lock is free or BARE_OS_FCNTL_LOCK_WAIT_MS_MAX elapses (ETIMEDOUT).\n- BARE_OS_FCNTL_LOCK_WAIT_MS_MAX — Booter — Upper bound in milliseconds for F_SETLKW blocking wait (default 30000, hard cap 300000).\n- BARE_OS_POSIX_SOCKET_FD_BRIDGE — Booter — When 1 / true, ctx.bareOsSyscall('socket') allocates a logical bridge fd; SOCK_STREAM bind/listen/accept or connect use ctx.bare.bareTcp when merged; SOCK_DGRAM uses ctx.bare.bareDgram with passive bind, optional connect after bind, recv/recvfrom/recvmsg, and send/sendmsg (when udp_bound without default peer, pass port and host/address in syscall args). Binary ancillary on sendmsg → ENOTSUP; with BARE_OS_POSIX_SOCKET_SCM_RIGHTS, JSON cmsgs with { fds: number[] } duplicates logical fds (socketMsgSurface schema 5). poll/select readiness includes udp_bound fds. See syscall-socket-contract.md <syscall-socket-contract.md>.\n- BARE_OS_POSIX_SOCKET_SCM_RIGHTS — Booter — When 1 / true, sendmsg on the socket FD bridge accepts cmsgs / msgHdr.cmsgs entries shaped as { fds: number[] } (SCM_RIGHTS-style logical FD list). Each source fd is duplicated into a new integer fd (scmRightsLocalDup in the syscall result). Caps: BARE_OS_POSIX_SOCKET_SCM_RIGHTS_MAX_FDS (default 4, max 16). Bridge sockets in created, bound, or listening state cannot be duplicated. shutdown uses reference counts when multiple fds alias the same bridge slot.\n- BARE_OS_POSIX_SOCKET_SCM_RIGHTS_MAX_FDS — Booter — Integer 116; max logical fds per sendmsg SCM list (default 4).\n- BARE_OS_PROTOMUX_OPERATOR_STATS_JSON — Booter — Optional JSON merged into /proc/bare_os/protomux.json under protomuxLibrary.hostOperatorStats (opaque counters from host Protomux instrumentation).\n- BARE_OS_DISK_OS_OPERATOR_INTENT_RPC — Booter — When 1 / true, enables disk.os bare_os.replication_operator_intent (execRpc) to append audit batches.\n- BARE_OS_BARE_STDLIB_RESOLVE_CONCURRENCY — Booter — 132: parallel vfs.readFile for /lib/bare drive bundles during maybeMergeBareFromDrive (default 4); deterministic merge order unchanged.\n- BARE_OS_SEEDER_MULTISIG_VERIFY_RESULT — Seeder / host — Set to ok, failed, or skipped by logPearMultisigKernelHint; mirrored in /proc/bare_os/security_posture.json as pearMultisigSeeder.verifyResult (no keys).\n- BARE_OS_PERSONAL_VAULT_INDEX_CACHE_MS — Booter — When > 0 (capped at 3_600_000 ms), vfs.readdir on /.bare and /.bare/ on the personal Hyperdrive may return a cached name list for up to that TTL (best-effort; stale until expiry). Default unset / 0** — always read from the drive.\n- BARE_OS_POSIX_DGRAM_RECVQ_MAX — Booter — Max queued datagrams per bridged UDP fd (bounded recv path); default and caps are enforced in the booter. Also bounds per-chunk queue depth for accepted SOCK_STREAM bridge fds (tcpRecvQueue).\n- BARE_OS_POSIX_DGRAM_RECV_BLOCK_MS_MAX — Booter — Optional blocking recv / accept wait cap (ms) for bridged UDP fds and for accept on listening TCP bridge fds before EAGAIN-shaped timeout notes.\n- BARE_OS_POSIX_ACCEPT_QUEUE_MAX — Booter — Max pending bareTcp.Server connections held before accept (default 64, cap 1024).\n- BARE_OS_PROTOMUX_APP_CHANNEL — Booter / seeder — When 1 / true, opens a second Protomux channel bare-os-app-v1 alongside bare-os-v1 for namespaced app RPC (see bare-os-protocol PROTOCOL_APP_CHANNEL_NAME).\n- BARE_OS_PROTOMUX_CAP_CHANNEL — Booter — When 1 / true, opens optional Protomux channel bare-os-cap-v1 for capability-scoped guest IPC experiments (gated by kernel feature bit BARE_OS_FEATURE8_PROTOMUX_CAP_CHANNEL). Inbound cap payloads larger than 65536 bytes are dropped (protomux_cap_payload_oversized host log); protomuxCapChannelRxTotal counts only accepted messages.\n- BARE_OS_PROTOMUX_CHAT_CHANNEL — Booter / seeder — Stock default: swarm chat is on. Set to 0, false, off, or no (trimmed, case-insensitive) to disable pairing Protomux channel bare-os-chat-v1 on Hyperswarm connections (noise-encrypted transport; capability word BARE_OS_FEATURE11_SWARM_CHAT). When chat is active, the host booter wires ctx.bareOsChatSend / /proc/bare_os/chat.json.\n- BARE_OS_CHAT_INITD — Booter — When 0 / false, skips registering the bare-os-chat initd marker unit (stock default follows chat mux gate). Does not disable the wire protocol when swarm chat remains enabled (default).\n- BARE_OS_CHAT_GOSSIP_TTL — Booter — Optional 032 relay hop budget for unseen chat events (default 4).\n- BARE_OS_CHAT_HISTORY_MAX — Booter — Ring buffer depth for recent chat records (default 512, range 1610000).\n- BARE_OS_CHAT_MAX_BODY_BYTES — Booter — Max UTF-8 body bytes per event frame (default 4096).\n- BARE_OS_WWW_INITD — Booter — When 0 / false, skips registering the bare-os-www initd unit (stock default: unit on).\n- BARE_OS_WWW_PORT — Booter — TCP port for the loopback static HTTP server (default 8088; must match the auto-managed Holesail entry when BARE_OS_WWW_HOLESAIL is on).\n- BARE_OS_WWW_HOST — Booter — Bind address for bare-os-www (default 127.0.0.1; 0.0.0.0 exposes the port on all interfaces — use only with care).\n- BARE_OS_HOLESAIL_STATE — Booter — Logical JSON path for managed Holesail tunnels. Stock default: ~/.holesail/state.json (resolved under the session $HOME). Override this variable to use a different path (e.g. /.bare/holesail/state.json on the personal drive). On first read, if the primary file is missing or empty, legacy /.bare/holesail/state.json, /.bare/holesail/guest/state.json, and /home/guest/.holesail/state.json are merged. See handbook ch.4 — The booter runtime <../../handbook/04-the-booter-runtime.md> (§ bare-holesail) for seed / key persistence.\n- BARE_OS_WWW_HOLESAIL — Booter — When 0 / false, skips idempotently merging bare-www-<port> into managed Holesail state.json after bare-os-www listens (stock default: on).\n- BARE_OS_SSH_HOLESAIL — Booter — When 0 / false, skips idempotently merging bare-ssh-<port> into the same managed state.json after bare-openssh listens (stock default: on). port / host match the actual SSH bind (defaults 127.0.0.1:2222 unless sshd_config / *BARE_OS_SSH_** change them).\n- BARE_OS_COLLAB_SESSION_NDJSON — Booter — When 1 / true, host boot trace may append collaboration session lines (non-secret peer counts) via swarm-disk logging.\n- BARE_OS_PHYS_PAGES_HINT — Booter — Optional integer string for getconf _SC_PHYS_PAGES via ctx.bareOsGetconfSysconf (default 524288 when unset).\n- BARE_OS_SHELL_HEREDOC_MAX_BYTES — Booter — When BARE_OS_SHELL_POSIX_MODE is on, caps here-document body size (default 262144, max 2 MiB).\n- BARE_OS_SHELL_EXEC_GRAPH_DUMP — Shell — When 1 / true, stores ctx.shellLastExecGraph for the current command line (lists/and-or/pipelines plus normalized redirection plans).\n- BARE_OS_SHELL_PIPELINE_STAGE_TIMEOUT_MS — Shell — Optional per-stage timeout guard for pipeline execution. When set to a positive integer, shell stages that exceed this duration fail with a timeout diagnostic.\n- BARE_OS_SHELL_PROMPT_HOOK_TIMEOUT_MS — Shell — Timeout (ms) for optional interactive prompt hook segment resolution (ctx.shellPromptHook) in fish-style readline; defaults to 25ms with empty-segment fallback.\n- BARE_OS_SHELL_SANDBOX — Shell — When 1 / true, block external /bin command execution and allow shell builtins only.\n- BARE_OS_SHELL_DENY_COMMANDS — Shell — Comma-separated denylist for command names evaluated before dispatch.\n- BARE_OS_SHELL_ALLOW_COMMANDS — Shell — Optional comma-separated allowlist; when set, commands outside the list are denied.\n- BARE_OS_SHELL_REDIRECT_GUARD — Shell — When 1 / true, deny redirect targets under sensitive pseudo paths (/proc, /sys, /dev) and simple traversal patterns.\n- BARE_OS_SHELL_LOOP_MAX — Shell — Max iterations for while / for (default 10000).\n- BARE_OS_SHELL_CASE_MAX_BRANCHES — Shell — Max case branches (default 32).\n- BARE_OS_STRICT_POSIX — Shell / utilities — When 1, pathname globs that match nothing fail the command; tighter diagnostics elsewhere as documented.\n- BARE_OS_SHELL_NOGLOB — Shell — When 1, pathname expansion is disabled (set -f sets this; set +f clears).\n- BARE_OS_GLOB_MAX_MATCHES — Shell — Max matches per glob word (default 4096).\n- BARE_OS_GLOB_IGNORE — Shell — Colon-separated fnmatch patterns excluded from glob results.\n- BARE_OS_PROC_BLIND_PEER_RELAY_HINTS — Booter / /proc — When 1 / true / yes, blind_relay_router, blind_pairing_sketch, and relay_geo_hint under /proc/bare_os use schema 2 JSON: exposed:true, env-injected operator sketches (BARE_OS_BLIND_RELAY_ROUTER_JSON, BARE_OS_BLIND_PAIRING_SKETCH_JSON, BARE_OS_RELAY_GEO_HINT_JSON) plus a live swarm object (peer count, relayGeoTier isolated single_peer multi_peer, pairingSurfaceReady, lifecycle, and optional protomuxBackpressure when BARE_OS_SWARM_PROTOMUX_BACKPRESSURE_COUNT is set) from the same non-secret rules as bareOsSwarmLifecycleSnapshot. Default remains schema 1 (operatorRedacted:true, exposed:false) — no swarm aggregates until the operator opts in.\n- BARE_OS_SWARM_PROTOMUX_BACKPRESSURE_COUNT — Booter — Non-secret integer surfaced in blind-relay swarm.protomuxBackpressure aggregates when relay hints are exposed.\n- BARE_OS_PROC_PROTOMUX_EXTENSIONS_REGISTRY — Booter / /proc — When 1 / true, exposes /proc/bare_os/protomux_extensions.json and ctx.bareOsReadProtomuxExtensionsJson() with the operator Protomux alias registry snapshot and logical extension channel hints; default exposed:false.\n- BARE_OS_BARE_SUBPROCESS_BRIDGE — Booter / kernel-runner — When 1 / true, enables the documented host bare-subprocess bridge path for long-running children.\n- BARE_OS_BARE_SUBPROCESS_TIMEOUT_MS — Booter / kernel-runner — When set with BARE_OS_BARE_SUBPROCESS_BRIDGE, supplies a default runBin timeout when the caller omits one.\n- BARE_OS_CTX_BARE_SUBPROCESS_SPAWN — Booter — When 1 / true, ctx.bareOsTrySpawnHostSubprocess tries ctx.bare.bareSubprocess.spawn first (merged drive catalog) before dynamic bare-subprocess import. Surfaced under ctx.bareOsRuntimeCaps.features.ctxBareSubprocessSpawn. With bare-subprocess 6, pass ipc: true (or stdio including ipc) to request a JSON IPC channel; the result includes ipc: Boolean(child.channel).\n- BARE_OS_DOTGLOB — Shell — When 1, globbing includes names starting with . (except .bareos_empty).\n- BARE_OS_SHELL_BRACE_EXPANSION — Shell — When 1, unquoted {a,b} brace expansion runs before globbing.\n- BARE_OS_SHELL_BRACE_EXPANSION_MAX — Shell — Max Cartesian product of brace alternatives per word (default 256, max 65536). When the product would exceed this cap, brace expansion is skipped for that word (literal path).\n- BARE_OS_GREP_FILTER_MAX — grep -r — Max --include / --exclude / --exclude-dir glob patterns (default 32).\n- BARE_OS_SED_NULL_MAX_RECORDS — sed -z — Max NUL-separated records per run (default 100000).\n- BARE_OS_AWK_FIELDWIDTHS — awk — When 1 / true, FIELDWIDTHS in the awk program selects fixed-width field splitting (space-separated widths; remainder is the last field).\n- BARE_OS_HYPER_MULTISIG_VERIFY — Seeder — When set, runs hyper-multisig verify via bare-subprocess <https://github.com/holepunchto/bare-subprocess> under Pear/Bare (dependency of bare-os-seeder), or child_process on Node. Requires hyper-multisig on PATH.\n- BARE_OS_EXTENSION_MULTISIG_VERIFY — Stock kernel — When 1 / true, the guest kernel may require a valid /etc/bare-os/pear.multisig.json before executing kernel.ext.d extensions (see init-main multisig gate).\n- BARE_OS_BOOT_POLICY_REQUIRE_PEAR_MULTISIG — Stock kernel / boot policy — When 1 / true, strict boot fails if pear.multisig.json is missing when the multisig gate is active.\n\nCAPABILITY WORD 6 (SELECTED)\n\n- BARE_OS_DNS_MAP_JSON — Booter / resolver — Bounded JSON static split-horizon map; summary in /proc/bare_os/dns_map_active.json.\n- BARE_OS_RESUME_STAGGER_MS — Stock kernel / initd — Optional delay between unit starts on resume.\n- BARE_OS_BIN_WORKER_WALL_MS — Booter — Per-invocation wall-clock cap for bare-worker /bin offload.\n- BARE_OS_SHM_MAX_BYTES — VFS — Cap for /dev/shm backed on the personal drive.\n- BARE_OS_PROC_ALIAS_STRICT — Booter — 1 — fail boot if /proc/bare_os alias manifest is incomplete.\n- BARE_OS_KERNEL_PROFILE_WARM_RC_ONLY — Stock kernel — With warm profile reload: apply rc.d only (skip full init path).\n- BARE_OS_BOOT_POLICY_DENY_KERNEL_EXT_IDS / BARE_OS_BOOT_POLICY_EXTENSION_HASH_PINS_JSON — Stock kernel — Set from boot.policy.json v6 denyKernelExtensionIds / kernelExtensionHashPins when policy merge runs.\n\nCAPABILITY WORD 11 (SELECTED)\n\n- BARE_OS_HIDE_PROC_HYPERCORE_PACK_HRPC_LIFECYCLE — Booter / /proc — When 1 / true, hides word-11 operator proc payloads from the flat and nested /proc/bare_os views.\n- BARE_OS_BOOT_POLICY_EXTENSION_SIGNER_PINS_V4_JSON — Stock kernel / boot.policy v11 — Optional JSON map for extensionSignerPinsV4 (hex-64 values) consumed during strict extension signer validation.\n\nSession env (set by booter, not user configuration): USER, LOGNAME, HOME, PWD, UID, GID, GROUP, BARE_OS_IDENTITY (guest or unlocked), BARE_OS_CTX_API_VERSION, BARE_OS_SESSION_ID, BARE_OS_BOOT_PROFILE_RESOLVED, and when unlocked BARE_OS_PUBLIC_KEY (hex Ed25519 public key).\n\nPersonal-drive identity layout (operator-tunable):\n\n- BARE_OS_PERSONAL_ROOT_MIGRATE — Legacy lift of flat / entries into /.bare-os/home/<seg>/: skip (never), guest (allow guest lift even when /.bare/account exists — unsafe), unlocked-only (never lift into guest home). Unset: safe default — guest lift is skipped when an account blob exists so another principals files never land under /home/guest. State file: /.bare-os/migration/legacy-root-v1.json.\n- BARE_OS_PERSONAL_ACCT_PREFIX — When 1 / true, session trees live under /.bare-os/acct/<id>/home|tmp|var/log/… (see multi-account design <../design/multi-account-personal-subvolumes.md>).\n- BARE_OS_GUEST_SCRUB — When 1 / true, entering guest best-effort deletes the guest /tmp segment and ~/.cache / ~/tmp under the guest home prefix on the personal drive (kiosk-style).\n- BARE_OS_GUEST_BARE_READ_ALL — When 1 / true, lifts VFS deny on sealed /.bare/account and /.bare/vault/ for guest** (testing only).\n\nTheme and color (from ~/.barerc, /bin/theme, and applyBareOsThemeFromEnv):\n\n- BARE_OS_THEME — Preset name (default, nord, dracula, …). Set by theme <name> in ~/.barerc or /bin/theme set.\n- BARE_OS_COLOR_DEPTH — truecolor (default), 256 / 8bit, or 16 / 8 / ansi. Downgrades truecolor BARE_OS_COLOR_* REPL sequences only; LS_COLORS strings stay as in the preset or dircolors output.\n- BARE_OS_COLOR_PROMPT, COMMAND, PATH, ENVSET, ENVUNSET, GHOST, SEARCH — ANSI open sequences for fish readline (set by the active theme).\n- LS_COLORS — GNU-style ls coloring; filled from the preset unless already set or BARE_OS_LS_COLORS_LOCKED=1.\n- BARE_OS_DIRCOLORS — Path to a dircolors-format file; when set, theme apply parses it (for the current TERM) into LS_COLORS.\n- NO_COLOR — When set, disables color in ls and other tools that honor it.\n\n14A. POSIX USERLAND APPENDIX (IMPLEMENTED VS GAPS)\n\nNormative declared profile: POSIX_DECLARED_PROFILE.md <../architecture/POSIX_DECLARED_PROFILE.md> (version BARE_OS_POSIX_PROFILE_VERSION in bare-os-protocol).\n\n- Pear working directory — Some Pear/Bare hosts expose process.cwd() as an empty string. The booters packages/bare-os-booter/lib/paths.js <../../packages/bare-os-booter/lib/paths.js> falls back to bare-os os.cwd() when resolving packageRootDir and Corestore path helpers. ctx.bare manifest selection under pear:// uses embedded bare-module-manifest.data.mjs (not host FS), so an empty process.cwd() does not block boot; see PEAR-RUN.md <../PEAR-RUN.md> and Developer guide ch.12 <../../developer-guide/12-bare-modules-and-pear-ecosystem.md>.\n- VFS — Two-drive unified paths; $HOME maps to the personal Hyperdrive; writable mounts under /mnt when HDMS allows. mkdir/rmdir, chmod (octal + symbolic subset), symlink/readlink, stat/lstat, rm recursive, watch() on Hyperdrive paths (optional host BARE_OS_VFS_WATCH=0 to disable). Synthetic /proc, /sys, /run, /dev for introspection (quotas JSON, boot JSON, initd snapshot, union policy, seed handshake, virtual registry, etc.); /dev/shm/<name> holds in-memory named segments (getconf _POSIX_SHARED_MEMORY_OBJECTS is 1). Optional union read overlays (BARE_OS_VFS_UNION_PREFIXES) with optional write deny (BARE_OS_VFS_UNION_WRITE_DENY). Empty dirs use .bareos_empty (same idea as git-fs-adapter).\n- Proc budget — Stock booter caches /proc/bare_os/syscalls.json text until vfs.bareOsClearWarmReadCaches() (shared invalidation with /bin / /lib/bare warm read cache, including bareOsVfsBatchWrite bin/lib puts).\n- Errno vocabulary — /proc/bare_os/syscalls.json errnoHints and errnoAlignment document Linux-style integers (same family as libuv / Holepunch bare-fs binding error.code strings). Utilities such as mkdir print errno: message on stderr when the caught error exposes a string code (for example EEXIST, EACCES), matching the vocabulary in errnoHints. Simulated logical FDs (BARE_OS_POSIX_FD_SIM) use EBADF, EAGAIN, EINVAL, ENOSYS, EOPNOTSUPP consistently; fcntl cooperative F_SETLK returns EAGAIN when contended; F_SETLKW does the same unless BARE_OS_POSIX_FCNTL_BLOCKING_WAIT is set (then ETIMEDOUT when BARE_OS_FCNTL_LOCK_WAIT_MS_MAX elapses). Cooperative waits are not kernel futexes: callers may see an EINTR-shaped note when a blocking wait is interrupted by policy rather than a real signal. fcntl O_APPEND/O_NONBLOCK bit masks align with bare-fs open-flag shapes when the host resolves native FS errors.\n- Shell — Pipelines, ;, && / — — , redirects, quoting, $VAR*, $?, optional ${VAR:-word} / ${VAR#prefix} when BAREOS_SHELL_PARAM_EXPANSION=1, jobs / fg / wait, optional background & segments, builtins including bounded if, while, for, case (caps BARE_OS_SHELL_LOOP_MAX, BARE_OS_SHELL_CASE_MAX_BRANCHES). Optional bounded $(…) when BARE_OS_SHELL_CMDSUBST=1; optional larger pipeline capture via BARE_OS_SHELL_STREAMING / BARE_OS_SHELL_STREAMING_MULT. Branching uses ctx.exitCode. Bounded pipeline capture (*BARE_OS_PIPELINE\\, ctx.bareOsRuntimeCaps); optional boot-snippet allowlist (*BARE_OS_BOOT_ALLOWLIST + /etc/bare-os/boot.allow). No subshells or full POSIX sh.\n- Ownership — Display and permission checks use UID/GID and mode bits; chown/chgrp update metadata.bareOs on the personal writable tree (not a multi-user host kernel).\n- Utilities — Tier-1 JS /bin (186 commands); authoritative list COREUTILS_COMMANDS in packages/bare-os-coreutils/lib/commands.mjs; sshd/bare-sshd binaries come from bare-os-openssh; see §12.10 <package-bare-os-coreutils-and-ci.md#1210-package-bare-os-coreutils>): text tools include paste, split, tac, rev, expand, unexpand, fold, fmt, comm, cmp, join, pr, yes (line-capped via BARE_OS_YES_MAX_LINES / getconf), shuf (capped via BARE_OS_SHUF_MAX_LINES), tsort, factor, expr (integer-focused subset), numfmt (--to=iec / --to=si). Checksums: md5sum (bundled MD5), sha1sum, sha224sum (bundled SHA-224), sha256sum, sha384sum, sha512sum (Web Crypto where available), sum, base32, basenc (--base16). Files: truncate, unlink, install, df (synthetic Hyperdrive row; -h human sizes), sync (no-op), timeout (wall-clock cap; exit 124 on timeout when BARE_OS_FEATURE_ABORT_TIMEOUT is advertised). Session stubs: arch, groups, hostid, nproc, uptime, users, who. Plus earlier parity: man, sed (including -z, BARE_OS_SED_NULL_MAX_RECORDS), awk, grep (-r with --include/--exclude/--exclude-dir, BARE_OS_GREP_FILTER_MAX), cp (-u/-v/-p), mv, find (-regex, -exec/-ok, BARE_OS_FIND_EXEC_MAX), mktemp, git-pear, cksum, getconf (static name table plus live vfs.env overrides for caps; -a), xargs (-P cap raised via BARE_OS_XARGS_MAX_PROCS, hard max 32), getfacl / setfacl (POSIX-style ACL view/edit against synthetic /.bare_acl.json sidecars; see handbook ch.9), dircolors, theme, ls, uniq, realpath, base64, rm -d, stat %F. dir / vdir call ls. Large sed/awk are not byte-identical to GNU on all inputs. mkfifo → /run/bare-os/ipc/; optional logical process groups via ctx.bareOsIpc.assignProcessGroup / signalProcessGroup (POSIX setpgid / killpg analog for IPC routing). Machine-readable per-command POSIX hints: stock /etc/bare-os/posix_utilities.json (path echoed in /proc/bare_os_features and metrics_live). Online help: /share/man/man.json and man.\n- Process tooling note — ps and kill operate on Bare OS synthetic process rows (pid 1..3 for kernel/booter/shell); they do not target host OS processes.\n- Additional utility coverage — dd (block-copy subset) and logger (structured append to /var/log/messages) are available as Tier-1 commands.\n- Mount tooling note — mount / umount are Hyperdrive/HDMS-backed commands for /mnt/<label> and are not host-kernel mount syscalls.\n- Process introspection note — procstat prints /proc/bare_os/process_table.json (synthetic process table) for automation/debugging.\n\nHandbook: handbook/09-posix-utilities-shell-and-vfs.md <../../handbook/09-posix-utilities-shell-and-vfs.md> — narrative catalog, engine notes, and Issue 7 alignment. Manual pages: handbook/10-manpages-and-online-help.md <../../handbook/10-manpages-and-online-help.md>.\n\nReference: Open Group POSIX.1-2017 utilities index; GNU coreutils (external) for common flag expectations where Bare aims to be similar.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","environment","and","posix","appendix","variables"],"seeAlso":[{"name":"docs-reference-feature-roadmap","section":7},{"name":"docs-reference-ctx-tui","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/environment-and-posix-appendix.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-feature-roadmap","section":7,"title":"Kernel capability program status","synopsis":["man 7 docs-reference-feature-roadmap","Documentation page (plain text from docs/reference/feature-roadmap.md)"],"description":"KERNEL CAPABILITY PROGRAM STATUS\n\nThis file tracks the twenty-item “kernel super-features” baseline plus expanded capability-word integration checklists. Items are done when shipped in the stock booter/kernel unless noted.\n\nCanonical machine-readable source: ../data/feature-roadmap-canonical.json <../data/feature-roadmap-canonical.json>. Keep this page and that JSON path aligned; scripts/verify-feature-roadmap-paths.mjs enforces the linkage in pretest.\n\nCHECKLIST FORMAT AND CI\n\nCapability word 6 through capability word 11 sections use Markdown pipe tables with numbered rows so pretest can verify checklist depth: scripts/verify-kernel-capabilities-word-6.mjs <../../scripts/verify-kernel-capabilities-word-6.mjs> through verify-kernel-capabilities-word-11.mjs <../../scripts/verify-kernel-capabilities-word-11.mjs> count lines matching | N | inside each capability-word block. Do not replace those tables with lists without updating the verifiers. Earlier blocks (the original twenty items and capability word 5) follow the same table style for readability and diff-friendly review.\n\nORIGINAL TWENTY SUPER-FEATURES (COMPLETED BASELINE)\n\n| # | Item | Status |\n| 1 | Feature-bit governance v2 + ADR | done — developer-guide/adr/001-kernel-feature-bits-governance.md <../../developer-guide/adr/001-kernel-feature-bits-governance.md>, bits 2127, BARE_OS_KERNEL_FEATURE_BITS_DOC=2 |\n| 2 | Seed RPC replication / health | done — bare_os.replication_status, /proc/bare_os_replication includes seedReplication |\n| 3 | Lazy personal drive attach | done — BARE_OS_LAZY_PERSONAL_DRIVE |\n| 4 | System revision hooks (Pear-style) | done — ctx.bareOsSystemRevision + env BARE_OS_SYSTEM_REVISION_* |\n| 5 | Tiered ctx.bare manifest | done — optional tier on manifest rows; BARE_OS_BUNDLE_TIER for bare-libs build |\n| 6 | Host delegate registry | done — host-delegate-registry.js, BARE_OS_DELEGATE_ALLOW |\n| 7 | Sandbox worker path | done — optional bare-worker import before microtask fallback |\n| 8 | IPC session namespace | done — BARE_OS_IPC_NAMESPACE, mkfifo + initd + VFS |\n| 9 | Unified /proc/bare_os/ tree | done — directory + index.json + aliases |\n| 10 | Initd unit Before= edges | done — merged into after graph + parallel prereq |\n| 11 | Boot policy schema v2 | done — denyBootStages (legacy denyBootPhases), minKernelCapabilitiesPrimary, requireSeedCaps, BARE_OS_BOOT_POLICY_STRICT |\n| 12 | DNS allowlist for fetch | done — BARE_OS_DNS_ALLOWLIST in curl/wget |\n| 13 | Telemetry schema versioning | done — telemetrySchemaVersion: 2 on NDJSON sink |\n| 14 | Suspend/resume hooks | done — ctx.bareOsRegisterSuspendHook / Resume + Invoke*; Corestore 7.12 session flush before suspend() |\n| 15 | Kernel hot reload (dev) | done — BARE_OS_KERNEL_HOT_RELOAD + ctx.bareOsRequestKernelReload |\n| 16 | Protocol semver in capabilities | done — protocolPackageVersion + featureBitsDoc in RPC JSON |\n| 17 | Synthetic cpuinfo/meminfo from host | done — when ctx.bareOsHostStats / bare-os fills hostProcStatsRef |\n| 18 | kernel.ext.d extension drop-ins | done — JSON lists scripts under /lib/bare-os/extensions/ |\n| 19 | Audit JSON v2 | done — auditSchemaVersion: 2 on delegate/execLine/http audit lines |\n| 20 | Documentation consolidation | done — this file + linked handbook/developer-guide updates |\n\nCAPABILITY WORD 5 CHECKLIST (TWENTY-ITEM SUPER-FEATURE PLAN)\n\nCapability word 5 introduces the fifth capability word (bits5 / host transport delegates), a seeder RPC registry so method lists do not drift, replication queue hints, an automated compatibility matrix check in CI, host OS probing under /proc, subprocess bridge lifecycle v2, transport observability, stricter boot policy, scheduled replication windows, union readlink, kernel profile warm reload, HDMS hints v2, seed-channel error hygiene, man coverage CI, OTel schema v2, bare-worker allowlist patterns, A/B staging rollback hints, a dev /proc/bare_os/debug.json, ctx.bare risk metadata in manifests, and documentation coherence checks.\n\n| # | Item | Status |\n| 1 | Fifth capability word (bits5) + ADR §8 | done — BARE_OS_KERNEL_FEATURES_STOCK_WORD_HOST_TRANSPORT_DELEGATES, strict seed check, /proc + RPC |\n| 2 | Seeder RPC registry (no drift) | done — seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js>, typed errors |\n| 3 | Replication queue + snapshot hints | done — seeder RPC queueDepthEstimate, snapshotWorkflowNote, env BARE_OS_SEED_* |\n| 4 | Automated compatibility matrix | done — scripts/verify-compat-matrix.mjs <../../scripts/verify-compat-matrix.mjs> |\n| 5 | Host OS probe (bare-os) | done — /proc/bare_os/host_os.json schema 2, env BARE_OS_HOST_BARE_OS_PROC / BARE_OS_HOST_OS_JSON, optional bare-posix |\n| 6 | Subprocess bridge lifecycle v2 | done — bareOsReadSubprocessBridgeSnapshot, BARE_OS_SUBPROCESS_BRIDGE_META_JSON; bare-subprocess 6 IPC channel on bareOsTrySpawnHostSubprocess |\n| 7 | Transport observability | done — net_summary.json transport from BARE_OS_NET_TRANSPORT_STATS_JSON |\n| 8 | Boot policy v5 | done — requireKernelCapabilitiesHostTransportDelegates, requireInitJsSha256, schema + kernel enforcement |\n| 9 | Scheduled replication windows | done — BARE_OS_REPLICATION_SYNC_WINDOWS, /proc/bare_os/sync_window.json |\n| 10 | VFS union readlink | done — personal overlay for readlink under union prefixes |\n| 11 | Kernel profile warm reload | done — BARE_OS_KERNEL_PROFILE_WARM, ctx.bareOsRequestKernelProfileReload |\n| 12 | HDMS ops hints v2 | done — BARE_OS_HDMS_SUPPORT_CORRELATION_ID, hints schema 2 |\n| 13 | Seed channel robustness | done — RPC missing/unknown module + method errors |\n| 14 | man(1) completeness CI | done — scripts/verify-man-coverage.mjs <../../scripts/verify-man-coverage.mjs> |\n| 15 | OTel JSONL schema v2 | done — otlSchemaVersion: 2 in OTel mirror lines |\n| 16 | Bare-worker allowlist patterns | done — BARE_OS_BIN_WORKER_ALLOW with textproc:* group |\n| 17 | A/B staging rollback hints | done — seeder previousSlot, rollbackHint, BARE_OS_SEED_STAGING_PREVIOUS_SLOT |\n| 18 | Dev debug proc | done — /proc/bare_os/debug.json when BARE_OS_KERNEL_DEBUG=1 |\n| 19 | ctx.bare risk metadata | done — manifest tier/risk examples + catalog docs |\n| 20 | Documentation coherence CI | done — scripts/verify-doc-links.mjs <../../scripts/verify-doc-links.mjs>, pretest |\n\nMEGA-KERNEL CAPABILITY WORDS (611)\n\nCapability words 6 through 11 use hundred-item checklists that track the mega-kernel program: capability words, ctx API semver, boot policy revisions, seed RPC additions, /proc/bare_os/ schema bumps, telemetry and audit schema versions, and Pear or Bare runtime gates. Rows stay terse by design; follow links in each row, kernel-extensions.md <./kernel-extensions.md>, and developer-guide/adr/001-kernel-feature-bits-governance.md <../../developer-guide/adr/001-kernel-feature-bits-governance.md> for prose explanations.\n\nCAPABILITY WORD 6 CHECKLIST (100-ITEM MEGA KERNEL)\n\n| # | Item | Status |\n| 1 | bits6 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE + FEATURE6_* | done — kernel-feature-bits.js, seed caps, /proc, RPC |\n| 2 | ADR 001 Word 6 + deprecation policy | done — developer-guide/adr/001 |\n| 3 | Program verifier + protocol tests bits6 | done — verify-kernel-capabilities-contract.mjs, protocol test.js |\n| 4 | ctx API semver + d.ts for word-6 fields | done — bare-os-ctx-api.js 1.15.0, bare-os-ctx.d.ts |\n| 5 | ctx.d.ts / capability index drift checks | done — verify-ctx-dts.mjs, verify-ctx-api-feature-bits.mjs |\n| 6 | Protocol semver coupling docs | done — package-bare-os-protocol.md, README |\n| 7 | RPC registry single-source (seed-rpc-methods.js) | done — new methods registered |\n| 8 | kernel_info hostBundleId / pearRuntimeFingerprint | done — channel.js optional fields |\n| 9 | capabilities booterPackageVersion | done — RPC + ctx.bareOsBooterPackageVersion |\n| 10 | FEATURE6_STRICT_PROC_ALIAS | done — feature bit + strict env |\n| 11 | RPC bare_os.replication_plan | done — seed-rpc-methods, channel, seeder env |\n| 12 | RPC bare_os.dht_bootstrap_hint | done — bounded bootstrap list |\n| 13 | RPC bare_os.snapshot_chain | done — lineage hint JSON |\n| 14 | RPC bare_os.mirror_compaction_hint | done — operator hint |\n| 15 | RPC bare_os.updater_state | done — non-secret summary |\n| 16 | RPC bare_os.blind_peer_topology_v2 | done — router hints + caps |\n| 17 | Seeder handshake token bucket metadata | done — BARE_OS_SEED_TOKEN_BUCKET_JSON |\n| 18 | Replication priorityClass enum | done — replication_status JSON |\n| 19 | Replication ipv6ScopeCounts | done — firewall stats v2 adjunct |\n| 20 | Replication corestoreSnapshotTag | done — string hint |\n| 21 | Replication queuedPeerCount | done — upper bound field |\n| 22 | Seed compact_ping optional encoding | done — RPC compact_ping + bit |\n| 23 | staging_slot RPC v3 triple-slot canary | done — channel + seeder |\n| 24 | mbr_layout RPC v2 region labels | done — labels map |\n| 25 | peer_firewall_stats v2 inbound/outbound | done — separate counters |\n| 26 | /proc/bare_os/udx_extended.json | done — BARE_OS_PROC_UDX_EXTENDED_JSON |\n| 27 | /proc/bare_os/dht_status.json | done — BARE_OS_PROC_DHT_STATUS_JSON |\n| 28 | /proc/bare_os/replication_backpressure.json | done — env injection |\n| 29 | /proc/bare_os/ipc_backpressure.json | done — FIFO depth metrics |\n| 30 | /proc/bare_os/delegate_red.json | done — RED template |\n| 31 | /proc/bare_os/build_attestation_pointer.json | done — pointer only |\n| 32 | /proc/bare_os/pear_ipc_health.json | done — bridge health |\n| 33 | /proc/bare_os/hypercore_lengths.json | done — capped hints map |\n| 34 | /proc/bare_os/slo_hints.json | done — documentation-first JSON |\n| 35 | /proc/bare_os/locale.json | done — BARE_OS_LOCALE + charset |\n| 36 | /proc/bare_os/worker_budget.json | done — wall/CPU snapshot |\n| 37 | /proc/bare_os/sandbox_profile.json | done — profile name |\n| 38 | /proc/bare_os/dns_map_active.json | done — split-horizon summary |\n| 39 | /proc/bare_os/git_delegate_stats.json | done — fetch depth summary |\n| 40 | /proc/bare_os/index.json manifest | done — bare_os_proc_index schema 2 |\n| 41 | ctx.bareOsPearUpdaterDelegate | done — async bridge: BARE_OS_PEAR_UPDATER_MODULE / BARE_OS_PEAR_UPDATER_SNAPSHOT_JSON via bare-os-pear-updater-bridge.js <../../packages/bare-os-booter/lib/bare-os-pear-updater-bridge.js> |\n| 42 | ctx.bareOsEmitHyperdhtBootstrapRefresh | done — callback |\n| 43 | Pear IPC namespaced registry doc | done — developer-guide / handbook |\n| 44 | pear-runtime release channel in version adjunct | done — /proc version JSON |\n| 45 | Blind peering relay vs direct hints | done — replication JSON doc |\n| 46 | bareOsEmitBlindPeerHint v2 reasonCode | done — schema 2 |\n| 47 | bare-boot alignment doc | done — developer-guide |\n| 48 | bare-subprocess signal→exit matrix | done — kernel-capabilities-index |\n| 49 | bare-process pid map in subprocess snapshot | done — hostPidMap schema 3 |\n| 50 | bare-fetch encodings doc | done — developer-guide |\n| 51 | boot.policy v6 requireBooterSemver denyKernelExtensionIds | done — schema + kernel |\n| 52 | boot.policy requireCtxApiMin | done — kernel semver gate |\n| 53 | boot.policy kernelExtensionHashPins | done — hash pins map |\n| 54 | Stock kernel enforce v6 under STRICT | done — init.js |\n| 55 | kernel.extensions.registry v3 | done — schema + example |\n| 56 | Extension graph dependency edges | done — dependsOn in /proc |\n| 57 | Warm profile rc.d-only mode | done — BARE_OS_KERNEL_PROFILE_WARM_RC_ONLY |\n| 58 | Hot reload loaded extension list proc | done — debug adjunct |\n| 59 | Offline LKG strict integrity toggle | done — offlineLkgIntegrityStrict |\n| 60 | Boot trace structured phase codes | done — schema doc |\n| 61 | VFS advisory flock subset | done — vfs + tests |\n| 62 | VFS xattr union mirror | done — documented limits |\n| 63 | /dev/shm size cap env | done — BARE_OS_SHM_MAX_BYTES |\n| 64 | VFS readahead hint /bin | done — env + doc |\n| 65 | Union whiteout semantics audit | done — .bareos_whiteout + tests |\n| 66 | readlink/realpath symlink loops | done — tests |\n| 67 | find -samefile -inum | done — coreutils where inode id |\n| 68 | Shell job control flags doc | done — handbook |\n| 69 | Shell streaming backpressure hook doc | done — handbook |\n| 70 | Param indirect expansion subset | done — FEATURE6 + guarded |\n| 71 | /bin/env --split-string tests | done — coreutils tests |\n| 72 | Git submodule policy deny + boot hook | done — boot.policy + doc |\n| 73 | Initd PartOf= grouping | done — initd schema + kernel |\n| 74 | Initd RestartMode=direct | done — unit graph |\n| 75 | Timer OnCalendar= subset | done — parser + doc |\n| 76 | Socket FDStoreMax= hint | done — graph JSON |\n| 77 | ConditionCredential= documentary | done — handbook |\n| 78 | Suspend HDMS quiesce ordering | done — handbook |\n| 79 | Resume stagger BARE_OS_RESUME_STAGGER_MS | done — kernel-extensions |\n| 80 | /proc/self/cgroups v2 deeper mirror | done — env JSON |\n| 81 | BARE_OS_BIN_WORKER_ALLOW mathproc:* | done — kernel-runner |\n| 82 | Worker per-invocation wall max | done — BARE_OS_BIN_WORKER_WALL_MS |\n| 83 | Sandbox host-interpreted capability JSON | done — schema + proc |\n| 84 | Delegate hrpc stub kind | done — host-delegate-registry |\n| 85 | Delegate concurrency defaults table | done — kernel-extensions |\n| 86 | Subprocess oomScoreAdj passthrough | done — bridge snapshot |\n| 87 | Subprocess cgroupPathV2 | done — bridge snapshot |\n| 88 | BARE_OS_SANDBOX_WORKER telemetry counters | done — var-log / doc |\n| 89 | BARE_OS_DNS_MAP_JSON split-horizon | done — resolver + proc |\n| 90 | HTTP delegate HSTS preload env | done — kernel-extensions doc |\n| 91 | TLS multi-pin rotation doc | done — developer-guide |\n| 92 | curl alt-svc hint | done — env passthrough doc |\n| 93 | DNS wildcard suffix rules | done — handbook |\n| 94 | Happy eyeballs timeout env | done — fetch layer doc |\n| 95 | NDJSON lifecycle v5 fields | done — bare-os-var-log + schema |\n| 96 | OTEL JSONL schema v3 | done — otlSchemaVersion 3 + example |\n| 97 | Audit JSON v3 delegate depth | done — auditSchemaVersion 3 |\n| 98 | PII scrub list for telemetry | done — developer-guide privacy |\n| 99 | HDMS pairing backoff telemetry | done — NDJSON fields |\n| 100 | Mega-integration verify-kernel-capabilities-word-6 + pretest | done — scripts + release notes template |\n\nCAPABILITY WORD 7 CHECKLIST (100-ITEM MEGA KERNEL)\n\n| # | Item | Status |\n| 1 | bits7 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC + FEATURE7_* coarse groups | done — kernel-feature-bits.js |\n| 2 | ADR 001 Word 7 + reserved bits 1631 on word 6 vs new word | done — ADR §10 |\n| 3 | bits7 in seed capabilities + /proc/bare_os_features + strict | done — channel.js, booter |\n| 4 | BARE_OS_CTX_API_VERSION bump + new ctx fields | done — bare-os-ctx-api.js 1.16.0 |\n| 5 | verify-ctx-api-feature-bits + verify-ctx-dts for bits7 | done — scripts |\n| 6 | verify-kernel-capabilities-word-7.mjs (100 rows) + pretest | done — scripts |\n| 7 | verify-kernel-capabilities-contract BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC + RPC + boot v7 | done — verify-kernel-capabilities-contract.mjs |\n| 8 | Protocol README + package-bare-os-protocol.md word-7 semver | done — docs |\n| 9 | RPC bare_os.corestore_stats | done — seed-rpc-methods, channel, booter |\n| 10 | RPC bare_os.snapshot_manifest_slice | done — channel + handshake |\n| 11 | RPC bare_os.mirror_drive_hint_v2 | done — channel |\n| 12 | RPC bare_os.hrpc_registry_summary | done — channel |\n| 13 | RPC bare_os.protomux_capability_ad | done — hex-capped ad |\n| 14 | RPC bare_os.dht_address_book | done — channel |\n| 15 | RPC bare_os.replication_throttle_hint | done — channel |\n| 16 | RPC bare_os.bundlebee_stage | done — channel |\n| 17 | replication_status udxRttMsEstimate | done — channel opts |\n| 18 | replication_status relayCircuitId | done — channel opts |\n| 19 | replication_status hyperbee2ReadOnlyHint | done — channel JSON |\n| 20 | Seeder notReadyReason ready-guard enum | done — channel |\n| 21 | staging_slot schema 4 + quarantine JSON | done — channel |\n| 22 | peer_firewall_stats v3 transportBreakdown | done — channel |\n| 23 | /proc bare_diagnostics_channel.json | done — word7 proc |\n| 24 | /proc bare_thread_pool.json | done — word7 proc |\n| 25 | /proc async_hooks_lag.json | done — word7 proc |\n| 26 | /proc compact_encoding_profile.json | done — word7 proc |\n| 27 | /proc protomux_channels.json | done — word7 proc |\n| 28 | /proc hrpc_bridge_health.json | done — word7 proc |\n| 29 | /proc updater_download_state.json | done — word7 proc |\n| 30 | /proc security_context.json | done — word7 proc |\n| 31 | /proc git_lfs_pointer_stats.json | done — word7 proc |\n| 32 | /proc corestore_gc_hint.json | done — word7 proc |\n| 33 | /proc hyperdb_readonly_index.json | done — word7 proc |\n| 34 | /proc blind_relay_router.json | done — word7 proc |\n| 35 | /proc autopass_session_sketch.json | done — word7 proc |\n| 36 | /proc bare_net_interfaces.json | done — word7 proc |\n| 37 | /proc pear_build_fingerprint.json | done — word7 proc |\n| 38 | bare_os_proc_index schema 3 + sorted tests | done — vfs + booter test |\n| 39 | ctx.bareOsEmitBundlebeeHint | done — booter |\n| 40 | ctx.bareOsRegisterBareDiagnosticsTap | done — booter |\n| 41 | Pear IPC protomux channel naming doc | done — developer-guide |\n| 42 | ctx.bareOsHrpcRequest stub | done — booter |\n| 43 | pear-terminal TTY flags in /proc/version adjunct | done — vfs env JSON |\n| 44 | bare-run alignment doc | done — developer-guide |\n| 45 | bare-readline REPL doc | done — developer-guide |\n| 46 | bare-url / bare-fetch URL limits for curl | done — handbook ch.9 |\n| 47 | bare-sidecar-bundle pattern doc | done — developer-guide |\n| 48 | hyper-multisig in-guest pointer doc | done — handbook security |\n| 49 | boot.policy v7 requirePearRuntimeMin | done — schema + kernel |\n| 50 | boot.policy requireProtocolPackageMin | done — kernel + ctx |\n| 51 | boot.policy maxKernelExtensionDepth | done — kernel topo + env |\n| 52 | BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC enforcement under BARE_OS_BOOT_POLICY_STRICT | done — kernel |\n| 53 | kernel.extensions.registry v4 signaturePointer | done — extensions.json |\n| 54 | Extension topological load when dependsOn | done — kernel init |\n| 55 | Hot reload extension list diff NDJSON | done — telemetry doc |\n| 56 | Offline LKG manifest staleness warning class | done — schemas |\n| 57 | Boot trace subphase code enum | done — lifecycle schema doc |\n| 58 | BARE_OS_BOOT_PROFILE matrix doc | done — handbook |\n| 59 | VFS named pipe high-water /run metrics doc | done — handbook |\n| 60 | VFS O_APPEND personal files audit | done — handbook ch.9 |\n| 61 | /dev/zero size cap doc | done — handbook |\n| 62 | Union opaque whiteout marker doc | done — kernel-extensions |\n| 63 | bare-fs error code mapping ch.9 | done — handbook |\n| 64 | find -xdev bounded multi-drive | done — handbook |\n| 65 | Shell here-doc <<EOF subset doc | done — handbook |\n| 66 | Shell process substitution matrix | done — handbook |\n| 67 | BARE_OS_CURL_RESOLVE_MAP_JSON | done — env + kernel-extensions |\n| 68 | wget resolve map parity | done — kernel-extensions |\n| 69 | /bin/env -C subset | done — handbook |\n| 70 | Git partial clone boot policy flag | done — boot.policy + env |\n| 71 | Initd Slice= cgroup hint | done — initd graph doc |\n| 72 | Initd JobTimeoutSec= wall cap | done — initd doc |\n| 73 | Timer AccuracySec= hint | done — handbook |\n| 74 | Socket RemoveOnStop= doc | done — handbook |\n| 75 | bare-subprocess SIG* exit matrix SIGUSR | done — developer-guide |\n| 76 | bare-process thread count hint | done — subprocess bridge doc |\n| 77 | Resume dependency-aware stagger | done — kernel-extensions |\n| 78 | /proc/self/limits synthetic mirror | done — handbook + rlimits |\n| 79 | BARE_OS_BIN_WORKER_ALLOW netproc:* | done — kernel-extensions |\n| 80 | Worker CPU soft cap env doc | done — kernel-extensions |\n| 81 | Sandbox network egress class enum doc | done — handbook |\n| 82 | Delegate pear-build kind stub | done — host-delegate-registry |\n| 83 | Delegate retry-after audit field | done — audit v4 schema |\n| 84 | Subprocess nice priority hint | done — bridge doc |\n| 85 | BARE_OS_SANDBOX_WORKER queue depth proc | done — metrics doc |\n| 86 | bare-thread offload eligibility bit doc | done — kernel-extensions |\n| 87 | BARE_OS_HTTP_PROXY_MAP_JSON | done — env table |\n| 88 | bare-http1 vs bare-https stack doc | done — developer-guide |\n| 89 | DNS EDNS client subnet opt-out doc | done — handbook |\n| 90 | happy eyeballs v2 connect/TLS timeout keys | done — env doc |\n| 91 | rocksdb-native storage boundary doc | done — developer-guide |\n| 92 | http-dht-proxy hint RPC | done — seed RPC |\n| 93 | NDJSON lifecycle v6 bootAttemptId | done — schema + example |\n| 94 | OTel JSONL schema v4 exemplars + severityNumber | done — schema |\n| 95 | Audit JSON v4 HTTP redirect depth | done — schema |\n| 96 | GDPR retention hints developer-guide | done — privacy |\n| 97 | bare-diagnostics-channel mirror path env | done — kernel-extensions |\n| 98 | PII scrub word-7 fields | done — privacy doc |\n| 99 | HDMS vault lock contention telemetry | done — NDJSON doc |\n| 100 | Mega-integration BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC !== 0 + pretest chain | done — protocol test |\n\nCAPABILITY WORD 8 CHECKLIST (100-ITEM MEGA KERNEL)\n\n| # | Item | Status |\n| 1 | bits8 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX + FEATURE8_* governance | done — kernel-feature-bits.js, protocol index, seed strict |\n| 2 | ADR 001 Word 8 | done — developer-guide/adr/001 §11 |\n| 3 | bits8 on seed capabilities + /proc + BARE_OS_SEED_CAP_STRICT | done — channel.js, booter, offline LKG |\n| 4 | BARE_OS_CTX_API_VERSION + bare-os-ctx.d.ts batch | done — 1.17.0, bits8 + bridge methods |\n| 5 | verify-ctx-api-feature-bits + verify-ctx-dts bits8 | done — scripts |\n| 6 | verify-kernel-capabilities-word-8.mjs 100 rows | done — pretest |\n| 7 | verify-kernel-capabilities-contract BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX + RPC + boot policy v8 | done — verify-kernel-capabilities-contract.mjs |\n| 8 | package-bare-os-protocol.md semver 0.4.0 | done — docs |\n| 9 | Seed RPC protomux_rpc_pool_hint | done — channel + seeder + loadOsFromPeers |\n| 10 | Seed RPC hyperblob_store_hint | done |\n| 11 | Seed RPC signing_request_queue_hint | done |\n| 12 | Seed RPC core_storage_layout_hint | done |\n| 13 | Seed RPC mirror_drive_compaction_v3 | done |\n| 14 | Seed RPC bundlebee_cli_stage | done |\n| 15 | Seed RPC ready_guard_v2 | done |\n| 16 | Seed RPC blind_relay_circuit_hint | done |\n| 17 | Replication udxLossEstimateBps | done — channel replication_status |\n| 18 | Replication tcpFallbackReason | done |\n| 19 | Replication hyperdbIndexLagHint | done |\n| 20 | staging_slot v5 drainDeadlineMs | done — channel schema 5 |\n| 21 | peer_firewall_stats saturationClass | done — peerFirewallSaturationJson |\n| 22 | kernel_info pear/bare fingerprint note | done — channel |\n| 23 | /proc structured_clone_profile.json | done — word8 proc |\n| 24 | /proc form_data_delegate_limits.json | done |\n| 25 | /proc hypercore_signing_status.json | done |\n| 26 | /proc brittle_snapshot_ci.json | done |\n| 27 | /proc bare_kit_bridge.json | done |\n| 28 | /proc protomux_rpc_pool_health.json | done |\n| 29 | /proc http_dht_proxy_route.json | done |\n| 30 | /proc hypermininet_topology.json | done |\n| 31 | /proc oidc_publishing_pointer.json | done |\n| 32 | /proc gip_transport_sketch.json | done |\n| 33 | /proc safe_sodium_buffer_policy.json | done |\n| 34 | /proc react_native_bare_kit.json | done |\n| 35 | /proc cellery_sidecar_hint.json | done |\n| 36 | /proc libmqjs_queue_depth.json | done |\n| 37 | /proc pear_sidecar_bundle_index.json | done |\n| 38 | bare_os_proc_index schema 4 + readdir | done — vfs.js + test.js |\n| 39 | ctx.bareOsEmitStructuredCloneCap | done — index.js |\n| 40 | ctx.bareOsProtomuxChannelAlias | done — noop map |\n| 41 | bare-pipe/stream backpressure doc | done — kernel-extensions.md |\n| 42 | bare-tty/pear-terminal version adjunct | done — handbook |\n| 43 | bare-readline multiline history path | done — kernel-extensions |\n| 44 | bare-run argv limits doc | done — kernel-extensions |\n| 45 | bare-url IDNA/IPv6 zone limits table | done — kernel-extensions |\n| 46 | bare-https ALPN hint env | done — kernel-extensions |\n| 47 | bare-http-parser upgrade/chunked limits | done — kernel-extensions |\n| 48 | /proc hyper_multisig_trust_pointer | done — word8 proc |\n| 49 | boot.policy v8 requireKernelCapabilitiesBareRuntimeProtoMux | done — kernel/init.js + schema |\n| 50 | boot.policy denySeedRpcMethods | done — env merge + booter skip RPC |\n| 51 | boot.policy maxProtomuxChannelNameLength | done — kernel env |\n| 52 | extensions.registry v5 compatPearBundleId | done — schema + proc schema 5 |\n| 53 | Extension load cycle detection boot trace | done — boot-trace schema doc |\n| 54 | Hot reload diff hash extension list | done — doc |\n| 55 | Offline LKG stale manifest sub-reason | done — boot-trace doc |\n| 56 | Boot trace subphaseDetail cap | done — schema |\n| 57 | BARE_OS_BOOT_PROFILE bare-kit warm path | done — handbook |\n| 58 | Strict bits8 seed coverage | done — loadOsFromPeers |\n| 59 | VFS FIFO /run metrics schema v2 | done — handbook |\n| 60 | VFS O_APPEND + personal fsync advisory | done — handbook ch.9 |\n| 61 | /dev/zero read coalescing cap doc | done — handbook |\n| 62 | Union whiteout matrix handbook | done — handbook ch.9 |\n| 63 | bare-fs ELOOP/ENOTEMPTY errno ch.9 | done — handbook |\n| 64 | find -prune union mount doc | done — handbook |\n| 65 | Shell here-doc <<- subset doc | done — handbook |\n| 66 | Shell arith expansion guarded doc | done — handbook |\n| 67 | BARE_OS_CURL_RESOLVE_MAP_JSON wired | done — curl/wget http-fetch-url |\n| 68 | /bin/env -S matrix documented | done — env.js + handbook |\n| 69 | git partial clone boot.policy deny | done — git-cli.js |\n| 70 | rebuild-git pattern doc pointer | done — developer-guide |\n| 71 | Initd CollectMode-like grouping hint | done — kernel-extensions |\n| 72 | Initd StartLimitIntervalSec burst cap | done — env BARE_OS_INITD_START_LIMIT_* |\n| 73 | Timer Persistent= hint | done — kernel-extensions |\n| 74 | Socket Symlinks= behavior doc | done — kernel-extensions |\n| 75 | bare-subprocess SIGPIPE matrix | done — handbook |\n| 76 | bare-process uid/gid map subprocess snapshot | done — schema 4 + env |\n| 77 | BARE_OS_RESUME_STAGGER_LEVEL_MS_JSON | done — kernel-extensions |\n| 78 | /proc/self/limits locked memory | done — vfs + BARE_OS_PROC_RLIMITS_JSON |\n| 79 | BARE_OS_BIN_WORKER_ALLOW ioproc:* | done — kernel-runner.js |\n| 80 | Worker RSS high-water env sketch | done — kernel-extensions |\n| 81 | Sandbox filesystem class enum doc | done — kernel-extensions |\n| 82 | Delegate bundlebee kind stub | done — host-delegate-registry |\n| 83 | Delegate WARC/archive placeholders | done — host-delegate-registry |\n| 84 | Subprocess sched policy hint | done — kernel-extensions |\n| 85 | /proc sandbox_worker_queue.json | done — word8 proc |\n| 86 | bare-thread vs bare-worker exclusion doc | done — handbook |\n| 87 | BARE_OS_HTTP_PROXY_MAP_JSON doc | done — kernel-extensions |\n| 88 | bare-http1 keep-alive pool size env | done — kernel-extensions |\n| 89 | DNSSEC host handles disclaimer | done — developer-guide |\n| 90 | happy eyeballs IPv6-first toggle env | done — kernel-extensions |\n| 91 | /proc rocksdb_pointer.json | done — word8 proc |\n| 92 | http_dht_proxy_routes RPC | done — seed RPC + channel |\n| 93 | NDJSON lifecycle v7 sessionForkGeneration | done — schema + example |\n| 94 | OTel v5 scopeMetrics sketch | done — schema + example |\n| 95 | Audit v5 requestSmugglingClass | done — booter audit lines |\n| 96 | GDPR subprocessor template | done — developer-guide privacy |\n| 97 | bare-diagnostics subscription allowlist mirror | done — kernel-extensions |\n| 98 | PII scrub word-8 field keys | done — 13-privacy-telemetry-pii.md |\n| 99 | HDMS vaultRotateCount telemetry | done — hdms_hints schema 3 |\n| 100 | Mega-integration BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX + word8 verifier | done — protocol test + pretest |\n\nCAPABILITY WORD 9 CHECKLIST (100-ITEM MEGA KERNEL)\n\n| # | Item | Status |\n| 1 | bits9 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING + FEATURE9_* + BARE_OS_KERNEL_FEATURE_BITS_DOC=11 | done — kernel-feature-bits.js, protocol index |\n| 2 | ADR 001 §12 ninth capability word | done — developer-guide/adr/001 |\n| 3 | bits9 on seed capabilities + /proc + BARE_OS_SEED_CAP_STRICT | done — channel.js, booter index.js |\n| 4 | BARE_OS_CTX_API_VERSION 1.18.0 + bare-os-ctx.d.ts word9 | done — bare-os-ctx-api.js |\n| 5 | verify-ctx-api-feature-bits + verify-ctx-dts bits9 | done — scripts |\n| 6 | verify-kernel-capabilities-word-9.mjs 100 rows + pretest | done — scripts |\n| 7 | verify-kernel-capabilities-contract BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING + RPC + boot policy v9 | done — verify-kernel-capabilities-contract.mjs |\n| 8 | package-bare-os-protocol.md semver 0.5.0 | done — docs |\n| 9 | Protocol package 0.5.0 + protocol-meta.js | done — bare-os-protocol |\n| 10 | BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING !== 0 protocol test | done — test.js |\n| 11 | Seed RPC pear_stage_hint | done — seed-rpc-methods, channel, seeder env |\n| 12 | Seed RPC updater_channel_matrix | done — channel + seeder |\n| 13 | Seed RPC appling_bundle_pointer | done — channel + seeder |\n| 14 | Seed RPC drive_resolve_policy | done — channel + seeder |\n| 15 | Seed RPC bundle_id_fingerprint | done — channel + seeder |\n| 16 | Seed RPC hyperdb_migration_hint | done — channel + seeder |\n| 17 | Seed RPC sidecar_bundle_index_v2 | done — channel + seeder |\n| 18 | Seed RPC pear_message_queue_sketch | done — channel + seeder |\n| 19 | Seed RPC runtime_bootstrap_etag | done — channel + seeder |\n| 20 | Seed RPC force_update_guard | done — channel + seeder |\n| 21 | Seed RPC gracedown_window | done — channel + seeder |\n| 22 | Seed RPC tryboot_slot | done — channel + seeder |\n| 23 | Seed RPC hotmods_allowlist | done — channel + seeder |\n| 24 | Seed RPC prefetcher_budget | done — channel + seeder |\n| 25 | Seed RPC opstream_backpressure | done — channel + seeder |\n| 26 | Seed RPC multisig_link_pointer | done — channel + seeder |\n| 27 | Seed RPC md_render_caps | done — channel + seeder |\n| 28 | Seed RPC bundlebee_cli_stage_v2 | done — channel + seeder |\n| 29 | Seed RPC seed_manifest_diff_v2 | done — channel + seeder |\n| 30 | Seed RPC peer_handshake_latency_budget | done — channel + seeder |\n| 31 | replication_status pearRuntimeChannel | done — channel opts |\n| 32 | replication_status pearUpdaterDelegate | done — channel opts |\n| 33 | staging_slot schema 6 + word9 blob | done — channel.js |\n| 34 | kernel_info pearApplingId | done — channel.js |\n| 35 | peer_firewall_stats v4 word9 | done — channel.js |\n| 36 | compact_ping schema 3 encodingHint | done — channel.js |\n| 37 | handshakeTokenBucketV3Json on replication_status | done — channel.js |\n| 38 | Seed RPC ready_guard_v3 | done — seed-rpc-methods, channel |\n| 39 | Seed RPC mirror_drive_compaction_v4 | done — channel + seeder |\n| 40 | Seed RPC blind_relay_circuit_v2 | done — channel + seeder |\n| 41 | /proc pear_stage_pointer.json | done — bare-os-proc-bare-module-crypto-staging.js |\n| 42 | /proc pear_updater_state.json | done — word9 proc |\n| 43 | /proc pear_appling_manifest.json | done — word9 proc |\n| 44 | /proc drive_resolve_cache.json | done — word9 proc |\n| 45 | /proc bare_module_resolution.json | done — word9 proc |\n| 46 | /proc bare_crypto_policy.json | done — word9 proc |\n| 47 | /proc bare_ipc_bridge.json | done — word9 proc |\n| 48 | /proc bare_vm_sandbox_sketch.json | done — word9 proc |\n| 49 | /proc bare_daemon_hooks.json | done — word9 proc |\n| 50 | /proc bare_storage_quota.json | done — word9 proc |\n| 51 | /proc bare_worker_pool.json | done — word9 proc |\n| 52 | /proc pear_wakeups_schedule.json | done — word9 proc |\n| 53 | /proc pear_drop_events.json | done — word9 proc |\n| 54 | /proc pear_radio_state.json | done — word9 proc |\n| 55 | /proc hypercore_repair_hint.json | done — word9 proc |\n| 56 | /proc hyperdrive_sparse_index.json | done — word9 proc |\n| 57 | /proc protomux_channel_alias_v2.json | done — word9 proc |\n| 58 | /proc structured_clone_budget_v2.json | done — word9 proc |\n| 59 | /proc form_data_delegate_limits_v2.json | done — word9 proc |\n| 60 | bare_os_proc_index schema 5 | done — vfs.js + aliases + readdir |\n| 61 | ctx.bareOsEmitPearStageHint | done — booter index.js |\n| 62 | ctx.bareOsBareModuleResolveProbe | done — booter stub |\n| 63 | ctx.bareOsBareCryptoCapProbe | done — booter + BARE_OS_BARE_CRYPTO_VERSION |\n| 64 | ctx.bareOsPearUpdaterChannel | done — booter |\n| 65 | ctx.bareOsEmitDriveResolveHint | done — booter |\n| 66 | ctx.bareOsRegisterBareDiagnosticsTapV2 | done — booter alias |\n| 67 | ctx.bareOsEmitPearMessageSketch | done — booter |\n| 68 | ctx.bareOsEmitTrybootSlot | done — booter |\n| 69 | ctx.bareOsEmitMultisigPointer | done — booter |\n| 70 | ctx.bareOsBareStorageHint | done — booter |\n| 71 | boot.policy v9 requireKernelCapabilitiesBareModuleCryptoStaging | done — schema + kernel/init.js |\n| 72 | boot.policy requirePearRuntimeRange | done — kernel/init.js semverLte |\n| 73 | boot.policy denyBareModuleSpecifierPatterns | done — kernel/init.js env JSON |\n| 74 | maxKernelExtensionDepth v2 (shared key; stricter docs) | done — boot.policy.schema note |\n| 75 | boot.policy requireBareCryptoMin | done — kernel/init.js |\n| 76 | boot.policy denyKernelSyscalls | done — kernel/init.js env |\n| 77 | boot.policy requirePearIpcMin | done — kernel/init.js |\n| 78 | boot.policy extensionSignerPinsV2 | done — kernel/init.js env |\n| 79 | boot.policy offlineLkgManifestMaxAgeSec | done — kernel/init.js env |\n| 80 | boot.policy bootStagesRequireProcIndexMinSchema (legacy bootPhasesRequireProcIndexMinSchema) | done — kernel/init.js |\n| 81 | /bin/openssl stub (bare-crypto doc) | done — bare-os-coreutils |\n| 82 | proc extensions.json schema 6 | done — vfs procBareOsExtensionsText |\n| 83 | BARE_OS_PROBE_ID_BARE_MODULE_CRYPTO_STAGING + bareModuleProbeClass telemetry | done — bare-os-var-log |\n| 84 | NDJSON lifecycle schema 8 | done — bare-os-lifecycle-schema.js |\n| 85 | OTel JSONL otlSchemaVersion 6 | done — bare-os-var-log |\n| 86 | Audit JSON schema 6 | done — index.js + kernel-runner.js |\n| 87 | BARE_OS_BIN_WORKER_ALLOW mediaproc:* | done — kernel-runner.js |\n| 88 | Seed RPC http_dht_proxy_routes_v2 | done — channel + seeder |\n| 89 | bareOsAdvertisedKernelCapabilitiesBareModuleCryptoStaging + seed bits9 ctx | done — index.js |\n| 90 | VFS BARE_OS_PROC_FILE_TO_ID_BARE_MODULE_CRYPTO_STAGING + routing | done — vfs.js |\n| 91 | Developer-guide Node→Bare module map | done — developer-guide/node-to-bare-modules.md |\n| 92 | Handbook ch.11 word-9 pointer | done — handbook |\n| 93 | kernel-capabilities-index FEATURE9_* | done — docs reference |\n| 94 | kernel-extensions.md word9 env/proc | done — docs reference |\n| 95 | compatibility-matrix word-9 row | done — docs/reference |\n| 96 | scripts/README.md word9 verifier | done — scripts index |\n| 97 | booter CHANGELOG word-9 | done — packages/bare-os-booter |\n| 98 | privacy doc PII scrub word9 keys | done — developer-guide |\n| 99 | BARE_OS_SOCKS_PROXY_MAP_JSON helper | done — http-fetch-url.js |\n| 100 | Mega-integration word9 + parity | done — pretest + seeder kernel sync |\n\nCAPABILITY WORD 10 CHECKLIST (100-ITEM MEGA KERNEL)\n\n| # | Item | Status |\n| 1 | bits10 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS + FEATURE10_* + BARE_OS_KERNEL_FEATURE_BITS_DOC=12 | done — kernel-feature-bits.js, protocol index |\n| 2 | ADR 001 §13 tenth capability word | done — developer-guide/adr/001 |\n| 3 | bits10 on seed capabilities + /proc + BARE_OS_SEED_CAP_STRICT | done — channel.js, booter index.js |\n| 4 | BARE_OS_CTX_API_VERSION 1.19.0 + bare-os-ctx.d.ts word10 | done — bare-os-ctx-api.js |\n| 5 | verify-ctx-api-feature-bits + verify-ctx-dts bits10 | done — scripts |\n| 6 | verify-kernel-capabilities-word-10.mjs 100 rows + pretest | done — scripts |\n| 7 | verify-kernel-capabilities-contract BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS + RPC + boot policy v10 | done — verify-kernel-capabilities-contract.mjs |\n| 8 | package-bare-os-protocol.md semver 0.6.0 | done — docs |\n| 9 | Protocol package 0.6.0 + protocol-meta.js | done — bare-os-protocol |\n| 10 | BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS !== 0 protocol test | done — test.js |\n| 11 | Seed RPC pear_doctor_hint | done — seed-rpc-methods, channel |\n| 12 | Seed RPC pear_info_sketch | done — channel |\n| 13 | Seed RPC pear_inspect_caps | done — channel |\n| 14 | Seed RPC pear_dump_budget | done — channel |\n| 15 | Seed RPC pear_reset_guard | done — channel |\n| 16 | Seed RPC pear_restart_window | done — channel |\n| 17 | Seed RPC pear_run_flags | done — channel |\n| 18 | Seed RPC pear_bundle_manifest_slice | done — channel |\n| 19 | Seed RPC pear_pack_layout_hint | done — channel |\n| 20 | Seed RPC pear_seed_topology | done — channel |\n| 21 | Seed RPC pear_state_snapshot | done — channel |\n| 22 | Seed RPC pear_stamp_pointer | done — channel |\n| 23 | Seed RPC pear_shake_latency | done — channel |\n| 24 | Seed RPC pear_crasher_class | done — channel |\n| 25 | Seed RPC pear_errors_rate_hint | done — channel |\n| 26 | Seed RPC pear_bridge_health | done — channel |\n| 27 | Seed RPC pear_link_matrix | done — channel |\n| 28 | Seed RPC pear_pipe_backpressure | done — channel |\n| 29 | Seed RPC pear_opwait_budget | done — channel |\n| 30 | Seed RPC pear_terminal_caps | done — channel |\n| 31 | replication_status.pearBundleTier | done — channel + seeder env |\n| 32 | replication_status.autobaseDiscoveryHint | done — channel + seeder env |\n| 33 | staging_slot schema 7 + word10 blob | done — channel.js |\n| 34 | kernel_info.pearRuntimeBareFingerprint | done — channel + seeder env |\n| 35 | peer_firewall_stats v5 + word10 | done — channel.js |\n| 36 | compact_ping v4 optional fields | done — channel + compact_ping_v4 RPC |\n| 37 | handshakeTokenBucketV4Json / seeder token bucket v4 | done — replication_status |\n| 38 | ready_guard_v4 RPC | done — seed-rpc-methods, channel |\n| 39 | mirror_drive_compaction_v5 RPC | done — seed-rpc-methods, channel + seeder |\n| 40 | blind_relay_circuit_v3 RPC | done — seed-rpc-methods, channel + seeder |\n| 41 | /proc pear_doctor_state.json | done — bare-os-proc-pear-inspect-logger-tls.js |\n| 42 | /proc pear_workshop_flags.json | done — word10 proc |\n| 43 | /proc pear_user_dirs_map.json | done — word10 proc |\n| 44 | /proc pear_api_allowlist_sketch.json | done — word10 proc |\n| 45 | /proc pear_rti_pointer.json | done — word10 proc |\n| 46 | /proc bare_boot_phase_map.json | done — word10 proc |\n| 47 | /proc bare_rpc_registry_sketch.json | done — word10 proc |\n| 48 | /proc bare_logger_policy.json | done — word10 proc |\n| 49 | /proc bare_performance_counters.json | done — word10 proc |\n| 50 | /proc bare_inspect_policy.json | done — word10 proc |\n| 51 | /proc bare_signals_mask.json | done — word10 proc |\n| 52 | /proc bare_timers_budget.json | done — word10 proc |\n| 53 | /proc bare_stream_backpressure.json | done — word10 proc |\n| 54 | /proc bare_ws_gateway_sketch.json | done — word10 proc |\n| 55 | /proc bare_tls_session_hint.json | done — word10 proc |\n| 56 | /proc autobase_writer_hint.json | done — word10 proc |\n| 57 | /proc blind_pairing_sketch.json | done — word10 proc |\n| 58 | /proc broadcast_encryption_hint.json | done — word10 proc |\n| 59 | /proc activity_queue_depth.json | done — word10 proc |\n| 60 | bare_os_proc_index schema 6 | done — vfs.js + aliases + readdir |\n| 61 | ctx.bareOsEmitPearDoctorHint | done — booter index.js |\n| 62 | ctx.bareOsPearInspectProbe | done — booter stub |\n| 63 | ctx.bareOsEmitBareBootPhaseHint | done — booter |\n| 64 | ctx.bareOsBareRpcCapProbe | done — booter |\n| 65 | ctx.bareOsEmitPearStampPointer | done — booter |\n| 66 | ctx.bareOsRegisterBareLoggerTap | done — booter (capped) |\n| 67 | ctx.bareOsEmitAutobaseDiscoveryHint | done — booter |\n| 68 | ctx.bareOsEmitBlindPairingSketch | done — booter |\n| 69 | ctx.bareOsBareStreamBackpressureHint | done — booter |\n| 70 | ctx.bareOsPearTerminalCapsProbe | done — booter |\n| 71 | boot.policy v10 requireKernelCapabilitiesPearInspectLoggerTls | done — schema + kernel/init.js |\n| 72 | requireBareBootMin | done — kernel/init.js + BARE_OS_BARE_BOOT_VERSION |\n| 73 | denyBareRpcMethodPatterns | done — kernel/init.js env JSON |\n| 74 | maxPearInspectDepth | done — kernel/init.js env |\n| 75 | requireBareLoggerMin | done — kernel/init.js |\n| 76 | denyAutobaseDiscoveryChannels | done — kernel/init.js env JSON |\n| 77 | requireBareTlsMin | done — kernel/init.js |\n| 78 | extensionSignerPinsV3 | done — boot.policy.schema + kernel env |\n| 79 | offlineLkgRequirePearStamp | done — kernel/init.js env |\n| 80 | bootStagesRequireLifecycleMinSchema (legacy bootPhasesRequireLifecycleMinSchema) | done — kernel/init.js vs lifecycle schema |\n| 81 | bare-fs errno mapping v4 (handbook) | done — handbook ch.9 |\n| 82 | Union statfs v2 docs | done — handbook ch.9 |\n| 83 | /dev/shm quota v3 class hints | done — handbook ch.9 |\n| 84 | Shell export -f v2 edge cases | done — handbook ch.9 |\n| 85 | tar xattr subset stub | done — coreutils + handbook |\n| 86 | ssh-keygen stub (bare-crypto) | done — coreutils + handbook |\n| 87 | xargs -P parallelism cap | done — coreutils + tests |\n| 88 | Git worktree policy v4 | done — developer-guide / handbook |\n| 89 | BARE_OS_BIN_WORKER_ALLOW sysproc:* | done — kernel-runner.js |\n| 90 | BARE_OS_THREAD_POOL_TELEMETRY_JSON | done — env passthrough + docs |\n| 91 | bare-realm boundary v2 doc | done — developer-guide |\n| 92 | bare-dns DoT path doc | done — developer-guide / handbook |\n| 93 | Transport table v2 (tcp/tls/ws) | done — reference docs |\n| 94 | wget bare-fetch mirror path | done — node-to-bare-modules.md |\n| 95 | BARE_OS_MTLS_PROXY_MAP_JSON | done — booter env passthrough + kernel-extensions |\n| 96 | BARE_OS_HAPPY_EYEBALLS_V4_MODE | done — env + compatibility-matrix note |\n| 97 | NDJSON lifecycle v9 pearInspectLoggerTlsProbeId | done — bare-os-var-log.js |\n| 98 | OTel JSONL otlSchemaVersion 7 | done — bare-os-var-log.js |\n| 99 | Audit JSON schema 7 | done — index.js + kernel-runner.js |\n| 100 | Mega-integration word10 + parity | done — pretest + seeder kernel sync |\n\nCAPABILITY WORD 11 CHECKLIST (100-ITEM MEGA KERNEL)\n\n| # | Item | Status |\n| 1 | bits11 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE + FEATURE11_* + BARE_OS_KERNEL_FEATURE_BITS_DOC=14 | done — kernel-feature-bits.js, protocol |\n| 2 | ADR 001 §14 eleventh capability word | done — developer-guide/adr/001 |\n| 3 | Protocol 0.8.0 + protocol-meta + package semver | done — bare-os-protocol |\n| 4 | channel.js bits11 + seed RPC word-11 handlers | done — channel.js |\n| 5 | BARE_OS_SEED_CAP_STRICT bits11 stock coverage | done — booter index.js |\n| 6 | Offline LKG seedCapabilityInfo bits11 | done — loadOsFromOfflineLkg |\n| 7 | verify-kernel-capabilities-word-11.mjs + pretest | done — scripts |\n| 8 | verify-kernel-capabilities-contract BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE + RPC + boot v11 | done — verify-kernel-capabilities-contract.mjs |\n| 9 | verify-ctx-api-feature-bits bits11 + doc 13 | done — scripts |\n| 10 | BARE_OS_CTX_API_VERSION 1.20.0 | done — bare-os-ctx-api.js |\n| 11 | bare-os-ctx.d.ts bits11 + word11 ctx methods | done — typings |\n| 12 | Seed RPC hypercore_replicate_budget_v2 | done — seed-rpc + channel |\n| 13 | Seed RPC drive_version_graph | done — seed-rpc + channel |\n| 14 | Seed RPC protomux_backpressure_v3 | done — seed-rpc + channel |\n| 15 | Seed RPC pear_runtime_matrix | done — seed-rpc + channel |\n| 16 | Seed RPC bundle_preload_hint | done — seed-rpc + channel |\n| 17 | Seed RPC autopass_rotation_hint | done — seed-rpc + channel |\n| 18 | Seed RPC hrpc_method_allowlist | done — seed-rpc + channel |\n| 19 | Seed RPC sidecar_resource_cap | done — seed-rpc + channel |\n| 20 | Seed RPC git_lfs_budget | done — seed-rpc + channel |\n| 21 | Seed RPC net_qos_class | done — seed-rpc + channel |\n| 22 | Seed RPC storage_tier_hint | done — seed-rpc + channel |\n| 23 | Seed RPC indexer_catchup | done — seed-rpc + channel |\n| 24 | Seed RPC multisig_quorum_hint | done — seed-rpc + channel |\n| 25 | Seed RPC relay_geo_hint | done — seed-rpc + channel |\n| 26 | Seed RPC compact_ping_v5 | done — seed-rpc + channel |\n| 27 | Seed RPC staging_slot_v8 | done — seed-rpc + channel |\n| 28 | Seed RPC peer_firewall_stats_v6 | done — seed-rpc + channel |\n| 29 | Seed RPC http_dht_proxy_routes_v3 | done — seed-rpc + channel |\n| 30 | Seed RPC ready_guard_v5 | done — seed-rpc + channel |\n| 31 | Seed RPC mirror_drive_compaction_v6 | done — seed-rpc + channel |\n| 32 | Seeder BARE_OS_SEED_* passthrough word11 | done — bare-os-seeder index.js |\n| 33 | bare-os-proc-hypercore-pack-hrpc-lifecycle.js 20 /proc JSON builders | done — booter lib |\n| 34 | VFS BARE_OS_PROC_FILE_TO_ID_HYPERCORE_PACK_HRPC_LIFECYCLE + routing | done — vfs.js |\n| 35 | bare_os_proc_index schema 7 + word11 entries | done — vfs.js |\n| 36 | ctx word11 emitters/probes (hypercore, drive graph, …) | done — index.js |\n| 37 | BARE_OS_PROBE_ID_HYPERCORE_PACK_HRPC_LIFECYCLE env passthrough | done — index.js + var-log |\n| 38 | boot.policy v11 schema keys | done — boot.policy.schema.json |\n| 39 | requireKernelCapabilitiesHypercorePackHrpcLifecycle enforcement | done — kernel/init.js |\n| 40 | extensionSignerPinsV4 env JSON | done — kernel/init.js |\n| 41 | requireBarePackMin / requireBareAddonPolicyMin | done — kernel/init.js |\n| 42 | maxHrpcAllowlistDepth env | done — kernel/init.js |\n| 43 | offlineLkgRequireHypercorePackHrpcLifecycle env | done — kernel/init.js |\n| 44 | denySeedRpcMethods merge with prior env | done — kernel/init.js |\n| 45 | boot trace NDJSON word11 probe fields | done — kernel/init.js bootTimed |\n| 46 | /proc/extensions.json schema 8 payload | done — procBareOsExtensionsText |\n| 47 | BARE_OS_BARE_PACK_VERSION / ADDON_POLICY_VERSION passthrough | done — booter shell env |\n| 48 | cryptoproc: + indexerproc: worker patterns | done — kernel-runner.js |\n| 49 | NDJSON lifecycle schema 10 + telemetry mirror | done — lifecycle-schema + var-log |\n| 50 | OTel otlSchemaVersion 8 | done — var-log + schema |\n| 51 | auditSchemaVersion 8 | done — index.js + kernel-runner.js |\n| 52 | host-delegate-registry sidecar + pear_runtime_matrix stubs | done — host-delegate-registry.js |\n| 53 | boot.policy.example.json v11 fields | done — kernel/etc |\n| 54 | telemetry-ndjson.example lifecycle 10 | done — kernel/etc |\n| 55 | otel-jsonl.example otlSchemaVersion 8 | done — kernel/etc |\n| 56 | kernel-extensions.registry.schema.json schema 8 branch | done — docs/schemas |\n| 57 | BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE !== 0 protocol test | done — packages/bare-os-protocol/test.js |\n| 58 | compatibility-matrix word-11 row | done — docs/reference |\n| 59 | verify-compat-matrix bits11 | done — scripts |\n| 60 | package-bare-os-protocol.md 0.8.0 pointer | done — docs/reference (sync) |\n| 61 | kernel-capabilities-index FEATURE11_* | done — docs/reference (sync) |\n| 62 | kernel-extensions.md word11 env/proc | done — docs/reference (sync) |\n| 63 | developer-guide node-to-bare word11 pointers | done — developer-guide (sync) |\n| 64 | handbook ch.6 boot policy v11 | done — handbook (sync) |\n| 65 | handbook ch.3 protocol 0.7 / bits11 | done — handbook (sync) |\n| 66 | README + DOCUMENTATION word11 headline | done — root docs (sync) |\n| 67 | PEAR-RUN + booter README ctx 1.20 | done — package READMEs (sync) |\n| 68 | scripts/README.md word11 verifier | done — scripts/README.md (sync) |\n| 69 | privacy telemetry PII word11 keys | done — developer-guide/13 (sync) |\n| 70 | release-checklist word11 gates | done — scripts/release-checklist.mjs (sync) |\n| 71 | validate-example-schemas word11 examples | done — validate-example-schemas |\n| 72 | VFS readdir ordering word11 proc files | done — vfs.js tests / impl |\n| 73 | loadOsFromPeers strict bits11 | done — index.js |\n| 74 | kernel_info / capabilities bits11 adjunct | done — channel.js |\n| 75 | Word-11 proc bare_pack_cache + bare_addon_policy | done — word11-proc |\n| 76 | Word-11 proc bare_signals_profile + bare_timers_histogram | done — word11-proc |\n| 77 | ctx bareOsBarePackCacheProbe + bareOsBareAddonPolicyProbe | done — index.js |\n| 78 | ctx bareOsBareSignalsProfile + bareOsBareTimersHistogram | done — index.js |\n| 79 | Stream F VFS env toggles BARE_OS_HIDE_PROC_HYPERCORE_PACK_HRPC_LIFECYCLE_* | done — vfs routing |\n| 80 | Stream G coreutils/shell matrix (plan slots) | tracked — handbook + coreutils |\n| 81 | Stream H initd/timer/cron matrix (plan slots) | tracked — handbook |\n| 82 | Stream I workers sandbox subprocess schema bumps | tracked — docs + runner |\n| 83 | Stream J HTTP/DNS/TLS proxy map docs | tracked — kernel-extensions |\n| 84 | Stream K git/hyperdrive storage coherence | tracked — developer-guide |\n| 85 | Stream L Pear desktop IPC updater cross-links | tracked — docs |\n| 86 | Stream M observability schema 10/8/8 | done — lifecycle + var-log + audit |\n| 87 | Stream N bare-* catalog rows (ongoing) | tracked — node-to-bare-modules |\n| 88 | Stream O UI/native doc-only caps | tracked — developer-guide |\n| 89 | Stream P CI brittle-node / brittle-bare splits | tracked — booter test.js |\n| 90 | Stream Q handbook/devguide/reference sweep | tracked — mega doc pass |\n| 91 | Stream R HyperDB/Pear finishing slots | tracked — seed RPC tests |\n| 92 | Stream S release hygiene + compat CI | tracked — pretest matrix |\n| 93 | verify-doc-links word11 anchors | done — CI |\n| 94 | verify-man-coverage word11 | done — CI |\n| 95 | verify-pear-no-static-node-import | done — CI |\n| 96 | verify-kernel-seeder-parity after kernel merge | done — pretest |\n| 97 | smoke-bare-manifest imports | done — pretest |\n| 98 | booter CHANGELOG word11 headline | done — packages/bare-os-booter |\n| 99 | protocol CHANGELOG 0.8.0 | done — packages/bare-os-protocol |\n| 100 | Mega-integration word11 + seeder kernel parity | done — pretest + rsync kernel |\n| 101 | Protomux bare-os-chat-v1 swarm chat (BARE_OS_FEATURE11_SWARM_CHAT) | done — protocol + booter |\n\nSee also kernel-extensions.md <kernel-extensions.md> and package-bare-os-protocol.md <package-bare-os-protocol.md>.\n\nKERNEL PROGRAM BACKLOG — BATCH A (100 ITEMS)\n\nGoverned kernel expansion: developer-guide/kernel-program.md <../../developer-guide/kernel-program.md>, stock kernel boot hooks (BARE_OS_BOOT_SAFE_MODE, BARE_OS_BOOT_TRANSACTION_JOURNAL, BARE_OS_BOOT_CHECKPOINT), kernel.ext.d ordering fields requires / after / before, /proc/bare_os/kernel_program.json (legacy giant_phase_program.json), /bin/kernel-doctor, /bin/kernel-explain, scripts verify-kernel-program-doc.mjs + kernel-program-benchmark-harness.mjs. bareOsCtxApiVersion 1.25.0: optional subsystems.kernel.programProc on bareOsPublishBootReady payloads.\n\nKERNEL PROGRAM BACKLOG — BATCH B (100 ITEMS)\n\nSecond batch of the same governed program. Traceability: developer-guide/kernel-program.md <../../developer-guide/kernel-program.md>, /proc/bare_os/kernel_program.json schema 2, bareOsCtxApiVersion 1.30.0.\n\n| # | Item | Status |\n| 1 | Named boot stages in journal and boot.json | done |\n| 2 | Tiered boot.policy.json policyFallbackPaths merge | done |\n| 3 | Boot rollback marker /run + BARE_OS_BOOT_ROLLBACK_APPLY | done |\n| 4 | Boot bundle digest gate (policy + env hex) | done |\n| 5 | ABI negotiation BARE_OS_REQUIRE_CTX_API_MIN vs bareOsCtxApiVersion | done |\n| 6 | Initd admission hints from policy → env caps | done |\n| 7 | Boot dry-run BARE_OS_BOOT_DRY_RUN skips execLine/extensions | done |\n| 8 | kernel-boot-diff compares boot-checkpoint NDJSON | done |\n| 9 | kernel.d ConditionEnvironment guards (comment lines) | done |\n| 10 | boot.policy.schema extension keys + handbook boot doc | done |\n| 11 | Import map template for extensions (doc) | done |\n| 12 | bare_module_resolution.json refresh (existing proc) | done |\n| 13 | Dual-target manifest row policy bare-only|dual|host-delegate-only | done |\n| 14 | Lazy preload BARE_OS_BUNDLE_PRELOAD_LAZY_JSON merged hint | done |\n| 15 | Sandbox profile registry proc sketch env | done |\n| 16 | Resolution failure remediation codes (doc) | done |\n| 17 | Loader audit NDJSON cap-gated /run path | done |\n| 18 | Lockfile transitive allowlist env sketch | done |\n| 19 | kernel-manifest-validate /bin helper | done |\n| 20 | node-to-bare-modules dev guide cross-links | done |\n| 21 | Supervisor restart classes in initd units (always|on-failure|no) | done |\n| 22 | Session / job-control ids (document limits) | done |\n| 23 | Signal map /proc bare_signals_profile alignment | done |\n| 24 | Subprocess resource hints env for delegate | done |\n| 25 | structured_clone_budget_v2 proc sizes/drops | done |\n| 26 | /run/bare-os/services.json registry seed | done |\n| 27 | IPC RPC token BARE_OS_IPC_RPC_TOKEN (existing) | done |\n| 28 | CPU slice hints proc JSON env | done |\n| 29 | IPC read watchdog timeout env sketch | done |\n| 30 | initd docs in users-manual + kernel-extensions | done |\n| 31 | Cross-drive transactional copy (doc + policy pointer) | done |\n| 32 | Path ACL denyVfsPrefixes boot policy | done |\n| 33 | Mount namespace simulation (doc) | done |\n| 34 | vfs.watch debounce metrics_live coalesce env | done |\n| 35 | Content-addressed /bin cache proc hit/miss env | done |\n| 36 | kernel-fsck integrity walk stub | done |\n| 37 | home snapshot tar stream stub command | done |\n| 38 | Compression policy bare-zlib class env | done |\n| 39 | Advisory lock personal-drive subset (doc) | done |\n| 40 | POSIX appendix + troubleshooting VFS notes | done |\n| 41 | bare-net/dns/tcp delegate capability + proc sketch | done |\n| 42 | Egress policy v2 env JSON merge | done |\n| 43 | Listener registry proc stub | done |\n| 44 | DNS profile BARE_OS_DNS_PROFILE switch | done |\n| 45 | bare-tls session cache hint proc | done |\n| 46 | bare-http1 middleware hook doc | done |\n| 47 | bare-ws devtools channel sketch | done |\n| 48 | QoS tags net_qos_class reuse | done |\n| 49 | Chaos latency BARE_OS_DELEGATE_CHAOS_MS dev-only | done |\n| 50 | http-curl wget capability doc links | done |\n| 51 | Key broker bareOsAcquireKeyHandle opaque stub | done |\n| 52 | Keyring rotation schedule JSON env pointer | done |\n| 53 | Secret buffer policy safe_sodium_buffer doc | done |\n| 54 | Challenge-response execLine optional env | done |\n| 55 | Elevation sudo allowlist /etc path doc | done |\n| 56 | Config attestation hash proc env | done |\n| 57 | Audit chain prevHash field env | done |\n| 58 | Extension signing multi-signer pins policy vNext field | done |\n| 59 | Entropy health urandom policy proc | done |\n| 60 | Security ADR cross-links | done |\n| 61 | Event bus bareOsEmitKernelEvent subscribe | done |\n| 62 | ReadinessCommand initd subset + metrics_live.initdReadiness schema 2 | done |\n| 63 | kernel-triage crash bundle manifest | done |\n| 64 | SLO wave11_operator_slo_v2 schema bump note | done |\n| 65 | Anomaly execLine spike telemetry field env | done |\n| 66 | Circuit breaker delegate failures env JSON | done |\n| 67 | Playbooks /etc/bare-os/playbooks.d trusted doc | done |\n| 68 | OTel resource attributes kernel env JSON | done |\n| 69 | Retention hints /var/log job env | done |\n| 70 | Telemetry schemas + ops manual updates | done |\n| 71 | A/B channel names bareOsSystemRevision extended env | done |\n| 72 | Signed component manifest triple env sketch | done |\n| 73 | kernel-preflight caps+policy check stub | done |\n| 74 | Partial /lib/bare refresh path doc | done |\n| 75 | Pear lockfile at booter boundary doc | done |\n| 76 | Rollback reason codes seed RPC adjunct doc | done |\n| 77 | kernel/migrations/*.js runner doc | done |\n| 78 | Selftest profile BARE_OS_KERNEL_SELFTEST=upgrade | done |\n| 79 | Provenance report JSON for support bundle | done |\n| 80 | compat matrix + release checklist kernel program | done |\n| 81 | kernel-doctor initd delegate module sections | done |\n| 82 | kernel-explain boot_policy_fail cap_mismatch codes | done |\n| 83 | Shell completion metadata from commands.mjs gen | done |\n| 84 | Profile env bundles /etc examples doc | done |\n| 85 | man see-also capability words (doc) | done |\n| 86 | Extension scaffold pear create doc | done |\n| 87 | Integration harness npm script pattern doc | done |\n| 88 | BARE_OS_DELEGATE_TRACE unified log format env | done |\n| 89 | Machine-readable capability map JSON proc | done |\n| 90 | Developer-guide cookbook pointer | done |\n| 91 | kernel-program-benchmark-harness boot timings (kernel_crypto_synthetic_benchmark suite) | done |\n| 92 | VFS microbench script stub | done |\n| 93 | IPC ping-pong booter test augmentation | done |\n| 94 | Network mock bench DNS/TCP policy path | done |\n| 95 | bare-crypto microbench script host stub | done |\n| 96 | Compat verifier kernel program proc schema vs code | done |\n| 97 | Fuzz boot policy JSON harness | done |\n| 98 | Chaos safe-mode rollback integration test doc | done |\n| 99 | Release gate benchmark regression script | done |\n| 100 | Program batch B table + verify-kernel-program-roadmap-table.mjs CI | done |\n\nKERNEL PROGRAM BACKLOG — BATCH C (100 ITEMS, IN PROGRESS)\n\nThird batch of the governed kernel program (post word-11 + 200-item baseline). Traceability: developer-guide/kernel-program.md <../../developer-guide/kernel-program.md>, /proc/bare_os/kernel_program.json (planned schema 3 or adjunct-only), bareOsCtxApiVersion TBD on first real surface (target ≥1.55). New items here should be small, testable with existing harnesses, and accompanied by a matching agent skill update when they touch developer workflow.\n\nUse the kernel-program-extension skill (seeded) + bareos-code-change + docs-contract-update before editing. Always add the roadmap row first.\n\n| # | Item | Status |\n| 1 | Batch C section + kernel-program-extension agent skill (this row) | done — skill with full Bare/Pear runtime constraints research notes + cross-refs |\n| 2 | kernel-program proc schema 3 + programVersion 3 bump (minimal adjunct) | done — bare-os-kernel-program-proc.js + batchC field |\n| 3 | new operatorSketch: bareOsEmitKernelProgramOperatorHint + env | planned |\n| 4 | Batch C verifier v2 (300-item table support + roadmap table count) | done — verify-kernel-program-roadmap-table.mjs generalized (skips A, enforces B + future completed batches) |\n| 5 | kernel.ext.d 'provides' semver field + resolver support | planned |\n| 6 | Wasm kernel bridge expansion (posix_fadvise + select fds when enabled) | planned |\n| 7 | kernel-program-benchmark-harness v2 (add batch C timing suite) | planned |\n| 8 | operatorSketches in /proc/bare_os/kernel_program.json documented | planned |\n| 9 | kernel-program-release-gate.mjs extended for Batch C items | planned |\n| 10 | All future Batch C items must reference local bare-* clones at BARE_OS_HOLEPUNCH_CLONES_ROOT for guest-safe APIs (research captured in kernel-program-extension skill) | done — research + skill notes |\n| 11 | First real non-doc Batch C item (chosen from Streams G/H/I or new, designed against bare-fs / bare-worker / bare-crypto etc. as appropriate) + full pretest | planned |\n\nSee also the Streams (GS) tracked under word 11 for concrete work items that can graduate into Batch C rows with owners.\n\nSee also kernel-extensions.md <kernel-extensions.md> and package-bare-os-protocol.md <package-bare-os-protocol.md>.\n\nKERNEL PROGRAM BACKLOG — BATCH D (100 ITEMS)\n\nFourth batch of the governed kernel program. Builds on word-11 baseline, schema 3 proc, and early Batch C foundations (including the P2P App Store design in docs/design/p2p-app-store.md).\n\nTraceability: developer-guide/kernel-program.md <../../developer-guide/kernel-program.md>, /proc/bare_os/kernel_program.json schema 3, bareOsCtxApiVersion target ≥1.55.\n\nAll items must follow the updated process: start with read_skill kernel-program-extension, update this table first, prefer small verifiable increments, and update the kernel-program-extension skill when developer workflow is affected.\n\nTHEME: P2P APP STORE (MAJOR THREAD FOR BATCH D)\n\nSee the full design at docs/design/p2p-app-store.md <../../docs/design/p2p-app-store.md>. This is one of the primary application-layer features planned for this batch.\n\n| # | Item | Status |\n| 1 | App Store drive convention + HDMS label appstore + basic registry schema v1 | done |\n| 2 | /bin/appstore (list, info, search, install, launch, update, setup) | done |\n| 3 | Agent skill skills/appstore/SKILL.md | done |\n| 4 | HDMS auto-mount of appstore drive on session/login | partial — manual hdms create appstore |\n| 5 | Full user-app install flow (manifest + pear:// materialization) | done — appstore-pear.js |\n| 6 | Service manifest + automatic initd unit generation | partial — appstore services |\n| 7 | appstore launch (in-guest script execution) | done |\n| 8 | Signed extension manifest format + verification for store-sourced kernel extensions | planned |\n| 9 | Gated appstore install --kernel-ext + boot policy fields (pins, review status) | planned |\n| 10 | Appstore-sourced extensions loaded with distinct source tag + audit trail | planned |\n| 11 | /proc/bare_os/appstore.json + related virtual files | planned |\n| 12 | ctx.bareOsAppstore* surface (install, list, drive reference, extension registration) | planned |\n| 13 | Multi-index support + curated vs community channels in discovery | planned |\n| 14 | Agent-driven \"recommended for your workload\" installation flows | planned |\n\nTHEME: PEAR DEVELOPMENT ENVIRONMENT (CTX.PEAR + /BIN/PEAR) — NEW 2026 THREAD\n\nSee full plan and design at docs/design/ctx-pear-surface-and-bare-audit-plan.md <../../docs/design/ctx-pear-surface-and-bare-audit-plan.md> and audit notes in docs/audit/ctx-bare-audit-notes.md.\n\nThis thread delivers the ability to create, stage, release, and seed real Pear applications from inside a booted Bare OS guest (closing the loop with the P2P App Store).\n\n| # | Item | Status |\n| 1 | Add pearEntries tier to manifest + parallel loading in booter (loadPearModuleManifest) | done |\n| 2 | buildPearCtxObjectFromHost + ctx.pear exposure on guest context | done |\n| 3 | /bin/pear command (info, list, init, stage, release, seed) + man page | done |\n| 4 | pear-dev agent skill + seed list | done |\n| 5 | Cross-skill integration: pear-dev + appstore | done |\n| 6 | Guest pear stage (VFS .pear/stage/, bare-pack + compile) | done |\n| 7 | Host delegate for heavy Pear ops (optional; guest release is primary) | partial |\n| 8 | HDMS convention for pear-dev drive (parallel to appstore label) | partial — pear-<name> on release |\n| 9 | Guest pear release / pear seed (HDMS + pear:// links) | done |\n| 10 | Full verification, Batch D roadmap items, zero-TODO polish, agent-assisted review | planned |\n\nOTHER THEMES (TO BE EXPANDED)\n\nAdditional major themes for the remaining ~86 items in Batch D will be added iteratively. Current candidate themes (drawn from remaining Streams GS and post-word-11 maturation needs):\n\n- Agent Ecosystem 2.0 (autonomy, memory, skill marketplace)\n- Coreutils & Shell Completeness (advanced job control, process substitution, etc.)\n- Initd / Timer / Service Maturity\n- Workers, Sandbox & Subprocess Accounting\n- Security & Zero-Trust Phase 2\n- Observability & Diagnostics 2.0\n- bare-* Dual-Target Tooling & Ecosystem\n- Documentation, DX & Onboarding\n- Reliability, Testing & Chaos Engineering\n- Wasm & Extension Ecosystem Hardening\n\nNew rows will be added under the appropriate theme as they are proposed via the kernel-program-extension skill + this table.\n\nSee also the design document for the P2P App Store as an example of how larger features are broken into governed items.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","feature","roadmap","kernel","capability","program","status"],"seeAlso":[{"name":"docs-reference-holepunch-stack-alignment-implementation","section":7},{"name":"docs-reference-environment-and-posix-appendix","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/feature-roadmap.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-holepunch-stack-alignment-implementation","section":7,"title":"Holepunch Stack Alignment Implementation","synopsis":["man 7 docs-reference-holepunch-stack-alignment-implementation","Documentation page (plain text from docs/reference/holepunch-stack-alignment-implementation.md)"],"description":"HOLEPUNCH STACK ALIGNMENT IMPLEMENTATION\n\nThis document is the implementation tracker for the 50-point alignment plan.\nIt captures what is implemented now (v1 pass), where each item lands in the\nrepository, and what remains incremental hardening work.\n\nSCOPE\n\n- Mirror and drift controls use:\n- scripts/sync-holepunch-clones.mjs\n- scripts/report-holepunch-lockfile-drift.mjs\n- scripts/report-holepunch-runtime-compat.mjs\n- scripts/gen-holepunch-catalog-tiers.mjs\n- Runtime and operator surfaces use:\n- packages/bare-os-booter/ existing /proc/bare_os/ snapshots\n- New coreutils commands: appctl, corestorectl, ctxbaredoctor, dhtctl, trustctl\n\nITEM-TO-ARTIFACT MAPPING (1-50)\n\n1. Env usage documented in scripts/README.md for HOLEPUNCH_MIRROR and BARE_OS_HOLEPUNCH_CLONES_ROOT.\n2. Recurring clone drift reporting wired in scripts/sync-holepunch-clones.mjs + verify-holepunch-clone-drift.mjs.\n3. Tiered catalog output added in scripts/gen-holepunch-catalog-tiers.mjs -> docs/audit/holepunch-catalog-tiers.json.\n4. Release step for runtime range checks added to scripts/release-checklist.mjs via report-holepunch-runtime-compat.mjs.\n5. Runtime compatibility report emitted at docs/audit/holepunch-runtime-compat.json.\n6. ctx.bare boundary reinforced with ctxbaredoctor and existing docs/developer-guide/12-*.\n7. Native-addon host-import posture preserved (existing manifest policy + ctxbaredoctor visibility).\n8. Risk labeling remains manifest-first; this pass documents and audits current labels (tier/risk) in docs.\n9. ctxbaredoctor command added for drive-bundle vs host-import diagnosis.\n10. Compatibility drift script (report-holepunch-runtime-compat.mjs) checks runtime mapping freshness.\n11. appctl adds pear:// app registry semantics.\n12. Hyperbee-backed registry is staged as policy and shape in apps.registry.example.json (runtime storage work follows).\n13. appctl install registers pear:// links without kernel image copy.\n14. appctl launch delegates through control plane events (peerctl envelope path).\n15. appctl channels models staged, released, pinned-length.\n16. System update shape defined in system-update.manifest.example.json.\n17. Update manifest includes key/fork/length/signers/rollback metadata.\n18. Runtime-update lane documented in this file and release checklist hooks.\n19. Multisig path documented as trust/signer pin policy (trustctl + boot policy hooks).\n20. Rollback metadata includes lastKnownGoodLength and readiness gates.\n21. DHT identity exposure uses /proc/bare_os/identity.json via dhtctl export-key.\n22. Network service registry shape added in network.services.example.json.\n23. dhtctl implemented with status/lookup/announce/connect/firewall/export-key.\n24. Named swarm namespace policy represented in service registry and existing /proc/bare_os/swarm.\n25. Transport metadata consumed from existing peer_details/swarm proc snapshots.\n26. Relay-aware policy represented in network.services.example.json + trust policy.\n27. One-time diagnostic pipe captured as roadmap command surface (to land in a dedicated command next pass).\n28. Human-shareable endpoint support surfaced through dhtctl and DHT key export path.\n29. Capability checks represented in trust policy + control-plane confirmation (--yes).\n30. NAT/relay diagnostics continue via existing swarmdoctor/p2ptrace plus policy references here.\n31. corestorectl establishes storage-plane operator surface.\n32. Namespace policy shape added in corestore.namespaces.example.json.\n33. Hypercore audit-stream direction documented and tied to existing replication proc snapshots.\n34. Hyperbee metadata indexing direction documented; appctl registry and trust policy provide initial schema.\n35. Hyperdrive mount visibility exposed by corestorectl mounts.\n36. Autobase shared workspace remains a follow-on module; added as an explicit tracked phase in this doc.\n37. Indexer/quorum policy linked to trust policy and signer pins.\n38. Typed collaborative records staged via schema-first examples and trust policy references.\n39. Conflict visibility anchored by existing /proc replication surfaces and new storage commands.\n40. Keet-like concept layer tracked as room/message/file/membership service shape in this document.\n41. Trust root model implemented as local policy file + trustctl.\n42. Encryption policy mode and rotation represented in trust.policy.example.json.\n43. Password-derived local encryption documented via trust/encryption policy hooks.\n44. Boot policy capability gating remains in boot.policy.schema.json; this pass aligns docs and operator commands.\n45. trustctl inspect provides trust decision explanation surface.\n46. Operator toolkit expanded with dhtctl, corestorectl, appctl, trustctl, ctxbaredoctor.\n47. Structured state surfaced through existing /proc/bare_os/* plus these operator commands.\n48. Existing no-host-import mode (BARE_OS_BARE_HOST_IMPORTS=0) retained; smoke guidance documented in this file.\n49. Integration test direction documented here; existing booter tests and P2P tests remain baseline.\n50. Contributor track published in this file and linked command/script entry points.\n\nNEW OPERATOR COMMANDS\n\n- dhtctl: network discovery and control-plane DHT actions.\n- corestorectl: storage and replication visibility.\n- appctl: app registry and launch orchestration.\n- trustctl: trust roots and signer pin policy.\n- ctxbaredoctor: ctx.bare module-origin diagnostics.\n\nNEW EXAMPLE POLICY FILES\n\n- kernel/etc/bare-os/apps.registry.example.json\n- kernel/etc/bare-os/corestore.namespaces.example.json\n- kernel/etc/bare-os/network.services.example.json\n- kernel/etc/bare-os/system-update.manifest.example.json\n- kernel/etc/bare-os/trust.policy.example.json\n\nOPERATIONAL WORKFLOW\n\n1. Refresh catalog: npm run gen:bare-catalog\n2. Derive tiers: npm run gen:bare-catalog:tiers\n3. Sync clone drift report: npm run audit:holepunch-clones\n4. Generate runtime compatibility report: npm run report:holepunch-runtime-compat\n5. Run release checks: node scripts/release-checklist.mjs\n\nNEXT INCREMENTAL HARDENING\n\n- Wire dedicated /proc/bare_os/app_registry.json and /proc/bare_os/trust_policy.json host mirrors.\n- Add true Hyperbee/Corestore-backed persistence for app and trust records.\n- Add explicit Autobase service and test fixtures.\n- Add end-to-end integration smoke that boots, joins swarm, replicates a fixture Hyperdrive, and launches a pinned app.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","holepunch","stack","alignment","implementation"],"seeAlso":[{"name":"docs-reference-http-curl-and-wget","section":7},{"name":"docs-reference-feature-roadmap","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/holepunch-stack-alignment-implementation.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-http-curl-and-wget","section":7,"title":"HTTP clients: curl and wget on Bare OS","synopsis":["man 7 docs-reference-http-curl-and-wget","Documentation page (plain text from docs/reference/http-curl-and-wget.md)"],"description":"HTTP CLIENTS: CURL AND WGET ON BARE OS\n\nReference index → <README.md>\n\nBare OS exposes curl and wget as familiar command names, but they are not Daniel Stenbergs libcurl or full GNU wget. Both are JavaScript CLIs in the booter that use the Fetch API (or a compatible implementation), support a documented subset of common flags, and honor the same HTTP / DNS policy environment variables as the rest of the session.\n\nWHERE TO READ MORE\n\n- Flag parity and history — packages/bare-os-booter/CLI_PARITY.md <../../packages/bare-os-booter/CLI_PARITY.md>\n- Online man curl / man wget — Merged manual DB: packages/bare-os-coreutils/man/pages/curl.json <../../packages/bare-os-coreutils/man/pages/curl.json>, wget.json <../../packages/bare-os-coreutils/man/pages/wget.json>; narrative in Handbook ch. 10 <../../handbook/10-manpages-and-online-help.md>\n- Security, allowlists, audit — Developer guide — Security and trust <../../developer-guide/09-security-and-trust.md>\n- Environment variables (tables) — Environment variables and POSIX appendix <environment-and-posix-appendix.md#14-environment-variables-complete-list>\n- Capability / proc map — kernel-capabilities-index.md <./kernel-capabilities-index.md>; kernel program net sketches — kernel-extensions.md <./kernel-extensions.md> ( BARE_OS_NET_DELEGATE_SKETCH_JSON (legacy BARE_OS_GP2_NET_DELEGATE_SKETCH_JSON), BARE_OS_DNS_PROFILE, BARE_OS_DELEGATE_TRACE )\n\nINVOCATION: DELEGATES RUN BEFORE /BIN\n\nWhen the shell or ctx.runBinCommand resolves an external command, runBinCommand in kernel-runner.js <../../packages/bare-os-booter/lib/kernel-runner.js> consults the host delegate registry first (see host-delegate-registry.js <../../packages/bare-os-booter/lib/host-delegate-registry.js>). Delegates are registered with static imports of curl-cli.js, wget-cli.js, git-cli.js, and systemctl-cli.js so Pear staging and module resolution stay predictable (avoid dynamic import('./…') of sibling CLI modules from deep paths).\n\nOrder for a simple command name:\n\n1. Host delegates — basename match for git, curl, wget, and systemctl / bare-initctl / journalctl.\n2. Explicit paths — / in argv[0] → VFS script load.\n3. *.js in $PWD — before PATH**.\n4. PATH on the system drive only — normal /bin utilities.\n\nBARE_OS_DELEGATE_ALLOW (host → session passthrough) may restrict which delegate kinds run. When set to a comma- or whitespace-separated list (git, curl, wget, systemctl), only those kinds are allowed; a denied delegate logs a message and exits with 126. When unset or empty, all registered delegates are allowed. Optional per-minute rate limits use BARE_OS_DELEGATE_MAX_PER_MIN and per-kind *BARE_OS_DELEGATE__MAX_PER_MIN. Optional in-flight caps use BARE_OS_DELEGATE_MAX_CONCURRENT (global) and BARE_OS_DELEGATE_<KIND>_MAX_CONCURRENT (e.g. CURL, GIT, WGET, SYSTEMCTL) to queue or reject parallel delegate runs. With BARE_OS_AUDIT=1, BARE_OS_DELEGATE_AUDIT_ONLY=1 logs invocations and skips the host run (exit 0**). Optional audit logging for delegate invocations is described in the security guide.\n\n/BIN/CURL AND /BIN/WGET ON THE SYSTEM IMAGE\n\nThe coreutils build still emits kernel/bin/curl and kernel/bin/wget so ls /bin, which curl, and the sorted /bin manifest stay complete. Those files are placeholders: if the runner ever executed them, they would print an error, because the booter is expected to delegate first. In normal operation you never run the stub bodies in packages/bare-os-coreutils/src/curl.js <../../packages/bare-os-coreutils/src/curl.js> and wget.js <../../packages/bare-os-coreutils/src/wget.js>.\n\nHOW HTTP REQUESTS CHOOSE A FETCH IMPLEMENTATION\n\nDelegated curl and wget share the resolution helpers in bare-os-ensure-bare-fetch.js <../../packages/bare-os-booter/lib/bare-os-ensure-bare-fetch.js>.\n\nPer-request function — resolveBareOsFetchFn(ctx) returns, in order:\n\n1. ctx.httpFetch when it is a function — typically the booters policy-wrapped fetch (HTTP allow/deny lists, optional audit).\n2. Else ctx.bare.fetch when present — drive bundles may expose fetch; legacy bundles sometimes attach a CJS-shaped object, so the booter unwraps .default when needed (coerceBareFetchExport).\n3. Else globalThis.fetch when defined.\n\nPriming globals on hosts without native fetch — ensureBareFetchGlobals(ctx) (async) runs when the CLI needs globals installed:\n\n1. If globalThis.fetch already exists, return.\n2. Try ctx.bare.fetch (same .default unwrap) and copy fetch / Request / Response / Headers onto globalThis (and global on Node).\n3. Otherwise try import of bare-fetch (via import.meta.resolve when available, then import(href), for Pear-friendly resolution).\n4. If still missing, try bare-https and use its exported fetch.\n\nThe booter may also call primeGlobalFetchFromBareLibrary(bareLibrary) during ctx assembly so globalThis.fetch exists before guest code runs when the system image supplies /lib/bare/bundles/fetch.js.\n\nTLS and CA behavior for delegated curl can use optional init.bareOsCurlTls ( insecure, caPem, pinnedSha256) alongside BARE_OS_TLS_PIN_SHA256; see the security guide and kernel init documentation.\n\nCapability word 6 (rotation and HTTP hints) — For operators running bare-fetch (or host fetch) behind the delegate, document multi-pin rotation as a comma- or JSON-list of hex digests (same semantics as single-pin, evaluated by the host). HSTS preload lists and alt-svc hints are host-layer concerns: reserved env names BARE_OS_TLS_PINS_JSON, BARE_OS_HSTS_PRELOAD_PINS_JSON, BARE_OS_CURL_ALT_SVC_JSON are listed in kernel-extensions.md <./kernel-extensions.md> for Pear-side wiring; the stock in-guest booter does not parse them.\n\nPOLICY-RELATED ENVIRONMENT VARIABLES\n\nThese are summarized in the environment appendix <environment-and-posix-appendix.md>; the security guide explains threat model and audit interaction.\n\n- BARE_OS_HTTP_ALLOWLIST / BARE_OS_HTTP_DENYLIST — Restrict outbound http(s) URLs for policy-wrapped fetch (delegated clients and ctx.httpFetch).\n- BARE_OS_TLS_PIN_SHA256 — Optional TLS certificate pinning hint forwarded for pinning-aware hosts.\n- BARE_OS_DNS_ALLOWLIST — Optional host allowlist for http(s) URLs in delegated curl / wget (suffix forms such as *.example.com supported).\n- BARE_OS_DELEGATE_ALLOW — Limits which delegate kinds (curl, wget, …) may run.\n\nAGENT AND THE WEB_FETCH TOOL\n\nIn-guest /bin/agent uses the same ctx.httpFetch implementation as delegated curl / wget: policy-wrapped fetch when the booter sets ctx.httpFetch, with BARE_OS_HTTP_ALLOWLIST / BARE_OS_HTTP_DENYLIST applying to both the OpenAI-compatible provider /chat/completions URL and URLs fetched by the assistants web_fetch tool. Operators must allowlist every host the session will call (API origin plus any http(s) sites you expect web_fetch to retrieve). web_fetch (and bare-fetch 3) may also surface response.type and Headers.getSetCookie() on the tool result when the host implementation provides them.\n\nConfiguration and tool semantics are not duplicated here — see guest man agent (packages/bare-os-coreutils/man/pages/agent.json <../../packages/bare-os-coreutils/man/pages/agent.json> in the repo) and User manual — ch.4 <../../users-manual/04-shell-path-and-scripts.md>.\n\nRELATED HANDBOOK SECTIONS\n\n- Handbook ch. 4 — Booter runtime <../../handbook/04-the-booter-runtime.md> ( ctx, HTTP policy overview, agent)\n- Handbook ch. 6 — Kernel and /bin <../../handbook/06-kernel-and-binaries.md> (delegated vs coreutils)\n- Handbook ch. 9 — POSIX utilities <../../handbook/09-posix-utilities-shell-and-vfs.md> (catalog classification; agent / chat as non-POSIX Tier-1)","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","http","curl","and","wget","clients","bare"],"seeAlso":[{"name":"docs-reference-hyperswarm-protomux-teardown","section":7},{"name":"docs-reference-holepunch-stack-alignment-implementation","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/http-curl-and-wget.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-hyperswarm-protomux-teardown","section":7,"title":"Hyperswarm and Protomux teardown (booter)","synopsis":["man 7 docs-reference-hyperswarm-protomux-teardown","Documentation page (plain text from docs/reference/hyperswarm-protomux-teardown.md)"],"description":"HYPERSWARM AND PROTOMUX TEARDOWN (BOOTER)\n\nReference index → <README.md>\n\nThe stock booter (packages/bare-os-booter/index.js <../../packages/bare-os-booter/index.js>) constructs a Hyperswarm instance with optional caps from host env (BARE_OS_SWARM_MAX_PEERS, BARE_OS_SWARM_MAX_CLIENT_CONNECTIONS, BARE_OS_SWARM_MAX_SERVER_CONNECTIONS, BARE_OS_SWARM_MAX_PARALLEL — see bareOsHyperswarmOptsFromEnv). Each inbound connection is wrapped in Protomux and registered on SwarmDisk (disk.addPeer(mux, socket)).\n\nSHUTDOWN ORDERING\n\nteardownBareOsBootResources <../../packages/bare-os-booter/lib/bare-os-lifecycle-manager.js> runs in a finally block after executeKernel completes or throws:\n\n1. disk.hdmsController.deactivate() when present — stops HDMS-driven replication surfaces before closing drives.\n2. swarm.destroy() — tears down Hyperswarm; closes live streams so Protomux sessions end before Hyperdrive teardown (avoids native heap issues under Pear when drives close mid-stream).\n3. disk.personalDrive.close() / disk.drive.close() — closes Hyperdrive handles after the swarm is down.\n4. store.close() — closes the boot Corestore last.\n\nReplication and mux teardown before drive close is intentional: closing a Hyperdrive while Protomux-framed replication is still active can corrupt native heaps on some Pear/macOS combinations (documented in bare-os-lifecycle-manager.js).\n\nRETRY AND PEER WAIT\n\nUntil BARE_OS_OFFLINE_LKG_BOOT is used with a valid BARE_OS_LKG_SYSTEM_KEY_HEX, the booter waits (polling ~400 ms) until at least one swarm peer connects or BARE_OS_BOOT_TIMEOUT_MS elapses. There is no automatic exponential backoff beyond that loop; operators raise the timeout or enable offline LKG for air-gapped boots.\n\nP2P-FIRST NOTE\n\nThere is no central broker: topic membership and peer discovery follow Hyperswarm + HyperDHT semantics. Socket-level retry is owned by the Holepunch stack; the booter does not implement an additional application-level reconnect loop after initial boot beyond swarm.join(topic) and the peer-wait loop above.\n\nDISK.OS AFTER INITD\n\nAfter bare-initd starts, the booter attaches disk.os (createBareOsDiskOsBridge) for local Hyperdrive search and whitelisted *bare_os. execRpc ( disk_os_hints, replication_operator_sketch, cap-gated replication_operator_intent, etc.). The same payloads are reachable via stock ctx.bareOsHrpcRequest routes bare_os.disk_os_hints, bare_os.replication_operator_sketch, and bare_os.replication_snapshot when disk.os is wired. Teardown still follows the ordering above: swarm down before drives, so in-flight execRpc / replication should finish or time out before teardownBareOsBootResources**.\n\nSEE ALSO\n\n- PEAR-RUN.md <../PEAR-RUN.md> — channels and env\n- environment-and-posix-appendix.md <environment-and-posix-appendix.md> — *BARE_OS_SWARM_**\n- docs/architecture/architecture-data-flow.md <architecture-data-flow.md> — end-to-end replication sketch","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","hyperswarm","protomux","teardown","and","booter"],"seeAlso":[{"name":"docs-reference-irc-client","section":7},{"name":"docs-reference-http-curl-and-wget","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/hyperswarm-protomux-teardown.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-irc-client","section":7,"title":"/bin/irc — Modern IRC TUI","synopsis":["man 7 docs-reference-irc-client","Documentation page (plain text from docs/reference/irc-client.md)"],"description":"/BIN/IRC — MODERN IRC TUI\n\nGuest client for the Modern IRC Client Protocol <https://modern.ircdocs.horse/> with IRCv3 CAP LS 302. Default network is Libera.Chat <https://libera.chat/guides/connect> over TLS.\n\nCONNECT\n\n irc # TTY dashboard (needs ctx.tui)\n irc libera # same, explicit network name\n irc send #chan hello # headless\n irc join #chan\n irc whois nick\n irc status\n\nDefaults: irc.libera.chat:6697, TLS on, no identd. Regional hosts: eu us au ea ipv4 ipv6 (for example irc eu).\n\nTRANSPORT\n\nctx.bareOsTlsConnect (ctx API 1.57.0) dials packed bare-tls. On Bare standalone binaries that predate that syscall, /bin/irc falls back to ctx.bare.bareTls.connect or wraps ctx.bareOsTelnetConnect in bare-tls.Socket. Policy:\n\n- BARE_OS_IRC=0 — disable\n- BARE_OS_IRC_ALLOWLIST — host globs; unset ⇒ irc.libera.chat + irc.*.libera.chat\n- BARE_OS_IRC_DENYLIST — always wins\n\nLibera plaintext is refused unless --insecure-plain.\n\nCONFIG\n\nPersonal drive:\n\n- ~/.irc/config.json — nick, autojoin, saslUser, servers[], shareChannels\n- ~/.irc/secrets.json — saslPass (mode 600)\n\nSASL v1 is PLAIN only.\n\nTUI\n\nctx.tui.run with buffer: 'cell'. Fixed-height frame (no terminal scroll).\n\nIf ~/.irc/config.json has no nick and USER looks like a container id, a random os + 5 chars nick is picked and remembered.\n\nAfter MOTD, a room browser opens when there is no autojoin (/rooms, Ctrl+L). Featured Libera rooms first; /rooms linux sends LIST linux (capped, sorted by users). Enter joins. /list is the same command.\n\nSlash commands include /join /part /query /msg /notice /me /nick /whois /whowas /who /names /topic /kick /invite /op /deop /voice /mode /ban /away /back /motd /quote /ctcp /ping /ignore /clear /close /quit /p2p open. Missing arguments print usage instead of “unknown command”.\n\nJoining a channel (including a 470 forward) switches the current buffer off *server.\n\n/p2p open creates a #chan [p2p] shadow buffer. It is not Libera. Optional presence publish: ctx.bareOsIrcPresencePublish.\n\nSEE ALSO\n\nctx.tui <ctx-tui.md> · developer-guide ch.20 <../../developer-guide/20-tui-and-sdk.md> · man irc","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","irc","client","bin","modern","tui"],"seeAlso":[{"name":"docs-reference-kernel-capabilities-index","section":7},{"name":"docs-reference-hyperswarm-protomux-teardown","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/irc-client.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-kernel-capabilities-index","section":7,"title":"Kernel capabilities index (capability words, env, /proc, ctx)","synopsis":["man 7 docs-reference-kernel-capabilities-index","Documentation page (plain text from docs/reference/kernel-capabilities-index.md)"],"description":"KERNEL CAPABILITIES INDEX (CAPABILITY WORDS, ENV, /PROC, CTX)\n\nSingle map from optional feature bits (packages/bare-os-protocol/lib/kernel-feature-bits.js <../../packages/bare-os-protocol/lib/kernel-feature-bits.js>) to operator env vars, guest /proc paths, and ctx fields. Stock booter advertises the eleven kernelCapabilityWords keys (primary … hypercorePackHrpcLifecycle) on seed RPC, /proc/bare_os_features, and ctx.bareOsAdvertisedKernelCapabilityWords. Boot policy naming follows those same canonical keys (for example requireKernelCapabilitiesHypercorePackHrpcLifecycle for word 11). Governance: developer-guide/adr/001-kernel-feature-bits-governance.md <../../developer-guide/adr/001-kernel-feature-bits-governance.md>.\n\n/proc/bare_os/metrics_live.json — Built in procBareOsMetricsLiveText with an in-memory cache keyed by BARE_OS_PROC_POLL_MS (coalesceMs in JSON): repeated reads within the window reuse one JSON.stringify result so dashboard polling does not rebuild the full object every tick.\n\nON THIS PAGE\n\n- Primary word (bits) <#primary-word-bits>\n- Word 2 — bits2 <#word-2--bits2--extended-seeding-platform>\n- Word 3 — bits3 <#word-3--bits3--rlimits-delegates-shell>\n- Word 4 — bits4 <#word-4--bits4--offline-net-extensions>\n- Word 5 — bits5 <#word-5--bits5--host-transport-delegates>\n- Word 6 <#word-6-sixth-capability-word-replicationoperatorsurface>\n- Word 7 <#word-7-seventh-capability-word-pearcorestorehrpc>\n- Word 8 <#word-8-eighth-capability-word-bareruntimeprotomux>\n- Word 9 <#word-9-ninth-capability-word-baremodulecryptostaging>\n- Word 10 <#word-10--pearinspectloggertls--bare_os_kernel_features_stock_word_pear_inspect_logger_tls>\n- Word 11 <#word-11--hypercorepackhrpclifecycle--bare_os_kernel_features_stock_word_hypercore_pack_hrpc_lifecycle>\n\nPRIMARY WORD (BITS)\n\nEach row is one bit index in the first capability word. Columns list env or behavior, /proc or RPC touchpoints, and ctx or notes. Empty cells mean “no dedicated toggle or path beyond the general capability machinery.”\n\n| Bit (export) | Env / behavior | /proc or RPC | ctx / notes |\n| 0 IPC_FANOUT | BARE_OS_IPC_FANOUT | /run/bare-os/ipc/ | bareOsIpc |\n| 1 ABORT_TIMEOUT | — | — | execLine / readLine opts |\n| 2 HTTP_POLICY | BARE_OS_HTTP_* | — | httpFetch |\n| 3 VIRTUAL_FILES | — | /run/bare-os/virtual/ | bareOsRegisterVirtualFile |\n| 4 HOST_STATS | — | host bridge | bareOsHostStats |\n| 5 CRYPTO_URANDOM | BARE_OS_URANDOM_CRYPTO=0 disables | /dev/urandom | — |\n| 6 SANDBOX_SCRIPT | BARE_OS_SANDBOX_SCRIPT=0 | — | bareOsSandboxRunScript |\n| 7 BOOT_STEP_HOOKS (wire label BOOT_PHASE_HOOKS) | — | — | bareOsRegisterBootStepHook (legacy bareOsRegisterBootPhaseHook) |\n| 8 IPC_DUPLEX | — | — | bareOsIpc.createDuplexBridge |\n| 9 VFS_UNION | BARE_OS_VFS_UNION_PREFIXES | /proc/bare_os_union | — |\n| 10 PROC_SWARM | — | /proc/bare_os_swarm | — |\n| 11 SHELL_STREAMING_PIPES | BARE_OS_SHELL_STREAMING | /proc/bare_os_quotas | — |\n| 12 SHELL_CMDSUBST | BARE_OS_SHELL_CMDSUBST | — | — |\n| 13 SEED_CAP_RPC | BARE_OS_SEED_RPC_HANDSHAKE | /proc/bare_os_seed_handshake | bareOsSeedKernelCapabilityWords.primary (when wire v2 handshake present) |\n| 14 EXTENDED_PROC | — | /proc/self/fd, /sys/devices | — |\n| 15 VIRTUAL_FILE_META | — | /proc/bare_os_virtual_registry | virtual mime / ttlMs |\n| 16 VFS_UNION_WRITE_POLICY | BARE_OS_VFS_UNION_WRITE_DENY | /proc/bare_os_union | — |\n| 17 IPC_PER_CHANNEL | BARE_OS_IPC_CHANNEL_MAX_BYTES | — | bareOsIpc.stats |\n| 18 SANDBOX_WORKER | BARE_OS_SANDBOX_WORKER | — | microtask defer |\n| 19 TELEMETRY_EXPORT | BARE_OS_TELEMETRY_NDJSON | — | NDJSON v3 schema |\n| 20 BOOT_POLICY | BARE_OS_BOOT_POLICY | — | kernel/init.js |\n| 21 SEED_REPLICATION_STATUS_RPC | — | /proc/bare_os_replication | seed RPC |\n| 22 LAZY_PERSONAL_DRIVE | BARE_OS_LAZY_PERSONAL_DRIVE | — | — |\n| 23 SYSTEM_REVISION_HOOKS | BARE_OS_SYSTEM_REVISION_* | /proc/bare_os/provenance | bareOsSystemRevision |\n| 24 BARE_MANIFEST_TIERS | BARE_OS_BUNDLE_TIER | — | ctx.bare build |\n| 25 HOST_DELEGATE_REGISTRY | BARE_OS_DELEGATE_* | audit log | git/curl/wget/systemctl |\n| 26 IPC_SESSION_NAMESPACE | BARE_OS_IPC_NAMESPACE | — | FIFO key prefix |\n| 27 PROC_BARE_OS_DIR | — | /proc/bare_os/index.json | stable aliases |\n| 28 SEED_MANIFEST_HINTS_RPC | — | /proc/bare_os/manifest_hints, replication JSON | RPC bare_os.manifest_hints |\n| 29 LIFECYCLE_TELEMETRY_V3 | telemetry NDJSON | — | legacy v3 tag; stock emitter uses lifecycleSchemaVersion / telemetrySchemaVersion 4 (boot policy v4 era) |\n| 30 BOOT_POLICY_V2 | extended boot.policy.json | — | maxExecLineDepth, denyEnvKeys, requireProcNodes |\n\nWORD 2 — BITS2 / EXTENDED SEEDING PLATFORM\n\n| Bit (export) | Env / behavior | /proc or RPC | ctx / notes |\n| 0 FEATURE2_SEED_REPLICATION_QUEUE_RPC | — | seed RPC replication_queue; replication JSON | queue / backpressure hints |\n| 1 FEATURE2_SEED_CAPABILITY_ATTESTATION_RPC | BARE_OS_SEED_CAPABILITY_ATTESTATION_JSON (seeder) | RPC capability_attestation | optional distro attestation JSON |\n| 2 FEATURE2_SEED_MBR_LAYOUT_RPC | — | RPC mbr_layout; replication JSON mbrKeysHex | MBR failover key hints |\n| 3 FEATURE2_PEAR_IPC_REQUEST | — | — | bareOsPearIpcRequest |\n| 4 FEATURE2_MIRROR_DRIVE_CTX | — | — | bareOsEmitMirrorDriveHint |\n| 5 FEATURE2_AUTOPASS_HDMS_HINTS | BARE_OS_AUTOPASS_INVITE_URL | /proc/bare_os/hdms_hints.json | operational pairing hint only |\n| 6 FEATURE2_BIN_WORKER_OFFLOAD | BARE_OS_BIN_WORKER_OFFLOAD, BARE_OS_BIN_WORKER_ALLOW | — | on Bare (non-Node), awk / sed / jq may run via bare-worker (falls back in-process) |\n| 7 FEATURE2_DIAGNOSTICS_CHANNEL | BARE_OS_DIAGNOSTICS_SUBSCRIBE=1 | — | bareOsDiagnosticsSubscribe / Emit |\n| 8 FEATURE2_INITD_IDLE_STOP | initd IdleSec= | — | socket-activated idle stop |\n| 9 FEATURE2_INITD_UNITS_D | — | — | ~/.config/bare-os/units.d/<unit>/*.conf |\n| 10 FEATURE2_CRON_REBOOT_JITTER | — | — | @reboot, JitterSec=, timer JitterSec= |\n| 11 FEATURE2_INITD_BOOT_READY_UNITS | — | /run/bare-os/boot.json | subsystems.initdActiveUnits |\n| 12 FEATURE2_PROC_CGROUPS_TCP | — | /proc/self/cgroups, /proc/net/tcp | Linux-shaped stubs |\n| 13 FEATURE2_VFS_WATCH_PSEUDO | BARE_OS_VFS_WATCH_PSEUDO=1 | metrics pseudo | bounded vfs.watch on metrics |\n| 14 FEATURE2_SHELL_PARAM_EXPAND_V2 | BARE_OS_SHELL_PARAM_EXPANSION_V2=1 (+ param expansion on) | — | ##, %%, :=, */ basename |\n| 15 FEATURE2_ENV_DASH_S | BARE_OS_ENV_DASH_S=1 | — | /bin/env -S, --env-file |\n| 16 FEATURE2_JSON_SCHEMAS_REPO | — | docs/schemas/ <../../docs/schemas/> | published JSON Schemas |\n| 17 FEATURE2_CONTRACT_TESTS_PROTOCOL | — | — | expanded contract tests |\n| 18 FEATURE2_KERNEL_EXT_PROC | — | /proc/bare_os/extensions.json | bareOsRegisterKernelExtensionRecord |\n| 19 FEATURE2_SEED_SNAPSHOT_HINTS_RPC | — | RPC bare_os.snapshot_hints; /proc/bare_os/snapshot_hints.json | corestore-snapshot-style hints (guest does not verify crypto) |\n| 20 FEATURE2_SEED_PEER_FIREWALL_STATS_RPC | — | RPC bare_os.peer_firewall_stats; replication JSON | bounded counts / topology sketch |\n| 21 FEATURE2_SEED_STAGING_SLOT_SURFACE | — | staging_slot RPC + replication | A/B slot hints |\n| 22 FEATURE2_PROC_PEAR_TRUST | BARE_OS_PEAR_TRUST_JSON | /proc/bare_os/pear_trust.json | operator trust summary |\n| 23 FEATURE2_BLIND_PEER_HINT | — | Pear IPC bare_os_blind_peer_hint | bareOsEmitBlindPeerHint |\n| 24 FEATURE2_BARE_SUBPROCESS_BRIDGE | BARE_OS_BARE_SUBPROCESS_* | — | documented host-only long-running child bridge |\n| 25 FEATURE2_INITD_CONDITION_PATH | — | — | ConditionPathExists= / AssertPathExists= |\n| 26 FEATURE2_INITD_GRAPH_PROC | — | /proc/bare_os/initd_graph.json | same DAG payload as initd_dag.json (+ optional dot) |\n| 27 FEATURE2_INITD_SUSPEND_RESUME_ORDER | — | — | mobile suspend/resume walks initd boot order |\n| 28 FEATURE2_TIMER_ON_INACTIVE | — | — | OnInactiveSec= / Persistent= timers |\n| 29 FEATURE2_PROC_NET_UDP | — | /proc/net/udp | Linux-shaped stub |\n| 30 FEATURE2_VFS_WATCH_SWARM | BARE_OS_VFS_WATCH_SWARM | swarm / replication pseudo | bounded poll watch |\n| 31 FEATURE2_HDMS_HEALTH_PROC | — | /proc/bare_os/hdms_health.json | non-secret vault health |\n\nWORD 3 — BITS3 / RLIMITS, DELEGATES, SHELL\n\n| Bit (export) | Env / behavior | /proc or RPC | ctx / notes |\n| 0 FEATURE3_PROC_RLIMITS_JSON | optional BARE_OS_VFS_MAX_OPEN → RLIMIT_NOFILE | /proc/bare_os/rlimits.json | getrlimit-shaped mirror of runtime caps ( NOFILE may echo the env when set ) |\n| 1 FEATURE3_BOOT_POLICY_V3 | boot.policy.json v3 | — | requireKernelCapabilitiesExtendedSeedingPlatform/3, allowedPearIpcChannels, denyVfsPrefixes, maxInitdRestartsPerUnit |\n| 2 FEATURE3_DELEGATE_CONCURRENCY | BARE_OS_DELEGATE_*_MAX_CONCURRENT | audit NDJSON | per-kind parallel caps |\n| 3 FEATURE3_SHELL_LOCAL_DECLARE | BARE_OS_SHELL_LOCAL_DECLARE | — | local / declare -r per shell line |\n| 4 FEATURE3_HOST_CAPABILITY_PROBE | BARE_OS_HOST_BUNDLE_EVALUATE | — | bareOsHostCapability('bundleEvaluate') |\n| 5 FEATURE3_CI_SCHEMA_EXAMPLES | — | — | scripts/validate-example-schemas.mjs in pretest |\n\nWORD 4 — BITS4 / OFFLINE NET EXTENSIONS\n\n| Bit (export) | Env / behavior | /proc or RPC | ctx / notes |\n| 0 FEATURE4_OFFLINE_LKG_BOOT | BARE_OS_OFFLINE_LKG_BOOT, BARE_OS_LKG_SYSTEM_KEY_HEX | — | skip peer wait; open system drive from local Corestore key |\n| 1 FEATURE4_NET_SUMMARY_PROC | — | /proc/bare_os/net_summary.json | rollup of swarm + seed hints |\n| 2 FEATURE4_BOOT_POLICY_V4 | merged from boot.policy.json | — | requireKernelCapabilitiesOfflineNetExtensions, denyExecLineBuiltins, allowedCtxMethods |\n| 3 FEATURE4_TELEMETRY_SCHEMA_V4 | — | — | NDJSON telemetrySchemaVersion 4 |\n| 4 FEATURE4_KERNEL_EXT_REGISTRY_V2 | — | /proc/bare_os/extensions.json schema 2 | semver / capabilities on extension records |\n| 5 FEATURE4_CONTRACT_TESTS_ROADMAP | — | — | scripts/verify-kernel-capabilities-contract.mjs |\n| 6 FEATURE4_HOST_STORAGE_PROC | BARE_OS_HOST_STORAGE_JSON | /proc/bare_os/bootstrap | host persistent/ephemeral hints JSON |\n| 7 FEATURE4_IPC_SESSION_AUDIT | BARE_OS_IPC_AUDIT | audit.log | bareOsEmitIpcAudit / mkfifo |\n| 8 FEATURE4_INITD_CONDITION_DIRECTORY | — | — | ConditionPathIsDirectory= / AssertPathIsDirectory= |\n| 9 FEATURE4_DELEGATE_FAIRNESS_METRICS | delegate caps | /proc/bare_os/metrics_live.json (schema 2) | bareOsReadDelegateFairnessSnapshot |\n| 10 FEATURE4_BIN_WORKER_ACTIVE | with word2 bit 6 | — | bare-worker thread path for heavy /bin |\n| 11 FEATURE4_SUBPROCESS_JOB_SURFACE | BARE_OS_SUBPROCESS_BRIDGE_JOBS_JSON | — | bareOsReadSubprocessBridgeJobs |\n\nWORD 5 — BITS5 / HOST TRANSPORT DELEGATES\n\n| Bit (export) | Env / behavior | /proc or RPC | ctx / notes |\n| 0 FEATURE5_HOST_BARE_OS_PROC | BARE_OS_HOST_BARE_OS_PROC, BARE_OS_HOST_OS_JSON | /proc/bare_os/host_os.json schema 2 | Holepunch bare-os 3.9+ + optional bare-posix |\n| 1 FEATURE5_SUBPROCESS_BRIDGE_SNAPSHOT_V2 | BARE_OS_SUBPROCESS_BRIDGE_META_JSON | — | bareOsReadSubprocessBridgeSnapshot |\n| 2 FEATURE5_NET_SUMMARY_TRANSPORT | BARE_OS_NET_TRANSPORT_STATS_JSON | merged into net_summary.json transport | operator-injected JSON |\n| 3 FEATURE5_BOOT_POLICY_V5 | boot.policy.json v5 | — | requireKernelCapabilitiesHostTransportDelegates, requireInitJsSha256 |\n| 4 FEATURE5_REPLICATION_SYNC_WINDOWS | BARE_OS_REPLICATION_SYNC_WINDOWS | /proc/bare_os/sync_window.json, BARE_OS_REPLICATION_SYNC_WINDOW_ACTIVE | UTC window parser |\n| 5 FEATURE5_VFS_UNION_READLINK | — | — | union readlink checks personal overlay |\n| 6 FEATURE5_KERNEL_PROFILE_WARM | BARE_OS_KERNEL_PROFILE_WARM | — | bareOsRequestKernelProfileReload |\n| 7 FEATURE5_HDMS_OPS_HINTS_V2 | BARE_OS_HDMS_SUPPORT_CORRELATION_ID | /proc/bare_os/hdms_hints.json schema 2 | non-secret support id |\n| 8 FEATURE5_TELEMETRY_OTEL_V2 | BARE_OS_TELEMETRY_OTEL_JSONL | — | otlSchemaVersion: 2 lines |\n| 9 FEATURE5_BIN_WORKER_PATTERN_ALLOW | BARE_OS_BIN_WORKER_ALLOW (textproc:*, …) | — | extends bare-worker eligible /bin |\n| 10 FEATURE5_STAGING_ROLLBACK_HINTS | BARE_OS_SEED_STAGING_PREVIOUS_SLOT (seeder) | staging_slot RPC + replication JSON | A/B rollback hints |\n| 11 FEATURE5_KERNEL_DEBUG_PROC | BARE_OS_KERNEL_DEBUG=1 | /proc/bare_os/debug.json | non-secret masks only |\n| 12 FEATURE5_BARE_MANIFEST_RISK | — | — | manifest risk + catalog metadata |\n| 13 FEATURE5_REPLICATION_QUEUE_METRICS_V2 | seeder env hints | replication_queue RPC | depth + snapshot workflow note |\n| 14 FEATURE5_SEED_RPC_TYPED_ERRORS | — | seed RPC | bare_os.rpc_unknown_method, etc. |\n| 15 FEATURE5_REPO_DOC_CI | — | — | verify-doc-links, verify-man-coverage, verify-compat-matrix |\n\nWORD 6 (SIXTH CAPABILITY WORD, REPLICATIONOPERATORSURFACE)\n\n| Bit (export) | Env / behavior | /proc or RPC | ctx / notes |\n| 0 FEATURE6_CAP_WORD | — | seed kernelCapabilityWords.replicationOperatorSurface + /proc/bare_os_features | non-zero sixth word marker |\n| 1 FEATURE6_SEED_RPC_EXTENDED | seeder env for new RPC payloads | replication_plan, dht_bootstrap_hint, snapshot_chain, mirror_compaction_hint, updater_state, blind_peer_topology_v2, compact_ping | registry in seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js> |\n| 2 FEATURE6_REPLICATION_JSON_ADVISORY | — | replication_status adjunct fields | priorityClass, ipv6ScopeCounts, corestoreSnapshotTag, queuedPeerCount, relay/direct hints |\n| 3 FEATURE6_PROC_OPERATOR_METRICS | BARE_OS_PROC_* / BARE_OS_DNS_MAP_JSON | udx_extended.json, dht_status.json, replication_backpressure.json, ipc_backpressure.json, delegate_red.json, build_attestation_pointer.json, pear_ipc_health.json, hypercore_lengths.json, slo_hints.json, locale.json, worker_budget.json, sandbox_profile.json, dns_map_active.json, git_delegate_stats.json, bare_os/index.json manifest | bounded JSON only |\n| 4 FEATURE6_BOOT_POLICY_SURFACE | boot.policy.json v6 | — | requireKernelCapabilitiesReplicationOperatorSurface, requireBooterSemver, requireCtxApiMin, denyKernelExtensionIds, kernelExtensionHashPins, offlineLkgIntegrityStrict |\n| 5 FEATURE6_KERNEL_EXT_REGISTRY_V3 | kernel.extensions.registry v3 | /proc/bare_os/extensions.json schema 3 | id, dependsOn on records |\n| 6 FEATURE6_PEAR_BARE_BRIDGE | — | version adjunct | bareOsPearUpdaterDelegate, bareOsEmitHyperdhtBootstrapRefresh, blind-peer hint v2 reasonCode |\n| 7 FEATURE6_STRICT_PROC_ALIAS | BARE_OS_PROC_ALIAS_STRICT=1 | /proc/bare_os/index.json | fail closed if alias manifest incomplete |\n| 8 FEATURE6_VFS_POSIX_EXTENSIONS | BARE_OS_SHM_MAX_BYTES, union whiteout | /dev/shm, flock subset | find -inum / -samefile where inode-like id exists |\n| 9 FEATURE6_INITD_LIFECYCLE_EXTENSIONS | BARE_OS_RESUME_STAGGER_MS, BARE_OS_KERNEL_PROFILE_WARM_RC_ONLY | initd graph JSON | PartOf=, RestartMode=direct, OnCalendar=, FDStoreMax= |\n| 10 FEATURE6_WORKER_SANDBOX_DELEGATES | BARE_OS_BIN_WORKER_ALLOW mathproc:*, BARE_OS_BIN_WORKER_WALL_MS | sandbox_profile.json | delegate kind hrpc stub (audit-only) |\n| 11 FEATURE6_NET_POLICY_EXTENDED | BARE_OS_DNS_MAP_JSON, HSTS/TLS/alt-svc env docs | dns_map_active.json | split-horizon map summary |\n| 12 FEATURE6_TELEMETRY_AUDIT | BARE_OS_TELEMETRY_* | NDJSON / OTel / audit sinks | lifecycle schema 6 (word-7 era), otlSchemaVersion 4, auditSchemaVersion 4 |\n| 13 FEATURE6_DOC_CI_CONTRACTS | — | — | verify-kernel-capabilities-word-6.mjs, verify-pear-no-static-node-import.mjs |\n| 14 FEATURE6_HANDSHAKE_TOKEN_BUCKET | BARE_OS_SEED_TOKEN_BUCKET_JSON | seed handshake | client backoff metadata |\n| 15 FEATURE6_COMPACT_SEED_PING | — | compact_ping / compact_pong | optional bandwidth probe |\n\nRelated ctx (1.22.0+): eleven words are only in frozen bareOsAdvertisedKernelCapabilityWords / bareOsSeedKernelCapabilityWords (semantic keys per capability-words.md <./capability-words.md>). Hooks and helpers from words 611 still apply — e.g. bareOsReadProcMetricsLive(), bareOsReadDelegateFairnessSnapshot, bareOsReadSubprocessBridgeJobs, bareOsReadSubprocessBridgeSnapshot, bareOsRequestKernelProfileReload, bareOsIsCtxMethodAllowed, bareOsEmitIpcAudit, bareOsEmitBlindPeerHint, bareOsHostCapability, bareOsPearUpdaterDelegate, bareOsEmitHyperdhtBootstrapRefresh, bareOsBooterPackageVersion; Pear IPC channel names in bare-os-pear-ipc-registry.js <../../packages/bare-os-booter/lib/bare-os-pear-ipc-registry.js>.\n\nWORD 7 (SEVENTH CAPABILITY WORD, PEARCORESTOREHRPC)\n\n| Bit (export) | Env / behavior | /proc or RPC | ctx / notes |\n| 0 FEATURE7_CAP_WORD | — | seed kernelCapabilityWords.pearCorestoreHrpc + /proc/bare_os_features | seventh word marker |\n| 1 FEATURE7_SEED_RPC_EXTENDED | BARE_OS_SEED_* for payloads | corestore_stats, snapshot_manifest_slice, mirror_drive_hint_v2, hrpc_registry_summary, protomux_capability_ad, dht_address_book, replication_throttle_hint, bundlebee_stage, http_dht_proxy_hint | registry in seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js> |\n| 2 FEATURE7_REPLICATION_JSON_ADJUNCT | seeder opts | replication_status adjuncts, staging_slot schema 4→5 quarantine (v5 adds drainDeadlineMs), peer_firewall_stats transport breakdown | ready-guard notReadyReason, udxRttMsEstimate, relayCircuitId, hyperbee2ReadOnlyHint |\n| 3 FEATURE7_PROC_OPERATOR_METRICS | BARE_OS_ JSON envs | Word-7 bare_os_.json under /proc + bare_os_proc_index (superseded by schema 4 on word 8) | bare-os-proc-pear-corestore-hrpc.js <../../packages/bare-os-booter/lib/bare-os-proc-pear-corestore-hrpc.js> |\n| 4 FEATURE7_BOOT_POLICY_SURFACE | boot.policy.json | — | requireKernelCapabilitiesPearCorestoreHrpc, requirePearRuntimeMin, requireProtocolPackageMin, denyCtxMethodPrefixes, maxKernelExtensionDepth, gitPartialClonePolicy |\n| 5 FEATURE7_KERNEL_EXT_REGISTRY_V4 | kernel.ext.d | /proc/bare_os/extensions.json schema 4 | optional signaturePointer on records; topological dependsOn load order |\n| 6 FEATURE7_PEAR_BARE_BRIDGE_EXTENDED | BARE_OS_BARE_DIAGNOSTICS_CHANNEL_TAP | /proc/version may append pear_tty_flags_json | bareOsEmitBundlebeeHint, bareOsRegisterBareDiagnosticsTap, bareOsHrpcRequest stub |\n| 7 FEATURE7_VFS_POSIX_EXTENSIONS | BARE_OS_CURL_RESOLVE_MAP_JSON, proxy map docs | env tables in reference | /bin/env -C, git partial-clone policy env |\n| 8 FEATURE7_INITD_SUBPROCESS | initd graph extensions | docs | Slice/timeout/timer/socket fields |\n| 9 FEATURE7_WORKER_NET | worker/sandbox/delegate docs | — | *netproc:, audit retryAfterMs** |\n| 10 FEATURE7_TELEMETRY_AUDIT | telemetry sinks | NDJSON v6 / OTel v4 / audit v4 | bootAttemptId, exemplars, redirect depth |\n| 11 FEATURE7_DOC_CI_CONTRACTS | — | — | verify-kernel-capabilities-word-7.mjs |\n| 12 FEATURE7_COMPACT_MUX_ADVERT | BARE_OS_SEED_PROTOMUX_CAPABILITY_AD_HEX | protomux_capability_ad RPC | hex-capped optional ad |\n\nWORD 8 (EIGHTH CAPABILITY WORD, BARERUNTIMEPROTOMUX)\n\n| Bit (export) | Env / behavior | /proc or RPC | ctx / notes |\n| 0 FEATURE8_CAP_WORD | — | seed kernelCapabilityWords.bareRuntimeProtoMux + /proc/bare_os_features | eighth word marker |\n| 1 FEATURE8_SEED_RPC_EXTENDED | BARE_OS_SEED_* JSON | protomux_rpc_pool_hint, hyperblob_store_hint, signing_request_queue_hint, core_storage_layout_hint, mirror_drive_compaction_v3, bundlebee_cli_stage, ready_guard_v2, blind_relay_circuit_hint, http_dht_proxy_routes | registry in seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js> |\n| 2 FEATURE8_REPLICATION_JSON_ADJUNCT | seeder opts | replication_status udxLossEstimateBps, tcpFallbackReason, hyperdbIndexLagHint; peer_firewall_stats saturationClass; staging_slot drainDeadlineMs | advisory only |\n| 3 FEATURE8_PROC_OPERATOR_METRICS | Word-8 BARE_OS__JSON envs | 17× bare_os_.json + bare_os_proc_index schema 4 | bare-os-proc-bare-runtime-proto-mux.js <../../packages/bare-os-booter/lib/bare-os-proc-bare-runtime-proto-mux.js> |\n| 4 FEATURE8_BOOT_POLICY_SURFACE | boot.policy.json v8 | — | requireKernelCapabilitiesBareRuntimeProtoMux, requireBareRuntimeMin, denySeedRpcMethods, maxProtomuxChannelNameLength |\n| 5 FEATURE8_KERNEL_EXT_REGISTRY_V5 | extension records | /proc/bare_os/extensions.json schema 5 | optional compatPearBundleId |\n| 6 FEATURE8_PEAR_BARE_BRIDGE_EXTENDED | — | — | bareOsEmitStructuredCloneCap, bareOsProtomuxChannelAlias |\n| 7 FEATURE8_VFS_POSIX_EXTENSIONS | BARE_OS_CURL_RESOLVE_MAP_JSON, docs | curl/wget resolve map; git partial clone deny; POSIX handbook rows | FIFO metrics v2 doc |\n| 8 FEATURE8_INITD_SUBPROCESS | initd/timer/socket / resume env | /proc/self/limits, subprocess snapshot schema 4 | BARE_OS_RESUME_STAGGER_LEVEL_MS_JSON, *BARE_OS_INITD_START_LIMIT_** |\n| 9 FEATURE8_WORKER_NET | *ioproc:, proxy/DNS docs | sandbox_worker_queue.json, rocksdb_pointer.json | delegate bundlebee, warc, archive** audit stubs |\n| 10 FEATURE8_TELEMETRY_AUDIT | telemetry sinks | NDJSON v7 / OTel v5 / audit v5 | sessionForkGeneration, scopeMetrics, requestSmugglingClass, HDMS vaultRotateCount |\n| 11 FEATURE8_DOC_CI_CONTRACTS | — | — | verify-kernel-capabilities-word-8.mjs |\n| 12 FEATURE8_HTTP_DHT_PROXY_ROUTES | — | http_dht_proxy_routes RPC | route revision JSON |\n| 13 FEATURE8_PROTOMUX_CAP_CHANNEL | BARE_OS_PROTOMUX_CAP_CHANNEL | Protomux pair on bare-os-cap-v1 | Inbound messages ≤ 65536 bytes; oversized payloads logged, counter unchanged (swarm-disk.js) |\n\nWORD 9 (NINTH CAPABILITY WORD, BAREMODULECRYPTOSTAGING)\n\n| Bit (export) | Env / behavior | /proc or RPC | ctx / notes |\n| 0 FEATURE9_CAP_WORD | — | seed kernelCapabilityWords.bareModuleCryptoStaging + /proc/bare_os_features | ninth word marker |\n| 1 FEATURE9_SEED_RPC_EXTENDED | BARE_OS_SEED_* JSON | pear_stage_hint, updater_channel_matrix, drive_resolve_policy, …, http_dht_proxy_routes_v2 | seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js> |\n| 2 FEATURE9_REPLICATION_JSON_ADJUNCT | seeder opts | replication_status pearRuntimeChannel, handshakeTokenBucketV3; staging_slot schema 6; compact_ping schema 3 | advisory |\n| 3 FEATURE9_PROC_OPERATOR_METRICS | Word-9 BARE_OS__JSON envs | 19× bare_os_.json + bare_os_proc_index schema 5 | bare-os-proc-bare-module-crypto-staging.js <../../packages/bare-os-booter/lib/bare-os-proc-bare-module-crypto-staging.js> |\n| 4 FEATURE9_BOOT_POLICY_SURFACE | boot.policy.json v9 | — | requireKernelCapabilitiesBareModuleCryptoStaging, requirePearRuntimeRange, requireBareCryptoMin, … |\n| 5 FEATURE9_KERNEL_EXT_REGISTRY_V6 | extension records | /proc/bare_os/extensions.json schema 6 | extensionSignerPinsV2 env |\n| 6 FEATURE9_PEAR_BARE_BRIDGE_EXTENDED | — | — | bareOsEmitPearStageHint, probes, storage hint |\n| 7 FEATURE9_VFS_POSIX_EXTENSIONS | /bin/openssl stub | documents bare-crypto | Node node:crypto not used |\n| 8 FEATURE9_INITD_SUBPROCESS | — | — | shared with earlier capability words |\n| 9 FEATURE9_WORKER_NET | *mediaproc:, BARE_OS_SOCKS_PROXY_MAP_JSON** | SOCKS map helper | http-fetch-url.js <../../packages/bare-os-booter/lib/http-fetch-url.js> |\n| 10 FEATURE9_TELEMETRY_AUDIT | telemetry sinks | NDJSON 8 / OTel 6 / audit 6 | bareModuleCryptoStagingProbeId |\n| 11 FEATURE9_DOC_CI_CONTRACTS | — | — | verify-kernel-capabilities-word-9.mjs |\n| 12 FEATURE9_HTTP_DHT_PROXY_ROUTES_V2 | — | http_dht_proxy_routes_v2 RPC | revision v2 |\n\nWORD 10 — PEARINSPECTLOGGERTLS / BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS\n\n| Bit | Symbol | Primary surfaces | Notes |\n| 0 FEATURE10_CAP_WORD | — | seed kernelCapabilityWords.pearInspectLoggerTls + /proc/bare_os_features | tenth word marker |\n| 1 FEATURE10_SEED_RPC_EXTENDED | BARE_OS_SEED_* JSON | pear_doctor_hint … pear_terminal_caps, ready_guard_v4, compact_ping_v4, … | seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js> |\n| 2 FEATURE10_REPLICATION_JSON_ADJUNCT | seeder opts | pearBundleTier, autobaseDiscoveryHint, handshakeTokenBucketV4, staging_slot schema 7, peer_firewall_stats v5 | advisory |\n| 3 FEATURE10_PROC_OPERATOR_METRICS | Word-10 BARE_OS__JSON envs | 19× bare_os_.json + bare_os_proc_index schema 6 | bare-os-proc-pear-inspect-logger-tls.js <../../packages/bare-os-booter/lib/bare-os-proc-pear-inspect-logger-tls.js> |\n| 4 FEATURE10_BOOT_POLICY_SURFACE | boot.policy.json v10 | — | requireKernelCapabilitiesPearInspectLoggerTls, requireBareBootMin, bootPhasesRequireLifecycleMinSchema, … |\n| 5 FEATURE10_KERNEL_EXT_REGISTRY_V7 | extension records | /proc/bare_os/extensions.json schema 7 | extensionSignerPinsV3 env |\n| 6 FEATURE10_PEAR_BARE_BRIDGE_EXTENDED | — | — | bareOsEmitPearDoctorHint, terminal probe, logger tap, … |\n| 7 FEATURE10_VFS_POSIX_EXTENSIONS | coreutils / handbook ch.9 | ssh-keygen stub, xargs -P cap, tar xattr sketch | no guest node:crypto |\n| 8 FEATURE10_INITD_SUBPROCESS | — | — | shared with earlier capability words |\n| 9 FEATURE10_WORKER_NET | *sysproc:, BARE_OS_MTLS_PROXY_MAP_JSON, BARE_OS_HAPPY_EYEBALLS_V4_MODE** | thread telemetry env | transport docs |\n| 10 FEATURE10_TELEMETRY_AUDIT | telemetry sinks | NDJSON 9 / OTel 7 / audit 7 | pearInspectLoggerTlsProbeId, bareRpcProbeClass |\n| 11 FEATURE10_DOC_CI_CONTRACTS | — | — | verify-kernel-capabilities-word-10.mjs |\n| 12 FEATURE10_COMPACT_READY_RPC_V4 | — | compact_ping_v4, ready_guard_v4 RPC | dedicated v4 payloads |\n\nWORD 11 — HYPERCOREPACKHRPCLIFECYCLE / BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE\n\n| Bit | Symbol | Primary surfaces | Notes |\n| 0 FEATURE11_CAP_WORD | — | seed kernelCapabilityWords.hypercorePackHrpcLifecycle + /proc/bare_os_features | eleventh word marker |\n| 1 FEATURE11_SEED_RPC_EXTENDED | BARE_OS_SEED_* JSON | hypercore_replicate_budget_v2 … mirror_drive_compaction_v6 | seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js> |\n| 2 FEATURE11_REPLICATION_JSON_ADJUNCT | seeder / replication adjuncts | advisory JSON for word-11 seed RPC payloads | pairs with seed channel |\n| 3 FEATURE11_PROC_OPERATOR_METRICS | Word-11 BARE_OS__JSON envs | 20× bare_os_.json + bare_os_proc_index schema 7 | bare-os-proc-hypercore-pack-hrpc-lifecycle.js <../../packages/bare-os-booter/lib/bare-os-proc-hypercore-pack-hrpc-lifecycle.js> |\n| 4 FEATURE11_BOOT_POLICY_SURFACE | boot.policy.json v11 | — | requireKernelCapabilitiesHypercorePackHrpcLifecycle, extensionSignerPinsV4, pack/addon semver, HRPC depth, offline eleventh-word strict |\n| 5 FEATURE11_KERNEL_EXT_REGISTRY_V8 | extension records | /proc/bare_os/extensions.json schema 8 | schema branch in kernel-extensions.registry.schema.json |\n| 6 FEATURE11_PEAR_BARE_BRIDGE_EXTENDED | — | — | Pear matrix + Bare pack/addon/signals ctx probes |\n| 7 FEATURE11_VFS_POSIX_EXTENSIONS | VFS / handbook | hide word-11 proc JSON via env | BARE_OS_HIDE_PROC_HYPERCORE_PACK_HRPC_LIFECYCLE (0 / false / off → flat + /proc/bare_os/* + index rows) |\n| 8 FEATURE11_INITD_SUBPROCESS | — | — | shared with earlier capability words |\n| 9 FEATURE11_WORKER_NET | *cryptoproc:, indexerproc:* | worker allowlist | kernel-runner.js <../../packages/bare-os-booter/lib/kernel-runner.js> |\n| 10 FEATURE11_TELEMETRY_AUDIT | telemetry sinks | NDJSON 10 / OTel 8 / audit 8 | hypercorePackHrpcLifecycleProbeId |\n| 11 FEATURE11_DOC_CI_CONTRACTS | — | — | verify-kernel-capabilities-word-11.mjs |\n| 12 FEATURE11_HTTP_DHT_PROXY_ROUTES_V3 | — | http_dht_proxy_routes_v3 RPC | route table v3 |\n| 13 FEATURE11_COMPACT_READY_RPC_V5 | — | compact_ping_v5, ready_guard_v5 | dedicated v5 payloads |\n\nHandbook: handbook/09-posix-utilities-shell-and-vfs.md <../../handbook/09-posix-utilities-shell-and-vfs.md>, handbook/04-the-booter-runtime.md <../../handbook/04-the-booter-runtime.md>.\n\nExtended reference: kernel-extensions.md <./kernel-extensions.md>, environment-and-posix-appendix.md <./environment-and-posix-appendix.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","kernel","capabilities","index","capability","words","env","proc","ctx"],"seeAlso":[{"name":"docs-reference-kernel-extensions-capability-specs","section":7},{"name":"docs-reference-irc-client","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/kernel-capabilities-index.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-kernel-extensions-capability-specs","section":7,"title":"Kernel extensions — capability specs (index)","synopsis":["man 7 docs-reference-kernel-extensions-capability-specs","Documentation page (plain text from docs/reference/kernel-extensions-capability-specs.md)"],"description":"KERNEL EXTENSIONS — CAPABILITY SPECS (INDEX)\n\nShort index for extension authors. The long-form inventory remains in kernel-extensions.md <kernel-extensions.md>.\n\nSOURCES OF TRUTH\n\n- Feature bits and ctx methods — packages/bare-os-protocol/lib/kernel-feature-bits.js, kernel capabilities index <kernel-capabilities-index.md>.\n- Registry schema — docs/schemas/kernel-extensions.registry.schema.json.\n- Boot policy — docs/schemas/boot.policy.schema.json.\n\nPEAR / BARE BRIDGE (WORD 10)\n\nDocumented in the main reference: doctor hints, inspect probes, Bare boot step hints, RPC probes, logger taps, discovery hints, etc.\n\nHYPERCORE PACK / HRPC LIFECYCLE (WORD 11)\n\nOperator SLO and peer QoS sketches under /proc/bare_os/ (stable legacy filenames); see BARE_OS_PROC_FILE_TO_ID_HYPERCORE_PACK_HRPC_LIFECYCLE in packages/bare-os-booter/lib/vfs.js.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","kernel","extensions","capability","specs","index"],"seeAlso":[{"name":"docs-reference-kernel-extensions-generated-toc","section":7},{"name":"docs-reference-kernel-capabilities-index","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/kernel-extensions-capability-specs.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-kernel-extensions-generated-toc","section":7,"title":"Kernel extensions — generated TOC","synopsis":["man 7 docs-reference-kernel-extensions-generated-toc","Documentation page (plain text from docs/reference/kernel-extensions-generated-toc.md)"],"description":"<!-- Generated by scripts/gen-kernel-extensions-index.mjs — do not edit by hand. -->\n\nKERNEL EXTENSIONS — GENERATED TOC\n\n- Kernel source set (first-party vs vendored)\n- Post-initd disk.os peer bridge\n- Governance (feature bits doc v14)\n- Capability bitmask\n- Environment quick reference\n- Capability word 6 summary\n- Capability word 9 summary\n- Capability word 10 summary\n- Capability word 11 summary\n- POSIX utility notes\n- Cookbook snippets\n- Profiles","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","kernel","extensions","generated","toc"],"seeAlso":[{"name":"docs-reference-kernel-extensions","section":7},{"name":"docs-reference-kernel-extensions-capability-specs","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/kernel-extensions-generated-toc.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-kernel-extensions","section":7,"title":"Kernel extensions and feature matrix (Bare OS)","synopsis":["man 7 docs-reference-kernel-extensions","Documentation page (plain text from docs/reference/kernel-extensions.md)"],"description":"KERNEL EXTENSIONS AND FEATURE MATRIX (BARE OS)\n\nThis document complements the handbook <../../handbook/09-posix-utilities-shell-and-vfs.md> with a single map of optional booter + stock kernel features added for richer POSIX-like behavior, protocol alignment, and operations. For a short capability index with pointers to schemas, see kernel-extensions-capability-specs.md <./kernel-extensions-capability-specs.md>. Generated heading index: kernel-extensions-generated-toc.md <./kernel-extensions-generated-toc.md> (from npm run pretest).\n\nKERNEL SOURCE SET (FIRST-PARTY VS VENDORED)\n\nBare OS splits hand-authored kernel code from vendored Holepunch runtime bundles so CI and reviewers know where “zero incomplete markers” applies.\n\n| Layer | Paths | Policy |\n| First-party guest kernel | kernel/init.js <../../kernel/init.js>, kernel/lib/boot/ <../../kernel/lib/boot/>, kernel/lib/init/ <../../kernel/lib/init/>, kernel/bin/ <../../kernel/bin/> (built from coreutils), kernel/etc/ <../../kernel/etc/> | Must not contain TODO / FIXME / XXX / HACK / throw new Error(\"Not implemented\") as unfinished work. Enforced by scripts/verify-runtime-no-incomplete-markers.mjs <../../scripts/verify-runtime-no-incomplete-markers.mjs> (with configured excludes). kernel/init.js is generated from sorted kernel/lib/boot/.js + sorted kernel/lib/init/fragments/.js + kernel/lib/init/init-main.js (scripts/bundle-kernel-init.mjs <../../scripts/bundle-kernel-init.mjs>); invokeCtxBootHooks and BARE_OS_BOOT_TXN_STATE are defined in kernel/lib/boot/01-invoke-ctx-hooks.js <../../kernel/lib/boot/01-invoke-ctx-hooks.js>; shared pear.multisig.json shape checks live in kernel/lib/boot/00-pear-multisig-shape.js <../../kernel/lib/boot/00-pear-multisig-shape.js> (mirrors bare-os-protocol); kernel.ext.d loading is in kernel/lib/init/fragments/30-init-kernel-extensions.js <../../kernel/lib/init/fragments/30-init-kernel-extensions.js>. |\n| Host booter + protocol | packages/bare-os-booter/lib/ <../../packages/bare-os-booter/lib/>, packages/bare-os-booter/index.js <../../packages/bare-os-booter/index.js>, packages/bare-os-protocol/lib/ <../../packages/bare-os-protocol/lib/> | Same as first-party: no node: specifiers (scripts/verify-bare-imports.mjs <../../scripts/verify-bare-imports.mjs>); no incomplete markers. Tests under packages/bare-os-booter/test/ may use node: for the host harness. |\n| Vendored IIFE bundles | kernel/lib/bare/bundles/.js <../../kernel/lib/bare/bundles/> (mirrored in packages/bare-os-seeder/kernel/lib/bare/bundles/ <../../packages/bare-os-seeder/kernel/lib/bare/bundles/>) | Produced by packages/bare-os-bare-libs <../../packages/bare-os-bare-libs>; post-processed by scripts/sanitize-bare-bundles.mjs <../../scripts/sanitize-bare-bundles.mjs>. docs/audit/bundle-marker-allowlist.json <../audit/bundle-marker-allowlist.json> and docs/audit/bundle-throw-allowlist.json <../audit/bundle-throw-allowlist.json> are empty by policy; CI verify-bundle-** must pass without exemptions. |\n| Maintenance scripts | scripts/*.mjs <../../scripts/> | May use node:fs / node:path; not shipped on the Hyperdrive image. |\n\nSeeder parity: kernel/ <../../kernel/> and packages/bare-os-seeder/kernel/ <../../packages/bare-os-seeder/kernel/> must be byte-identical (scripts/verify-kernel-seeder-parity.mjs <../../scripts/verify-kernel-seeder-parity.mjs>). After editing kernel/, sync the seeder tree before commit.\n\nkernel.ext.d ordering: The Kahn topological sort in kernel/lib/init/fragments/30-init-kernel-extensions.js <../../kernel/lib/init/fragments/30-init-kernel-extensions.js> must stay aligned with packages/bare-os-booter/lib/kernel-extension-resolver.js <../../packages/bare-os-booter/lib/kernel-extension-resolver.js> (topologicalOrderKernelExtensions); CI covers this via the Brittle test kernel extension topological order matches guest Kahn tie-break in packages/bare-os-booter/test.js. Optional manifest field provides: { name, version }[] — two different extension ids must not claim the same name with different version strings when strict policy applies (detectKernelExtensionProvidesConflicts / guest kernelExt.providesConflict). Additional harness tests cover minCtxApiVersion skip paths, conflictsWith / dependency cycles under strict boot policy (no extension scripts run on hard failures).\n\nPOST-INITD DISK.OS PEER BRIDGE\n\npkg-swarm-index / path capabilities: Drive manifest /etc/bare-os/pkg-index.json (or HRPC bare_os.pkg_index_get) may attach pathCapabilityEnvelope on entries; pkg-swarm-index get calls ctx.bareOsVerifyPathCapabilityEnvelope when present and prints pathCapabilityEnvelopeVerify (see kernel/etc/bare-os/pkg-index.example.json <../../kernel/etc/bare-os/pkg-index.example.json>). VFS read enforcement remains under *BARE_OS_PATH_CAPABILITY_** as documented in the POSIX profile.\n\nAfter initd, SwarmDisk wires disk.os via createBareOsDiskOsBridge <../../packages/bare-os-booter/lib/bare-os-disk-os-bridge.js>: peer searchLocal, whitelisted *bare_os. execRpc methods including bare_os.replication_operator_sketch (schema 8 JSON: replication status, swarmPeerCount, Hyperswarm connectionBudget, protomux operator sketch fields, hyperdhtAddressSketch from BARE_OS_HYPERDHT_ADDRESS_JSON, pkgIndexSurface, env mirrors for pause/backpressure, corestoreSnapshotUxHint, optional corestoreOperatorSketch from BARE_OS_CORESTORE_STATS_JSON), and optional cap-gated bare_os.replication_operator_intent when BARE_OS_DISK_OS_OPERATOR_INTENT_RPC=1 (append-only audit via ctx.bareOsAuditLogAppendBatch when the booter supplies auditBatch**). Narrative: Handbook ch.3 <../../handbook/03-protocol-and-disk.md>.\n\nbare-module alignment: Compare local Holepunch clones bare-module, bare-module-traverse, and bare-pack against boot policy keys denyBareModuleSpecifierPatterns, requireBareCryptoMin, and extension signaturePointer / extensionSignerPins when evolving the guest ctx.bare merge — resolver parity is enforced in packages/bare-os-booter/lib/kernel-extension-resolver.js and kernel/lib/init/fragments/30-init-kernel-extensions.js.\n\nBLIND RELAY / PROTOMUX PROC HINTS (SCHEMA 2)\n\nWith BARE_OS_PROC_BLIND_PEER_RELAY_HINTS, blind_relay_router, blind_pairing_sketch, and relay_geo_hint JSON under /proc/bare_os switch from operator-redacted schema 1 to schema 2 and merge live swarm aggregates (peerCount, relayGeoTier, lifecycle, pairingSurfaceReady). Set BARE_OS_SWARM_PROTOMUX_BACKPRESSURE_COUNT to surface a non-secret protomuxBackpressure.emitCountEstimate (operator-injected aggregate for drain/cork dashboards). Implementation: bare-os-proc-blind-peer-relay-gate.js <../../packages/bare-os-booter/lib/bare-os-proc-blind-peer-relay-gate.js>, bare-os-proc-pear-corestore-hrpc.js <../../packages/bare-os-booter/lib/bare-os-proc-pear-corestore-hrpc.js>. CI covers schema 2 + backpressure in packages/bare-os-booter/test.js.\n\nSTRICT BOOT / KERNEL.EXT.D FAILURE CATALOG (OPERATOR)\n\nWhen BARE_OS_BOOT_POLICY_STRICT=1 (or equivalent strict policy paths), the stock kernel may abort before running extension scripts. Common structured outcomes:\n\n| Kind | Guest signal | Notes |\n| Dependency cycle | kernelExt.cycle, /run/bare-os/kernel-ext-resolution.json failure.kind: dependency_cycle | Topological sort fails; extension IDs listed in proc/trace JSON. |\n| conflictsWith | kernelExt.conflict | Two loaded ids mutually exclude each other. |\n| provides version clash | kernelExt.providesConflict, audit provides_version_conflict | Same logical provides[].name with differing version across drop-ins. |\n| minCtxApiVersion | kernelExt.minCtxApiVersion | Drop-in skipped or strict boot fails when ctx.bareOsCtxApiVersion is below the declared floor. |\n| denyKernelExtensionIds / deny id | kernelExt.denyId | Policy denies an extension id before script execution. |\n| Pear multisig gate | kernelExt.multisigMissing, kernelExt.multisigInvalid, kernelExt.multisigRead | When multisig verification is required, /etc/bare-os/pear.multisig.json must be well-formed (signers, quorum). |\n| Extension signer pins (v2v5) | Env *BARE_OS_BOOT_POLICY_EXTENSION_SIGNER_PINS_V_JSON | Merged from boot.policy.json when present — capability alignment for downstream verifiers; CI scripts/verify-boot-policy-extension-signer-pins.mjs guards the env mapping. The stock kernel calls verifyKernelExtSignerPinsForScript immediately before every kernel.ext.d script execution (initial boot and later reload paths) using ctx.bareOsVerifyBootManifestSignature and each scripts signaturePointer when pins list that extension id — strict boot fails closed on missing ctx**, missing files, or bad signatures. |\n\n/run/bare-os/kernel-ext-resolution.json (schema 3): Written when extension ordering fails or when BARE_OS_KERNEL_EXT_RESOLUTION_JSON_ALWAYS=1. Includes providesInvalidSemver, providesVersionConflicts, provideNameToOwner, and ordered ids for operators. Manifest provides[].version strings must be valid semver when declared; invalid or conflicting claims fail strict boot with structured *kernelExt. signals (see guest 30-init-kernel-extensions.js**).\n\nGOVERNANCE (FEATURE BITS DOC V14)\n\nNew capability bits are governed by ADR 001 — Kernel feature bit governance <../../developer-guide/adr/001-kernel-feature-bits-governance.md>. BARE_OS_KERNEL_FEATURE_BITS_DOC must bump when semantics change. Bits 2830 on word 1 are assigned (see ADR). Word 2 (bits2) carries the extended seeding platform surface; always mask with >>> 0. Avoid 1 << 31 on word 1 in JS without >>> 0 discipline.\n\nCapability index: kernel-capabilities-index.md <./kernel-capabilities-index.md> (bits → env → /proc → ctx).\n\nCAPABILITY BITMASK\n\nRuntime bits are defined in bare-os-protocol (kernel-feature-bits.js) and surfaced under /proc/bare_os_features and the /proc/bare_os/ tree. The stock booter advertises BARE_OS_KERNEL_FEATURES_STOCK_WORD_PRIMARY through BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE (eleven words on the wire when non-zero; see capability-words.md <./capability-words.md>).\n\nSeed RPC bare_os.capabilities includes protocolPackageVersion, optional booterPackageVersion, featureBitsDoc, doc, bits, bits2, bits3, bits4, bits5, bits6, bits7, bits8, bits9, bits10, role, protocol. RPC method names are listed from a single registry (seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js>); unknown methods return bare_os.rpc_unknown_method. bare_os.replication_status returns seeder-side replication hints (manifest path count, local RAM block count). bare_os.replication_queue includes bounded queueDepthEstimate and snapshot workflow notes; bare_os.capability_attestation, and bare_os.mbr_layout remain optional word-2 RPCs. Capability word 6 adds replication_plan, dht_bootstrap_hint, snapshot_chain, mirror_compaction_hint, updater_state, blind_peer_topology_v2, compact_ping. Capability word 7 adds corestore_stats, snapshot_manifest_slice, mirror_drive_hint_v2, hrpc_registry_summary, protomux_capability_ad, dht_address_book, replication_throttle_hint, bundlebee_stage, http_dht_proxy_hint. Capability word 8 adds protomux_rpc_pool_hint, hyperblob_store_hint, signing_request_queue_hint, core_storage_layout_hint, mirror_drive_compaction_v3, bundlebee_cli_stage, ready_guard_v2, blind_relay_circuit_hint, http_dht_proxy_routes. Capability word 9 adds Holepunch-aligned short names such as pear_stage_hint, updater_channel_matrix, appling_bundle_pointer, drive_resolve_policy, bundle_id_fingerprint, hyperdb_migration_hint, sidecar_bundle_index_v2, pear_message_queue_sketch, runtime_bootstrap_etag, force_update_guard, gracedown_window, tryboot_slot, hotmods_allowlist, prefetcher_budget, opstream_backpressure, multisig_link_pointer, md_render_caps, bundlebee_cli_stage_v2, seed_manifest_diff_v2, peer_handshake_latency_budget, plus replication adjuncts (ready_guard_v3, mirror_drive_compaction_v4, blind_relay_circuit_v2, http_dht_proxy_routes_v2, token-bucket metadata, compact_ping v3, peer_firewall_stats v4, staging_slot schema 6, kernel_info.pearApplingId). bare_os.manifest_hints returns a sample of manifest paths; bare_os.peer_health returns seeder health counters; bare_os.staging_slot returns optional A/B slot hints (seeder env BARE_OS_SEED_STAGING_SLOT, BARE_OS_SEED_STAGING_PENDING). Booter mirrors hints under /proc/bare_os/manifest_hints, peer_health, staging_slot, net_summary.json, extensions.json (schema 7 in Capability word 10), hdms_hints.json (schema 3: optional vaultRotateCount) and embeds them in /proc/bare_os_replication JSON. /proc/bare_os/index.json lists stable aliases (bare_os_proc_index schema 6). Capability word 10 adds Pear/Bare sketch RPCs (pear_doctor_hint … pear_terminal_caps, ready_guard_v4, compact_ping_v4, compaction/blind-relay v5/v3), replication adjuncts (pearBundleTier, autobaseDiscoveryHint, handshakeTokenBucketV4, staging_slot schema 7, peer_firewall_stats v5), and 19× Capability word 10 */proc/bare_os/.json files via bare-os-proc-pear-inspect-logger-tls.js**.\n\nCapability word 8 Pear/Bare bridge (doc-first): ctx.bareOsEmitStructuredCloneCap / ctx.bareOsProtomuxChannelAlias; BARE_OS_CURL_RESOLVE_MAP_JSON (curl/wget); BARE_OS_HTTP_PROXY_MAP_JSON (operator proxy map, host-interpreted); BARE_OS_BARE_HTTP1_KEEPALIVE_POOL, BARE_OS_HAPPY_EYEBALLS_IPV6_FIRST, BARE_OS_RESUME_STAGGER_LEVEL_MS_JSON, BARE_OS_INITD_COLLECT_MODE_HINT, BARE_OS_INITD_START_LIMIT_INTERVAL_MS, BARE_OS_INITD_START_LIMIT_BURST, BARE_OS_WORKER_RSS_HIGH_WATER_JSON, BARE_OS_SANDBOX_FS_CLASS, BARE_OS_SUBPROCESS_SCHED_POLICY_HINT, BARE_OS_DIAGNOSTICS_SUBSCRIBE_ALLOWLIST_JSON; BARE_OS_BOOT_POLICY_DENY_SEED_RPC_METHODS (comma-separated short names, also merged from denySeedRpcMethods in boot.policy.json v8).\n\nCapability word 9 Pear/Bare bridge: ctx.bareOsEmitPearStageHint, ctx.bareOsBareModuleResolveProbe, ctx.bareOsBareCryptoCapProbe, ctx.bareOsPearUpdaterChannel, ctx.bareOsEmitDriveResolveHint, ctx.bareOsRegisterBareDiagnosticsTapV2, ctx.bareOsEmitPearMessageSketch, ctx.bareOsEmitTrybootSlot, ctx.bareOsEmitMultisigPointer, ctx.bareOsBareStorageHint; host env BARE_OS_SOCKS_PROXY_MAP_JSON (delegated fetch); BARE_OS_BARE_CRYPTO_VERSION, BARE_OS_PEAR_IPC_PACKAGE_VERSION, BARE_OS_PEAR_UPDATER_CHANNEL, BARE_OS_HAPPY_EYEBALLS_V3_MODE, BARE_OS_BIN_WORKER_WASM_MS_MAX, BARE_OS_PROBE_ID_BARE_MODULE_CRYPTO_STAGING, BARE_OS_BARE_MODULE_PROBE_CLASS; optional *BARE_OS__JSON blobs for Capability word 9 /proc/bare_os/.json files (see bare-os-proc-bare-module-crypto-staging.js); boot policy v9 adds requireKernelCapabilitiesBareModuleCryptoStaging, requirePearRuntimeRange, denyBareModuleSpecifierPatterns, requireBareCryptoMin, denyKernelSyscalls, requirePearIpcMin, extensionSignerPinsV2, offlineLkgManifestMaxAgeSec, bootStagesRequireProcIndexMinSchema (legacy bootPhasesRequireProcIndexMinSchema), maxKernelExtensionDepth v2 semantics*, … — see boot.policy.schema.json <../schemas/boot.policy.schema.json>.\n\nCapability word 10 Pear/Bare bridge: ctx.bareOsEmitPearDoctorHint, ctx.bareOsPearInspectProbe, ctx.bareOsEmitBareBootStepHint (legacy ctx.bareOsEmitBareBootPhaseHint), ctx.bareOsBareRpcCapProbe, ctx.bareOsEmitPearStampPointer, ctx.bareOsRegisterBareLoggerTap, ctx.bareOsEmitAutobaseDiscoveryHint, ctx.bareOsEmitBlindPairingSketch, ctx.bareOsBareStreamBackpressureHint, ctx.bareOsPearTerminalCapsProbe; host env BARE_OS_PROBE_ID_PEAR_INSPECT_LOGGER_TLS, BARE_OS_BARE_RPC_PROBE_CLASS, BARE_OS_MTLS_PROXY_MAP_JSON, BARE_OS_THREAD_POOL_TELEMETRY_JSON, BARE_OS_HAPPY_EYEBALLS_V4_MODE, BARE_OS_BARE_BOOT_VERSION, BARE_OS_BARE_LOGGER_VERSION, BARE_OS_BARE_TLS_VERSION, BARE_OS_LIFECYCLE_SCHEMA_VERSION (injected); boot policy v10 adds requireKernelCapabilitiesPearInspectLoggerTls, requireBareBootMin, denyBareRpcMethodPatterns, maxPearInspectDepth, requireBareLoggerMin, denyAutobaseDiscoveryChannels, requireBareTlsMin, extensionSignerPinsV3, offlineLkgRequirePearStamp, bootStagesRequireLifecycleMinSchema (legacy bootPhasesRequireLifecycleMinSchema), …\n\nKernel program proc: governance developer-guide/kernel-program.md <../../developer-guide/kernel-program.md>; program tables feature-roadmap.md <./feature-roadmap.md> (batches A and B). BARE_OS_BOOT_SAFE_MODE (skip rc.d, kernel.ext.d, onboot); BARE_OS_BOOT_TRANSACTION_JOURNAL → /run/bare-os/boot-transaction.ndjson (lines include bootStage); BARE_OS_BOOT_CHECKPOINT → /run/bare-os/boot-checkpoint.json (schema 2, bootStage); BARE_OS_BOOT_DRY_RUN, BARE_OS_BOOT_POLICY_PATH, policyFallbackPaths, rollback marker, bundle digest, ABI min; kernel.d # ConditionEnvironment= guards; kernel.ext.d requires / after / before; /proc/bare_os/kernel_program.json schema 2 + operatorSketches (BARE_OS_KERNEL_PROGRAM_PROC_JSON override, legacy BARE_OS_GIANT_PHASE_PROGRAM_JSON); bareOsEmitKernelEvent / Subscribe, bareOsAcquireKeyHandle; /run/bare-os/services.json, loader-audit.ndjson; /bin/kernel-doctor, kernel-explain, kernel-boot-diff, kernel-preflight, kernel-triage, kernel-manifest-validate, kernel-fsck.\n\nWord 11 (bare-os-protocol 0.8.x, bits11): twenty new seed RPC short names (through mirror_drive_compaction_v6, compact_ping_v5, http_dht_proxy_routes_v3, …), boot policy v11 (requireKernelCapabilitiesHypercorePackHrpcLifecycle, extensionSignerPinsV4, pack/addon semver floors, maxHrpcAllowlistDepth, offlineLkgRequireHypercorePackHrpcLifecycle, merged denySeedRpcMethods), /proc/bare_os/index.json schema 7 with 20 word-11 JSON aliases, NDJSON lifecycle 10 / OTel 8 / audit 8, kernel-extensions.registry.schema.json branch 8. Host env BARE_OS_PROBE_ID_HYPERCORE_PACK_HRPC_LIFECYCLE; optional BARE_OS_HIDE_PROC_HYPERCORE_PACK_HRPC_LIFECYCLE=0 (or false / off) hides those word-11 proc nodes from readdir, path resolution, and the proc index (see vfs.js).\n\nJSON Schemas (policy, telemetry, boot trace): docs/schemas/ <../schemas/> (see also reference README <./README.md>).\n\nENVIRONMENT QUICK REFERENCE\n\n- Seed handshake — BARE_OS_SEED_RPC_HANDSHAKE=0 — Skip bare_os.capabilities RPC before MBR read\n- Seed strict — BARE_OS_SEED_CAP_STRICT=1 — Fail boot if seeder feature bits do not cover stock booter bits\n- Seed fail — BARE_OS_SEED_CAP_FAIL=1 — Fail boot on any handshake error\n- Pipelines — BARE_OS_SHELL_STREAMING=1 — Multiply pipeline byte/line caps (BARE_OS_SHELL_STREAMING_MULT, default 4×; alias BARE_OS_STREAMING_MULTIPLIER). Absolute post-multiplier ceilings: BARE_OS_PIPELINE_ABS_MAX_BYTES (default 512MiB), BARE_OS_PIPELINE_ABS_MAX_LINES (default 2000000).\n- Command subst — BARE_OS_SHELL_CMDSUBST=1 — Enable bounded $(…) in words (BARE_OS_SHELL_CMDSUBST_MAX_BYTES)\n- Union writes — BARE_OS_VFS_UNION_WRITE_DENY — Comma/colon list of path prefixes blocked for writes under union prefixes\n- IPC — BARE_OS_IPC_CHANNEL_MAX_BYTES — JSON map {\"fifoName\": 65536} per-channel backlog cap\n- IPC — BARE_OS_IPC_MAX_CHANNELS — Upper bound on distinct FIFO names (default 4096 when unset; host passthrough can change it); telemetry in metrics_live.ipcTelemetry\n- IPC / POSIX MQ — BARE_OS_POSIX_MQ_MAX_MSGS, BARE_OS_POSIX_MQ_MSG_BYTES — Session defaults for simulated mq_open when attrs are omitted (bounded ceilings in bare-os-ipc.js)\n- Initd journal — BARE_OS_INITD_JOURNAL_MAX_LINES — Cap NDJSON lines per unit (default 400, max 20000)\n- Telemetry — BARE_OS_TELEMETRY_NDJSON — Logical path; append NDJSON mirror (telemetrySchemaVersion / lifecycleSchemaVersion 10); optional sessionForkGeneration, bareModuleCryptoStagingProbeId, pearInspectLoggerTlsProbeId, hypercorePackHrpcLifecycleProbeId, bareModuleProbeClass, bareRpcProbeClass; optional correlation via BARE_OS_BOOT_ATTEMPT_ID → bootAttemptId\n- Telemetry OTel — BARE_OS_TELEMETRY_OTEL_JSONL — Logical path; append OTLP-inspired JSON lines (otlSchemaVersion 8, optional scopeMetrics sketch; see otel-bare-os-jsonl.schema.json <../schemas/otel-bare-os-jsonl.schema.json>). Shorthand: BARE_OS_TELEMETRY_OTEL=1 with no path defaults to /var/log/bare-os/otel.jsonl\n- Proc poll — BARE_OS_PROC_POLL_MS — Min interval 250ms, max 60s, for coalesced /proc/bare_os/metrics_live.json\n- Protomux registry proc — BARE_OS_PROC_PROTOMUX_EXTENSIONS_REGISTRY=1 — Exposes /proc/bare_os/protomux_extensions.json (alias registry + logical channel hints) and ctx.bareOsReadProtomuxExtensionsJson() when the booter attaches the helper\n- Shell ${…} — BARE_OS_SHELL_PARAM_EXPANSION=1 — Enable ${VAR:-default} and ${VAR#prefix} (bounded prefix length)\n- Shell ${…} v2 — BARE_OS_SHELL_PARAM_EXPANSION_V2=1 — With param expansion on: ${VAR:=x}, ${VAR##/} / ${VAR#/}, ${VAR%%pat} / ${VAR%pat} (bounded; see handbook ch.9)\n- Env GNU-like — BARE_OS_ENV_DASH_S=1 — /bin/env supports -S / --split-string and --env-file (bounded)\n- VFS pseudo watch — BARE_OS_VFS_WATCH_PSEUDO=1 — vfs.watch on coalesced /proc/bare_os/metrics_live.json\n- Diagnostics — BARE_OS_DIAGNOSTICS_SUBSCRIBE=1 — ctx.bareOsDiagnosticsSubscribe for structured dev events\n- HDMS / autopass hint — BARE_OS_AUTOPASS_INVITE_URL — Surfaced in /proc/bare_os/hdms_hints.json (guest does not open URLs)\n- Bin worker — BARE_OS_BIN_WORKER_OFFLOAD=1, BARE_OS_BIN_WORKER_ALLOW — Offload eligible /bin on Bare via bare-worker; allow list defaults to awk/sed/jq, or patterns like textproc: (cut, tr, sort, uniq, …); mathproc: (bc, dc); mediaproc: (ffmpeg, ffprobe); sysproc: (bounded process-adjacent builtins: echo, pwd, printenv, …); optional per-invocation wall cap BARE_OS_BIN_WORKER_WALL_MS; optional WASM time budget BARE_OS_BIN_WORKER_WASM_MS_MAX**\n- Word-6 proc inject — BARE_OS_PROC_ (see kernel-capabilities-index <./kernel-capabilities-index.md> Word 6) — Bounded JSON for /proc/bare_os/.json** operator metrics (udx, DHT, backpressure, locale, …)\n- DNS map — BARE_OS_DNS_MAP_JSON — Split-horizon static map; summary in /proc/bare_os/dns_map_active.json\n- Resume stagger — BARE_OS_RESUME_STAGGER_MS — Delay between initd unit starts on resume (advisory)\n- Profile warm rc.d — BARE_OS_KERNEL_PROFILE_WARM_RC_ONLY=1 — With BARE_OS_KERNEL_PROFILE_WARM: reload rc.d snippets only\n- Proc alias strict — BARE_OS_PROC_ALIAS_STRICT=1 — Fail boot if /proc/bare_os alias index incomplete (FEATURE6_STRICT_PROC_ALIAS)\n- SHM cap — BARE_OS_SHM_MAX_BYTES — Cap for /dev/shm on personal-backed tmp\n- TLS / HTTP hints — (reserved names in docs) BARE_OS_HSTS_PRELOAD_PINS_JSON, BARE_OS_TLS_PINS_JSON, BARE_OS_CURL_ALT_SVC_JSON — Multi-pin rotation, HSTS preload list, alt-svc — host-delegate / Pear layer; stock booter does not parse these env vars yet (see http-curl-and-wget.md <./http-curl-and-wget.md>)\n- Exec budget — BARE_OS_EXEC_LINE_BUDGET_MS — Reject top-level execLine when session wall time exceeds budget; alias BARE_OS_TIMER_BUDGET_MS when unset\n- Rlimit hint / NOFILE — BARE_OS_VFS_MAX_OPEN — When set, guest /proc/bare_os/rlimits.json maps RLIMIT_NOFILE to that value (advisory; not a real process ulimit)\n- Delegates — BARE_OS_DELEGATE_MAX_PER_MIN, BARE_OS_DELEGATE_CURL_MAX_PER_MIN, … — Per-minute caps on host delegates (sliding minute window)\n- Delegates — BARE_OS_DELEGATE_AUDIT_ONLY=1 — With BARE_OS_AUDIT=1, log delegate invocations and skip host run (exit 0)\n- Boot policy — BARE_OS_BOOT_POLICY=1 — Merge skipBootStages / denyBootStages (legacy skipPhases / denyBootPhases) from /etc/bare-os/boot.policy.json; optional minKernelCapabilitiesPrimary / requireSeedCaps; v2 maxExecLineDepth, denyEnvKeys, requireProcNodes; v3 requireKernelCapabilitiesExtendedSeedingPlatform, requireKernelCapabilitiesRlimitsDelegatesShell, allowedPearIpcChannels → session env, denyVfsPrefixes (VFS deny), maxInitdRestartsPerUnit → BARE_OS_INITD_RESTART_MAX_DEFAULT; v4 requireKernelCapabilitiesOfflineNetExtensions, denyExecLineBuiltins → BARE_OS_BOOT_POLICY_DENY_EXEC_LINE_BUILTINS, allowedCtxMethods → BARE_OS_BOOT_POLICY_ALLOWED_CTX_METHODS; v5 requireKernelCapabilitiesHostTransportDelegates, requireInitJsSha256; v6 requireKernelCapabilitiesReplicationOperatorSurface, requireBooterSemver, requireCtxApiMin, denyKernelExtensionIds, kernelExtensionHashPins, offlineLkgIntegrityStrict; v7v8 (see schema); v9 requireKernelCapabilitiesBareModuleCryptoStaging, requirePearRuntimeRange, denyBareModuleSpecifierPatterns, requireBareCryptoMin, denyKernelSyscalls, requirePearIpcMin, extensionSignerPinsV2, offlineLkgManifestMaxAgeSec, bootStagesRequireProcIndexMinSchema (legacy bootPhasesRequireProcIndexMinSchema), stricter extension depth / cycle diagnostics; v10 requireKernelCapabilitiesPearInspectLoggerTls, requireBareBootMin, denyBareRpcMethodPatterns, maxPearInspectDepth, requireBareLoggerMin, denyAutobaseDiscoveryChannels, requireBareTlsMin, extensionSignerPinsV3, offlineLkgRequirePearStamp, bootStagesRequireLifecycleMinSchema (legacy bootPhasesRequireLifecycleMinSchema)\n- Boot policy strict — BARE_OS_BOOT_POLICY_STRICT=1 — Abort boot when policy checks fail\n- Lazy personal drive — BARE_OS_LAZY_PERSONAL_DRIVE=1 — Mount personal Hyperdrive at session setup instead of immediately after kernel fetch\n- System revision — BARE_OS_SYSTEM_REVISION_ID, BARE_OS_SYSTEM_REVISION_PENDING, BARE_OS_SYSTEM_SLOT — Exposed as ctx.bareOsSystemRevision (Pear OTAstyle hints)\n- Delegates — BARE_OS_DELEGATE_ALLOW — Comma list: git, curl, wget, systemctl (empty = all)\n- DNS — BARE_OS_DNS_ALLOWLIST — Host allowlist for curl/wget http(s) URLs (*.suffix supported)\n- IPC namespace — BARE_OS_IPC_NAMESPACE — Prefix FIFO keys as <ns>__<name> for isolation\n- Kernel hot reload — BARE_OS_KERNEL_HOT_RELOAD=1 — Dev: ctx.bareOsRequestKernelReload() re-reads /boot/init.js\n- Kernel .ext.d incremental reload — BARE_OS_KERNEL_EXT_D_HOT_RELOAD=1 — After boot, ctx.bareOsReloadKernelExtDropinsSafe() scans /etc/bare-os/kernel.ext.d and runs only new extension scripts (append-only; no unload); optional /run/bare-os/kernel-ext-reload.ndjson\n- Hyperblobs dedup hint — BARE_OS_VFS_HYPERBLOBS_DEDUP=1 — Surfaces under /proc/bare_os/features for operator pipelines (guest VFS does not auto-enable chunking)\n- Kernel profile warm — BARE_OS_KERNEL_PROFILE_WARM=1 — Dev: ctx.bareOsRequestKernelProfileReload() re-reads /boot/init.js (same loop as hot reload)\n- Host bare-os proc — BARE_OS_HOST_BARE_OS_PROC=1, BARE_OS_HOST_OS_JSON — /proc/bare_os/host_os.json (schema 2: bare-os 3.9+ fields + optional bare-posix)\n- Replication windows — BARE_OS_REPLICATION_SYNC_WINDOWS — UTC HH:MM-HH:MM ranges; /proc/bare_os/sync_window.json; sets BARE_OS_REPLICATION_SYNC_WINDOW_ACTIVE\n- Kernel debug proc — BARE_OS_KERNEL_DEBUG=1 — /proc/bare_os/debug.json (masks only, no secrets)\n- Transport stats — BARE_OS_NET_TRANSPORT_STATS_JSON — JSON merged into /proc/bare_os/net_summary.json transport\n- Subprocess bridge v2 — BARE_OS_SUBPROCESS_BRIDGE_META_JSON — ctx.bareOsReadSubprocessBridgeSnapshot() meta (supportedSignals, cgroupRootHint, …)\n- HDMS support id — BARE_OS_HDMS_SUPPORT_CORRELATION_ID — Non-secret string in /proc/bare_os/hdms_hints.json\n- Seeder staging — BARE_OS_SEED_STAGING_PREVIOUS_SLOT, BARE_OS_SEED_REPLICATION_QUEUE_DEPTH_HINT, BARE_OS_SEED_REPLICATION_SNAPSHOT_NOTE_JSON — Seeder-only env for richer RPC payloads\n- Sandbox — BARE_OS_SANDBOX_WORKER=1 — Try bare-worker when available; else microtask defer\n- Bundle tier — BARE_OS_BUNDLE_TIER=core — bare-os-bare-libs build: only manifest rows with matching tier (all = default); optional per-row risk in manifest\n- Word-11 proc — BARE_OS_HIDE_PROC_HYPERCORE_PACK_HRPC_LIFECYCLE=0 (or false / off) — Hides the 20 word-11 */proc/bare_os_.json entries, matching /proc/bare_os/.json aliases, and their rows in /proc/bare_os/index.json; reads resolve as absent (null* / ENOENT semantics)\n\nCAPABILITY WORD 6 SUMMARY\n\nShipped as bits6 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE. Full bit map: kernel-capabilities-index.md <./kernel-capabilities-index.md> (Word 6). One-row checklist: feature-roadmap.md <./feature-roadmap.md> (Capability word 6 table). CI: verify-kernel-capabilities-word-6.mjs, verify-pear-no-static-node-import.mjs.\n\nCAPABILITY WORD 9 SUMMARY\n\nShipped as bits9 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING. Word 9 map: kernel-capabilities-index.md <./kernel-capabilities-index.md>. Checklist: feature-roadmap.md <./feature-roadmap.md> (Capability word 9 table). Node→Bare map: node-to-bare-modules.md <../../developer-guide/node-to-bare-modules.md>. CI: verify-kernel-capabilities-word-9.mjs, verify-kernel-capabilities-contract.mjs, verify-ctx-api-feature-bits.mjs, verify-ctx-dts.mjs, verify-compat-matrix.mjs.\n\nCAPABILITY WORD 10 SUMMARY\n\nShipped as bits10 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS. Word 10 map: kernel-capabilities-index.md <./kernel-capabilities-index.md>. Checklist: feature-roadmap.md <./feature-roadmap.md> (Capability word 10 table). CI: verify-kernel-capabilities-word-10.mjs plus the capabilities-contract / ctx / compat scripts above.\n\nCAPABILITY WORD 11 SUMMARY\n\nShipped as bits11 + BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE. Word 11 map: kernel-capabilities-index.md <./kernel-capabilities-index.md>. Checklist: feature-roadmap.md <./feature-roadmap.md> (Capability word 11 table). Node→Bare map: node-to-bare-modules.md <../../developer-guide/node-to-bare-modules.md>. CI: verify-kernel-capabilities-word-11.mjs plus verify-kernel-capabilities-contract.mjs, verify-ctx-api-feature-bits.mjs, verify-ctx-dts.mjs, verify-compat-matrix.mjs.\n\nPOSIX UTILITY NOTES\n\n- cmp — Two-file byte compare; exit 1 on difference\n- wait — Shell builtin: wait for background jobs by id or all\n\nCOOKBOOK SNIPPETS\n\n1. Boot phases — Use ctx.bareOsRegisterBootPhaseHook (see stock kernel/init.js header).\n2. Virtual files — ctx.bareOsRegisterVirtualFile(name, reader, { etag, mime, ttlMs }); list via /proc/bare_os_virtual_registry.\n3. IPC — Named FIFOs under /run/bare-os/ipc/; optional BARE_OS_IPC_NAMESPACE; JSON-RPC and fan-out documented in the booter package README.\n4. Initd drop-ins — After= / Before= / Wants= / Requires=; RestartMaxAttempts= in ~/.config/bare-os/units/<name>.unit (132). Fragments — ~/.config/bare-os/units.d/<name>/.conf merged before bare-init overrides. IdleSec= with SocketActivationIpc= stops the unit after idle IPC (requires stop). ReadinessPath= may be exec:<line> for an execLine gate. Timers — ~/.config/bare-os/timers/.timer: [Timer] with OnCalendar= + ExecLine=, optional JitterSec=, or EveryMs= (100086400000) + ExecLine= for fixed-interval jobs (max 8 files).\n5. /proc/bare_os/ — Stable aliases (features, replication, provenance, metrics_live.json, initd_dag.json, pear_ipc.json, manifest_hints, …) mirroring flat /proc/bare_os_* files.\n6. ctx.bareOsReadProcMetricsLive() — Same JSON as /proc/bare_os/metrics_live.json without a VFS read.\n7. Initd — bareOsRegisterSuspendHook / ResumeHook stop and restart units with stop handlers around Bare mobile suspend (see bare-initd).\n\nPROFILES\n\n- kernel/etc/bare-os/rc.profile.full — example exports for “full” shell features (use BARE_OS_BOOT_PROFILE=full when that snippet is installed as rc.profile.full on the image).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","kernel","extensions","and","feature","matrix","bare"],"seeAlso":[{"name":"docs-reference-kernel-image","section":7},{"name":"docs-reference-kernel-extensions-generated-toc","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/kernel-extensions.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-kernel-image","section":7,"title":"Kernel image sources","synopsis":["man 7 docs-reference-kernel-image","Documentation page (plain text from docs/reference/kernel-image.md)"],"description":"KERNEL IMAGE SOURCES\n\nFormer DOCUMENTATION.md §9. Reference index → <README.md>\n\n9. KERNEL SOURCES (STAGED INTO HYPERDRIVE)\n\nThese files are read from disk by the seeder and written into the system drive with no temp directory; paths are determined by packages/bare-os-seeder/index.js <../../packages/bare-os-seeder/index.js> stageKernelTree().\n\n9.1 KERNEL/INIT.JS <../../KERNEL/INIT.JS>\n\n- Staged as: /boot/init.js\n- Source of truth: Hand-authored logic lives in kernel/lib/init/init-main.js <../../kernel/lib/init/init-main.js> (plus kernel/lib/boot/ <../../kernel/lib/boot/>); the staged file is produced by scripts/bundle-kernel-init.mjs <../../scripts/bundle-kernel-init.mjs>. Keep packages/bare-os-seeder/kernel/ <../../packages/bare-os-seeder/kernel/> in byte parity after changes.\n- Contract: Must define a top-level async function start(ctx) (see kernel-runner.js <../../packages/bare-os-booter/lib/kernel-runner.js>).\n- Behavior (see handbook/06-kernel-and-binaries.md <../../handbook/06-kernel-and-binaries.md>):\n- Prints /etc/os-release, optional /etc/motd, optional profile rc, /etc/bare-os/rc, sorted digit-prefixed /etc/bare-os/rc.d/*, optional /etc/bare-os/rc.local, then banner / issue.\n- When BARE_OS_SKIP_REPL: runs each non-comment line from BARE_OS_ONBOOT (newline-separated) or /etc/bare-os/onboot via execLine.\n- Loop: readLine('') (TTY shows [user@host:path] > from the booter). If null, break. Empty line skips. exit breaks. Otherwise await execLine(t) (booter dispatches to /bin/<cmd>).\n\n9.2 KERNEL/BIN/ECHO <../../KERNEL/BIN/ECHO>\n\n- Staged as: /bin/echo\n- Contract: async function run(ctx, argv) — argv[0] is command name.\n- Behavior: ctx.console.log(argv.slice(1).join(' ')).\n\n9.3 KERNEL/BIN/HELP <../../KERNEL/BIN/HELP>\n\n- Staged as: /bin/help\n- Contract: async function run(ctx, _argv).\n- Behavior: Logs a compact list of /bin names, builtins, and pointers to man / identity commands (not an exhaustive tutorial; see man edit / man nano for the TTY editor).\n\n9.4 OPTIONAL /BIN INDEX ARTIFACTS (BOOTER, PERSONAL DRIVE)\n\nWhen BARE_OS_VFS_BIN_INDEX_BUILD or BARE_OS_BIN_HYPERBEE_INDEX is enabled, the host booter may write /.bare-os/index/bin-manifest.json and /.bare-os/index/bin-hyperbee-hint.json (schema 2, includes namesDigest for deterministic invalidation). ctx.bareOsVfsBatchWrite rebuilds these when any batch put touches *bin/**.\n\n9.5 KERNEL/ETC/OS-RELEASE <../../KERNEL/ETC/OS-RELEASE>\n\n- Staged as: /etc/os-release\n- Format: Plain text key=value lines (familiar from Linux):\n\n NAME=\"BareOS\"\n VERSION=\"0.1.0\"\n VARIANT=\"hyperdrive-only\"","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","kernel","image","sources"],"seeAlso":[{"name":"docs-reference-kernel-security-subsystems","section":7},{"name":"docs-reference-kernel-extensions","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/kernel-image.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-kernel-security-subsystems","section":7,"title":"Kernel security subsystems (identity, handles, audit, ACL)","synopsis":["man 7 docs-reference-kernel-security-subsystems","Documentation page (plain text from docs/reference/kernel-security-subsystems.md)"],"description":"KERNEL SECURITY SUBSYSTEMS (IDENTITY, HANDLES, AUDIT, ACL)\n\nStock booter modules under packages/bare-os-booter/lib/:\n\n| Module | Role |\n| identity-account.js | On-disk account v2 (Ed25519, PBKDF2, ChaCha20-Poly1305); BARE_OS_ACCOUNT_CRYPTO_PROFILE_V2 and readAccountCryptoProfile(buf) expose algorithm metadata without decryption. |\n| identity-session.js | Login, vault unlock, session key application. |\n| bare-os-secret-handle-registry.js | Opaque handles with TTL, optional max uses, revocation; surfaced via ctx.bareOsAcquireKeyHandle / bareOsReleaseKeyHandle / bareOsTouchKeyHandle. |\n| bare-os-audit-chain.js | In-memory hash-linked audit rows; ctx.bareOsAuditLogAppend. |\n| bare-os-acl-eval.js | Advisory evaluateBareOsAcl; ctx.bareOsAclEvaluate. |\n\nPROTOMUX AND OPTIONAL RPC CLIENT POOL\n\nStock /proc/bare_os/protomux.json and metrics_live.json may include operator-only sketches for Hyperswarm / Protomux backpressure and (when BARE_OS_PROTOMUX_RPC_CLIENT_POOL_COMPOSITION=1) a composition gate for protomux-rpc-client-pool-style reuse. The guest never opens pool handles itself: the booter only surfaces env-gated, non-spoofable counters so fleet dashboards can correlate replication pressure with mux RPC depth. Treat pool metrics like any other P2P hint — no central authority and no silent network from /proc.\n\n/proc/bare_os/security_posture.json (schema 4) aggregates non-secret snapshots: account profile, active handle counts, audit chain head/length, vault rotation checkpoint path, peer admission env pointers, optional blind-relay audit gate, and policy flags. Host env may supply BARE_OS_PEAR_SECURE_ENCLAVE_JSON (opaque Pear enclave pointer) and BARE_OS_ACCOUNT_KEY_ROTATION_STATE_JSON (rotation continuity metadata — not secret keys); both are merged only when non-empty.\n\nThreat model and encryption posture: vault-threat-model.md <vault-threat-model.md> (encryption at rest, AEAD, operator assumptions).\n\nDocumentation parity: When changing any of the above APIs or proc schemas, update handbook/04-the-booter-runtime.md, packages/bare-os-booter/lib/bare-os-ctx.d.ts, lib/bare-os-ctx-api.js, and this file.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","kernel","security","subsystems","identity","handles","audit","acl"],"seeAlso":[{"name":"docs-reference-naming-alias-matrix","section":7},{"name":"docs-reference-kernel-image","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/kernel-security-subsystems.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-naming-alias-matrix","section":7,"title":"Naming alias matrix (legacy ↔ canonical)","synopsis":["man 7 docs-reference-naming-alias-matrix","Documentation page (plain text from docs/reference/naming-alias-matrix.md)"],"description":"NAMING ALIAS MATRIX (LEGACY ↔ CANONICAL)\n\nMachine-checked by scripts/verify-naming-alias-matrix.mjs (see root pretest). Use canonical identifiers in new first-party code; keep legacy fields for wire and policy compatibility.\n\nCTX BOOT HOOKS\n\n- Canonical: bareOsRegisterBootStepHook, bareOsInvokeBootStepHooks, bareOsEmitBareBootStepHint\n- Legacy: bareOsRegisterBootPhaseHook, bareOsInvokeBootPhaseHooks, bareOsEmitBareBootPhaseHint\n\nBOOT POLICY FILE KEYS\n\n- Canonical: skipBootStages, denyBootStages, bootStagesRequireProcIndexMinSchema, bootStagesRequireLifecycleMinSchema\n- Legacy: skipPhases, denyBootPhases, bootPhasesRequireProcIndexMinSchema, bootPhasesRequireLifecycleMinSchema\n\nBOOT READY SNAPSHOT KEYS (SUBSYSTEMS.KERNEL)\n\n- Canonical: stages, bootStages\n- Legacy mirrors: phases, bootPhases (same payloads)\n\n/PROC STABLE NAMES\n\n- /proc/bare_os/kernel_program.json is canonical; giant_phase_program.json remains a documented legacy alias filename on some images.\n\nTERMINOLOGY POLICY\n\n- First-party vs vendored scope: developer-guide/naming-conventions.md <../../developer-guide/naming-conventions.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","naming","alias","matrix","legacy","canonical"],"seeAlso":[{"name":"docs-reference-node-vs-bare-host-matrix","section":7},{"name":"docs-reference-kernel-security-subsystems","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/naming-alias-matrix.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-node-vs-bare-host-matrix","section":7,"title":"Node vs Bare host matrix","synopsis":["man 7 docs-reference-node-vs-bare-host-matrix","Documentation page (plain text from docs/reference/node-vs-bare-host-matrix.md)"],"description":"NODE VS BARE HOST MATRIX\n\nThis repository mixes Node (CI and some package scripts) and Bare / Pear (stock booter and seeder entrypoints). Use this table when choosing where a test or tool runs.\n\n| Surface | Typical host | Notes |\n| packages/bare-os-booter/test.js | Node + bare-node-test-shim.cjs | Exercises the booter with Brittle; shim stubs bare-thread / bare-worker and chains Bare.on for bare-timers; *booter index.js + lib/.js use #host-fs / #host-path** (bare-fs / bare-path on Bare). |\n| packages/bare-os-seeder sources | Bare / Pear entry | index.js and *lib/.js use #host- aliases like the booter; seeder adds #host-fs-promises*. |\n| packages/bare-os-booter/test.identity.js | Bare (brittle-bare) | Identity paths prefer Bare APIs. |\n| packages/bare-os-protocol/test.js | Bare (brittle-bare); optional test:node | Protocol encodings are runtime-agnostic. |\n| packages/bare-os-coreutils/test/*.mjs | Node | Utilities are loaded via AsyncFunction; stdin/fs helpers use Node in tests. |\n| packages/bare-os-booter start / dev | Bare (bare index.js) | Production-shaped guest path; Pear uses the same tree with staged node_modules. |\n| Guest ctx / /bin / kernel init.js | Bare (or Pear) | Must not rely on node: built-ins; use bare-** shims per project rules. |\n| Repo pretest verify scripts | Node | Static analysis, schema checks, bundle policy. |\n\nRoot npm run test:bare runs a small Bare-first slice (protocol + coreutils Node tests are still Node; see script in root package.json).\n\nFor Holepunch alignment, compare versions against your local mirror under holepunchto_repos (e.g. bare-subprocess, bare-hrtime, pear-runtime).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","node","vs","bare","host","matrix"],"seeAlso":[{"name":"docs-reference-observability-contracts","section":7},{"name":"docs-reference-naming-alias-matrix","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/node-vs-bare-host-matrix.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-observability-contracts","section":7,"title":"Observability contracts (NDJSON / OTel / audit)","synopsis":["man 7 docs-reference-observability-contracts","Documentation page (plain text from docs/reference/observability-contracts.md)"],"description":"OBSERVABILITY CONTRACTS (NDJSON / OTEL / AUDIT)\n\nBare OS mirrors structured boot and kernel events to optional sinks:\n\n- Boot trace — BARE_OS_BOOT_TRACE (json / ndjson) from the stock bundled kernel (kernel/lib/init/init-main.js <../../kernel/lib/init/init-main.js> → /boot/init.js), including canonical stage plus legacy phase fields on each line.\n- Kernel extension reload audit — When BARE_OS_KERNEL_EXT_D_HOT_RELOAD is enabled and ctx.bareOsReloadKernelExtDropinsSafe() runs, append-only lines (kernelExtReloadSchemaVersion) may be written to /run/bare-os/kernel-ext-reload.ndjson (guest VFS), alongside existing loader-audit.ndjson when BARE_OS_LOADER_AUDIT is on.\n- Telemetry NDJSON — BARE_OS_TELEMETRY_NDJSON (guest path); schema telemetry-ndjson-record.schema.json (telemetrySchemaVersion / lifecycleSchemaVersion).\n- OTel-style JSONL — BARE_OS_TELEMETRY_OTEL_JSONL; schema otel-bare-os-jsonl.schema.json. When BARE_OS_TELEMETRY_OTEL=1 (or true) and no JSONL path is set, the booter defaults to /var/log/bare-os/otel.jsonl.\n- Audit stream — host/session policy; see kernel extensions reference for env keys. ctx.bareOsAuditLogAppendBatch mirrors may include identity.personal_root_migration (schema 1: legacy / → /.bare-os/home/<seg>/ decisions) and identity.guest_scrub (schema 1: paths wiped when BARE_OS_GUEST_SCRUB runs on guest login).\n- Event bus — ctx.bareOsEmitEventBus / ctx.bareOsSubscribeEventBus; optional BARE_OS_EVENT_BUS_NDJSON=1 mirrors one JSON line per event on session stdout (eventBusSchema: 1).\n- Boot budget / bare-stdlib — Guest /run/bare-os/boot-perf.json (schema 5) records cold wall vs BARE_OS_BOOT_BUDGET_MS_COLD and bare-stdlib resolution vs BARE_OS_BOOT_BUDGET_MS_BARE_STDLIB (booter seeds BARE_OS_BOOT_BARE_STDLIB_RESOLUTION_MS). /proc/bare_os/metrics_live.json exposes bootBudgetCold, bootBudgetBareStdlib, and coalesced bootBudgetTelemetry (schema 2) for the same knobs.\n\nContract tests in root pretest: validate-example-schemas.mjs, verify-kernel-capabilities-contract.mjs, verify-compat-matrix.mjs, verify-banned-terminology.mjs (governance wording; skips vendored kernel/lib/bare/), and verify-naming-alias-matrix.mjs. When adding fields, bump schema versions and extend the example JSON under kernel/etc/bare-os/.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","observability","contracts","ndjson","otel","audit"],"seeAlso":[{"name":"docs-reference-ota-channels","section":7},{"name":"docs-reference-node-vs-bare-host-matrix","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/observability-contracts.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-ota-channels","section":7,"title":"OTA update channels (sketch)","synopsis":["man 7 docs-reference-ota-channels","Documentation page (plain text from docs/reference/ota-channels.md)"],"description":"OTA UPDATE CHANNELS (SKETCH)\n\nBare OS images can be pinned and rolled out using boot policy and host env hints. Planned channel labels (not all hosts implement every channel today):\n\n| Channel | Intent |\n| stable | Default production track. |\n| candidate | Pre-stable soak. |\n| edge | Fast-moving integration. |\n| local | Developer / air-gapped Corestore-only paths (BARE_OS_OFFLINE_LKG_BOOT). |\n\nWire these as host or guest env keys only after your Pear updater documents support; treat this page as the contract sketch for policy fields (updateChannel, requirePearUpdaterChannel, etc.) as they land in boot.policy.schema.json.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","ota","channels","update","sketch"],"seeAlso":[{"name":"docs-reference-out-of-scope-and-tooling","section":7},{"name":"docs-reference-observability-contracts","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/ota-channels.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-out-of-scope-and-tooling","section":7,"title":"Out of scope and tooling","synopsis":["man 7 docs-reference-out-of-scope-and-tooling","Documentation page (plain text from docs/reference/out-of-scope-and-tooling.md)"],"description":"OUT OF SCOPE AND TOOLING\n\nFormer DOCUMENTATION.md §§1516. Reference index → <README.md>\n\n15. WHAT IS INTENTIONALLY OUT OF SCOPE IN THIS REPO\n\n- No node_modules documentation (upstream packages).\n- No line-by-line package-lock.json (machine-generated).\n- No committed host Corestore trees, legacy data/, or .test-data/ binary stores (runtime artifacts).\n\n16. VERSION AND TOOLING SUMMARY\n\n- Node.js 20+ — Install, brittle-node tests, node index.js dev runs\n- Bare ≥2 (engines) — Intended runtime for pear run / bare index.js\n- Prettier — Format/lint at root\n- Brittle — Test runner (brittle-bare protocol, brittle-node booter)\n- GitHub Actions — npm ci + npm test on main","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","out","of","scope","and","tooling"],"seeAlso":[{"name":"docs-reference-package-bare-os-booter","section":7},{"name":"docs-reference-ota-channels","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/out-of-scope-and-tooling.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-package-bare-os-booter","section":7,"title":"Package: bare-os-booter","synopsis":["man 7 docs-reference-package-bare-os-booter","Documentation page (plain text from docs/reference/package-bare-os-booter.md)"],"description":"PACKAGE: BARE-OS-BOOTER\n\nFormer DOCUMENTATION.md §§12.112.9 plus §12.7a (REPL completion). Reference index → <README.md>\n\n12. PACKAGE: BARE-OS-BOOTER\n\n12.1 PACKAGES/BARE-OS-BOOTER/PACKAGE.JSON <../../PACKAGES/BARE-OS-BOOTER/PACKAGE.JSON>\n\nResolved hyperstack (hoisted root lockfile, illustrative): after npm install at the repo root, node_modules/protomux and node_modules/hyperswarm versions are pinned in package-lock.json and guarded by packages/bare-os-booter/test.js (fixtures/protomux-hyperswarm-lock.json, schema 2 metadata row). Intentional upgrades require bumping that fixture alongside the lockfile.\n\nHyperbee guest hints: ctx.bareOsHyperbeeGuestHint() (when BARE_OS_HYPERBEE_GUEST_INDEX is set) returns read-only JSON aligned with optional hyperbee2 <https://github.com/holepunchto/hyperbee2>-style guest indexes — see ADR-hyperbee-guest-index.md <../architecture/ADR-hyperbee-guest-index.md>; the stock kernel does not import Hyperbee by default.\n\n- main — ./index.js\n- scripts.start / dev — bare index.js\n- scripts.test — brittle-bare test.identity.js then node --require ./scripts/bare-node-test-shim.cjs … brittle-node test.js (shim supplies a chainable Bare.on, stubs bare-thread / bare-worker even when ESM resolves them by absolute path, Bare-style bare-type binding + Node util.inspect stand-in for bare-inspect; openssl / ssh-keygen delegates lazy-load bare-crypto so the main suite does not import native addons at startup)\n- dependencies — Same hyperstack as seeder + bare-os-protocol + bare-crypto (identity account + vault AEAD) + @qvac/sdk (local QVAC LLM for /bin/agent; lean qvac.config.json = llamacpp completion only). Set BARE_OS_SKIP_QVAC=1 or pack with --skip-qvac to stub natives. Bridge: ctx.bareOsQvacAvailable / Status / LoadModel / UnloadModel / Complete (lib/bare-os-qvac-host.mjs <../../packages/bare-os-booter/lib/bare-os-qvac-host.mjs>); pack graph via bare-os-qvac-pack-anchor.mjs <../../packages/bare-os-booter/lib/bare-os-qvac-pack-anchor.mjs>. Models download on first agent use (not seeded in the system image).\n- devDependencies — brittle\n- imports — #host-fs / #host-path resolve to bare-fs / bare-path under Bare and Nodes built-in fs / path under the default condition (package imports cannot target node: URLs). First-party sources import *#host- only (CI forbids bare from 'fs' / from 'path'). url maps to bare-url / node:url. #bare-os-boot-manifest-sig** selects Bare vs Node Ed25519 verify helper.\n- pear.stage.ignore — Includes test.js, test.identity.js, .test-data so tests are not staged\n\nPear + npm workspaces: dependencies are hoisted to the repo root; Pears dev bundle often does not follow a single symlinked node_modules tree. scripts/ensure-pear-node-modules.mjs <../../scripts/ensure-pear-node-modules.mjs> (run from the repo root) rebuilds packages/bare-os-booter/node_modules by symlinking each top-level package from the root node_modules (matching npms flat hoist). pear.stage.include lists node_modules so the staged Hyperdrive uses node_modules/<pkg> paths (Bare require('bare-node-net') and similar resolve correctly; ../../node_modules alone did not). For bare-ssh2, bare-net (Bare TCP) and the *bare-node- shims it loads are direct dependencies of the booter so versions match the vendored bare-ssh2 tree and Pear staging always sees them. npm run os:booter** runs the script before pear run. After npm install at the root, re-run the script if hoisted packages change.\n\n12.2 PACKAGES/BARE-OS-BOOTER/LIB/PATHS.JS <../../PACKAGES/BARE-OS-BOOTER/LIB/PATHS.JS>\n\n- packageRootDir(metaUrl) — Same as seeder (Pear RTI / swapDir / cwd).\n- defaultBootCorestorePath / defaultLocalSeedCorestorePath — BARE_OS_BOOT_STORE / BARE_OS_LOCAL_SEED, or under hostDataRoot() (BARE_OS_HOST_DATA or ~/.bare-os): corestore/booter and corestore/seeder respectively. Same signature stability as the seeder helper.\n\n12.2A BOOT MODULARITY (LOADER, CAPABILITIES, LIFECYCLE)\n\n- lib/bare-os-kernel-loader.js <../../packages/bare-os-booter/lib/bare-os-kernel-loader.js> — loadOsFromPeers, loadOsFromOfflineLkg: seed capability handshake + optional RPC wave, MBR read, system Hyperdrive open/replicate, /boot/init.js fetch, personal drive mount (when not lazy). Invoked from index.js inside the boot timeout race.\n- lib/bare-os-capability-registry.js <../../packages/bare-os-booter/lib/bare-os-capability-registry.js> — KERNEL_CAPABILITY_SEED_STRICT_ROWS, buildStockKernelCapabilityWords, freezeKernelCapabilityWordsFromCapabilities: single place for stock capability word math used by the booter and loader.\n- lib/bare-os-lifecycle-manager.js <../../packages/bare-os-booter/lib/bare-os-lifecycle-manager.js> — exitHostProcess, teardownBareOsBootResources: Bare.exit deferral and ordered HDMS → swarm → drives → Corestore teardown (Pear heap safety).\n- lib/bare-os-kernel-errno.js <../../packages/bare-os-booter/lib/bare-os-kernel-errno.js> — POSIX-inspired BARE_OS_ERRNO constants and name helpers for future unified error reporting across VFS/utilities.\n\nSee also Kernel subsystem map <../architecture/kernel-subsystems.md> and ADR 0001 <../adr/0001-kernel-subsystem-boundaries.md>.\n\n12.2B CORESTORE / SWARM SUSPENDRESUME BRIDGE\n\n- lib/corestore-host-lifecycle.js <../../packages/bare-os-booter/lib/corestore-host-lifecycle.js> — Registers one-shot hooks so guest ctx.bareOsRegisterSuspendHook / bareOsRegisterResumeHook call host corestore / hyperswarm suspend() / resume() when those methods exist (mobile sleep, Pear lifecycle). Corestore 7.12+ no longer flushes on suspend(); the hook flush()es open sessions first. Host stores are constructed with lib/corestore-opts.js <../../packages/bare-os-booter/lib/corestore-opts.js> treeCache (maxSize: 8192). Non-goal (stock booter): automatic corestore-snapshot / frozen peer images from the guest — operators replicate Hyperdrives via swarm + personal-drive export of keys when needed; bareOsCorestoreSnapshotOperatorHint in /proc is an advisory field only (no guest RPC that invokes corestore-snapshot).\n\n12.3 PACKAGES/BARE-OS-BOOTER/INDEX.JS <../../PACKAGES/BARE-OS-BOOTER/INDEX.JS>\n\nImports — Hyperswarm, Protomux, protocol, ./lib/swarm-disk.js, ./lib/kernel-runner.js, ./lib/bare-os-kernel-loader.js, ./lib/bare-os-capability-registry.js, ./lib/bare-os-lifecycle-manager.js, ./lib/vfs.js, ./lib/shell.js, ./lib/paths.js, ./lib/bare-os-ipc.js, ./lib/bare-os-runtime-caps.js, stdio/readline/repl/boot-splash helpers, ./lib/identity-session.js.\n\nbootStorePath() — defaultBootCorestorePath(_pkg, import.meta.url).\n\ncreateReadLine()\n\n- If BARE_OS_SKIP_REPL === '1': returns async () => null.\n- Else prefers fish-style / bare-readline raw TTY editing when stdin is a TTY; falls back to a stream line reader (no node:readline in the stock boot path).\n- On failure: warns and returns async () => null.\n\nexecuteKernel(disk, store, swarm, initSource) (store/swarm unused but kept for signature symmetry / future use)\n\n- Builds shellEnv with guest defaults: USER/LOGNAME=guest, HOME/PWD=/home/guest, UID/GID=65534, BARE_OS_IDENTITY=guest, BARE_OS_EXIT_STATUS=0, BARE_OS_CTX_API_VERSION, PATH=/bin, SHELL, HOSTNAME, 0. When the host sets any of the keys listed under “host → session passthrough” in Environment variables and POSIX appendix <environment-and-posix-appendix.md#14-environment-variables-complete-list>, those values are copied into shellEnv. Sets BARE_OS_BOOT_PROFILE_RESOLVED from BARE_OS_BOOT_PROFILE or the first line of /etc/bare-os/profile, and BARE_OS_SESSION_ID (random UUID). Seeds /run/bare-os/boot.json fields imageDigest, pearChannel, pearRelease from BARE_OS_IMAGE_DIGEST, BARE_OS_PEAR_CHANNEL / PEAR_CHANNEL, BARE_OS_PEAR_RELEASE when present.\n- createBareOsIpc({ maxFifoBytes, maxChannels?, perChannelMaxBytes?, ipcRpcToken?, enableFanout?, maxJsonRpcLineBytes?, posixMqDefaultMaxmsg?, posixMqDefaultMaxBytes?, posixMqMaxmsgCeiling? }) (bare-os-ipc.js <../../packages/bare-os-booter/lib/bare-os-ipc.js>) — FIFOs under /run/bare-os/ipc/<name>; optional per-name byte caps from BARE_OS_IPC_CHANNEL_MAX_BYTES; optional global channel cap BARE_OS_IPC_MAX_CHANNELS (host passthrough); POSIX MQ defaults from BARE_OS_POSIX_MQ_MAX_MSGS / BARE_OS_POSIX_MQ_MSG_BYTES; JSON-RPC with optional token and line cap; fan-out fanoutPublish/fanoutSubscribe; stats includes fan-out counts, quota telemetry, and operator backpressure snapshots when caps expose features.ipcFanout.\n- createVfs(drive, personalDrive, shellEnv, vfsMountRef, vfsOptions) → ctx.vfs (same env object as ctx.env). vfsOptions supply procSnapshot, dynamic */proc/ and /sys/ text (quotas JSON, bare_os_features with bitsbits5 when advertised, bare_os_net_summary, bare_os_host_os, bare_os_sync_window, bare_os_debug, net/disk stubs, session stats), bootProfileText, sessionText, initdRunText, bootReadyJsonText, mount map for /proc/mounts, bootStartedMs for /proc/uptime, etc. Exposes vfs.watch(logicalPath) for Hyperdrive-backed paths when BARE_OS_VFS_WATCH is not 0. Operator blind-relay sketches (blind_relay_router, blind_pairing_sketch, relay_geo_hint) return schema 1 JSON with operatorRedacted: true until the host sets BARE_OS_PROC_BLIND_PEER_RELAY_HINTS. kernel-runner: when BARE_OS_BARE_SUBPROCESS_BRIDGE is set, BARE_OS_BARE_SUBPROCESS_TIMEOUT_MS can default runBin* timeouts.\n- applyGuestEnv(ctx) then ensureGuestHome(ctx) — normalizes ctx.identity and seeds /.bare/ (and a guest marker) on the personal drive.\n- createReadLine() always resolves stdio first and returns stdout (may be null) alongside readLine so the kernel can write to the same stream as the REPL (including bare-stdio under Pear).\n- Builds ctx: bareOsCtxApiVersion (from bare-os-ctx-api.js <../../packages/bare-os-booter/lib/bare-os-ctx-api.js>), bareOsRuntimeCaps (frozen snapshot from bare-os-runtime-caps.js <../../packages/bare-os-booter/lib/bare-os-runtime-caps.js>: pipeline limits, quotas, pseudo path list, feature flags such as vfsWatch, ipcRpcJson, initdSocketActivation), bareOsIpc, disk, drive, personalDrive, vfs, env, console, b4a, topic: topicKey(), readLine, writeScreen(str), bareOsSubscribeBootEvent / bareOsEmitBootEvent, bareOsSubscribeHdmsLifecycle, bareOsAwaitInitdUnits, bareOsPublishBootReady, execLine → wraps execShellLine with optional audit (BARE_OS_AUDIT, BARE_OS_AUDIT_JSON, redaction), execLine depth cap (BARE_OS_EXEC_MAX_DEPTH), then the shell (returns 'ok' or 'exit'; updates BARE_OS_EXIT_STATUS in vfs.env; bare exit line sets status then requestBooterExit), runBinCommand(argv) → delegates to runBinCommand(this, argv) from kernel-runner.js (for /bin/time and similar), plus identity hooks for /bin and builtins:\n- applyUnlock(passphrase) — load /.bare/account, decrypt, unlock session.\n- applyRegister(passphrase) — create account file, unlock.\n- applyLogin({ publicKey, secretKey }) — set session from an already-decoded keypair.\n- applyLogout({ save? }) — optional save runs encrypted vault snapshot first (see identity-session.js).\n- saveVault() — encrypt personal-drive files into /.bare/vault/ (skips /.bare, bin, boot, history paths).\n- registerKernelShutdownHook(fn) — register async/sync teardown before stopBareInitd when the REPL session cleans up.\n- After createKernelReplSession: wires readLine, console, execLine, suspendReplForSubprocess / resumeReplAfterSubprocess, attaches ctx.tui / ctx.sdk (omit with BARE_OS_TUI=0; image source /lib/bare-os/tui.js), then await startBareInitd(ctx) (stock units include kernel-logger, bare-os-www — loopback static HTTP for ~/.www — bare-holesail (managed ~/.holesail/state.json: seed, key, stock *bare-www- / bare-ssh- rows), bare-cron, bare-openssh, bare-os-chat* when enabled, …).\n- Sets disk.os after initd with createBareOsDiskOsBridge (searchLocal with optional path manifest, whitelisted execRpc / *bare_os., disk_os_hints schema 3, replication_operator_sketch schema 7, cap-gated replication_operator_intent when BARE_OS_DISK_OS_OPERATOR_INTENT_RPC=1) — peers use SwarmDisk messages 36**; see bare-os-disk-os-bridge.js <../../packages/bare-os-booter/lib/bare-os-disk-os-bridge.js> and §12.4.\n- ctx.bareOsHrpcRequest (stock) — validates service, method, object payload; optional BARE_OS_HRPC_ALLOWLIST_JSON; built-in routes kernel.ping, kernel.capabilities, vfs.readText, bare_os.echo, bare_os.disk_os_hints, bare_os.search_local, bare_os.replication_operator_sketch, bare_os.replication_snapshot, bare_os.pkg_index_get (BARE_OS_HRPC_ROUTE_TABLE_SCHEMA_VERSION 3). BARE_OS_HRPC_EMIT_UNLISTED forwards unknown routes to process.emit('bare-os:hrpc-request', …) on Node when enabled.\n- try { await runKernelFromSource(...) } finally { await session.cleanup() } — cleanup runs bareInitdShutdownActiveUnitsReverse, runKernelShutdownHooks, stopBareInitd, fish TTY teardown.\n\nboot-splash.js — TTY splash (disabled when stdout is not a TTY or BARE_OS_NO_SPLASH=1): initial full-screen clear and hidden cursor, then centered redraws from the top-left without erasing the whole screen each tick (reduces flicker); one full clear again if the terminal is resized. Vertically and horizontally centered “card” (Unicode box frame when wide enough; compact rules on very narrow widths). On very wide terminals the framed card (and progress bar) width is capped so the bar does not span the entire display. Layout scales with stdout.columns / stdout.rows (sensible fallbacks): more log lines on tall terminals (capped), word-wrapped phase text, ANSI-safe centering. createBootSplash(stdout, { bootLimitMs?, tagline?, footerLines? }) — optional tagline and dim footerLines; main() passes booter and protocol package versions. Braille spinner, elapsed boot timer, bar vs BARE_OS_BOOT_TIMEOUT_MS (default 60s), shimmer title. prepareForKernel() stops the splash ticker, clears again, and shows the cursor before the fish shell; fail() centers a wrapped error message.\n\nloadOsFromPeers(disk, store, swarm, splash) (network boot path used by main())\n\n- Optional pre-MBR disk.rpc('bare_os', 'capabilities', …) when peers exist and BARE_OS_SEED_RPC_HANDSHAKE is not 0/false; result stored on disk.seedCapabilityInfo; BARE_OS_SEED_CAP_STRICT / BARE_OS_SEED_CAP_FAIL tighten failure behavior.\n- disk.read(0) → parseMbr.\n- Stores boot provenance as disk.mbrKeysHex and disk.bootMbr512 (exact 512-byte copy) for later peer-assist eligibility.\n- For each MBR key: Hyperdrive(store, driveKey), ready(), replicate on all disk.peers mux streams, join drive discovery, findingPeers + swarm.flush, poll up to 30×200ms for /boot/init.js.\n- On success: initPersonalDrive, splash.prepareForKernel(), executeKernel.\n\nPeer-assist helper path: lib/bare-os-peer-system-seed.js <../../packages/bare-os-booter/lib/bare-os-peer-system-seed.js> computes peerSystemSeedMirror eligibility and builds snapshot mirrors with buildPeerSeedSnapshots (including mbr_layout from seedMbrLayout). When eligible, index.js writes bootMbr512 into localRAM and serves mirrored *bare_os. RPC responses through disk.os** for cold joiners.\n\nmain()\n\n- resolveStdio() → createBootSplash, splash.start() (initial clear).\n- Corestore(bootStorePath()), Hyperswarm, SwarmDisk, join topicKey().\n- Wait until disk.peers.size > 0 or BARE_OS_BOOT_TIMEOUT_MS elapses (default 60000). There is no local seed fallback; without peers, boot fails.\n- Promise.race between loadOsFromPeers and the remaining time within the same deadline so the whole network boot finishes within the limit.\n- finally: swarm.destroy() first, then close drives and store (each in try/catch).\n- exitHostProcess: Bare.exit or process.exit.\n\nEntry: main().catch(…).\n\n12.4 PACKAGES/BARE-OS-BOOTER/LIB/SWARM-DISK.JS <../../PACKAGES/BARE-OS-BOOTER/LIB/SWARM-DISK.JS>\n\nSwarmDisk class\n\nState: localRAM, peers (Set of { chan, mux, socket, id }), pendingReads, pendingSearches, pendingRpc, counters, drive, personalDrive, os, seedCapabilityInfo (last bare_os.capabilities handshake or error object), mbrKeysHex (MBR-derived key list), bootMbr512 (boot-time 512-byte copy), seedMbrLayout (optional bare_os.mbr_layout snapshot), and peerSystemSeedActive (helper mirroring active).\n\ninitPersonalDrive(store, swarm, Hyperdrive)\n\n- store.namespace('bare-os-personal-v1'), new Hyperdrive(localStore), ensure writable, structured host log (see emitSwarmDiskHostLog — stderr JSON when BARE_OS_BOOT_TRACE=json|ndjson, else stderr / console.warn), swarm.join(personalDrive.discoveryKey).\n\naddPeer(mux, socket)\n\n- Builds context with onread / ondata / ongossip / onsearchreq / onsearchres / onrpcreq / onrpcres wired to Protomux messages 06 (same order as seeder + hyper-os style): read request, data, gossip buffer, search req/res, RPC req/res.\n- chan.open(), track peer, handshake-based peer.id, remove peer on mux.stream close.\n- If this.drive / this.personalDrive set, replicate(mux.stream, { live: true, download: true }) for system drive.\n\nread(index)\n\n- If localRAM.has(index), return cached.\n- Else broadcast message 0 to all peers, single consumer callback from message 1, 60s timeout.\n\nsearch(query)\n\n- Fan-out message 3 to all peers with a single correlation id per search() call. pendingSearches holds an aggregate state: each peer response appends matches until all peers have answered or a 3s timeout fires, then the map entry is cleared. Concurrent searches use distinct ids (searchIdCounter), so operations do not overwrite each others callbacks.\n\nrpc(module, method, args?, timeoutMs?)\n\n- Sends message 5 to the first peer in peers; awaits message 6; parses result as JSON when possible. Used for the pre-boot bare_os.capabilities handshake and operator tooling.\n\n12.5 PACKAGES/BARE-OS-BOOTER/LIB/KERNEL-RUNNER.JS <../../PACKAGES/BARE-OS-BOOTER/LIB/KERNEL-RUNNER.JS>\n\n- AsyncFunction = Object.getPrototypeOf(async function () {}).constructor.\n\nrunKernelFromSource(source, ctx)\n\n- new AsyncFunction('ctx', source + guard + 'return start(ctx)') where guard checks typeof start === 'function'.\n\nrunBinCommand(ctx, argv)\n\n- Host delegates first — host-delegate-registry.js <../../packages/bare-os-booter/lib/host-delegate-registry.js> registers git, curl, wget, openssl, ssh-keygen, tar, systemctl / bare-initctl / journalctl, warc, archive (ustar front-end), hrpc, bundlebee, sidecar, and pear-runtime-matrix via host-bridge-cli.js <../../packages/bare-os-booter/lib/host-bridge-cli.js>, with static imports (Pear-safe). Each delegate checks BARE_OS_DELEGATE_ALLOW; denied kinds exit 126. curl and wget are Fetch-based subsets (not libcurl / full GNU wget); /bin/curl and /bin/wget on the image call ctx.bareOsRunCurlCli / ctx.bareOsRunWgetCli when present—see HTTP: curl and wget <http-curl-and-wget.md>. /bin/systemctl and /bin/journalctl call ctx.bareOsRunSystemctlCli when present (same backend as the host delegate). Host bridge CLIs: hrpc probe prints bareOsHrpcAllowlistProbe() (optional BARE_OS_HRPC_ALLOWLIST_JSON); hrpc request always calls ctx.bareOsHrpcRequest (stock handler supports validated built-in routes such as kernel.ping, kernel.capabilities, vfs.readText; host overrides remain supported and BARE_OS_HRPC_BRIDGE_WIRED=1 still advertises host bridge capability). bundlebee hint emits bare-os:bundlebee-cli; bundlebee status prints BARE_OS_BUNDLEBEE_STAGE_JSON. sidecar cap <class> calls bareOsSidecarResourceCap. pear-runtime-matrix prints bareOsPearRuntimeMatrixProbe() (optional BARE_OS_PEAR_RUNTIME_MATRIX_JSON). BARE_OS_SIDECAR_BRIDGE_WIRED / BARE_OS_BUNDLEBEE_CLI_WIRED are advertised via bareOsHostCapability for operator probes.\n- If argv[0] is git (or a POSIX path whose basename is git, but not ./git or ../git), delegates to runGitCli in git-cli.js <../../packages/bare-os-booter/lib/git-cli.js>.\n- If argv[0] is curl under the same basename rules, delegates to runCurlCli in curl-cli.js <../../packages/bare-os-booter/lib/curl-cli.js>.\n- If argv[0] is wget under the same basename rules, delegates to runWgetCli in wget-cli.js <../../packages/bare-os-booter/lib/wget-cli.js>.\n- If argv[0] contains /, resolves with ctx.vfs.resolveLogical, route, loads script bytes from the routed Hyperdrive (get with follow).\n- Else walks $PATH (ctx.vfs.env.PATH, default /bin), joining each directory with unix-path-resolve(dir, cmd) (not three-argument resolve), loads from system ctx.drive only.\n- Builds AsyncFunction('ctx','argv', ...) with the script source plus if (typeof run === 'function') await run(ctx, argv) (top-level statements run first; optional run matches /bin utilities).\n- Unknown command: ctx.console.log('unknown command: ...').\n\nresolveBinInPath(ctx, name) — returns the first PATH hit on the system drive (absolute /bin/... path string) or null; used by shell command -v / type.\n\n12.6 PACKAGES/BARE-OS-BOOTER/LIB/VFS.JS <../../PACKAGES/BARE-OS-BOOTER/LIB/VFS.JS>\n\ncreateVfs(systemDrive, personalDrive, env, mntRef?, vfsOptions?)\n\n- Logical paths under $HOME (booter default /home/guest; after login, /home/<pubkey-prefix>) map to the personal Hyperdrive under /.bare-os/home/<basename>/…; /var/log and /tmp map to /.bare-os/var/log/… and /.bare-os/tmp/… with the same basename. Read-only synthetic /proc and /sys (optional vfsOptions for version/cmdline, quotas JSON, net/disk stubs, */run/bare-os/ text providers, mount map, union policy, seed handshake, virtual registry, etc.). Optional union read overlays via env BARE_OS_VFS_UNION_PREFIXES; optional BARE_OS_VFS_UNION_WRITE_DENY blocks writes under those prefixes. All other absolute paths use the system** drive (read-mostly OS image).\n- resolveLogical(p) — unix-path-resolve(cwd, p) so cwd + relative segments work (the unix-path-resolve package only accepts two path arguments).\n- API: getcwd, chdir (rejects regular files), readFile, writeFile / unlink (personal only), exists, readdir, stat / lstat, readlink, symlink, chmod, mkdir (recursive via .bareos_empty marker), rmdir (empty dirs; marker-aware), rm (recursive tree walk), route, resolveLogical, env, watch(logicalPath) (Hyperdrive-backed paths only; throws on pseudo /proc//sys//run//dev and on virtual $HOME, /var, /mnt roots).\n- Hyperdrive quirk: entry / get / exists use std(path, false) and throw on path '/' (Invalid filename: /). The VFS special-cases drive path '/' (logical / and personal $HOME root) for chdir, stat, exists, isRegularFile, and blocks readFile/put/del on that key.\n- Bare / Pear: do not rely on global TextEncoder / TextDecoder in booter lib/*.js; this tree uses b4a for UTF-8 where needed (pseudo /proc content, symlink size in vfs-posix-meta.js, systemctl log tailing, etc.).\n\n12.7 PACKAGES/BARE-OS-BOOTER/LIB/SHELL.JS <../../PACKAGES/BARE-OS-BOOTER/LIB/SHELL.JS>\n\n- defaultShellAliases — includes ll, la, l, .., ... as the baseline merged from ~/.barerc.\n- tokenize / expandWord / parsePipeline — POSIX-ish words, '...', \"...\", \\, |, ||, &&, ;, >, >>, <; $VAR and ${VAR}; pipelines split on |; ; splits lists; && / || short-circuit using ctx.exitCode (left-associative).\n- execShellLine(ctx, line) — semicolon-separated lists, then per segment AND-OR chains of pipelines; leading NAME=value assignments (blocked for ctx.shellReadonlyVars), redirections, builtins alias, barerc (barerc reload re-parses ~/.barerc and reapplies theme), unalias, cd, export, unset, readonly, umask, :, command, type, login, logout, exit, jobs, fg, wait, else runBinCommand. Optional BARE_OS_SHELL_CMDSUBST enables bounded $(…); optional BARE_OS_SHELL_STREAMING / BARE_OS_SHELL_STREAMING_MULT relax pipeline capture caps. Trailing & at list depth runs prior segments in the background (async jobs table). command -v/-V and type use resolveBinInPath. login/logout call the same ctx.applyRegister / ctx.applyUnlock / ctx.applyLogout hooks as /bin/login and /bin/logout. Captures console.log for pipes and file redirection; > / >> target paths via ctx.vfs.writeFile (personal tree). Returns 'exit' when the exit builtin runs. After each completed line (except empty input), syncBareOsExitStatusEnv writes ctx.exitCode to vfs.env.BARE_OS_EXIT_STATUS; expandWord maps $? / ${?} to that value.\n- listBareOsShellBuiltins(env) — stable list of builtin names for highlighting and completion parity (includes optional read when BARE_OS_SHELL_READ_BUILTIN is set).\n\n12.7A REPL LINE EDITOR AND COMPLETION\n\nNarrative reference: Shell completion and REPL editor <shell-completion-and-repl-editor.md>.\n\n- lib/repl-session.js <../../packages/bare-os-booter/lib/repl-session.js> — createKernelReplSession: chooses Fish-style createFishReadLine when BARE_OS_FISH ≠ 0, TTY raw mode works, and BARE_OS_SKIP_REPL is off; wires ctx.console / ctx.readLine / writeScreen to the same stdout as the prompt.\n- lib/fish-readline.js <../../packages/bare-os-booter/lib/fish-readline.js> — History file on the personal drive, ghost suggestions, reverse search, Tab menu or inline cycling (BARE_OS_COMPACT_MENU / narrow columns), Ctrl+Space man preview, save/restore cursor + erase-to-EOS so menu redraws do not stack stale lines.\n- lib/completion-engine.js <../../packages/bare-os-booter/lib/completion-engine.js> — parseCompletionContext, gatherCompletionItems, completeLine, rankCompletionItems, suggestGhostFromHistory, VFS timeouts, /share/man/man.json cache, ctx.bareOsRegisterCompleter registry.\n\n12.8 PACKAGES/BARE-OS-BOOTER/LIB/IDENTITY-ACCOUNT.JS <../../PACKAGES/BARE-OS-BOOTER/LIB/IDENTITY-ACCOUNT.JS>\n\n- On-disk /.bare/account (v2): magic BAREOS01, version 2, 32-byte Ed25519 public key (bare-crypto), 16-byte PBKDF2 salt, 4-byte iteration count (big-endian), ChaCha20-Poly1305 seal of the 64-byte Ed25519 private key material (nonce + ciphertext + tag). Passphrase stretching: PBKDF2-SHA256 (210000 iterations by default). v1 (libsodium) files are rejected with a message to run login --new.\n- encodeAccount / decodeAccount / encodeNewAccount, sealBytes / openBytes, vaultKeyFromSecret, hashUtf8Path — shared by identity-session.js (vault snapshots use the same AEAD).\n\n12.9 PACKAGES/BARE-OS-BOOTER/LIB/IDENTITY-SESSION.JS <../../PACKAGES/BARE-OS-BOOTER/LIB/IDENTITY-SESSION.JS>\n\n- applyGuestEnv / applyUnlockedEnv — set ctx.vfs.env (BARE_OS_PUBLIC_KEY, BARE_OS_IDENTITY, USER, HOME, derived UID/GID from pubkey hash for logged-in users) and vfs.chdir to the new home. applyUnlockedEnv calls loadBarerc after unlock (createSkeletonIfMissing: true on first login) so ~/.barerc applies without restarting the session. Both paths call bareOsResetShellIdentityState (clear simulated shellBackgroundJobs), syncVfsIdentitySession (vfs.bareOsIdentitySession, warm-cache invalidation, ctx.bareOsInvalidateWarmReadCaches('identity-switch') when present), optional ctx.bareOsReloadFishHistoryForIdentity (fish readline), optional scrubGuestWorkspaces when BARE_OS_GUEST_SCRUB=1.\n- migrateLegacyPersonalHomeIfNeeded — lifts legacy flat / personal-drive entries into the active /.bare-os/home/<segment>/… once per segment; records /.bare-os/migration/legacy-root-v1.json. Guest skips when /.bare/account exists unless BARE_OS_PERSONAL_ROOT_MIGRATE=guest. BARE_OS_PERSONAL_ROOT_MIGRATE=skip disables all lifts; unlocked-only skips guest lifts.\n- registerIdentity / unlockIdentity / logoutIdentity / saveVaultToDrive — personal Hyperdrive persistence and encrypted vault index under /.bare/vault/. saveVaultToDrive skips other bare-os/acct/… subtrees when BARE_OS_PERSONAL_ACCT_PREFIX is on so vault export does not bundle sibling accounts.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","package","bare","os","booter"],"seeAlso":[{"name":"docs-reference-package-bare-os-coreutils-and-ci","section":7},{"name":"docs-reference-out-of-scope-and-tooling","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/package-bare-os-booter.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-package-bare-os-coreutils-and-ci","section":7,"title":"bare-os-coreutils, tests, and seeder build hook","synopsis":["man 7 docs-reference-package-bare-os-coreutils-and-ci","Documentation page (plain text from docs/reference/package-bare-os-coreutils-and-ci.md)"],"description":"BARE-OS-COREUTILS, TESTS, AND SEEDER BUILD HOOK\n\nFormer DOCUMENTATION.md §§12.1012.12. Reference index → <README.md>\n\n12.10 PACKAGE BARE-OS-COREUTILS\n\n- packages/bare-os-coreutils/lib/commands.mjs <../../packages/bare-os-coreutils/lib/commands.mjs> — COREUTILS_COMMANDS: authoritative sorted /bin names for build.mjs and the manual database builder (keeps the image and man coverage in sync).\n- packages/bare-os-coreutils/build.mjs <../../packages/bare-os-coreutils/build.mjs> — export async function build(): runs scripts/build-man-db.mjs (validates *man/pages/.json, writes kernel/share/man/man.json and the same path under packages/bare-os-seeder/kernel/share/man/); then for each command concatenates lib/runtime.js, optional preamble libs (md5sum → lib/md5.js, sed → lib/sed-engine.js, awk → lib/awk-engine.js, jq → lib/jq-engine.js, man → lib/man-render.js, ls / dircolors → lscolors helpers, edit / nano → lib/edit-.js + shared TUI), then src/<name>.js (nano reuses src/edit.js); writes to kernel/bin/<name> and packages/bare-os-seeder/kernel/bin/<name>. CLI: node build.mjs* when executed as main.\n- Manual pages — Authoring: packages/bare-os-coreutils/man/pages/<name>.json; schema: man/schema.json. Optional examples (cheat.sh-style) and descriptionMode: preserve for preformatted text. scripts/ingest-handbook-for-man.mjs merges every *handbook/.md as man(7) at build time (man handbook, man handbook-01-introduction, …). Regenerate JSON stubs with node packages/bare-os-coreutils/scripts/seed-man-pages.mjs. Runtime: /bin/man reads /share/man/man.json. Handbook:** handbook/10-manpages-and-online-help.md <../../handbook/10-manpages-and-online-help.md>.\n- POSIX utility index (optional image file) — kernel/etc/bare-os/posix_utilities.json carries machine-readable per-command notes when staged; the booter echoes utilitiesIndexPath in /proc/bare_os_features and coalesced metrics_live (see handbook ch.9).\n- Commands — The authoritative sorted list is COREUTILS_COMMANDS in commands.mjs <../../packages/bare-os-coreutils/lib/commands.mjs> (count and names change with releases; do not paste the full inventory into prose here). Each Tier-1 name has src/<name>.js (or a mapped source such as nano → src/edit.js) and a matching man/pages/<name>.json. Notable large preambles (see preamble in build.mjs): edit / nano (shared TUI stack), baretop / btop, agent (OpenAI-compatible assistant + web_fetch and related *lib/agent-.js), chat (swarm chat TUI + lib/chat-tui.js), irc (Libera TLS TUI), summon (text HTML/CSS browser + lib/summon-.js), md5sum, sed, awk, jq, man, ls / dircolors. agent uses ctx.httpFetch like delegated curl / wget (HTTP: curl and wget <http-curl-and-wget.md>). The interactive TTY editor is edit; nano is the same built script under /bin/nano, and the default shell maps nano → edit (see defaultShellAliases in shell.js <../../packages/bare-os-booter/lib/shell.js>). Each built script begins with BARE_OS_BIN_API in the concatenated prelude; root pretest runs scripts/verify-kernel-seeder-parity.mjs <../../scripts/verify-kernel-seeder-parity.mjs> to keep kernel/bin/ and packages/bare-os-seeder/kernel/bin/ in sync and to require that pragma on every staged binary. Scripts are plain async function run(ctx, argv) using ctx.vfs, ctx.drive, ctx.b4a, ctx.console, optional bareStdin(ctx), optional ctx.runBinCommand — no ESM import in src/ (Bare-safe AsyncFunction load). dir / vdir delegate to ls -C / ls -l. Booter-delegated (stubs under kernel/bin/, logic in packages/bare-os-booter/lib/): systemctl, journalctl (bare-initd control; bare-initctl alias; see handbook/04-the-booter-runtime.md <../../handbook/04-the-booter-runtime.md>). Narrative reference:* handbook/09-posix-utilities-shell-and-vfs.md <../../handbook/09-posix-utilities-shell-and-vfs.md>. Package overview: bare-os-coreutils README <../../packages/bare-os-coreutils/README.md>.\n\n12.11 PACKAGES/BARE-OS-BOOTER/TEST.JS <../../PACKAGES/BARE-OS-BOOTER/TEST.JS> AND TEST.IDENTITY.JS <../../PACKAGES/BARE-OS-BOOTER/TEST.IDENTITY.JS>\n\n- scripts.test — brittle-bare test.identity.js then brittle-node test.js (bare-cryptos native addon runs under Bare only; the main suite still uses Node for Hyperdrive + node:fs).\n\ntest.js <../../packages/bare-os-booter/test.js> — testCorestoreDir(name) under __dirname/.test-data/.\n\nTests: runKernelFromSource, runBinCommand, createStreamLineReader, Hyperdrive roundtrip, createVfs, shell tokenizer/exec, tier-1 cat. Uses node:fs, node:path, node:url.\n\ntest.identity.js <../../packages/bare-os-booter/test.identity.js> — identity account v2 codec roundtrip and wrong-passphrase failure (bare-crypto).\n\n12.12 SEEDER: COREUTILS BUILD HOOK\n\n- packages/bare-os-seeder/index.js <../../packages/bare-os-seeder/index.js> — when not on Pear (import.meta.url is file:), dynamic import('../bare-os-coreutils/build.mjs') then await build(). Pear has no sibling bare-os-coreutils in the bundle; use pre-built files under vendored kernel/bin/.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","package","bare","os","coreutils","and","ci","tests","seeder","build","hook"],"seeAlso":[{"name":"docs-reference-package-bare-os-protocol","section":7},{"name":"docs-reference-package-bare-os-booter","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/package-bare-os-coreutils-and-ci.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-package-bare-os-protocol","section":7,"title":"Package: bare-os-protocol","synopsis":["man 7 docs-reference-package-bare-os-protocol","Documentation page (plain text from docs/reference/package-bare-os-protocol.md)"],"description":"PACKAGE: BARE-OS-PROTOCOL\n\nFormer DOCUMENTATION.md §10. Reference index → <README.md>\n\nPOSIX PROFILE\n\nbare-os-protocol/lib/bare-os-posix-profile.js defines BARE_OS_POSIX_PROFILE_VERSION (1.0.15), BARE_OS_POSIX_PROFILE_ID, and BARE_OS_POSIX_PROFILE_REFERENCE (Open Group Issue 7 index). Re-exported from the package root. Booter mirrors these values under /proc/bare_os_features and /proc/bare_os/syscalls.json.\n\n10. PACKAGE: BARE-OS-PROTOCOL\n\n10.1 PACKAGES/BARE-OS-PROTOCOL/PACKAGE.JSON <../../PACKAGES/BARE-OS-PROTOCOL/PACKAGE.JSON>\n\n- name — bare-os-protocol\n- version — 0.9.1 (wire v2: kernelCapabilityWords; couple boot policy requireProtocolPackageMin to this semver)\n- main / exports[\".\"] — ./index.js\n- exports[\"./constants.js\"] — ./constants.js (for bare-os-protocol/constants.js imports)\n- exports[\"./messages\"] — ./lib/messages.js\n- scripts.test — brittle-bare test.js\n- scripts.test:node — brittle-node test.js\n- engines.bare — >=2.0.0\n- dependencies — b4a, compact-encoding ^3.3.0, hypercore-crypto ^3.7.0\n- devDependencies — brittle\n- imports — Conditional fs / path / events → bare-* under Bare, Node default\n\n10.2 PACKAGES/BARE-OS-PROTOCOL/INDEX.JS <../../PACKAGES/BARE-OS-PROTOCOL/INDEX.JS>\n\nRe-exports from ./constants.js: PROTOCOL_NAME, TOPIC_STRING, BLOCK_SIZE, MBR_MAGIC, topicKey, buildMbr, parseMbr.\n\nRe-exports from ./lib/channel.js: setupSeedChannel, and from ./lib/chat-channel.js: setupBareOsChatChannel.\n\nRe-exports from ./lib/seed-rpc-methods.js: BARE_OS_SEED_RPC_METHODS, BARE_OS_SEED_RPC_METHOD_SHORT_NAMES, BARE_OS_SEED_RPC_METHOD_SHORT_NAME_SET, bareOsIsAllowedSeedRpcMethodShort (strict client-side allowlist helper matching channel.js).\n\nRe-exports *BARE_OS_KERNEL_FEATURES_STOCK_WORD_ stock masks and BARE_OS_FEATURE5_ … FEATURE11_ from ./lib/kernel-feature-bits.js (alongside earlier words). Re-exports wire v2 helpers from ./lib/kernel-capability-wire.js (kernelCapabilityWords shape, BARE_OS_KERNEL_CAPABILITY_WORD_KEYS, …). BARE_OS_PROTOCOL_PACKAGE_VERSION is published from ./lib/protocol-meta.js for ctx.bareOsProtocolPackageVersion** comparisons.\n\nWhen Capability word 6 (replication operator surface) is advertised, the stock booter also exposes ctx.bareOsReadReplicationOperatorJson() as a typed convenience reader over the same JSON as /proc/bare_os/replication (feature-bit alignment is documented in the capability index).\n\n10.3 PACKAGES/BARE-OS-PROTOCOL/CONSTANTS.JS <../../PACKAGES/BARE-OS-PROTOCOL/CONSTANTS.JS>\n\n- PROTOCOL_NAME — 'bare-os-v1' — Protomux channel name\n- TOPIC_STRING — 'bare-os-v1' — input to swarm topic hash\n- BLOCK_SIZE — 512 — MBR size\n- MBR_MAGIC — b4a.from('BIOS') — first 4 bytes of MBR\n- topicKey(b4aMod?) — crypto.hash(b4aMod.from(TOPIC_STRING)) — 32-byte Hyperswarm topic\n- buildMbr(primaryKey, failoverKeys?) — Allocates 512 bytes, writes magic at 0, primary 32-byte key at offset 8, optional keys at 40 and 72\n- parseMbr(mbr) — Validates length ≥ 104, magic BIOS, returns { keys: Uint8Array[] } (non-zero 32-byte slots)\n\n10.4 PACKAGES/BARE-OS-PROTOCOL/LIB/MESSAGES.JS <../../PACKAGES/BARE-OS-PROTOCOL/LIB/MESSAGES.JS>\n\ncompact-encoding 3.x schemas (for tests and documentation parity with SwarmDisk). v3 c.buffer is strict (rejects null); use c.optionalBuffer for the old nullable behavior. Protocol payloads still encode c.buffer only when bytes are present.\n\n- msgRead — Protomux message 0 outbound shape: { encoding: c.uint32, onmessage: null } (client sends block index; onmessage is unset because the channel wires handlers in channel.js).\n- msgDataEncoding — { index: uint32, data: buffer }.\n- msgSearchReqEncoding — { id: uint32, query: string }.\n- msgSearchResEncoding — { id: uint32, matches: string[] }.\n- msgRpcReqEncoding — { id, module, method, args: string[] }.\n- msgRpcResEncoding — { id, success: bool, result, error: string }.\n\n10.5 PACKAGES/BARE-OS-PROTOCOL/LIB/CHANNEL.JS <../../PACKAGES/BARE-OS-PROTOCOL/LIB/CHANNEL.JS>\n\nsetupSeedChannel(mux, localRAM, replicateDrive)\n\n- Creates Protomux channel with protocol: PROTOCOL_NAME.\n- Message 0: uint32 read index → if localRAM.get(index), send on message 1.\n- Message 1: msgDataEncoding (inbound only on client).\n- Message 2: c.buffer — after chan.open(), sends 250-byte bitfield with bit 0 set (capability gossip stub; see kernel-feature-bits.js).\n- Message 3: search request (msgSearchReqEncoding) → message 4 returns paths from the staged manifest whose lowercase path contains the query (trimmed); empty query returns a capped prefix of all manifest paths. setupSeedChannel(..., { manifestPaths, searchMaxMatches }) supplies the list (seeder collects paths during stageKernelTree).\n- Message 4: search response encoding.\n- Message 5: RPC request → message 6 implements registered *bare_os. methods (see lib/seed-rpc-methods.js); bare_os.capabilities returns bitsbits5 plus protocolPackageVersion. Wrong module / missing module → bare_os.rpc_wrong_module / bare_os.rpc_missing_module; unknown method → bare_os.rpc_unknown_method. Internal fallthrough → bare_os.rpc_internal_unreachable**.\n- Message 6: RPC response encoding.\n- Calls replicateDrive(mux.stream) (typically drive.replicate(stream)).\n\nUnless opts.enableBareOsChatChannel is false or BARE_OS_PROTOMUX_CHAT_CHANNEL opts out (0 / false / off / no), setupSeedChannel pairs bare-os-chat-v1 by default via setupBareOsChatChannel (see lib/chat-channel.js / lib/chat-messages.js / lib/chat-env.js) and adds optional chatChannel metadata to bare_os.capabilities JSON.\n\n10.6 CHAT CHANNEL PACKAGES/BARE-OS-PROTOCOL/LIB/CHAT-CHANNEL.JS <../../PACKAGES/BARE-OS-PROTOCOL/LIB/CHAT-CHANNEL.JS>\n\nsetupBareOsChatChannel(mux, handlers)\n\n- Creates the session with mux.createChannel({ protocol, unique: true }), adds six compact-encoded message types, and chan.open() (same pattern as the main seed channel; not a raw pair callback, which only receives the session id and would not open a session if misused). onChannelOpened runs only after chan.fullyOpened() resolves truthy (Protomux 3.11+). Wire: hello, helloAck, join, leave, event, control; no Hyperdrive replication on this channel.\n\n10.7 PACKAGES/BARE-OS-PROTOCOL/TEST.JS <../../PACKAGES/BARE-OS-PROTOCOL/TEST.JS>\n\nBrittle tests:\n\n1. topicKey length 32 and stable.\n2. topicKey ≠ hash of 'other-topic'.\n3. buildMbr + parseMbr roundtrip one key.\n4. msgDataEncoding encode/decode.\n5. msgSearchReqEncoding encode/decode.\n6. TOPIC_STRING === 'bare-os-v1'.\n7. Seed RPC method list length matches BARE_OS_SEED_RPC_METHODS / kernel_info surface.\n8. BARE_OS_KERNEL_FEATURES_STOCK_WORD_HOST_TRANSPORT_DELEGATES is non-zero.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","package","bare","os","protocol"],"seeAlso":[{"name":"docs-reference-package-bare-os-seeder","section":7},{"name":"docs-reference-package-bare-os-coreutils-and-ci","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/package-bare-os-protocol.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-package-bare-os-seeder","section":7,"title":"Package: bare-os-seeder","synopsis":["man 7 docs-reference-package-bare-os-seeder","Documentation page (plain text from docs/reference/package-bare-os-seeder.md)"],"description":"PACKAGE: BARE-OS-SEEDER\n\nFormer DOCUMENTATION.md §11. Reference index → <README.md>\n\n11. PACKAGE: BARE-OS-SEEDER\n\n11.1 PACKAGES/BARE-OS-SEEDER/PACKAGE.JSON <../../PACKAGES/BARE-OS-SEEDER/PACKAGE.JSON>\n\n- main — ./index.js\n- scripts.start / dev — bare index.js (Pear/Bare entry)\n- dependencies — bare-os-protocol (workspace *), bare-fs, bare-path, b4a, compact-encoding, corestore, hyperdrive, hyperswarm, protomux, safety-catch\n- engines.bare — >=2.0.0\n- pear.name — bare-os-seeder\n- pear.stage.include — ../../node_modules (hoisted workspace deps) and kernel (vendored tree under the package). The seeder reads kernel/ only at runtime via readdir/readFile (no static imports), so Pears static analyzer would otherwise omit it from released bundles — kernel directory missing at runtime means pear stage did not ship kernel/; fix by keeping kernel in include and re-staging after rsync / verify-kernel-seeder-parity. With pear stage --compact, include is required for non-traced assets (Pear configuration <https://docs.pears.com/reference/configuration.html> uses the heading “includes”; the manifest field is include).\n- pear.stage.ignore — .git, test, coverage, .DS_Store, node_modules/.bin, node_modules/.package-lock.json\n- imports — #host-fs, #host-path, #host-fs-promises (preferred in first-party sources); legacy keys fs, fs/promises, path, url, node:url — Bare vs Node shims\n\n11.2 PACKAGES/BARE-OS-SEEDER/LIB/PATHS.JS <../../PACKAGES/BARE-OS-SEEDER/LIB/PATHS.JS>\n\nPear-safe path resolution (same idea as Holepunch pear-rti <https://github.com/holepunchto/pear-rti> MOUNT / swapDir):\n\n- packageRootDir(metaUrl) — If import.meta.url is file:, path.dirname(fileURLToPath(...)) via node:url. If pear: / other, tries RTI.mount, Pear.config.swapDir, Pear.app.dir / Pear.config.dir, RTI.dir, then process.cwd() (with bare-os os.cwd() fallback when process.cwd() is empty) — first directory that contains a kernel/ subfolder wins; otherwise the first candidate (see paths.js <../../packages/bare-os-seeder/lib/paths.js>).\n- defaultKernelRoot(pkgRoot, metaUrl) — BARE_OS_KERNEL_ROOT or path.join(pkgRoot, 'kernel') (vendored copy under the seeder package for Pear bundles).\n- defaultSeedCorestorePath(pkgRoot, metaUrl) — BARE_OS_SEED_STORE or path.join(hostDataRoot(), 'corestore', 'seeder') where hostDataRoot() is BARE_OS_HOST_DATA (resolved) or ~/.bare-os. Signature keeps pkgRoot / metaUrl for callers; defaults do not use them.\n\n11.3 PACKAGES/BARE-OS-SEEDER/INDEX.JS <../../PACKAGES/BARE-OS-SEEDER/INDEX.JS>\n\nPaths — Uses ./lib/paths.js for _pkg, corestorePath(), and kernelRoot (no fileURLToPath(import.meta.url) on the hot path for pear:).\n\nstageKernelTree(drive, kernelRoot)\n\n- Recursive walk(rel) using #host-fs-promises (readdir + readFile).\n- Drive path mapping:\n- init.js → /boot/init.js\n- bin/<name> → /bin/<name> (POSIX slashes)\n- etc/... → /etc/...\n- Any other file → /<subRel> with slashes normalized\n- drive.put(drivePath, b4a.from(raw)) for each file.\n\nmain()\n\n1. Optional console.clear().\n2. maybeBuildCoreutilsFromSource() — only when import.meta.url starts with file: (Node / node index.js): dynamic import of ../bare-os-coreutils/build.mjs and await build(). Under Pear (pear:// URLs) this is skipped; the bundle must include an up-to-date vendored kernel/ (run npm run build -w bare-os-coreutils before pear run).\n3. Corestore(corestorePath(), bareOsCorestoreConstructOpts()) — lib/corestore-opts.js <../../packages/bare-os-seeder/lib/corestore-opts.js> forwards treeCache (maxSize: 8192) to Hypercore 7.12+ storage — then Hyperdrive(store), ready().\n4. stageKernelTree.\n5. localRAM = Map, buildMbr(drive.key), localRAM.set(0, mbr).\n6. Hyperswarm, on connection: Protomux(socket), setupSeedChannel(mux, localRAM, stream => drive.replicate(stream), { manifestPaths, searchMaxMatches }) — manifestPaths lists every staged drive path so peers can search and RPC against the live manifest.\n7. swarm.join(topicKey()), swarm.join(drive.discoveryKey), flush().\n8. Logs topic prefix hex, full drive key hex, Corestore path.\n\nEntry: main().catch(safetyCatch).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","package","bare","os","seeder"],"seeAlso":[{"name":"docs-reference-posix-dashboard","section":7},{"name":"docs-reference-package-bare-os-protocol","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/package-bare-os-seeder.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-posix-dashboard","section":7,"title":"POSIX compliance dashboard (generated)","synopsis":["man 7 docs-reference-posix-dashboard","Documentation page (plain text from docs/reference/posix-dashboard.md)"],"description":"POSIX COMPLIANCE DASHBOARD (GENERATED)\n\nDo not edit by hand. Regenerated by scripts/gen-posix-dashboard.mjs (via npm run pretest).\n\nSource: docs/reference/posix-compliance-matrix.json <posix-compliance-matrix.json>.\n\nNormative narrative: docs/architecture/POSIX_DECLARED_PROFILE.md <../architecture/POSIX_DECLARED_PROFILE.md>, handbook ch.9, docs/reference/environment-and-posix-appendix.md <environment-and-posix-appendix.md>.\n\n| Area | Key | Value |\n| Profile | profileId | bare-os-posix-like |\n| Profile | schema | 1 |\n| Profile | note | Profile 1.0.19 / ctx API 1.57.0 / process_table.json schema 9 (nice + accountingSource; logical process_maps + process_threads companions); syscalls schema 11 + socketMsgSurface schema 6 (iovecSemantics + recvmsg susv4Refs); disk.os replication_operator_sketch schema 8 (hyperdhtAddressSketch BARE_OS_HYPERDHT_ADDRESS_JSON; pkgIndexSurface schema 2; pkg_index_get response schema 2); corestoreSnapshotUxHint schema 4 (recommendedWorkflow); security_posture schema 7 (replicationOperatorSketchCrossRef); pear_stage_pointer schema 2; protomuxOperatorSketch schema 4 multiplexPeerCountEcho; boot_budget_summary merges replicationLiveCoalesced after kernel; bareOsRenice stores logical nice; shell wait uses job lastExitCode; swarm BARE_OS_SWARM_ATTEMPT_BURST_PER_SEC; getconf/sysconf _SC_MONOTONIC_CLOCK_RES and trace/timer caps; vault_save checkpoint pathcapTrustedKeyCount. Retains 1.0.18 awk/expr/test extensions and prior POSIX/P2P items. QVAC local agent via ctx.bareOsQvac* (1.55). |\n| Utilities | tier1_bin | high |\n| Utilities | sed_awk_grep | issue7_inspired_js_engines |\n| Utilities | coreutils | see packages/bare-os-coreutils/src |\n| Shell | grammar | line_at_a_time_subset |\n| Shell | posix_mode_grouped_lists | BARE_OS_SHELL_POSIX_MODE=1 enables ( compound-list ) without forked subshell |\n| Shell | pipes | simulated_capture |\n| Shell | job_control | logical_jobs_only (jobControlModel logical_no_fork; no fork(2)); fg sets foregroundPgid; suspend-job + bg/fg cooperative yield between background statements; kill / bareOsSendSignal negative target = pgid on shellBackgroundJobs; wait skips completed jobs by default; wait exit status from job lastExitCode (last non-zero for multi-wait; wait -n first completion) |\n| Shell | loop_control | BARE_OS_SHELL_LOOP_CONTROL for break continue in while for |\n| Shell | errexit | BARE_OS_SHELL_ERREXIT / set -e or set -o errexit (+e / +o errexit to clear) stops further semicolon lists inside if-then/else and loop bodies; top-level ;-separated statements; condition lists in if/while suppress errexit between predicates |\n| Shell | nounset | BARE_OS_SHELL_NOUNSET / set -u or set -o nounset (+u / +o nounset to clear) errors on expansion of unset parameters (except $? and positional digits when absent treated as unbound only if env key missing) |\n| VFS | guest_sensitive_bare | guest session: EACCES/ENOENT on /.bare/account, /.bare/vault/**, vault-rotation NDJSON; readdir /.bare hides account and vault names; BARE_OS_GUEST_BARE_READ_ALL=1 lifts deny |\n| VFS | personal_acct_prefix | BARE_OS_PERSONAL_ACCT_PREFIX=1 nests /.bare-os/home\\|tmp\\|var/log under /.bare-os/acct/<id>/; logical /.bare/account and /.bare/vault map to /.bare-os/acct/<id>/.bare/ on the personal drive |\n| VFS | fifo | in_memory_ipc_under_run; ctx.bareOsSyscall mq_open/mq_send/mq_receive maps to bareOsIpc POSIX-like priority queues (separate from FIFO byte streams) |\n| VFS | union | BARE_OS_VFS_UNION_PREFIXES |\n| VFS | system_ro_alias | BARE_OS_VFS_SYSTEM_RO_ALIAS |\n| VFS | bin_cache | BARE_OS_VFS_BIN_CACHE; warm cache clear via ctx.bareOsInvalidateWarmReadCaches / vfs.bareOsClearWarmReadCaches; BARE_OS_VFS_WARM_CACHE_INVALIDATE_ON_REPLICATION metrics_live path; bareOsVfsBatchWrite clears on bin/lib/bare puts; manifest-only puts use vfs.bareOsEvictLibBareBundlesFromManifest + ctx.bareOsInvalidateWarmReadCachesFromBareManifestJson |\n| VFS | lib_bare_cache | BARE_OS_VFS_LIB_BARE_CACHE with bin cache |\n| synthetic /proc | syscalls_json_schema | 11 |\n| synthetic /proc | process_table_schema | 10 |\n| synthetic /proc | paths | /proc/bare_os/syscalls.json, /proc/bare_os/process_table.json, /proc/bare_os/boot_budget_summary.json |\n| synthetic /proc | posix_xsh_surface | open,close,read,write,readv,writev,getsockopt,setsockopt,lseek,nanosleep,clock_gettime,posix_fadvise,pipe,dup,dup2,fcntl cooperative F_GETLK/F_SETLK/F_SETLKW + F_GETFL/F_SETFL,poll,select,umask,fsync,fdatasync,socket,bind,listen,accept,connect,send,recv,recvfrom,sendmsg,recvmsg,shutdown in syscalls.json posixXsh.namesCsv; ctx.bareOsSyscall nanosleep; ctx.bareOsSyscall clock_gettime; ctx.bareOsSyscall posix_fadvise; ctx.bareOsSyscall fsync/fdatasync no-op; bridge getsockopt/setsockopt partial SO_KEEPALIVE/TCP_NODELAY; default socket ENOSYS-shaped without bridge; BARE_OS_POSIX_SOCKET_FD_BRIDGE SOCK_STREAM connect via bareTcp; passive SOCK_STREAM bind+listen+accept via bareTcp.Server; stream fds use send/recv with bounded tcpRecvQueue (connect and accept paths); TCP half-close: shutdown how 0/1 (SHUT_RD/SHUT_WR), default how 2 full close; recv EOF after peer FIN; send EPIPE after local SHUT_WR; poll readable on queued TCP data, peer FIN/EOF, or socket error; poll writable when SHUT_WR not set; SOCK_DGRAM passive bind via bareDgram.Socket.bind, connect optional after bind, send with explicit port+host when udp_bound without default peer; connect+send path unchanged; BARE_OS_POSIX_DGRAM_RECVQ_MAX / BARE_OS_POSIX_DGRAM_RECV_BLOCK_MS_MAX; BARE_OS_POSIX_ACCEPT_QUEUE_MAX; poll/select mark UDP bridge fds (connected or udp_bound) readable when dgram queue non-empty; listening fds when accept queue non-empty; ctx.bareOsSyscall readv/writev on POSIX_FD_SIM pipes; ctx.bareOsPosixPoll; socketMsgSurface schema 6 (iovecSemantics + recvmsg susv4Refs) + optional BARE_OS_POSIX_SOCKET_SCM_RIGHTS logical fd dup on sendmsg for SOCK_STREAM and SOCK_DGRAM bridge fds (recvmsg controllen 0) |\n| Coreutils commandIndex | agent | tier1_bin |\n| Coreutils commandIndex | appctl | tier1_bin |\n| Coreutils commandIndex | arch | tier1_bin |\n| Coreutils commandIndex | awk | tier1_bin |\n| Coreutils commandIndex | baresay | tier1_bin |\n| Coreutils commandIndex | baretop | tier1_bin |\n| Coreutils commandIndex | base32 | tier1_bin |\n| Coreutils commandIndex | base64 | tier1_bin |\n| Coreutils commandIndex | basename | tier1_bin |\n| Coreutils commandIndex | basenc | tier1_bin |\n| Coreutils commandIndex | btop | tier1_bin |\n| Coreutils commandIndex | cat | tier1_bin |\n| Coreutils commandIndex | chat | tier1_bin |\n| Coreutils commandIndex | chgrp | tier1_bin |\n| Coreutils commandIndex | chmod | tier1_bin |\n| Coreutils commandIndex | chown | tier1_bin |\n| Coreutils commandIndex | cksum | tier1_bin |\n| Coreutils commandIndex | clear | tier1_bin |\n| Coreutils commandIndex | cmp | tier1_bin |\n| Coreutils commandIndex | comm | tier1_bin |\n| Coreutils commandIndex | corestorectl | tier1_bin |\n| Coreutils commandIndex | cp | tier1_bin |\n| Coreutils commandIndex | crontab | tier1_bin |\n| Coreutils commandIndex | ctxbaredoctor | tier1_bin |\n| Coreutils commandIndex | curl | tier1_bin |\n| Coreutils commandIndex | cut | tier1_bin |\n| Coreutils commandIndex | date | tier1_bin |\n| Coreutils commandIndex | dd | tier1_bin |\n| Coreutils commandIndex | df | tier1_bin |\n| Coreutils commandIndex | dhtctl | tier1_bin |\n| Coreutils commandIndex | dhtscan | tier1_bin |\n| Coreutils commandIndex | dhttop | tier1_bin |\n| Coreutils commandIndex | diff | tier1_bin |\n| Coreutils commandIndex | dir | tier1_bin |\n| Coreutils commandIndex | dircolors | tier1_bin |\n| Coreutils commandIndex | dirname | tier1_bin |\n| Coreutils commandIndex | du | tier1_bin |\n| Coreutils commandIndex | echo | tier1_bin |\n| Coreutils commandIndex | edit | tier1_bin |\n| Coreutils commandIndex | env | tier1_bin |\n| Coreutils commandIndex | exit | tier1_bin |\n| Coreutils commandIndex | expand | tier1_bin |\n| Coreutils commandIndex | expr | tier1_bin |\n| Coreutils commandIndex | factor | tier1_bin |\n| Coreutils commandIndex | false | tier1_bin |\n| Coreutils commandIndex | find | tier1_bin |\n| Coreutils commandIndex | fmt | tier1_bin |\n| Coreutils commandIndex | fold | tier1_bin |\n| Coreutils commandIndex | getconf | tier1_bin |\n| Coreutils commandIndex | getfacl | tier1_bin |\n| Coreutils commandIndex | git-pear | tier1_bin |\n| Coreutils commandIndex | grep | tier1_bin |\n| Coreutils commandIndex | groups | tier1_bin |\n| Coreutils commandIndex | hdms | tier1_bin |\n| Coreutils commandIndex | head | tier1_bin |\n| Coreutils commandIndex | help | tier1_bin |\n| Coreutils commandIndex | holepunch-view | tier1_bin |\n| Coreutils commandIndex | holesail | tier1_bin |\n| Coreutils commandIndex | hostid | tier1_bin |\n| Coreutils commandIndex | hostname | tier1_bin |\n| Coreutils commandIndex | hypershell-board | tier1_bin |\n| Coreutils commandIndex | iconv | tier1_bin |\n| Coreutils commandIndex | id | tier1_bin |\n| Coreutils commandIndex | install | tier1_bin |\n| Coreutils commandIndex | join | tier1_bin |\n| Coreutils commandIndex | jq | tier1_bin |\n| Coreutils commandIndex | kernel-boot-diff | tier1_bin |\n| Coreutils commandIndex | kernel-doctor | tier1_bin |\n| Coreutils commandIndex | kernel-explain | tier1_bin |\n| Coreutils commandIndex | kernel-fsck | tier1_bin |\n| Coreutils commandIndex | kernel-home-snapshot | tier1_bin |\n| Coreutils commandIndex | kernel-manifest-validate | tier1_bin |\n| Coreutils commandIndex | kernel-preflight | tier1_bin |\n| Coreutils commandIndex | kernel-triage | tier1_bin |\n| Coreutils commandIndex | kill | tier1_bin |\n| Coreutils commandIndex | link | tier1_bin |\n| Coreutils commandIndex | ln | tier1_bin |\n| Coreutils commandIndex | logger | tier1_bin |\n| Coreutils commandIndex | login | tier1_bin |\n| Coreutils commandIndex | logname | tier1_bin |\n| Coreutils commandIndex | logout | tier1_bin |\n| Coreutils commandIndex | ls | tier1_bin |\n| Coreutils commandIndex | man | tier1_bin |\n| Coreutils commandIndex | md5sum | tier1_bin |\n| Coreutils commandIndex | meshdrop | tier1_bin |\n| Coreutils commandIndex | mkdir | tier1_bin |\n| Coreutils commandIndex | mkfifo | tier1_bin |\n| Coreutils commandIndex | mktemp | tier1_bin |\n| Coreutils commandIndex | mount | tier1_bin |\n| Coreutils commandIndex | mv | tier1_bin |\n| Coreutils commandIndex | nano | tier1_bin |\n| Coreutils commandIndex | nice | tier1_bin |\n| Coreutils commandIndex | nl | tier1_bin |\n| Coreutils commandIndex | nohup | tier1_bin |\n| Coreutils commandIndex | nproc | tier1_bin |\n| Coreutils commandIndex | numfmt | tier1_bin |\n| Coreutils commandIndex | od | tier1_bin |\n| Coreutils commandIndex | oidc-publish | tier1_bin |\n| Coreutils commandIndex | openssl | tier1_bin |\n| Coreutils commandIndex | p2ping | tier1_bin |\n| Coreutils commandIndex | p2ptrace | tier1_bin |\n| Coreutils commandIndex | paste | tier1_bin |\n| Coreutils commandIndex | patch | tier1_bin |\n| Coreutils commandIndex | pathcap-verify | tier1_bin |\n| Coreutils commandIndex | pathchk | tier1_bin |\n| Coreutils commandIndex | peerctl | tier1_bin |\n| Coreutils commandIndex | peerdiscover | tier1_bin |\n| Coreutils commandIndex | peernote | tier1_bin |\n| Coreutils commandIndex | pkg-swarm-index | tier1_bin |\n| Coreutils commandIndex | pr | tier1_bin |\n| Coreutils commandIndex | printenv | tier1_bin |\n| Coreutils commandIndex | printf | tier1_bin |\n| Coreutils commandIndex | procstat | tier1_bin |\n| Coreutils commandIndex | ps | tier1_bin |\n| Coreutils commandIndex | pwd | tier1_bin |\n| Coreutils commandIndex | readlink | tier1_bin |\n| Coreutils commandIndex | realpath | tier1_bin |\n| Coreutils commandIndex | rev | tier1_bin |\n| Coreutils commandIndex | rm | tier1_bin |\n| Coreutils commandIndex | rmdir | tier1_bin |\n| Coreutils commandIndex | routeview | tier1_bin |\n| Coreutils commandIndex | savevault | tier1_bin |\n| Coreutils commandIndex | say | tier1_bin |\n| Coreutils commandIndex | sed | tier1_bin |\n| Coreutils commandIndex | seq | tier1_bin |\n| Coreutils commandIndex | setfacl | tier1_bin |\n| Coreutils commandIndex | sh | tier1_bin |\n| Coreutils commandIndex | sha1sum | tier1_bin |\n| Coreutils commandIndex | sha224sum | tier1_bin |\n| Coreutils commandIndex | sha256sum | tier1_bin |\n| Coreutils commandIndex | sha384sum | tier1_bin |\n| Coreutils commandIndex | sha512sum | tier1_bin |\n| Coreutils commandIndex | shuf | tier1_bin |\n| Coreutils commandIndex | sleep | tier1_bin |\n| Coreutils commandIndex | sort | tier1_bin |\n| Coreutils commandIndex | split | tier1_bin |\n| Coreutils commandIndex | ssh-keygen | tier1_bin |\n| Coreutils commandIndex | sshd | tier1_bin |\n| Coreutils commandIndex | stat | tier1_bin |\n| Coreutils commandIndex | sum | tier1_bin |\n| Coreutils commandIndex | swarmdoctor | tier1_bin |\n| Coreutils commandIndex | swarmmap | tier1_bin |\n| Coreutils commandIndex | swarmtop | tier1_bin |\n| Coreutils commandIndex | sync | tier1_bin |\n| Coreutils commandIndex | tac | tier1_bin |\n| Coreutils commandIndex | tail | tier1_bin |\n| Coreutils commandIndex | tar | tier1_bin |\n| Coreutils commandIndex | taskmesh | tier1_bin |\n| Coreutils commandIndex | tee | tier1_bin |\n| Coreutils commandIndex | telnet | tier1_bin |\n| Coreutils commandIndex | test | tier1_bin |\n| Coreutils commandIndex | theme | tier1_bin |\n| Coreutils commandIndex | time | tier1_bin |\n| Coreutils commandIndex | timeout | tier1_bin |\n| Coreutils commandIndex | touch | tier1_bin |\n| Coreutils commandIndex | tr | tier1_bin |\n| Coreutils commandIndex | true | tier1_bin |\n| Coreutils commandIndex | truncate | tier1_bin |\n| Coreutils commandIndex | trustctl | tier1_bin |\n| Coreutils commandIndex | tsort | tier1_bin |\n| Coreutils commandIndex | tty | tier1_bin |\n| Coreutils commandIndex | ulimit | tier1_bin |\n| Coreutils commandIndex | umount | tier1_bin |\n| Coreutils commandIndex | uname | tier1_bin |\n| Coreutils commandIndex | unexpand | tier1_bin |\n| Coreutils commandIndex | uniq | tier1_bin |\n| Coreutils commandIndex | unlink | tier1_bin |\n| Coreutils commandIndex | uptime | tier1_bin |\n| Coreutils commandIndex | users | tier1_bin |\n| Coreutils commandIndex | vdir | tier1_bin |\n| Coreutils commandIndex | wc | tier1_bin |\n| Coreutils commandIndex | wget | tier1_bin |\n| Coreutils commandIndex | which | tier1_bin |\n| Coreutils commandIndex | who | tier1_bin |\n| Coreutils commandIndex | whoami | tier1_bin |\n| Coreutils commandIndex | whois | tier1_bin |\n| Coreutils commandIndex | xargs | tier1_bin |\n| Coreutils commandIndex | xattr | tier1_bin |\n| Coreutils commandIndex | yes | tier1_bin |","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","posix","dashboard","compliance","generated"],"seeAlso":[{"name":"docs-reference-posix-issue7-traceability","section":7},{"name":"docs-reference-package-bare-os-seeder","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/posix-dashboard.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-posix-issue7-traceability","section":7,"title":"POSIX Issue 7 ↔ guest observability index","synopsis":["man 7 docs-reference-posix-issue7-traceability","Documentation page (plain text from docs/reference/posix-issue7-traceability.md)"],"description":"POSIX ISSUE 7 ↔ GUEST OBSERVABILITY INDEX\n\nThis index links IEEE Std 1003.1-2017 (Issue 7) areas to Bare OS surfaces: /proc JSON, ctx APIs, and handbook chapters. Normative POSIX text remains the Open Group utilities <https://pubs.opengroup.org/onlinepubs/9699919799/toc.htm> and system interfaces <https://pubs.opengroup.org/onlinepubs/9699919799/idx/index.html> indexes; Bare OS maps them to a single-address-space JavaScript runtime over Hyperdrive.\n\n| Issue 7 volume | Topic | Bare OS stand-in | Primary docs |\n| XBD | Definitions / environment | Session vfs.env, /proc/self/environ, /proc/bare_os/security_posture.json | environment-and-posix-appendix.md <environment-and-posix-appendix.md>, handbook ch.9 <../../handbook/09-posix-utilities-shell-and-vfs.md> |\n| XSH | File I/O, metadata | ctx.bareOsSyscall ops + /proc/bare_os/syscalls.json (opsDetail, posixXsh, schemaVersion) | POSIX_DECLARED_PROFILE.md <../architecture/POSIX_DECLARED_PROFILE.md>, posix-syscall-facade-map.md <posix-syscall-facade-map.md> |\n| XSH | Sockets (logical) | Socket bridge env (BARE_OS_POSIX_SOCKET_FD_BRIDGE, BARE_OS_POSIX_SOCKET_SCM_RIGHTS), socketMsgSurface in syscalls proc JSON | syscall-socket-contract.md <syscall-socket-contract.md>, handbook ch.9 <../../handbook/09-posix-utilities-shell-and-vfs.md> |\n| XCU | Shell | packages/bare-os-booter/lib/shell.js, env gates *BARE_OS_SHELL_** and signal trap dispatch helper (dispatchShellTrapSignal) | Handbook ch.9 §3 <../../handbook/09-posix-utilities-shell-and-vfs.md#3-shell-lists-pipelines-and-builtins-packagesbare-os-booterlibshelljs>, shell-grammar.md <shell-grammar.md>, shell-unsupported-behavior.md <shell-unsupported-behavior.md>, shell-troubleshooting.md <shell-troubleshooting.md> |\n| XCU | Utilities | /bin (from bare-os-coreutils), /etc/bare-os/posix_utilities.json, man, /share/man/man.json | Handbook ch.9 §5 <../../handbook/09-posix-utilities-shell-and-vfs.md#5-bin-utilities-catalog> |\n| XCU | awk, expr, test/` | Bounded engines in packages/bare-os-coreutils; profile BARE_OS_POSIX_PROFILE_VERSION + [posix-compliance-matrix.json <posix-compliance-matrix.json> susv4Refs` rows | Handbook ch.9 §7 <../../handbook/09-posix-utilities-shell-and-vfs.md#7-awk-sed-grep-and-text-utils-packagesbare-os-coreutils> |\n| (informative) | P2P / replication | /proc/bare_os/replication, /proc/bare_os/swarm, /proc/bare_os/swarm_health.json, disk.os RPC, ctx.bareOsHrpcRequest (versioned route table) | KERNEL_CONTRACT.md <../architecture/KERNEL_CONTRACT.md>, handbook ch.3 <../../handbook/03-protocol-and-disk.md> |\n| (informative) | Package index / path caps | pkg-swarm-index, bare_os.pkg_index_get, pathCapabilityEnvelope + ctx.bareOsVerifyPathCapabilityEnvelope | Handbook ch.3 <../../handbook/03-protocol-and-disk.md>, kernel-extensions.md <kernel-extensions.md> |\n\nMaintainers: when changing /proc/bare_os/syscalls.json schemaVersion, update kernel/etc/bare-os/syscalls.example.json, docs/schemas/bare-os-syscalls.schema.json, docs/reference/posix-compliance-matrix.json, and run node scripts/gen-posix-dashboard.mjs.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","posix","issue7","traceability","issue","guest","observability","index"],"seeAlso":[{"name":"docs-reference-posix-syscall-facade-map","section":7},{"name":"docs-reference-posix-dashboard","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/posix-issue7-traceability.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-posix-syscall-facade-map","section":7,"title":"POSIX syscall facade map (ctx.bareOsSyscall / /proc/bare_os/syscalls.json)","synopsis":["man 7 docs-reference-posix-syscall-facade-map","Documentation page (plain text from docs/reference/posix-syscall-facade-map.md)"],"description":"POSIX SYSCALL FACADE MAP (CTX.BAREOSSYSCALL / /PROC/BARE_OS/SYSCALLS.JSON)\n\nReference index → <README.md>\n\nThis document maps the guest-visible syscall-shaped surface to POSIX.1-2017 XSH-style names and to Bare OS implementation paths. The machine-readable source of truth is built at runtime into /proc/bare_os/syscalls.json (schema 11) via buildBareOsSyscallsProcJson <../../packages/bare-os-booter/lib/bare-os-syscalls-proc-json.js>. Stock ctx.bareOsSyscall('posix_fadvise', { path, offset?, len?, advice? }) is a simulated no-op for portable Issue 7-style hints on Hyperdrive-backed paths.\n\nSOURCE MODULES\n\n| Module | Role |\n| bare-os-syscall-ops.js <../../packages/bare-os-booter/lib/bare-os-syscall-ops.js> | BARE_OS_SYSCALL_OPS_DETAIL (stock ctx.bareOsSyscall op names), BARE_OS_POSIX_XSH_OPS_DETAIL (XSH-style names for traceability), BARE_OS_SYSCALL_OPS_DETAIL_FULL (concatenation for opsDetail) |\n| bare-os-syscalls-proc-json.js <../../packages/bare-os-booter/lib/bare-os-syscalls-proc-json.js> | Proc JSON assembly: ops, opsDetail, posixXsh, socketMsgSurface, errnoHints, fdModel |\n| bare-os-posix-signals.js <../../packages/bare-os-booter/lib/bare-os-posix-signals.js> | Signal name table surfaced in proc JSON |\n| bare-os-posix-errno.js <../../packages/bare-os-booter/lib/bare-os-posix-errno.js> | errnoHints / errno alignment rows |\n| packages/bare-os-booter/index.js <../../packages/bare-os-booter/index.js> | ctx.bareOsSyscall dispatcher implementing the stock ops |\n\nSTOCK CTX.BAREOSSYSCALL OPERATIONS\n\nThese names appear in BARE_OS_STOCK_SYSCALL_OPS and are invoked as ctx.bareOsSyscall('name', payload). Each row in BARE_OS_SYSCALL_OPS_DETAIL includes category (fs, proc, ipc, signal, vfs_meta) and stability (stable / experimental).\n\nFilesystem-shaped: readFile, writeFile, readdir, mkdir, stat, unlink, chmod, chdir, getcwd, readlink, symlink, exists, lstat, rmdir, rename, link, access, utimes, truncate, ftruncate, fsync, fdatasync, pathconf, fcntl, posixPoll, select, umask, experimental readv, writev (posix-pipe facades), clock_gettime (wall / monotonic sketch via bare-hrtime or performance.now), and nanosleep (capped wall sleep).\n\nVFS meta (experimental): mount, umount.\n\nSignals: kill (synthetic / guest process table — not host PIDs).\n\nIPC / socket-shaped (mostly experimental): socket, bind, listen, accept, connect, send, recv, sendmsg, recvmsg, shutdown, getsockopt, setsockopt, plus mq_open, mq_send, mq_receive. Socket rows document posixAlignment (ENOTSUP, partial) and map to ctx.bare TCP/UDP modules, Hyperswarm, or optional BARE_OS_POSIX_SOCKET_FD_BRIDGE behavior — see syscall-socket-contract.md <syscall-socket-contract.md>.\n\nPOSIX XSH LOGICAL NAMES (POSIXXSH)\n\nBARE_OS_POSIX_XSH_OPS_DETAIL lists Issue 7style names (open, close, read, write, pipe, dup, dup2, fcntl, poll, select, lseek, nanosleep, clock_gettime, umask, socket family aliases, etc.) with posixAlignment: simulated, partial, or ENOTSUP. They are not all separate ctx.bareOsSyscall op strings; they document how guest utilities and Wasm shims should reason about behavior. Wasm: only the small sync import set under BARE_OS_WASM_KERNEL_SYSCALL is wired into linear memory; use JS ctx.bareOsSyscall for clock_gettime and other async-shaped ops. The CSV of names is exposed as posixXsh.namesCsv in proc JSON.\n\nSTRUCTURED ERRNO PAYLOADS (PARTIAL / ENOTSUP)\n\nWhen the socket FD bridge or sendmsg / recvmsg paths reject input, stock ctx.bareOsSyscall throws or returns Error objects carrying stable machine fields (see packages/bare-os-booter/index.js <../../packages/bare-os-booter/index.js>):\n\n| Field | Role |\n| code | Short token (ENOTSUP, EINVAL, EBADF, EAGAIN, ETIMEDOUT, …) aligned with POSIX errno names where applicable |\n| errnoHint | Same as code for proc JSON symmetry |\n| posixAlignment | ENOTSUP, partial, or simulated — mirrors opsDetail.posixAlignment |\n| note | Human-readable reason (iov cap, ancillary unsupported, SCM_RIGHTS dup failure, unknown FD, …) |\n| op | Syscall-shaped op name (sendmsg, recvmsg, connect, …) for log correlation |\n\nrecvmsg on the bridge reports controllen: 0 when ancillary data is not surfaced; non-empty host-style cmsg requests without BARE_OS_POSIX_SOCKET_SCM_RIGHTS yield ENOTSUP with note explaining the gate. socketMsgSurface in proc JSON (schema 5) documents sendmsg / recvmsg caps and rejection shapes.\n\nINTENTIONALLY ABSENT OR NON-KERNEL\n\n- Real host fork, host PID namespaces, real kernel waitpid — The process table is synthetic; see /proc/bare_os/process_table.json.\n- Kernel TCP/UDP as host FDs — Unless the socket FD bridge env is enabled, socket ops return ENOSYS-shaped results; P2P networking uses Hyperswarm, Hyperdrive replication, and ctx.bare stream modules instead of POSIX sockets as the primary transport.\n- lseek on arbitrary guest FDs — Marked ENOTSUP / ESPIPE-hinted: no universal byte cursor across VFS logical FDs.\n\nRELATED DOCUMENTATION\n\n- environment-and-posix-appendix.md <environment-and-posix-appendix.md> — errno vocabulary, *BARE_OS_POSIX_** env vars\n- POSIX_DECLARED_PROFILE.md <../architecture/POSIX_DECLARED_PROFILE.md> — declared profile version\n- posix-compliance-matrix.json <posix-compliance-matrix.json> — CI matrix\n- conformance-matrix.md <conformance-matrix.md> — narrative conformance","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","posix","syscall","facade","map","ctx","bareossyscall","proc","bare","syscalls","json"],"seeAlso":[{"name":"docs-reference-protomux-channel-catalog","section":7},{"name":"docs-reference-posix-issue7-traceability","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/posix-syscall-facade-map.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-protomux-channel-catalog","section":7,"title":"Protomux channel catalog (Bare OS)","synopsis":["man 7 docs-reference-protomux-channel-catalog","Documentation page (plain text from docs/reference/protomux-channel-catalog.md)"],"description":"PROTOMUX CHANNEL CATALOG (BARE OS)\n\nVersion: 1.0.0 (document revision; bump when aliases or wire names change.)\n\nPRIMARY DATA PLANE\n\n| Channel name | Purpose | Notes |\n| bare-os-v1 | Hyperdrive replication + seed RPCs | Topic from topicKey() in bare-os-protocol; see handbook ch.3 <../../handbook/03-protocol-and-disk.md>. |\n\nAUXILIARY CHANNELS (PAIRED ON THE SAME MUX)\n\nSame Hyperswarm connection as bare-os-v1; gated by env / capability bits.\n\n| Channel name | Purpose | Env gate |\n| bare-os-app-v1 | Namespaced app RPC buffers | BARE_OS_PROTOMUX_APP_CHANNEL |\n| bare-os-cap-v1 | Capability/datagram experiments | BARE_OS_PROTOMUX_CAP_CHANNEL |\n| bare-os-chat-v1 | Global swarm chat messaging | Default on; disable with BARE_OS_PROTOMUX_CHAT_CHANNEL=0 / false / off / no |\n\nSee PROTOCOL_CHAT_CHANNEL_NAME, setupBareOsChatChannel, and lib/chat-messages.js in bare-os-protocol.\n\nALIAS REGISTRY\n\nRuntime merges env-driven aliases with the in-process registry (createBareOsProtomuxAliasRegistry in packages/bare-os-booter/lib/bare-os-protomux-alias-registry.js <../../packages/bare-os-booter/lib/bare-os-protomux-alias-registry.js>). Snapshot JSON is exposed as /proc/bare_os/protomux.json and /proc/bare_os_protomux_wire.\n\nRELATED HOLEPUNCH PACKAGES\n\n- protomux <https://github.com/holepunchto/protomux> — multiplexer core.\n- protomux-rpc-client-pool <https://github.com/holepunchto/protomux-rpc-client-pool> — pooled RPC clients (operator hints on capability word 8+).\n\nWhen adding a new first-class channel, update this file, the alias registry defaults (if any), and docs/reference/kernel-extensions.md <./kernel-extensions.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","protomux","channel","catalog","bare"],"seeAlso":[{"name":"docs-reference-readme","section":7},{"name":"docs-reference-posix-syscall-facade-map","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/protomux-channel-catalog.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-readme","section":7,"title":"File-level reference","synopsis":["man 7 docs-reference-readme","Documentation page (plain text from docs/reference/README.md)"],"description":"FILE-LEVEL REFERENCE\n\nThis directory holds the split file-by-file inventory that used to live in the root DOCUMENTATION.md <../../DOCUMENTATION.md> stub. Use it when you need paths, package roles, and environment variables without a narrative walkthrough.\n\nDOCUMENTATION MAP (SINGLE INDEX)\n\n| Kind | Where to start |\n| Project overview | README <../../README.md> |\n| First run (clone → shell) | Get started <../get-started.md> |\n| Documentation hub | docs/README.md <../README.md> (includes topic index: canonical reference vs handbook / user manual / developer guide) |\n| Doc sitemap | docs/sitemap.md <../sitemap.md> |\n| Glossary / FAQ / troubleshooting | glossary.md <../glossary.md> · faq.md <../faq.md> · troubleshooting.md <../troubleshooting.md> |\n| Operator narrative | Handbook <../../handbook/README.md> |\n| Contributor / ctx / Pear | Developer guide <../../developer-guide/README.md> |\n| Day-to-day use | Users manual <../../users-manual/README.md> |\n| agent (HTTPS assistant) + HTTP policy | HTTP: curl and wget <http-curl-and-wget.md> · guest man agent · Users manual ch.4 <../../users-manual/04-shell-path-and-scripts.md> |\n| File-level inventory | This directory (docs/reference/) |\n| JSON Schemas | schemas/README.md <../schemas/README.md> |\n| Kernel contract (boundaries) | docs/architecture/KERNEL_CONTRACT.md <../architecture/KERNEL_CONTRACT.md> |\n| Kernel subsystem map | docs/architecture/kernel-subsystems.md <../architecture/kernel-subsystems.md> |\n| POSIX conformance matrix | docs/reference/conformance-matrix.md <conformance-matrix.md> · machine-readable posix-compliance-matrix.json <posix-compliance-matrix.json> (pretest) |\n| Syscall + socket bridge contract | syscall-socket-contract.md <syscall-socket-contract.md> · posix-syscall-facade-map.md <posix-syscall-facade-map.md> · POSIX Issue 7 traceability <posix-issue7-traceability.md> |\n| Hyperswarm / Protomux booter teardown | hyperswarm-protomux-teardown.md <hyperswarm-protomux-teardown.md> |\n| ADRs | docs/adr/ <../adr/> |\n| Audit baseline | docs/audit/PLACEHOLDER_BASELINE.md <../audit/PLACEHOLDER_BASELINE.md> |\n| OTA / bundles (operators) | docs/deployment/OTA_AND_BUNDLES.md <../deployment/OTA_AND_BUNDLES.md> |\n| CI / verifiers | scripts/README.md <../../scripts/README.md> |\n\nON THIS PAGE\n\n- Topics (former monolith map) <#topics-former-monolith-map>\n- Narrative docs <#narrative-docs>\n\nTOPICS (FORMER MONOLITH MAP)\n\n- Repository layout and root metadata (former §§18) — Repository layout and root metadata <repo-layout-and-root.md>\n- Kernel image sources (former §9) — Kernel image sources <kernel-image.md>\n- Package: bare-os-protocol (former §10) — Package: bare-os-protocol <package-bare-os-protocol.md>\n- Package: bare-os-seeder (former §11) — Package: bare-os-seeder <package-bare-os-seeder.md>\n- Package: bare-os-booter (former §§12.112.9) — Package: bare-os-booter <package-bare-os-booter.md>\n- Shell completion + Fish REPL editor — Shell completion and REPL editor <shell-completion-and-repl-editor.md>\n- Shell grammar (draft EBNF / lexer modes) — shell-grammar.md <shell-grammar.md>\n- Shell unsupported/intentional differences — shell-unsupported-behavior.md <shell-unsupported-behavior.md>\n- Shell troubleshooting — shell-troubleshooting.md <shell-troubleshooting.md>\n- Shell + Fish REPL roadmap (machine-readable status) — shell-roadmap-features.json <../data/shell-roadmap-features.json>\n- bare-os-coreutils, tests, and seeder build hook (former §§12.1012.12) — bare-os-coreutils, tests, and seeder build hook <package-bare-os-coreutils-and-ci.md>\n- Architecture: end-to-end data flow (former §13) — Architecture: end-to-end data flow <architecture-data-flow.md>\n- Kernel architecture contract (booter vs image, boot steps) — KERNEL_CONTRACT.md <../architecture/KERNEL_CONTRACT.md>\n- Placeholder / stub audit baseline — PLACEHOLDER_BASELINE.md <../audit/PLACEHOLDER_BASELINE.md>\n- OTA and Bare/Pear bundles — OTA_AND_BUNDLES.md <../deployment/OTA_AND_BUNDLES.md>\n- Environment variables and POSIX appendix (former §14, §14a) — Environment variables and POSIX appendix <environment-and-posix-appendix.md>\n- POSIX syscall facade (ctx.bareOsSyscall) — posix-syscall-facade-map.md <posix-syscall-facade-map.md>\n- Hyperswarm / Protomux teardown (booter) — hyperswarm-protomux-teardown.md <hyperswarm-protomux-teardown.md>\n- Kernel feature bits and handshake — Kernel extensions <kernel-extensions.md>; source of truth for word masks — packages/bare-os-protocol/lib/kernel-feature-bits.js <../../packages/bare-os-protocol/lib/kernel-feature-bits.js>\n- Bits, env, /proc, and ctx map — Kernel capabilities index <kernel-capabilities-index.md>\n- ctx API versioning — ctx-api-versioning.md <ctx-api-versioning.md>\n- Guest TUI (ctx.tui / ctx.sdk) — ctx-tui.md <ctx-tui.md>\n- /bin/irc — irc-client.md <irc-client.md>\n- /bin/discord-bot — ping-pong Discord bot via ctx.bare.discordJS (man discord-bot, examples/discord-ping-pong/ <../../examples/discord-ping-pong/>)\n- /bin/summon — summon.md <summon.md>\n- Version alignment — Compatibility matrix <compatibility-matrix.md>\n- Holepunch stack alignment implementation — holepunch-stack-alignment-implementation.md <holepunch-stack-alignment-implementation.md>\n- Node vs Bare test hosts — node-vs-bare-host-matrix.md <node-vs-bare-host-matrix.md>\n- Legacy ↔ canonical names — Naming alias matrix <naming-alias-matrix.md>\n- Kernel program status tables — Feature roadmap status <feature-roadmap.md>\n- VFS path classes (policy sketch) — vfs-path-classes.md <vfs-path-classes.md>\n- Kernel security subsystems — kernel-security-subsystems.md <kernel-security-subsystems.md>\n- Vault / encryption threat model — vault-threat-model.md <vault-threat-model.md>\n- Boot trust model — ../security/boot-trust-model.md <../security/boot-trust-model.md>\n- Observability contracts — observability-contracts.md <observability-contracts.md>\n- Kernel extensions (short index) — kernel-extensions-capability-specs.md <kernel-extensions-capability-specs.md>\n- Kernel extensions (generated TOC) — kernel-extensions-generated-toc.md <kernel-extensions-generated-toc.md>\n- OTA channel sketch — ota-channels.md <ota-channels.md>\n- POSIX conformance dashboard (sketch) — conformance-dashboard.md <conformance-dashboard.md>\n- POSIX conformance matrix (subsystem table) — conformance-matrix.md <conformance-matrix.md>\n- Kernel subsystem boundaries — kernel-subsystems.md <../architecture/kernel-subsystems.md>\n- Machine-readable data stubs — ../data/README.md <../data/README.md>\n- Kernel program (governed expansion) — developer-guide/kernel-program.md <../../developer-guide/kernel-program.md>\n- Out of scope and tooling (former §§1516) — Out of scope and tooling <out-of-scope-and-tooling.md>\n- curl and wget (delegation, fetch stack, policy) — curl and wget <http-curl-and-wget.md> (includes agent / web_fetch)\n- Published JSON Schemas — schemas/README.md <../schemas/README.md>\n\nNARRATIVE DOCS\n\n- Handbook <../../handbook/README.md> — why the system exists and how the architecture fits together.\n- Developer guide <../../developer-guide/README.md> — how to extend run / start, use ctx, and test under Pear.\n- User manual <../../users-manual/README.md> — operator-oriented guide to running and using the image.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","readme","file","level"],"seeAlso":[{"name":"docs-reference-repo-layout-and-root","section":7},{"name":"docs-reference-protomux-channel-catalog","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-repo-layout-and-root","section":7,"title":"Repository layout and root metadata","synopsis":["man 7 docs-reference-repo-layout-and-root","Documentation page (plain text from docs/reference/repo-layout-and-root.md)"],"description":"REPOSITORY LAYOUT AND ROOT METADATA\n\nFormer monolith DOCUMENTATION.md §§18. Reference index → <README.md>\n\n1. REPOSITORY TREE (SOURCE ONLY)\n\n bare-operating-system/\n ├── package.json # Root workspace manifest\n ├── package-lock.json # Locked dependency tree (npm, all workspaces)\n ├── README.md # User-facing overview and doc map\n ├── DOCUMENTATION.md # Stub → docs/reference (former monolith)\n ├── docs/\n │ ├── README.md # Docs hub (reference + themes + catalog)\n │ ├── bare-holepunch-catalog.json\n │ ├── reference/ # File-level reference; index: docs/reference/README.md\n │ └── themes/\n ├── handbook/ # Narrative handbook (chapters + diagrams)\n │ ├── README.md # Index + links to chapters\n │ ├── 00-preface.md, 01-introduction.md … 10-manpages-and-online-help.md\n ├── developer-guide/ # How-to: in-image JS, ctx, coreutils, testing\n │ ├── README.md # Index + reading order\n │ ├── 01-two-runtimes-host-vs-image.md … 12-bare-modules-and-pear-ecosystem.md\n ├── LICENSE # Apache-2.0 notice (HoneyPeer, LLC)\n ├── patches/ # patch-package deltas (applied post-install; see § patches below)\n ├── .gitignore # Ignore rules\n ├── .prettierrc # Prettier formatting defaults\n ├── .github/\n │ └── workflows/\n │ └── ci.yml # GitHub Actions CI\n ├── kernel/ # Files staged into the system Hyperdrive\n │ ├── init.js\n │ ├── bin/ # Tier-1 utilities (built from bare-os-coreutils)\n │ ├── lib/bare/ # Optional ctx.bare drive bundles + manifest (bare-os-bare-libs)\n │ └── etc/\n │ └── os-release\n └── packages/\n ├── bare-os-protocol/ # Shared protocol + MBR + seed channel\n │ ├── package.json\n │ ├── index.js\n │ ├── constants.js\n │ ├── test.js\n │ └── lib/\n │ ├── messages.js\n │ ├── channel.js\n │ └── kernel-feature-bits.js\n ├── bare-os-bare-libs/ # esbuild → kernel/lib/bare/bundles + manifest.json (seeder mirror)\n │ ├── package.json\n │ └── build.mjs\n ├── bare-os-coreutils/ # Sources + build → kernel/bin/* and seeder copy\n │ ├── package.json\n │ ├── build.mjs\n │ ├── lib/runtime.js\n │ ├── lib/sed-engine.js, lib/awk-engine.js ← prepended for sed/awk (see build preamble)\n │ └── src/*.js\n ├── bare-os-seeder/ # Publishes OS drive + MBR\n │ ├── package.json\n │ ├── index.js\n │ ├── kernel/ # Vendored for Pear (sync from repo kernel/)\n │ └── lib/\n │ └── paths.js\n └── bare-os-booter/ # Boots from swarm peers only (TTY splash + timeout)\n ├── package.json\n ├── CHANGELOG.md # ctx API version history\n ├── index.js\n ├── test.js\n └── lib/\n ├── paths.js\n ├── swarm-disk.js\n ├── kernel-runner.js\n ├── bare-os-abort.js\n ├── bare-os-http-policy.js\n ├── bare-os-ctx-api.js\n ├── bare-os-ctx-bare.js # ctx.bare host import + drive bundle merge\n ├── bare-module-manifest.json\n ├── bare-os-ctx.d.ts\n ├── git-cli.js # isomorphic-git; booter delegates `git`\n ├── curl-cli.js # Fetch HTTP client; booter delegates `curl`\n ├── wget-cli.js # Fetch downloads; booter delegates `wget`\n ├── identity-account.js # Ed25519 account blob (bare-crypto PBKDF2 + ChaCha20-Poly1305)\n ├── identity-session.js # Guest vs unlocked env, vault save, ctx hooks\n ├── vfs.js # Two-drive path routing ($HOME → personal drive)\n ├── shell.js # POSIX-ish line parser + builtins (incl. login/logout)\n ├── fish-readline.js # TTY editor; per-USER REPL history; tab menu + ghost\n ├── completion-engine.js # Async completion: man/PATH/VFS/proc, ranking, registry\n ├── repl-session.js\n └── …\n\n2. ROOT: PACKAGE.JSON <../../PACKAGE.JSON>\n\n- name — bare-operating-system\n- private — true — not published as a single npm package\n- type — module — ESM\n- workspaces — [\"packages/*\"] — npm workspaces (protocol, coreutils, seeder, booter, …)\n- scripts.pretest — Runs bare-os-coreutils + bare-os-bare-libs builds, kernel/seeder parity, smoke:bare-manifest <../../scripts/smoke-bare-manifest-imports.mjs>\n- scripts.gen:bare-catalog — Refresh docs/bare-holepunch-catalog.json <../bare-holepunch-catalog.json> from GitHub + npm (see Chapter 12 <../../developer-guide/12-bare-modules-and-pear-ecosystem.md>)\n- scripts.sync:bare-manifest — Apply catalog → bare-module-manifest.json <../../packages/bare-os-booter/lib/bare-module-manifest.json> entries (preserves curated pearEntries) + booter optionalDependencies\n- scripts.test — Runs npm run test --workspaces --if-present\n- scripts.format — prettier --write .\n- scripts.lint — prettier --check .\n- engines.node — >=20\n- devDependencies — prettier@^3.4.2\n\nNo runtime dependencies at the root; all stack deps live in workspace packages.\n\n3. ROOT: PACKAGE-LOCK.JSON <../../PACKAGE-LOCK.JSON>\n\n- Format: npm lockfile v3 (lockfileVersion: 3).\n- Role: Pins exact versions of the full install graph (root + packages/bare-os-protocol, bare-os-seeder, bare-os-booter and all transitive dependencies: hyperdrive, corestore, hyperswarm, protomux, brittle, Bare-related packages, native addons such as rocksdb-native, etc.).\n- Workspaces: Lists workspace package paths and links workspace packages to \"node_modules/bare-os-protocol\" etc.\n- Not reproduced here line-by-line — it is thousands of lines; use npm ls or open the file for the exact tree.\n\n4. ROOT: README.MD <../../README.MD>\n\nUser-oriented documentation: project goal, layout table, prerequisites (Node 20+, Pear/Bare), npm ci, npm test, how to run seeder and booter with node index.js, environment variables, Corestore path semantics (~/.bare-os defaults), placeholder pear:// table, protocol summary (bare-os-v1, MBR layout), license pointer.\n\nRuntime drift guard:\n\n- Run npm run verify:bare-runtime <../../package.json> before bare-only workflows.\n- Minimum supported host runtime for this repo is bare v1.28.0.\n- If bare --version is lower, upgrade host tools with:\n- npm i -g bare-runtime pear\n- Quick rollback (if needed) to prior known versions on your machine:\n- npm i -g bare-runtime@<previous> pear@<previous>\n- then re-run npm run verify:bare-runtime and npm run test:bare.\n\nNarrative handbook (architecture diagrams, chapter walkthrough): handbook/README.md <../../handbook/README.md>. Per-workspace overviews: packages/bare-os-protocol/README.md <../../packages/bare-os-protocol/README.md>, packages/bare-os-coreutils/README.md <../../packages/bare-os-coreutils/README.md>, packages/bare-os-seeder/README.md <../../packages/bare-os-seeder/README.md>, packages/bare-os-booter/README.md <../../packages/bare-os-booter/README.md>, kernel/README.md <../../kernel/README.md>, scripts/README.md <../../scripts/README.md>.\n\n5. ROOT: LICENSE <../../LICENSE>\n\nApache License, Version 2.0 header: copyright year 2026, HoneyPeer, LLC ownership statement, standard AS-IS disclaimer, link to <http://www.apache.org/licenses/LICENSE-2.0>, and pointer to third-party vendor licenses.\n\n6. ROOT: .GITIGNORE <../../.GITIGNORE>\n\nIgnores:\n\n- node_modules/\n- data/ (legacy; optional local Corestore if you still keep trees here — defaults now use ~/.bare-os)\n- coverage/\n- .DS_Store\n- *.log\n- .pear/\n- packages/*/.test-data/ (brittle test Corestore dirs)\n\n7. ROOT: .PRETTIERRC <../../.PRETTIERRC>\n\nJSON: semi: false, singleQuote: true, trailingComma: \"none\".\n\n8. CI: .GITHUB/WORKFLOWS/CI.YML <../../.GITHUB/WORKFLOWS/CI.YML>\n\n- Triggers: push and pull_request to main.\n- Job test: ubuntu-latest, checkout, actions/setup-node@v4 with Node 20 and npm cache on package-lock.json, then npm ci, install a modern Bare runtime (bare-runtime) for brittle-bare / bare smoke tests, and run npm test.\n\n9. ROOT: PATCHES/ (PATCH-PACKAGE <HTTPS://GITHUB.COM/DS300/PATCH-PACKAGE>)\n\nThe repo may ship *patches/.patch files in patch-package format (for example patches/autopass+3.4.0.patch <../../patches/autopass+3.4.0.patch>) so maintainers can apply small upstream dependency fixes during development. They are not staged into the guest Hyperdrive. patch-package is a root devDependency; wire a postinstall script if you want patches applied automatically after npm ci. Document why** each patch exists in the commit message and keep diffs minimal.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","repo","layout","and","root","repository","metadata"],"seeAlso":[{"name":"docs-reference-shell-completion-and-repl-editor","section":7},{"name":"docs-reference-readme","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/repo-layout-and-root.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-shell-completion-and-repl-editor","section":7,"title":"Shell completion engine and Fish-style REPL editor","synopsis":["man 7 docs-reference-shell-completion-and-repl-editor","Documentation page (plain text from docs/reference/shell-completion-and-repl-editor.md)"],"description":"SHELL COMPLETION ENGINE AND FISH-STYLE REPL EDITOR\n\nThis page documents the interactive line editor used when the kernel session has a TTY (stdin.isTTY), and the completion engine that powers tab completion, ghost suggestions, and the optional on-screen candidate menu.\n\nSource of truth (code):\n\n| Role | Module |\n| TTY UI, history file, menu, key bindings | packages/bare-os-booter/lib/fish-readline.js <../../packages/bare-os-booter/lib/fish-readline.js> |\n| Context parsing, ranking, VFS/man/proc collectors, registry | packages/bare-os-booter/lib/completion-engine.js <../../packages/bare-os-booter/lib/completion-engine.js> |\n| Shell tokenizer used for completion boundaries | tokenize in packages/bare-os-booter/lib/shell.js <../../packages/bare-os-booter/lib/shell.js> |\n| Builtin name list for highlighting / parity | listBareOsShellBuiltins <../../packages/bare-os-booter/lib/shell.js> in the same file |\n| REPL wiring (BARE_OS_FISH, synced console) | packages/bare-os-booter/lib/repl-session.js <../../packages/bare-os-booter/lib/repl-session.js> |\n\nRelated narrative: Handbook ch.4 — Booter runtime <../../handbook/04-the-booter-runtime.md> (REPL session). Shell language (pipelines, builtins): Handbook ch.9 <../../handbook/09-posix-utilities-shell-and-vfs.md>.\n\nWHEN THE FISH-STYLE EDITOR IS ACTIVE\n\ncreateKernelReplSession in repl-session.js <../../packages/bare-os-booter/lib/repl-session.js> calls createFishReadLine when:\n\n- Interactive mode is allowed and BARE_OS_SKIP_REPL is not disabling the REPL.\n- BARE_OS_FISH is not 0 (string compare on process.env).\n- stdin / stdout support raw TTY mode (setRawMode, etc.).\n\nIf any condition fails, the session falls back to a simpler line reader (no raw-mode menu).\n\nFALLBACK (BARE-READLINE / STREAM READER)\n\nWithout Fish you still get a line-at-a-time prompt, but no tab menu, ghost text, or Ctrl+R. Set BARE_OS_REPL_HISTORY=1 so each submitted line is appended to the same per-user history file Fish uses (/.bare/repl_history_<USER> on the personal drive), implemented in cli-readline.js <../../packages/bare-os-booter/lib/cli-readline.js> (wrapReadLineWithReplHistoryPersist). This does not enable in-session arrow-key history recall; use the Fish-style editor (BARE_OS_FISH≠0 on a capable TTY) for that.\n\nFEATURES (USER-VISIBLE)\n\nGHOST SUGGESTIONS (INLINE)\n\nDim grey text after the cursor suggests a likely full line extension (same trimming rules as history ghost):\n\n1. VFS paths — names under the current directory, ~/…, or explicit relative/absolute path prefixes (suggestGhostFromFs): unique match or longest common prefix among directory entries. Takes priority over history when both apply. kill / wait PID arguments skip path ghosts.\n2. Prefix match against persisted REPL history (personal Hyperdrive).\n3. Bigram hint: after you run a command, the next line may suggest the most frequent following first token seen in history.\n4. Fuzzy tail: if no prefix match, a frequently used history line that subsequence-matches the current text may be suggested.\n\nGhost is hidden while the completion menu is open or reverse history search (Ctrl+R) is active.\n\nAccept ghost: Tab or Right Arrow. Left Arrow only moves the cursor (it does not strip ghost-accepted text).\n\nTAB COMPLETION\n\nWide TTY (stdout.columns ≥ 44 and BARE_OS_COMPACT_MENU unset):\n\n- Tab (or →) when a ghost is visible accepts the ghost (no menu).\n- Tab with no ghost: if there is exactly one candidate, it is applied; if several share a longer common prefix than the current word, that prefix is inserted; otherwise the first Tab does nothing (press Tab again within ~420ms on the same line/cursor to open the menu).\n- Second Tab (double-tab, same position): opens the scrollable menu (save/restore cursor + erase-to-EOS so redraws do not stack duplicate menus).\n- Shift+Tab while the menu is open moves the selection backward.\n\nNarrow TTY or BARE_OS_COMPACT_MENU=1: Tab accepts a ghost when present; otherwise Tab cycles candidates inline (no multi-line menu), as before.\n\nFurther Tab / Shift+Tab while the menu is open only moves the selection (no re-query of completeLine).\n\nCOMPLETION MENU (WIDE TTY)\n\n- Icons (emoji) by kind: builtin/command, flags, processes, initd, directories, etc.\n- Two columns: colored label (often LS_COLORS via bare-os-lscolors <../../packages/bare-os-lscolors/bare-os-lscolors.js>) and a short description (man option text, alias → …, file mode bits, …).\n- Footer may note extra ranked matches beyond the display cap.\n- Ctrl+Space (\\0 in raw mode on many terminals): toggles a one-line manual preview for the highlighted item when a man page is available.\n- Enter accepts the highlighted insertion; Esc closes the menu (also lone Escape).\n- Arrow Up/Down, Ctrl+N / Ctrl+P move selection when the menu is open.\n\nHISTORY PERSISTENCE\n\nPer-user path on the personal drive: /.bare/repl_history_<USER> (see replHistoryDrivePath in fish-readline.js). Reloaded on identity switch via ctx.bareOsReloadFishHistoryForIdentity.\n\nCOMPLETION ENGINE: DATA SOURCES\n\nThe engine consults (with timeouts on VFS calls so slow Hyperdrive I/O does not wedge the REPL):\n\n| Source | Use |\n| /bin + PATH | First-token commands; PATH directories are read once per completion pass (deduped basenames). |\n| Shell builtins | From listBareOsShellBuiltins(env) (includes optional read when BARE_OS_SHELL_READ_BUILTIN is set). |\n| ctx.shellAliases | Alias names and expansion preview in descriptions; alias expansion for man/flag lookup. |\n| /share/man/man.json | Session-cached merged manual: options[] flags, keywords for ranking, synopsis/description for --long regex extraction and subcommand heuristics; man second argument → index keys. |\n| Static fallbacks | COMPLETION_FLAG_MAP in completion-engine.js when man options are empty. |\n| VFS readdir + stat | Paths, ~/, globs (*?[ via bareOsFnmatch); directories only for cd / rmdir; colored labels from LS_COLORS. |\n| Environment | $VAR completion. |\n| /proc/bare_os/process_table.json | kill / wait arguments (cached ~400ms). |\n| /proc/bare_os | Extra names when the command is a file-reading heuristic (cat, grep, …) and the partial path looks under proc. |\n| /run/bare-os/units | Initd-style unit name column (tab-separated). |\n| metrics_live.json | Hint entry when the typed path suggests it. |\n| /sys, /run | Ordinary path completion when the user types those prefixes (VFS virtual nodes). |\n| Registry | ctx.bareOsRegisterCompleter (see below). |\n\nCONTEXT PARSING\n\nparseCompletionContext(line, cursor) tokenizes line.slice(0, cursor) with the same tokenize as the shell:\n\n- Pipeline segment — only tokens after the last | in the prefix are completed (so cmd1 | cmd2 completes cmd2 as a command).\n- Redirection — after >, >>, <, 2>, … the next word is treated as a path when relevant.\n- Trailing whitespace — new argument vs partial word is distinguished for insertion.\n\nRANKING\n\nCandidates are scored with (among others): exact match, prefix match, subsequence fuzzy match, capped Levenshtein, frequency from history, bigram boost from the last executed commands first token, man keyword overlap, and a kind boost so VFS path rows (kind: path) sort above builtins, aliases, /bin, and PATH executables. For the first token, readdir('.') matches are gathered before command names with a raised scoreBase so files in the working directory compete strongly with binaries. Results are capped for display (menuVisibleCap(), currently 200) with a footer hint if more exist.\n\nEXTENSIBILITY: CTX.BAREOSREGISTERCOMPLETER\n\nWhen the Fish editor attaches, the booter sets:\n\n- ctx.bareOsRegisterCompleter(commandName, async (ctx, meta) => items[])\n- ctx.bareOsUnregisterCompleter(commandName)\n\nmeta includes at least: env, cx (completion context from parseCompletionContext), manKey, resolvedCmd.\n\nEach item should look like { value, description?, kind?, ansiLabel?, manFlag?, scoreBase? }. Return an array; the engine merges your items with built-in sources and re-ranks.\n\nUse this for command-specific trees (peers, vault, modules) without blocking the hot path—keep handlers fast and bound I/O with the same discipline as the stock collectors.\n\nStub fields also exist on the initial ctx object in index.js <../../packages/bare-os-booter/index.js> (JSDoc); the real functions replace them when createFishReadLine succeeds.\n\nENVIRONMENT VARIABLES\n\n| Variable | Effect |\n| BARE_OS_FISH=0 | Disable the Fish-style raw TTY editor entirely; use the fallback reader. |\n| BARE_OS_COMPACT_MENU=1 or true | Force inline tab cycling (no dropdown menu) even on wide terminals. |\n| (implicit) stdout.columns < 44 | Same as compact: no menu, inline only. |\n| LS_COLORS, BARE_OS_THEME, *BARE_OS_COLOR_** | Menu label coloring and prompt/ghost colors (themes apply via barerc / applyBareOsThemeFromEnv). |\n| LINES, TERM | Menu height clamp uses stdout.rows or LINES; capability-style behavior follows the rest of the OS. |\n\nHost passthrough into guest ctx.env follows the same booter loop as other keys; if you need BARE_OS_COMPACT_MENU inside the guest, set it on the host before boot or export it in ~/.barerc like any other variable.\n\nPERFORMANCE AND RESILIENCE\n\n- VFS reads inside the engine use withVfsTimeout (~220ms): slow P2P replication returns empty/partial candidates instead of hanging the REPL.\n- readdir results are soft-capped before stat storms.\n- process_table.json is parsed from a short-lived cache per ctx.\n- man.json is parsed once per session (ctx.__bareOsManDbParsed).\n- The stdin pump awaits completeLine only on Tab (and similar), not on every keystroke.\n\nTESTS\n\npackages/bare-os-booter/test.js <../../packages/bare-os-booter/test.js> includes unit coverage for parseCompletionContext, rankCompletionItems, suggestGhostFromHistory, completeLine with a mock VFS (e.g. kill + process table), and a large-list ranking budget check. Older fish-readline history/stripAnsi/fuzzyMatch tests remain.\n\nSEE ALSO\n\n- Package: bare-os-booter <package-bare-os-booter.md> — full booter inventory.\n- Environment variables and POSIX appendix <environment-and-posix-appendix.md> — complete env list.\n- Developer guide — The context object <../../developer-guide/02-the-context-object.md> — ctx fields including readLine and completer hooks.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","shell","completion","and","repl","editor","engine","fish","style"],"seeAlso":[{"name":"docs-reference-shell-grammar","section":7},{"name":"docs-reference-repo-layout-and-root","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/shell-completion-and-repl-editor.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-shell-grammar","section":7,"title":"Shell Grammar (Draft)","synopsis":["man 7 docs-reference-shell-grammar","Documentation page (plain text from docs/reference/shell-grammar.md)"],"description":"SHELL GRAMMAR (DRAFT)\n\nThis document defines a compact grammar for the BareOS shell surface.\nIt is a conformance target for tokenizer/parser tests and diagnostics, not a\npromise of full POSIX sh parity.\n\nLEXER MODES\n\n- normal: unquoted words and operators\n- single: '... literal text (no interpolation)\n- $'…': ANSI-C style escapes in the lexer (\\n, \\t, \\\\, \\', \\xHH, …); emitted as a single-quoted segment (no further $ expansion inside).\n- double: \\\"...\\\" with escapes and expansions\n- arith: $(( ... ))\n- heredoc: <<WORD / <<-WORD delimiter capture\n\nTOKEN CLASSES\n\n- word\n- op (;, ;;, ;&, &&, ||, |, |&, <, >, >>, >&, 2>, 2>>, 2>&1, <<, <<-, <<<, (, ), {, })\n\nAll diagnostic tokens should include:\n\n- byte/char span (start, end)\n- lexer mode tag\n\nEBNF (EXECUTION-ORIENTED)\n\n line = ws? andOrList? ws? ;\n andOrList = pipeline { ws? ( \"&&\" | \"||\" | \";\" ) ws? pipeline } ;\n pipeline = command { ws? \"|\" ws? command } ;\n command = compound | simple ;\n \n compound = ifConstruct\n | whileConstruct\n | untilConstruct\n | forConstruct\n | caseConstruct\n | groupedList ;\n \n groupedList = \"(\" andOrList \")\" | \"{\" andOrList \"}\" ;\n \n simple = { assignment ws }? argv { ws redirection }* ;\n argv = word { ws word } ;\n assignment = ident \"=\" word ;\n ident = ( \"A\"..\"Z\" | \"a\"..\"z\" | \"_\" ) { \"A\"..\"Z\" | \"a\"..\"z\" | \"0\"..\"9\" | \"_\" } ;\n \n redirection = \"<\" word\n | \">\" word\n | \">>\" word\n | \"2>\" word\n | \"2>>\" word\n | \"2>&1\"\n | \"<<\" word\n | \"<<<\" word ;\n \n ifConstruct = \"if\" ws andOrList ws \"then\" ws andOrList\n { ws \"elif\" ws andOrList ws \"then\" ws andOrList }?\n { ws \"else\" ws andOrList }?\n ws \"fi\" ;\n \n whileConstruct = \"while\" ws andOrList ws \"do\" ws andOrList ws \"done\" ;\n untilConstruct = \"until\" ws andOrList ws \"do\" ws andOrList ws \"done\" ;\n forConstruct = \"for\" ws ident ws \"in\" ws word { ws word } ws \";\" ws \"do\" ws andOrList ws \"done\" ;\n caseConstruct = \"case\" ws word ws \"in\" ws caseArms ws \"esac\" ;\n caseArms = caseArm { ws caseArm } ;\n caseArm = pattern ws \")\" ws andOrList ws \";;\" ;\n pattern = word { ws \"|\" ws word } ;\n \n word = unquotedWord | singleQuotedWord | doubleQuotedWord | arithmeticWord | cmdSubstWord ;\n singleQuotedWord= \"'\" { anyCharExceptSingleQuote } \"'\" ;\n doubleQuotedWord= \"\\\"\" { escapedChar | anyCharExceptDoubleQuote } \"\\\"\" ;\n arithmeticWord = \"$((\" { anyCharExceptArithClose } \"))\" ;\n cmdSubstWord = \"$(\" andOrList \")\" ;\n \n ws = { \" \" | \"\\t\" | \"\\n\" } ;\n\nNOTES\n\n- Parsing/expansion/runtime error phases should remain distinguishable.\n- ( … ) grouped list: in-tree execution is a parenthesized compound list in the current guest environment (no host fork, no separate subshell process). Enable with BARE_OS_SHELL_POSIX_MODE or BARE_OS_SHELL_GROUPING (see environment appendix). This is not POSIX subshell isolation for variables or cd.\n- ;; terminates each case arm (lexer may emit one ;; token or two ; operators; execution accepts both).\n- select is parsed as a single top-level statement through select … in …; do …; done (semicolons before do do not split the list); execution still returns an explicit unsupported error. [[ … ]] is rejected unless BARE_OS_SHELL_DOUBLE_BRACKET=1, in which case only [[ WORD == WORD ]] / [[ WORD != WORD ]] is accepted.\n- Stray closing / middle reserved words (then, else, fi, do, done, esac, in, elif) at the start of a statement are rejected with shell: syntax error: reserved word '…' cannot start a statement (exit 2).\n\n/BIN/SH FRONTEND\n\n- sh [-euvxC] [-c COMMAND | SCRIPT | -s] maps -e → BARE_OS_SHELL_ERREXIT, -u → BARE_OS_SHELL_NOUNSET, -x/-v → BARE_OS_SHELL_XTRACE (same hook), -C → BARE_OS_SHELL_NOCLOBBER (honored when noclobber checks exist).\n- Line continuation \\\\\\n is merged before execLine evaluates a line.\n\nEXPANSION (SELECTED)\n\n| Form | Requires |\n| $'…' | — (lexer decode; bounded escape set) |\n| $(…) / ` … | BARE_OS_SHELL_CMDSUBST=1 (bounded; $((…))` is arithmetic, not command substitution) |\n| ${#name} | Length of $name |\n| ${!name} | BARE_OS_SHELL_INDIRECT_EXPANSION |\n| ${name:off:len} | BARE_OS_SHELL_PARAM_EXPANSION_V3 |\n| ${name//pat/repl} | BARE_OS_SHELL_PARAM_EXPANSION_V3 |\n\nDIAGNOSTICS TOKEN STREAM\n\nStructured diagnostics use packages/bare-os-booter/lib/shell-lex.js (lexShellLine) and tokenizeBareShellLineDetailed for stable spans aligned with tokenize.\n- This grammar intentionally omits unsupported POSIX constructs until adopted.\n- Deterministic AST snapshots should use this document as the canonical shape reference.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","shell","grammar","draft"],"seeAlso":[{"name":"docs-reference-shell-troubleshooting","section":7},{"name":"docs-reference-shell-completion-and-repl-editor","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/shell-grammar.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-shell-troubleshooting","section":7,"title":"Shell troubleshooting reference","synopsis":["man 7 docs-reference-shell-troubleshooting","Documentation page (plain text from docs/reference/shell-troubleshooting.md)"],"description":"SHELL TROUBLESHOOTING REFERENCE\n\nCommon signatures and first checks for packages/bare-os-booter/lib/shell.js.\n\nFREQUENT FAILURE SIGNATURES\n\n- shell: arithmetic: invalid token\n- Check $((...)) input for unsupported characters and unmatched delimiters.\n- read: no input (redirect stdin, use a pipeline, or interactive readLine)\n- Run via pipeline/heredoc, or ensure interactive readLine is present.\n- unbound variable: NAME\n- nounset mode is active; initialize variable or disable nounset for that block.\n- Unexpected pipeline status\n- Inspect set -o pipefail state and last-stage versus first-failure semantics.\n- Here-doc expansion mismatches\n- Confirm delimiter quoting and whether expansion is expected for that form.\n- shell: command denied by policy: NAME / sandbox blocks external command\n- Check BARE_OS_SHELL_DENY_COMMANDS, BARE_OS_SHELL_ALLOW_COMMANDS, and BARE_OS_SHELL_SANDBOX.\n- shell: pipeline stage timeout (...)\n- Increase BARE_OS_SHELL_PIPELINE_STAGE_TIMEOUT_MS or inspect the stalled command stage.\n\nFISH-STYLE REPL (TTY)\n\n- Garbled prompt after resize — narrow/widen the terminal; if the cursor drifts, press Ctrl+L (if bound) or submit an empty line; the editor redraws from fish-readline.js state.\n- Slow tab completion — large /proc trees or slow drives hit completion-engine.js timeouts; reduce READDIR_CAP pressure by completing shorter prefixes or disable fuzzy mode if configured.\n- SSH / Pear session — ensure BARE_OS_FISH is not 0 when you expect the raw TTY editor; non-TTY paths fall back to stream readline.\n\nFAST DEBUGGING WORKFLOW\n\n- Reproduce with sh -c '...' minimal script.\n- Print set -o output to confirm shell option state.\n- Capture token/AST snapshots using bareOsShellAstSnapshot(...) in tests.\n- Re-run npm run test -w bare-os-booter before broader root test runs.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","shell","troubleshooting"],"seeAlso":[{"name":"docs-reference-shell-unsupported-behavior","section":7},{"name":"docs-reference-shell-grammar","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/shell-troubleshooting.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-shell-unsupported-behavior","section":7,"title":"Shell unsupported / intentionally different behavior","synopsis":["man 7 docs-reference-shell-unsupported-behavior","Documentation page (plain text from docs/reference/shell-unsupported-behavior.md)"],"description":"SHELL UNSUPPORTED / INTENTIONALLY DIFFERENT BEHAVIOR\n\nBareOS shell aims for practical POSIX-like behavior, not full sh compatibility.\n\nINTENTIONALLY DIFFERENT TODAY\n\n- No real process fork; pipelines are cooperative/simulated in one runtime.\n- No full POSIX grammar surface (feature-gated subsets by BARE_OS_SHELL_* env keys).\n- Job control is logical/session-scoped, not host-kernel TTY job control.\n- Signal delivery and trap timing prioritize deterministic guest behavior over host parity.\n- Arithmetic/expansion are bounded for memory safety and predictable failure modes.\n- Optional sandbox/policy mode can deny commands by name (BARE_OS_SHELL_SANDBOX, BARE_OS_SHELL_DENY_COMMANDS, BARE_OS_SHELL_ALLOW_COMMANDS), which intentionally differs from stock POSIX shells.\n- select is unsupported (explicit error).\n- [[ … ]] extended tests are off by default (use [ / /bin/test). With BARE_OS_SHELL_DOUBLE_BRACKET=1, only binary == / != between two words is supported.\n- globstar (`) is opt-in via BARE_OS_GLOBSTAR=1 and remains bounded by BARE_OS_GLOBSTAR_MAX_DEPTH`** to avoid runaway recursion.\n- ( compound-list ) grouped execution requires BARE_OS_SHELL_POSIX_MODE or BARE_OS_SHELL_GROUPING; it is not a forked subshell (no variable or working-directory isolation from POSIX subshells).\n- Brace expansion {a,b} cross-products are capped by BARE_OS_SHELL_BRACE_EXPANSION_MAX (see environment appendix) to avoid combinatorial blowups.\n- Process substitution <(…) / >(…) is rejected at parse time (exit 2). {var}>& / arbitrary {n}>& fd dup forms beyond documented 2> / 2>> / 2>&1 are unsupported.\n\nWHY THIS IS EXPLICIT\n\n- Keeps scripts deterministic in the single-address-space runtime.\n- Prevents hidden memory blowups from unbounded substitutions and heredocs.\n- Makes operator policy controls and test outcomes stable across Node/Bare lanes.\n\nSEE ALSO\n\n- docs/reference/shell-grammar.md\n- docs/reference/posix-issue7-traceability.md\n- handbook/09-posix-utilities-shell-and-vfs.md","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","shell","unsupported","behavior","intentionally","different"],"seeAlso":[{"name":"docs-reference-summon","section":7},{"name":"docs-reference-shell-troubleshooting","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/shell-unsupported-behavior.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-summon","section":7,"title":"/bin/summon — Text web browser","synopsis":["man 7 docs-reference-summon","Documentation page (plain text from docs/reference/summon.md)"],"description":"/BIN/SUMMON — TEXT WEB BROWSER\n\nFirst-party HTML/CSS TUI browser. Page JS is on (Bare bare-vm / bare-realm when ctx.bare.bareVm is present; otherwise a strict Function sandbox). Pages flow onto a cell grid; links are numbered [1]. Not Chromium.\n\nUSE\n\n summon # TTY dashboard (needs ctx.tui)\n summon https://example.com/\n summon --no-js dump URL # skip page JS\n summon dump URL # laid-out text\n summon links URL # numbered links\n summon get URL # raw body\n summon bookmarks\n summon bookmarks add URL TITLE\n summon about bookmarks\n\nWithout a TTY, a URL argument dumps the page (same as summon dump).\n\nFETCH\n\nctx.httpFetch (same BARE_OS_HTTP_ALLOWLIST / BARE_OS_HTTP_DENYLIST as curl / wget). Manual redirects (cap 10), first-party cookies, 4 MiB body cap, Summon/0.1 user-agent. about: and file: skip HTTP. javascript: URLs are rejected.\n\nENGINE (V1)\n\n- HTML tokenizer + tree (void tags, auto-close, entity decode). <script> bodies are kept.\n- CSS: tag / .class / #id / [attr] / descendant / > / + / ~, @media stripped, display / visibility / font-weight / white-space. Linked stylesheets fetched (cap 4).\n- Page JS via ctx.bare.bareVm (Holepunch bare-vm + bare-realm) or ctx.bareOsSummonEval. DOM: getElementById, querySelector(All), innerHTML / textContent, createElement, events. External scripts fetched (cap 16). --no-js / J disables.\n- Layout wraps to --cols / terminal width. Images → [IMG alt]. Forms → [type] hit targets.\n- Reader mode (R / --reader) keeps p / headings / li / pre / blockquote / article.\n\nTUI\n\nctx.tui.run with buffer: 'cell'. Fixed-height frame (no terminal scroll).\n\n| Key | Action |\n| g | Go to URL |\n| Enter | Follow focused or numbered link |\n| digits + Enter | Follow [N] |\n| h / left | Back |\n| u | Forward |\n| r | Reload |\n| R | Reader |\n| J | Toggle page JS and reload |\n| s | Source |\n| j k | Scroll |\n| / n N | Find |\n| a | Bookmark this page |\n| o | about:bookmarks |\n| t w [ ] | Tabs |\n| H | Home (about:summon) |\n| q | Quit |\n| ? | Help |\n\nCONFIG\n\nPersonal drive:\n\n- ~/.summon/config.json\n- ~/.summon/cookies.json\n- ~/.summon/bookmarks.json\n\nSEE ALSO\n\nctx.tui <ctx-tui.md> · HTTP: curl and wget <http-curl-and-wget.md> · developer-guide ch.20 <../../developer-guide/20-tui-and-sdk.md> · man summon","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","summon","bin","text","web","browser"],"seeAlso":[{"name":"docs-reference-syscall-socket-contract","section":7},{"name":"docs-reference-shell-unsupported-behavior","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/summon.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-syscall-socket-contract","section":7,"title":"Syscall and socket bridge contract","synopsis":["man 7 docs-reference-syscall-socket-contract","Documentation page (plain text from docs/reference/syscall-socket-contract.md)"],"description":"SYSCALL AND SOCKET BRIDGE CONTRACT\n\nSingle reference for ctx.bareOsSyscall POSIX-shaped ops and the optional BARE_OS_POSIX_SOCKET_FD_BRIDGE path. Normative JSON lives in /proc/bare_os/syscalls.json (schemaVersion 10 — includes posix_fadvise, socketMsgSurface) and kernel/etc/bare-os/syscalls.example.json.\n\nPOSIX XSH NAMES\n\nGenerated posixXsh.namesCsv includes socket, bind, listen, accept, connect, send, recv, recvfrom, sendmsg, recvmsg, shutdown, poll, select, etc. Each row in opsDetail lists mapsTo, errnoHint, and posixAlignment.\n\nSOCKET FD BRIDGE (ENV)\n\nEnable with BARE_OS_POSIX_SOCKET_FD_BRIDGE=1. Requires ctx.bare to expose bareTcp and/or bareDgram (Holepunch bare-tcp / bare-dgram bundles).\n\n| Transport | Flow | Notes |\n| SOCK_STREAM | bind → listen → accept, or connect | connect installs the same tcpRecvQueue + data path as accept. poll/select: readable when the queue has data, when the peer has half-closed / FIN (EOF recv), or after a socket error; writable when local SHUT_WR is not set. |\n| SOCK_DGRAM | bind (passive UDP), or connect | recv/recvfrom/recvmsg dequeue datagrams; poll/select for connected or udp_bound states. |\n| SOCK_DGRAM send | After bind without connect | Syscall args must include port and host (or address) for each send/sendmsg. After connect on a bound socket, send/sendmsg` may omit destination (connected mode). |\n| SOCK_DGRAM recvmsg | Bound or connected | recvmsg returns msgHdr.name from rinfo when the datagram source is known; controllen 0 on receive (see socketMsgSurface). |\n| SOCK_STREAM sendmsg + SCM_RIGHTS | Connected | With BARE_OS_POSIX_SOCKET_SCM_RIGHTS, sendmsg accepts the same JSON cmsgs / msgHdr.cmsgs { fds: number[] } entries as datagram bridge fds (prepareBridgeSendmsg); logical dups appear in scmRightsLocalDup on the syscall result. |\n\nQUEUES AND CAPS\n\n- BARE_OS_POSIX_DGRAM_RECVQ_MAX — datagram queue depth per UDP fd.\n- BARE_OS_POSIX_DGRAM_RECV_BLOCK_MS_MAX — blocking recv budget (also used for accept wait).\n- BARE_OS_POSIX_ACCEPT_QUEUE_MAX — pending TCP accepts.\n\nSOCKETMSGSURFACE (SCHEMA 5)\n\nOperational profile: without BARE_OS_POSIX_SOCKET_FD_BRIDGE, socket syscalls remain ENOSYS-shaped. With the bridge, ancillary handling follows the table below.\n\n- Ancillary control on sendmsg: non-empty binary control / controllen, or malformed cmsgs, → ENOTSUP + ancillaryReject.\n- recvmsg: controllen 0; msgHdr.name filled from UDP rinfo when present.\n- logicalScmRightsOnSend (schemas 45): when BARE_OS_POSIX_SOCKET_SCM_RIGHTS=1, cmsgs and msgHdr.cmsgs may contain only objects { fds: number[] }. Each fd is duplicated; the syscall result includes scmRightsLocalDup: [{ from, to }]. Applies to SOCK_STREAM connected fds and SOCK_DGRAM connected/bound fds (same code path). Cap via BARE_OS_POSIX_SOCKET_SCM_RIGHTS_MAX_FDS (default 4, max 16). Idle / listen / bound-only bridge sockets reject dup. shutdown refcount-per-alias destroys the underlying slot when the last fd closes. This is logical duplication in the guest FD table (not host SCM_RIGHTS); recvmsg does not surface ancillary data. Without the env flag, non-empty cmsgs remain ENOTSUP. Parser unit tests: packages/bare-os-booter/test.socket-scm-rights.js. Schema 5 documents stream sendmsg parity explicitly (behavior unchanged from schema 4).\n\nTCP SHUTDOWN / HALF-CLOSE\n\nctx.bareOsSyscall('shutdown', { fd, how }) on a connected TCP bridge fd:\n\n- how: 0 — SHUT_RD: further recv drains the queue then returns EOF (bytesReceived: 0, eof: true).\n- how: 1 — SHUT_WR: sock.end() when available; further send/sendmsg return EPIPE-shaped errors.\n- how: 2 or omitted — full close (legacy): destroy the socket and unregister the fd when it is the last alias.\n\nPOLL CLOCK\n\nctx.bareOsPosixPoll returns pollClock: monotonic_hrtime when bare-hrtime loads, else Date_now, for timeout / waitedMs measurement.\n\nRELATED DOCS\n\n- Environment and POSIX appendix <environment-and-posix-appendix.md>\n- Handbook ch.9 — POSIX utilities, shell, VFS <../../handbook/09-posix-utilities-shell-and-vfs.md>\n- Package bare-os-booter <package-bare-os-booter.md>","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","syscall","socket","contract","and","bridge"],"seeAlso":[{"name":"docs-reference-vault-threat-model","section":7},{"name":"docs-reference-summon","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/syscall-socket-contract.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-vault-threat-model","section":7,"title":"Vault and key-rotation threat model (Bare OS)","synopsis":["man 7 docs-reference-vault-threat-model","Documentation page (plain text from docs/reference/vault-threat-model.md)"],"description":"VAULT AND KEY-ROTATION THREAT MODEL (BARE OS)\n\nBare OS keeps Ed25519 account material sealed for the personal Hyperdrive using bare-crypto (see identity-session.js). This note is intentionally short: it records what the guest trusts and what operators must still verify on the host.\n\nTRUST BOUNDARIES\n\n- Guest image (/bin, kernel, booter) is assumed integrity-checked by your release process (manifest signing, Pear channel policy, or offline LKG keys). Compromised image ⇒ full session compromise regardless of vault design.\n- Personal drive is writable by the unlocked session. In guest mode the stock VFS denies read/write/chmod/unlink on /.bare/account, /.bare/vault/, and /.bare/vault-rotation-audit.ndjson so ciphertext and rotation logs are not visible without unlocking (BARE_OS_GUEST_BARE_READ_ALL=1 lifts this for tests). ctx.bareOsAppendVaultRotationCheckpoint appends plaintext NDJSON audit rows to /.bare/vault-rotation-audit.ndjson — useful for continuity evidence, not a secret store. Do not place raw private keys there. After saveVaultToDrive / logout --save, a row with kind: vault_save and fileCount** is appended when the personal drive is writable.\n- Host audit mirrors can be hash-chained; tampering with any row should invalidate downstream hashes. Use chain verification checks during incident response and release forensics.\n- Host Corestore / filesystem holds material the guest cannot fully audit. Treat disk encryption, backups, and multi-device signing policy as operator responsibilities.\n\nROTATION\n\n- BARE_OS_ACCOUNT_KEY_ROTATION_STATE_JSON (env) may describe overlapping validity windows for signing keys. Checkpoints on disk should list which key signed which artifact and when, so rollback does not silently accept stale trust.\n- /proc/bare_os/security_posture.json (accountKeyRotationContinuity, schema 2) mirrors only structural hints (stateKeyCount, rotationHintPresent) — never raw private material — so operators can audit continuity without exposing vault bytes.\n\nOPERATIONAL GUIDANCE\n\n- Prefer short-lived guest-visible hints over long-lived secrets in proc or env.\n- When experimenting with BARE_OS_VFS_ENFORCE_ACL, remember ACL sidecars are metadata, not a hardware root of trust.\n\nCRYPTO PARAMETERS (AUDIT CHECKLIST)\n\n- Ed25519 is used for boot manifest verification (verifyBootManifestEd25519), extension signer pins, stable hostid derivation from the unlocked identity public key, and Hyperdrive discovery material. Regression tests in packages/bare-os-booter/test.js cover manifest signature rejection; keep algorithm names and key lengths aligned across those surfaces when rotating governance tooling.\n- AEAD / sealing for vault snapshots should use bare-crypto primitives (ChaCha20-Poly1305 or documented equivalents) with unique nonces per seal and KDF parameters (PBKDF2 iteration counts or Argon2id when adopted) aligned with current bare-crypto release notes. bare-crypto-backed tamper rejection for sealed blobs (openBytes after flipping an authentication tag byte) is covered in packages/bare-os-booter/test.identity.js (run via brittle-bare, same as account encode/decode).\n- Compare envelope layout with Holepunch safe-sodium-buffer guidance where applicable: avoid reusing (key, nonce) pairs; zeroize sensitive Uint8Array copies in host bridges when the runtime allows.\n- savevault / logout --save: verify bareOsKeySchema version bumps include migration notes in the booter changelog when ciphertext layout changes. identity-session.js keeps a single-session Ed25519 account model: logout --save persists the encrypted vault snapshot and mirrors a vault_save audit row when the personal drive is writable; login / unlock rehydrate keys through the same bare-crypto paths used for hostid and boot-manifest verification. Extension kernel.ext.d scripts pinned by extensionSignerPins in boot.policy.json must ship a signaturePointer and verify with ctx.bareOsVerifyBootManifestSignature before execution (strict boot fails closed) so vault-bearing sessions do not load unsigned extension code when pins are declared.\n\nSEEDER MULTISIG VERIFICATION (GUEST-VISIBLE HINT)\n\nThe Pear seeder may set BARE_OS_SEEDER_MULTISIG_VERIFY_RESULT (ok / failed / skipped) when logPearMultisigKernelHint runs. The stock booter copies a redacted sketch into /proc/bare_os/security_posture.json under pearMultisigSeeder.verifyResult so operators can see whether multisig verification ran — not the signing keys or raw pear.multisig.json payload.\n\nSee also: environment appendix <environment-and-posix-appendix.md>, handbook ch.4 — booter runtime <../../handbook/04-the-booter-runtime.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","vault","threat","model","and","key","rotation","bare"],"seeAlso":[{"name":"docs-reference-vfs-path-classes","section":7},{"name":"docs-reference-syscall-socket-contract","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/vault-threat-model.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-reference-vfs-path-classes","section":7,"title":"VFS path classes (policy sketch)","synopsis":["man 7 docs-reference-vfs-path-classes","Documentation page (plain text from docs/reference/vfs-path-classes.md)"],"description":"VFS PATH CLASSES (POLICY SKETCH)\n\nStock routing is implemented in packages/bare-os-booter/lib/vfs.js (createVfs). For documentation and future policy hooks, paths are classified with classifyBareOsVfsPathClass(path) (same module):\n\n| Class | Typical prefixes | Notes |\n| pseudo | /proc, /sys, /dev | Synthetic trees; not Hyperdrive bytes |\n| volatile | /run, /tmp | Session / ephemeral; often personal-backed |\n| mount | /mnt, /media, /mount | Optional union / HDMS mounts |\n| personal | /home/…, /root…, /.bare/ | Personal Hyperdrive view; physical prefixes may nest under /.bare-os/acct/<id>/… when BARE_OS_PERSONAL_ACCT_PREFIX=1. With that flag, logical /.bare/account and /.bare/vault/* resolve to /.bare-os/acct/<id>/.bare/… on the personal drive (per-session identity isolation); without the flag, /.bare/ stays at the personal root as before. Exception: when an HDMS (or mount-map) entry with label www is present, $HOME/.www and /home/<active>/.www are routed to that www drives root instead of the personal home tree (same path class for policy helpers; different backing drive* in route()). |\n| system | /boot, /bin, /lib, /etc, /usr, /var, default | System image Hyperdrive |\n| snapshot | /snapshots, /snapshots/system/… | Read-only system checkout views when BARE_OS_VFS_SNAPSHOTS=1 and drive.checkout exists |\n\nPolicy helper: evaluateBareOsVfsPathPolicy(path, rules) returns verdict (allow \\| deny \\| neutral), matched (including audit hits), auditHits, and metrics (rulesEvaluated, matchCount). Rules may use effect: allow, deny, or audit (audit records a match but does not override the verdict; later allow/deny rules still apply).\n\nEnv rules: parseBareOsVfsPolicyRulesFromEnv(env) reads BARE_OS_VFS_POLICY_RULES_JSON as { \"rules\": [ { \"id\", \"effect\", \"pathClass?\", \"prefix?\" } ] } for tooling that merges policy stacks.\n\nBatch / diff helpers: bareOsVfsBatchPut(drive, puts) and bareOsHyperdriveDiffCollect(drive, a, b, opts) in the same module (used from ctx.bareOsVfsBatchWrite / ctx.bareOsHyperdriveDiffCollect in the booter).\n\nRule evaluation is advisory unless a caller enforces verdict; stock VFS routing still uses createVfs internals and boot policy (denyVfsPrefixes, …).\n\nACL / xattr sidecars (utilities, not a separate path class): advisory ACL and extended-attribute views may use synthetic JSON files such as /.bare_acl.json and /.bare_xattr.json next to the affected directory (see handbook ch.9 <../../handbook/09-posix-utilities-shell-and-vfs.md> and kernel/etc/bare-os/vfs-sidecar-xattr-acl.example.json <../../kernel/etc/bare-os/vfs-sidecar-xattr-acl.example.json>).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","vfs","path","classes","policy","sketch"],"seeAlso":[{"name":"docs-release-checklist","section":7},{"name":"docs-reference-vault-threat-model","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/reference/vfs-path-classes.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-release-checklist","section":7,"title":"Release checklist (Bare operating system)","synopsis":["man 7 docs-release-checklist","Documentation page (plain text from docs/release-checklist.md)"],"description":"RELEASE CHECKLIST (BARE OPERATING SYSTEM)\n\nRun these steps before tagging or publishing a Pear bundle so the kernel, seeder mirror, and docs stay aligned.\n\nDocs: documentation home <README.md> · contributing to docs <CONTRIBUTING-DOCS.md> · deployment / OTA notes <deployment/OTA_AND_BUNDLES.md>.\n\n1. npm ci at the repository root (clean install).\n2. npm test at the root (includes full pretest gates plus workspace tests).\n3. npm run test:bare at the root (Bare-runtime protocol + booter + seeder lane).\n4. node scripts/verify-kernel-seeder-parity.mjs (kernel and seeder mirror must match).\n5. node scripts/verify-init-bundle-recipe.mjs and node scripts/gen-require-initjs-sha256.mjs (init bundle recipe + digest fixture).\n6. node scripts/verify-ctx-api-feature-bits.mjs and node scripts/verify-compat-matrix.mjs (contract/doc version gates).\n7. npm run audit:placeholder-baseline (refresh and review docs/audit/placeholder-baseline-scan.json).\n8. Holepunch alignment checks: run node scripts/report-holepunch-lockfile-drift.mjs, node scripts/report-holepunch-runtime-compat.mjs, node scripts/gen-holepunch-catalog-tiers.mjs, and node scripts/verify-holepunch-clone-drift.mjs.\n9. node scripts/verify-personal-drive-path-policy.mjs and node scripts/verify-ctx-client-helper-sync.mjs.\n10. Corestore snapshot workflow drill (operator lane):\n- quiesce writers (or pause replication),\n- capture a Corestore snapshot with your host tooling,\n- export non-secret summary JSON to BARE_OS_CORESTORE_SNAPSHOT_JSON and (optionally) BARE_OS_CORESTORE_SNAPSHOT_WORKFLOW_JSON,\n- verify /proc/bare_os/snapshot_hints.json and /proc/bare_os/replication surface the same workflow metadata.\n- optional mirror-drive experiment helper: run node scripts/mirror-drive-experiment.mjs --source-key <64hex> --mirror-key <64hex> --aux 1 and apply emitted env hints before launching booter/seeder.\n11. Shell conformance and flake evidence (required for shell-touching releases):\n- run npm run test -w bare-os-booter and npm run test:shell-bracket -w bare-os-booter,\n- run npm run test:shell-fast and npm run report:shell-reliability for fast-lane + machine-readable failure-mode output,\n- run npm run verify:reliability-gates and npm run test:flake-repeat (repeat-run must stay green without retries),\n- confirm no retry-dependent shell test behavior in two consecutive clean runs,\n- verify shell docs changed in lockstep when semantics changed (docs/reference/shell-grammar.md, shell-unsupported-behavior.md, shell-troubleshooting.md, posix-issue7-traceability.md),\n- optional: run npm run verify:shell-roadmap and review docs/data/shell-roadmap-features.json <../docs/data/shell-roadmap-features.json> for phase status.\n12. Zero-trust hard gates (required for trust-surface releases):\n- run npm run verify:zero-trust-gates,\n- run npm run test -w bare-os-booter with BARE_OS_ZERO_TRUST_PROFILE=strict in at least one clean lane,\n- verify no release config sets BARE_OS_PEER_ALLOW_ALL=1 without explicit break-glass expiry notes,\n- verify signer trust enforcement is on for capability-protected paths (BARE_OS_PATH_CAPABILITY_REQUIRE_TRUSTED_SIGNER=1).\n\nWhen COREUTILS_COMMANDS in packages/bare-os-coreutils/lib/commands.mjs changes length, update the Tier-1 count prose in root README.md, kernel/README.md, docs/reference/environment-and-posix-appendix.md, docs/audit/PLACEHOLDER_BASELINE.md, and packages/bare-os-coreutils/README.md to match — scripts/verify-doc-tier1-count.mjs (part of pretest) fails otherwise.\n\nOptional: npm run release-checklist runs scripts/release-checklist.mjs for automated JSON checks when configured.\n\nQuarterly: compare Holepunch dependency pins in packages/bare-os-booter/package.json (and optional optionalDependencies) against your local mirror under pearcli/holepunch-repos/holepunchto_repos (or upstream tags). Note API or semver changes before bulk upgrades. When docs/audit/bundle-health.json changes by more than a few percent for any bundle, record a one-line reason in packages/bare-os-bare-libs/README.md (bundle health log) and shrink docs/audit/bundle-marker-allowlist.json / bundle-throw-allowlist.json when upstream clears markers.\n\nHolepunch clone inventory: run node scripts/sync-holepunch-clones.mjs on a machine with local org clones to refresh docs/audit/holepunch-clone-sync-report.json and the NDJSON stream docs/audit/holepunch-clone-sync-summary.ndjson (one JSON object per manifest package row; safe to commit empty rows when clones are absent).\n\nOptional strict clone lag gate: docs/audit/holepunch-freshness-gate.json <audit/holepunch-freshness-gate.json> defaults to enabled: false. Release trains that maintain local mirrors may set enabled: true, run git fetch origin main in listed repos, and use BARE_OS_HOLEPUNCH_FRESHNESS_STRICT=1 in CI so verify-holepunch-clone-freshness.mjs fails when clones exceed maxCommitsBehind.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","release","checklist","bare","operating","system"],"seeAlso":[{"name":"docs-schemas-readme","section":7},{"name":"docs-reference-vfs-path-classes","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/release-checklist.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-schemas-readme","section":7,"title":"Published JSON Schemas (docs/schemas/)","synopsis":["man 7 docs-schemas-readme","Documentation page (plain text from docs/schemas/README.md)"],"description":"PUBLISHED JSON SCHEMAS (DOCS/SCHEMAS/)\n\nMachine-readable contracts for boot policy, lifecycle telemetry, and kernel extension manifests. Guest and host code may emit or validate lines against these schemas; see developer-guide — Privacy, telemetry, and PII <../../developer-guide/13-privacy-telemetry-pii.md> for scrubbing and non-secret posture.\n\n| Schema file | Purpose |\n| boot.policy.schema.json <boot.policy.schema.json> | Optional /etc/bare-os/boot.policy.json and related boot gating |\n| boot-trace-line.schema.json <boot-trace-line.schema.json> | Structured boot trace / lifecycle NDJSON lines |\n| telemetry-ndjson-record.schema.json <telemetry-ndjson-record.schema.json> | Guest/host NDJSON telemetry mirrors |\n| otel-bare-os-jsonl.schema.json <otel-bare-os-jsonl.schema.json> | OpenTelemetry JSONL mapping for Bare OS |\n| mbr-layout.schema.json <mbr-layout.schema.json> | Seeder bare_os.mbr_layout RPC payload (MBR key slots, failover hints) |\n| kernel-extension-manifest.schema.json <kernel-extension-manifest.schema.json> | Extension drop-in manifests under kernel.ext.d |\n| kernel-extensions.registry.schema.json <kernel-extensions.registry.schema.json> | Extension registry aggregation |\n| bare-os-security-posture.schema.json <bare-os-security-posture.schema.json> | peerAdmission env pointers for optional NDJSON audit (/proc/bare_os/security_posture.json) |\n\nRelated: kernel-extensions.md <../reference/kernel-extensions.md> · observability-contracts.md <../reference/observability-contracts.md> · compatibility-matrix.md <../reference/compatibility-matrix.md> · scripts/README.md <../../scripts/README.md> (verifiers that touch schema examples).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","schemas","readme","published","json"],"seeAlso":[{"name":"docs-security-blind-relay-p2p-hardening","section":7},{"name":"docs-release-checklist","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/schemas/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-security-blind-relay-p2p-hardening","section":7,"title":"Blind relay, pairing, and P2P hardening","synopsis":["man 7 docs-security-blind-relay-p2p-hardening","Documentation page (plain text from docs/security/blind-relay-p2p-hardening.md)"],"description":"BLIND RELAY, PAIRING, AND P2P HARDENING\n\nBare OS follows a zero-trust default for blind Holepunch-style relays, pairing sketches, and geo / topology hints: stock /proc/bare_os JSON for blind_relay_router, blind_pairing_sketch, and relay_geo_hint uses schema 1 with operatorRedacted: true and exposed: false until the operator explicitly enables BARE_OS_PROC_BLIND_PEER_RELAY_HINTS. When enabled, the booter emits schema 2 documents that merge env-injected operator JSON with aggregated swarm runtime only: peer count, lifecycle state, relayGeoTier (coarse tier, not geo-IP), and pairingSurfaceReady. No peer public keys, addresses, or swarm topics are included in that swarm object.\n\nOPERATOR CONTROLS\n\n- BARE_OS_PROC_BLIND_PEER_RELAY_HINTS — When set to 1 / true / yes, the booter may merge non-secret operator JSON from related *BARE_OS_** env keys into those proc surfaces (see bare-os-pear-corestore-hrpc.js <../../packages/bare-os-booter/lib/bare-os-proc-pear-corestore-hrpc.js> and companion proc builders).\n- BARE_OS_BLIND_RELAY_AUDIT_NDJSON — When 1 / true, /proc/bare_os/security_posture.json sets blindRelayAudit.armed so fleet automation knows blind-relay admission rows may be mirrored to host NDJSON sinks (still no peer keys in proc).\n- Seed RPC — Method names are allowlisted in seed-rpc-methods.js <../../packages/bare-os-protocol/lib/seed-rpc-methods.js>. Unknown methods fail closed with bare_os.rpc_unknown_method. Clients can mirror the same rule with bareOsIsAllowedSeedRpcMethodShort (exported from bare-os-protocol).\n- Capabilities / handshake — BARE_OS_SEED_CAP_STRICT and BARE_OS_SEED_CAP_FAIL tighten seeder capability checks; keep them aligned with your release train (see compatibility matrix <../reference/compatibility-matrix.md>).\n\nWHAT THE GUEST DOES NOT DO\n\nThe guest does not open blind relay circuits, perform pairing handshakes, or resolve geo routing from operator-redacted proc JSON alone. Those steps belong on the host or seeder with explicit policy, keys, and network access.\n\nSEE ALSO\n\n- Developer guide — Security and trust <../../developer-guide/09-security-and-trust.md>\n- Environment appendix — BARE_OS_PROC_BLIND_PEER_RELAY_HINTS <../reference/environment-and-posix-appendix.md>\n- Booter tests: blind relay / pairing / geo proc JSON operator-redacted in packages/bare-os-booter/test.js <../../packages/bare-os-booter/test.js>","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","security","blind","relay","p2p","hardening","pairing","and"],"seeAlso":[{"name":"docs-security-boot-trust-model","section":7},{"name":"docs-schemas-readme","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/security/blind-relay-p2p-hardening.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-security-boot-trust-model","section":7,"title":"Boot trust model","synopsis":["man 7 docs-security-boot-trust-model","Documentation page (plain text from docs/security/boot-trust-model.md)"],"description":"BOOT TRUST MODEL\n\nBare OS boot trust is anchored in block 0 (MBR) and then narrowed by runtime policy checks.\n\nTRUST BOUNDARY\n\n- The first accepted block 0 defines which system Hyperdrive key the booter opens.\n- Any peer that can satisfy read(0) on the topic is inside the practical trust boundary.\n- Peer-assisted block-0 mirroring improves availability, not cryptographic authority.\n\nRECOMMENDED OPERATOR CONTROLS\n\n- Restrict discovery and admission (topic hygiene, allowlists, capability requirements).\n- Prefer BARE_OS_ZERO_TRUST_PROFILE=strict and keep BARE_OS_PEER_ALLOW_ALL unset in production lanes.\n- Enforce capability/version gates before continuing from pre-MBR negotiation.\n- Require trusted path-capability signers (BARE_OS_PATH_CAPABILITY_REQUIRE_TRUSTED_SIGNER=1 + trusted key list).\n- Keep host delegates least-privilege (BARE_OS_DELEGATE_ALLOW explicit list only).\n- Use strict boot policy and release provenance checks for production-like lanes.\n- Treat block-0 provenance as a release control, not just network plumbing.\n\nRELATED DOCS\n\n- Boot and init timeline <../concepts/boot-and-init-timeline.md>\n- Chapter 3 — Protocol and disk <../../handbook/03-protocol-and-disk.md>\n- Vault threat model <./vault-threat-model.md>","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","security","boot","trust","model"],"seeAlso":[{"name":"docs-security-vault-multisig-continuity","section":7},{"name":"docs-security-blind-relay-p2p-hardening","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/security/boot-trust-model.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-security-vault-multisig-continuity","section":7,"title":"Vault multi-device continuity (sketch)","synopsis":["man 7 docs-security-vault-multisig-continuity","Documentation page (plain text from docs/security/vault-multisig-continuity.md)"],"description":"VAULT MULTI-DEVICE CONTINUITY (SKETCH)\n\nBare OS identity today centers on HDMS / autopass flows documented in the handbook and users manual. Optional multi-device continuity (threshold approvals, device loss recovery) can follow Holepunch hyper-multisig / pear-multisig-link patterns without changing the default single-device vault.\n\nDESIGN CONSTRAINTS\n\n- Backward compatible: default /.bare/ metadata and login / savevault flows keep working when multisig is off.\n- Guest-visible only as hints: synthetic /proc/bare_os JSON and host process.emit sketches — no silent network from the guest kernel.\n- Operator-owned keys: multisig public material is not embedded in the system image; distributors ship allowlists and boot policy pins.\n\nSTOCK SURFACES (TODAY)\n\n| Surface | Role |\n| /proc/bare_os/hyper_multisig_trust_pointer.json | Operator-facing trust pointer sketch (see booter VFS proc table). |\n| /proc/bare_os/multisig_quorum_pointer.json | Quorum pointer sketch for dashboards. |\n| ctx.bareOsEmitMultisigPointer, ctx.bareOsMultisigQuorumPointer | Emit bare-os:multisig-pointer / bare-os:multisig-quorum-pointer on the host process for integrators. |\n| BARE_OS_HYPER_MULTISIG_VERIFY | Seeder can run hyper-multisig verify when the binary is on PATH (see environment appendix <../reference/environment-and-posix-appendix.md>). |\n| BARE_OS_VAULT_MULTISIG_CONTINUITY_JSON | Merged into hyper_multisig_trust_pointer.json (schema 2) as vaultMultisigContinuity — operator-owned continuity sketch only. |\n| BARE_OS_VAULT_MULTISIG_CONTINUITY_AUDIT_NDJSON | When 1 / true, login / unlock appends a vault.multisig_continuity_login_sketch audit row (public-key hex prefix only). |\n| Boot policy | extensionSignerPinsV2…V5 pin extension signers; see OTA and bundles <../deployment/OTA_AND_BUNDLES.md>. Multisig is an identity layer above bundle trust. |\n\nWHEN TO ENABLE\n\nUse multisig operator flows when the host integrates Holepunch multisig tooling and documents pointer emission for your fleet — see OTA and bundles <../deployment/OTA_AND_BUNDLES.md> and identity handbook <../../handbook/05-identity-vault-and-hdms.md>.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","security","vault","multisig","continuity","multi","device","sketch"],"seeAlso":[{"name":"docs-security-vault-threat-model","section":7},{"name":"docs-security-boot-trust-model","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/security/vault-multisig-continuity.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-security-vault-threat-model","section":7,"title":"Vault and identity — threat model (operator)","synopsis":["man 7 docs-security-vault-threat-model","Documentation page (plain text from docs/security/vault-threat-model.md)"],"description":"VAULT AND IDENTITY — THREAT MODEL (OPERATOR)\n\nThis note summarizes what the guest runtime tries to protect and what it does not. It complements developer-guide — Security and trust <../../developer-guide/09-security-and-trust.md> and handbook Chapter 5 — Identity <../../handbook/05-identity-vault-and-hdms.md>.\n\nASSETS\n\n- Account blob (/.bare/account, v2): Ed25519 keypair; secret sealed with PBKDF2-SHA256 and ChaCha20-Poly1305 via bare-crypto (see BARE_OS_ACCOUNT_CRYPTO_PROFILE_V2 in code and /proc/bare_os/security_posture.json).\n- Vault entries: Application data sealed with a key derived from the signing secret (same AEAD stack); paths are hashed for stable blob names.\n\nTRUST ASSUMPTIONS\n\n- The host process (Pear/Node) can read guest memory; ciphertext on the personal Hyperdrive protects against offline replication sniffing, not against a compromised host.\n- Passphrase quality and backup policy are out of band; weak passphrases defeat PBKDF2-protected blobs.\n- Peers replicate Hyperdrive blocks; anyone with read access to the drive ciphertext needs the passphrase (or unlocked session) for account material.\n- Path-capability envelopes (ctx.bareOsVerifyPathCapabilityEnvelope) bind issuer keys to prefix + op lists; ctx.bareOsVerifyPathCapabilityEnvelopeTrusted adds a host allowlist (BARE_OS_PATH_CAPABILITY_TRUSTED_PUBKEYS_HEX) so operators can pin known issuers. Guests still cannot detect a malicious host that forges ctx methods — the model assumes the booter binary is trusted.\n\nNON-GOALS\n\n- No hardware-backed key storage unless the host wires Pear secure enclave or similar; BARE_OS_PEAR_SECURE_ENCLAVE_JSON is a non-secret hint only.\n- No multi-user discretionary access: the session is a single logical UID/GID from the booters perspective.\n\nMULTISIG CONTINUITY (PEAR / HYPER-MULTISIG ALIGNMENT)\n\nStock boot validates /etc/bare-os/pear.multisig.json when BARE_OS_RC_PROPOSAL_MULTISIG_STRICT or policy requires it (kernel/lib/boot/00-pear-multisig-shape.js mirrors bare-os-protocol). Treat this as governance continuity for extension and RC proposals, not a substitute for upstream hyper-multisig <https://github.com/holepunchto/hyper-multisig> CLI workflows on the host: operators should still run Holepunch signing/rotation tools out of band and only ship quorum-approved JSON into the image. BARE_OS_VAULT_MULTISIG_CONTINUITY_JSON and /proc/bare_os/hyper_multisig_trust_pointer.json (when exposed) document non-secret rotation hints; pearMultisigSeeder.verifyResult in security_posture.json reflects seeder-side verification only.\n\nRELATED /PROC\n\n- /proc/bare_os/security_posture.json — vaultCryptoPrimitives and bareCryptoReportedVersion (from BARE_OS_BARE_CRYPTO_VERSION) document the expected algorithms without exposing secrets.\n\nPEER-ASSISTED BLOCK-0 MIRRORING NOTES\n\n- Peer-assisted boot can mirror block 0 from helper peers after the original seeder exits; this improves availability but broadens trust in live swarm membership.\n- Treat mirrored block-0 acceptance as a policy decision: pair it with allowlist/denylist admission controls, strict capability checks, and operator audit rows for admission verdicts.\n- Incident response: when block-0 provenance is unclear, rotate trusted keys, restage the seeder image, and re-bootstrap from known-good peers before continuing replication.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","security","vault","threat","model","and","identity","operator"],"seeAlso":[{"name":"docs-sitemap","section":7},{"name":"docs-security-vault-multisig-continuity","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/security/vault-threat-model.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-sitemap","section":7,"title":"Documentation sitemap","synopsis":["man 7 docs-sitemap","Documentation page (plain text from docs/sitemap.md)"],"description":"DOCUMENTATION SITEMAP\n\nBare OS splits documentation by audience so each tree can stay focused and CI can verify links and generated artifacts. Use this page when you are unsure which folder to open.\n\nFast path: Get started <get-started.md> (clone → two terminals → shell) · Documentation home <README.md> (full hub).\n\nON THIS PAGE\n\n- Doc universe at a glance <#doc-universe-at-a-glance>\n- Diagram — how the trees relate <#diagram--how-the-trees-relate>\n- Where to go when you are stuck <#where-to-go-when-you-are-stuck>\n\nDOC UNIVERSE AT A GLANCE\n\n| I want to… | Start here | Canonical numbers / env |\n| Run it today | Get started <get-started.md> | User manual — ch.3 <../users-manual/03-running-seeder-and-booter.md> |\n| Understand two drives | Concepts — Two drives <concepts/two-drive-model.md> | Booter reference <reference/package-bare-os-booter.md> |\n| Understand boot order | Concepts — Boot <concepts/boot-and-init-timeline.md> | KERNEL_CONTRACT <architecture/KERNEL_CONTRACT.md> |\n| Read the full story | Handbook <../handbook/README.md> | Handbook — ch.3 Protocol <../handbook/03-protocol-and-disk.md> |\n| Use the shell and man | User manual <../users-manual/README.md> | Handbook — ch.9 POSIX / shell <../handbook/09-posix-utilities-shell-and-vfs.md> |\n| Use agent (HTTPS assistant) or chat (swarm chat) | User manual — ch.4 <../users-manual/04-shell-path-and-scripts.md> · man agent / man chat in the guest | Handbook — ch.34 / ch.6 <../handbook/03-protocol-and-disk.md>; HTTP policy <reference/http-curl-and-wget.md> (for agent) |\n| Tab completion / REPL keys | Shell completion and REPL editor <reference/shell-completion-and-repl-editor.md> | Handbook — ch.9 §3 <../handbook/09-posix-utilities-shell-and-vfs.md#3-shell-lists-pipelines-and-builtins-packagesbare-os-booterlibshelljs> |\n| Extend /bin or scripts | Developer guide <../developer-guide/README.md> | COREUTILS_COMMANDS <../packages/bare-os-coreutils/lib/commands.mjs>, verify-man-coverage |\n| Bump contracts or releases | Documentation home — Contract bump checklist <README.md#contract-bump-checklist> | Compatibility matrix <reference/compatibility-matrix.md>, package CHANGELOGs |\n| Every env variable | Environment and POSIX appendix <reference/environment-and-posix-appendix.md> | Do not duplicate in prose elsewhere |\n| Security / vault posture | Vault threat model <security/vault-threat-model.md> | Developer guide — Privacy / telemetry <../developer-guide/13-privacy-telemetry-pii.md> |\n| CI and verifier scripts | scripts/README.md <../scripts/README.md> | Root package.json pretest |\n\nDIAGRAM — HOW THE TREES RELATE\n\nIn prose: get-started and the documentation home route you into concepts (short evergreen), the user manual (run), the handbook (why), or the developer guide (how). Reference, architecture, and ADRs hold normative tables, env inventories, and decisions — narrative chapters should link there instead of copying version strings.\n\nWHERE TO GO WHEN YOU ARE STUCK\n\n- Operators: Troubleshooting router <troubleshooting.md> · FAQ <faq.md> · User manual — ch.7 <../users-manual/07-troubleshooting-and-operations.md>.\n- Contributors: Contributing to docs <CONTRIBUTING-DOCS.md> · run npm run pretest before pushing doc edits.\n- Maintainers: Release checklist <release-checklist.md> · npm run release-checklist.\n\nRepository canonical remote: https://git.ssh.surf/snxraven/bare-operating-system.git — Markdown is written for clarity on any forge; GFM-style alerts may render as plain blockquotes on some hosts (CONTRIBUTING-DOCS.md <CONTRIBUTING-DOCS.md>).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","sitemap"],"seeAlso":[{"name":"docs-themes-readme","section":7},{"name":"docs-security-vault-threat-model","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/sitemap.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-themes-readme","section":7,"title":"Host terminal themes (Bare OSmaintained)","synopsis":["man 7 docs-themes-readme","Documentation page (plain text from docs/themes/README.md)"],"description":"HOST TERMINAL THEMES (BARE OSMAINTAINED)\n\nThese files mirror common terminal emulator formats so you can match your host terminal (outside Bare OS) to the same named presets used inside the session (theme set <name>).\n\nIf colors look wrong in the guest: see users-manual — Troubleshooting <../../users-manual/07-troubleshooting-and-operations.md#themes-and-terminals> and docs/troubleshooting.md <../troubleshooting.md>.\n\nThey are authored in-repo for consistency with bare-os-theme-presets.js <../../packages/bare-os-booter/lib/bare-os-theme-presets.js>. They are not downloaded from third-party theme galleries.\n\nNaming follows common patterns (similar in spirit to catalogs like terminalcolors.com <https://terminalcolors.com/>): alacritty-<preset>.yml, warp-<preset>.yaml, iterm-<preset>.itermcolors.\n\nON THIS PAGE\n\n- Bundled theme files <#bundled-theme-files>\n- Preset names <#preset-names>\n- Related session variables <#related-session-variables>\n\nBUNDLED THEME FILES\n\n- alacritty-nord.yml — Preset nord. Alacritty <https://github.com/alacritty/alacritty> YAML. Import: merge the colors: block into your alacritty.yml.\n- alacritty-dracula.yml — Preset dracula. Alacritty YAML. Import: same as above.\n- warp-nord.yaml — Preset nord. Warp <https://docs.warp.dev/appearance/custom-themes> theme. Import: use Warps theme picker or point it at this path.\n- warp-dracula.yaml — Preset dracula. Warp. Import: same as above.\n- iterm-nord.itermcolors — Preset nord. iTerm2 / Terminal.app. Import: Profiles → Colors → Color Presets → Import.\n- iterm-dracula.itermcolors — Preset dracula. iTerm2 / Terminal.app. Import: same as above.\n\nAdditional presets (gruvbox_dark, tokyo_night, catppuccin_mocha, …) can be added here using the same filenames; contributions should keep parity with the JavaScript preset names in the booter.\n\nPRESET NAMES\n\nRun theme list in a Bare OS shell. Examples: default, nord, dracula, gruvbox_dark, catppuccin_mocha, tokyo_night, github_dark, solarized_dark.\n\nRELATED SESSION VARIABLES\n\nSee environment variables reference <../reference/environment-and-posix-appendix.md#14-environment-variables-complete-list>: BARE_OS_THEME, BARE_OS_COLOR_DEPTH, LS_COLORS, BARE_OS_DIRCOLORS, and host passthrough TERM / COLORTERM.\n\nMATCHING HOST AND GUEST COLORS\n\nBare OS computes LS_COLORS from dircolors data and the active theme preset (bare-os-theme-presets.js). If the guest looks correct but your host terminal looks washed out, import the matching file from this directory (Alacritty, Warp, or iTerm). If the guest looks wrong, set BARE_OS_COLOR_DEPTH to 256 or truecolor to match what your emulator advertises via COLORTERM, then run theme set <name> inside the session. See Handbook — Chapter 7: Themes, LS_COLORS, and real terminals <../../handbook/07-operations-and-development.md#themes-ls_colors-and-real-terminals>.\n\nCONTRIBUTING A NEW PRESET\n\n1. Add the preset object to packages/bare-os-booter/lib/bare-os-theme-presets.js <../../packages/bare-os-booter/lib/bare-os-theme-presets.js> (colors for LS_COLORS / dircolors generation).\n2. Add host theme files here using the existing naming convention (alacritty-<preset>.yml, warp-<preset>.yaml, iterm-<preset>.itermcolors).\n3. Document the preset name in this README under Preset names so operators can discover it.","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","themes","readme","host","terminal","bare","maintained"],"seeAlso":[{"name":"docs-troubleshooting","section":7},{"name":"docs-sitemap","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/themes/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"docs-troubleshooting","section":7,"title":"Troubleshooting (router)","synopsis":["man 7 docs-troubleshooting","Documentation page (plain text from docs/troubleshooting.md)"],"description":"TROUBLESHOOTING (ROUTER)\n\nUse this page to jump to the right doc for your situation. Symptom-first paths point at deeper material; the user manuals operations chapter remains the primary step-by-step for day-to-day issues.\n\nQUICK ROUTES\n\n| Symptom or goal | Start here |\n| Seeder or booter wont start; Pear vs Node confusion | users-manual/03-running-seeder-and-booter.md <../users-manual/03-running-seeder-and-booter.md> |\n| pretest / npm test failures after edits | users-manual/07-troubleshooting-and-operations.md <../users-manual/07-troubleshooting-and-operations.md> · handbook/07-operations-and-development.md <../handbook/07-operations-and-development.md> |\n| Environment variables, paths, Corestore locations | docs/reference/environment-and-posix-appendix.md <reference/environment-and-posix-appendix.md> |\n| Broken replication, no peers, swarm topic | handbook/03-protocol-and-disk.md <../handbook/03-protocol-and-disk.md> · package-bare-os-protocol.md <reference/package-bare-os-protocol.md> |\n| Guest vs login, vault, /.bare/ | users-manual/05-home-identity-and-vault.md <../users-manual/05-home-identity-and-vault.md> · handbook/05-identity-vault-and-hdms.md <../handbook/05-identity-vault-and-hdms.md> |\n| Shell, man, help, documentation map | users-manual/06-help-man-and-documentation-map.md <../users-manual/06-help-man-and-documentation-map.md> |\n| ctx, scripts, /bin development | developer-guide/08-testing-and-debugging.md <../developer-guide/08-testing-and-debugging.md> · developer-guide/02-the-context-object.md <../developer-guide/02-the-context-object.md> |\n| CI scripts, verifiers, release checklist | scripts/README.md <../scripts/README.md> · docs/release-checklist.md <release-checklist.md> |\n| Version skew, feature bits, API alignment | docs/reference/compatibility-matrix.md <reference/compatibility-matrix.md> · docs/architecture/KERNEL_CONTRACT.md <architecture/KERNEL_CONTRACT.md> |\n| curl / wget exit 127 (“unavailable in this session”) | Stock booter must expose ctx.bareOsRunCurlCli / ctx.bareOsRunWgetCli; upgrade bare-os-booter and match ctx API in compatibility-matrix.md <reference/compatibility-matrix.md>. BARE_OS_DELEGATE_ALLOW excluding curl/wget does not disable HTTP fetch — only host delegation order changes. |\n\n“FACTORY RESET” LOCAL STATE\n\nSeeder and booter persist under defaults such as ~/.bare-os/ (see the environment appendix). Deleting those directories wipes local Hyperdrive state—treat that as intentional data loss for development.\n\nOFFLINE / LKG BOOT\n\nPeer assumptions and BARE_OS_OFFLINE_LKG_BOOT are summarized in compatibility-matrix.md <reference/compatibility-matrix.md> under Peer assumptions.\n\nBLIND BOOTSTRAP / HYPERDHT HINTS\n\nHost operators can surface non-secret bootstrap material via BARE_OS_BLIND_BOOTSTRAP_URL / BARE_OS_BLIND_BOOTSTRAP_JSON (mirrored under /proc/bare_os_bootstrap). The seed RPC registry includes dht_bootstrap_hint and blind_peer_topology_v2 for Holepunch-aligned operators; CI asserts those short names stay registered (packages/bare-os-protocol/test.js <../packages/bare-os-protocol/test.js>). If boot fails before peers attach, verify seeder bare_os.capabilities and your relay/DHT configuration against package-bare-os-protocol.md <reference/package-bare-os-protocol.md>.\n\nSTILL STUCK?\n\n- Search the FAQ <faq.md> and glossary <glossary.md>.\n- Run npm run pretest to catch stale links and contract drift.\n- Open an issue with booter boot steps from /run/bare-os/boot.json when relevant (see KERNEL_CONTRACT <architecture/KERNEL_CONTRACT.md>).","descriptionMode":"preserve","options":[],"keywords":["docs","documentation","bare-os","reference","markdown","troubleshooting","router"],"seeAlso":[{"name":"docs-themes-readme","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from docs/troubleshooting.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"docs"},{"name":"bare-os-users-manual","section":7,"title":"Bare OS user manual — index and reading order","synopsis":["man 7 bare-os-users-manual","User manual chapter (users-manual/README.md)"],"description":"BARE OS — USER MANUAL\n\nThis manual is for people who want to run and use Bare OS: clone the repo, start a seeder and booter, work in the shell, and understand where your files and identity live. It is written in plain language and points to deeper material when you need it.\n\nShort evergreen explainers (two drives, boot, swarm, identity, POSIX stance): docs/concepts/README.md <../docs/concepts/README.md>.\n\nBare OS is experimental research software, not a production operating system. It is open source under Apache-2.0 and is owned, operated, and engineered by HoneyPeer, LLC, a DeKalb, Georgia limited liability company (LICENSE <../LICENSE>).\n\n> Tip\n> If a term is unfamiliar, check the canonical glossary <../docs/glossary.md> first, then jump back here.\n\nON THIS PAGE\n\n- Who should read this <#who-should-read-this>\n- Three paths through the docs <#three-paths-through-the-docs>\n- Chapters <#chapters>\n- How this relates to other documentation <#how-this-relates-to-other-documentation>\n\nWHO SHOULD READ THIS\n\nYou are in the right place if you want to:\n\n- understand what Bare OS is without reading the full architecture story first;\n- install dependencies, run the seeder and booter, and know which terminal does what;\n- use the line shell, home directory, and guest versus logged-in sessions at a practical level;\n- find man pages and know where handbook, developer guide, and reference docs live;\n- run agent (OpenAI-compatible HTTPS assistant; config under ~/.agent/) or chat (swarm / Protomux chat — see Chapter 4 <04-shell-path-and-scripts.md> and man agent / man chat in the guest).\n\nIf you are changing /bin, the booter, or the kernel image, use the developer guide <../developer-guide/README.md> after skimming this manual.\n\nWHAT BARE OS IS NOT\n\n- Not a hardened general-purpose desktop/server OS replacement.\n- Not a guarantee of anonymous or trustless networking by default.\n- Not a drop-in POSIX certification target (it is POSIX-like, with explicit gaps).\n- Not a managed cloud control plane; operators still own peer admission and release trust policy.\n\nTHREE PATHS THROUGH THE DOCS\n\nI only want to try it. Use Get started <../docs/get-started.md> for the shortest copy-paste path, or read What this is <01-what-this-is.md> then Running seeder and booter <03-running-seeder-and-booter.md> with the root README <../README.md>.\n\nI use it regularly. Add Shell, PATH, and scripts <04-shell-path-and-scripts.md> (includes agent / chat), Home, identity, and vault <05-home-identity-and-vault.md>, and Help, man, and the documentation map <06-help-man-and-documentation-map.md>.\n\nI need to debug or operate it. Use Troubleshooting and operations <07-troubleshooting-and-operations.md>, the docs troubleshooting router <../docs/troubleshooting.md>, and the handbook chapter on operations (Chapter 7 — Operations and development <../handbook/07-operations-and-development.md>). For POSIX terminology vs guest /proc / ctx mappings, see POSIX Issue 7 traceability <../docs/reference/posix-issue7-traceability.md> and the compatibility matrix <../docs/reference/compatibility-matrix.md>.\n\nCHAPTERS\n\n1. What this is <01-what-this-is.md> — P2P image, two drives, why it exists, experimental status.\n2. Install and repository layout <02-install-and-repository-layout.md> — clone, npm ci, workspaces at a glance.\n3. Running seeder and booter <03-running-seeder-and-booter.md> — Node versus Pear, two terminals, npm scripts.\n4. Shell, PATH, and scripts <04-shell-path-and-scripts.md> — how commands run without diving into the full ctx API; agent / chat assistants and ~/.agent/.\n5. Home, identity, and vault <05-home-identity-and-vault.md> — guest session, login, vault snapshots, HDMS in brief. Deeper trust notes: Vault threat model <../docs/security/vault-threat-model.md> and Boot trust model <../docs/security/boot-trust-model.md>.\n6. Help, man, and the documentation map <06-help-man-and-documentation-map.md> — man, help, and where each doc tree fits.\n7. Troubleshooting and operations <07-troubleshooting-and-operations.md> — common failures, environment variables, where to read next.\n8. Further reading <08-further-reading.md> — curated links into the handbook and reference.\n\nHOW THIS RELATES TO OTHER DOCUMENTATION\n\n- Handbook <../handbook/README.md> tells the story: architecture, protocol, booter runtime, identity, POSIX surface, and roadmap. Start with the Preface <../handbook/00-preface.md> if you want the full narrative.\n- Developer guide <../developer-guide/README.md> explains how to build and extend software on the image: run(ctx, argv), coreutils, testing, Pear integration.\n\nPear OTA snapshot: host Pear channels pair with BARE_OS_PEAR_CHANNEL / BARE_OS_PEAR_RELEASE and optional ctx.bareOsPearUpdaterDelegate() (async) when BARE_OS_PEAR_UPDATER_SNAPSHOT_JSON or BARE_OS_PEAR_UPDATER_MODULE is set; ctx.bareOsSystemRevision and boot policy markers govern rollback. See developer-guide ch.11 — Pear workflows <../developer-guide/11-kernel-pear-cookbook.md>.\n- docs/README.md <../docs/README.md> is the documentation home: maps every tree, glossary, FAQ, troubleshooting router, ADRs, and release checklist.\n- docs/reference <../docs/reference/README.md> is the file-level reference: packages, environment variables, data flow, compatibility. Capability bit masks are defined in packages/bare-os-protocol/lib/kernel-feature-bits.js <../packages/bare-os-protocol/lib/kernel-feature-bits.js> and summarized in kernel capabilities index <../docs/reference/kernel-capabilities-index.md>.\n- Boot budget dashboard: the guest writes /run/bare-os/boot-budget-summary.json each boot; the stock booter mirrors it to /proc/bare_os/boot_budget_summary.json. Stable violation codes (*BARE_OS_BOOT_BUDGET_**) are listed in that JSON. JSON Schema: docs/schemas/boot-budget-summary.schema.json <../docs/schemas/boot-budget-summary.schema.json>.\n- PEAR-RUN.md <../docs/PEAR-RUN.md> lists Pear channels, versioned pear:// links, and host environment notes for embedded Pear apps.\n\nWhen this manual and another doc disagree on a detail, treat the handbook or reference as authoritative and open an issue if something is stale.\n\nVALIDATING WHAT YOU READ\n\nRepository CI runs npm run pretest before tests: it checks kernel/seeder parity, capability contracts, relative .md links under docs/ (including docs/PEAR-RUN.md), handbook/, developer-guide/, scripts/, users-manual/, packages/, kernel/, and root README.md, DOCUMENTATION.md, man coverage, compatibility-matrix strings, the POSIX dashboard / compliance matrix / declared-profile triplet scripts (see scripts/README.md <../scripts/README.md>), and more. The link checker skips packages/bare-os-seeder/kernel/ (a byte-identical copy of kernel/*) and the packages/bare-os-bare-libs/README.kernel-lib-bare.md template whose links are validated after copy into kernel/lib/bare/README.md. Boot regression tests cover sensitive /.bare guest visibility (including optional BARE_OS_GUEST_BARE_READ_ALL for harnesses). If you are about to trust a path or script name from the docs, grepping the repo or running pretest* locally is the fastest sanity check.\n\n_Next: Chapter 1 — What this is <01-what-this-is.md>_","descriptionMode":"preserve","options":[],"keywords":["user","manual","tutorial","howto","bare-os","guide","bare","os","users","index","and","reading","order"],"seeAlso":[{"name":"users-manual-01-what-this-is","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from users-manual/README.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","aliases":["users-manual","user-manual"],"listCategory":"usersmanual"},{"name":"users-manual-01-what-this-is","section":7,"title":"Chapter 1 — What this is","synopsis":["man 7 users-manual-01-what-this-is","User manual chapter (users-manual/01-what-this-is.md)"],"description":"CHAPTER 1 — WHAT THIS IS\n\nAudience: anyone new to Bare OS. Time to read: about five minutes. Prerequisites: none.\n\nCanonical refs: Compatibility matrix <../docs/reference/compatibility-matrix.md> (versioned protocol, ctx, profile fields) · Environment appendix <../docs/reference/environment-and-posix-appendix.md> (every BARE_OS_* variable).\n\nQuick run: If you want commands first, use Get started <../docs/get-started.md>; this chapter explains what you are running before how.\n\nON THIS PAGE\n\n- The idea in one paragraph <#the-idea-in-one-paragraph>\n- Where does the JavaScript run? <#where-does-the-javascript-run>\n- System drive versus personal drive <#system-drive-versus-personal-drive>\n- How you get the image <#how-you-get-the-image>\n- What you can do inside <#what-you-can-do-inside>\n- Experimental software <#experimental-software>\n- Terminology you will see elsewhere <#terminology-you-will-see-elsewhere>\n- What Bare OS is not <#what-bare-os-is-not>\n\nTHE IDEA IN ONE PARAGRAPH\n\nBare OS is a system image that lives on a Hyperdrive and is meant to be replicated from peers (Hyperswarm and Protomux) rather than downloaded from a single HTTP mirror. A seeder publishes that drive and a small MBR block; a booter joins the swarm, opens the drive, and runs /boot/init.js. After a successful boot, eligible booters can also mirror the same block 0 MBR and captured seed RPC hints for cold joiners. Alongside the read-only system image, a separate personal Hyperdrive holds per-machine state: home directories, identity, logs, and optional extra mounts. The design is P2P-first and aligned with Holepunch-style Bare and Pear runtimes.\n\n> Note\n> Definitions for bolded terms live in the canonical glossary <../docs/glossary.md>.\n\nWHERE DOES THE JAVASCRIPT RUN?\n\nYou will hear “kernel” and “/bin” and picture a metal machine. Here the booter (Pear or Node on your host) implements ctx, the VFS, and Hyperswarm. Scripts on the Hyperdrive (/boot/init.js, /bin/*) run as AsyncFunction bodies inside that process—they do not use on-disk ESM import the way a normal Node project does.\n\nRead next: Developer guide — Two runtimes <../developer-guide/01-two-runtimes-host-vs-image.md> · Concepts — Boot <../docs/concepts/boot-and-init-timeline.md>.\n\nSYSTEM DRIVE VERSUS PERSONAL DRIVE\n\nThe system drive is the replicated OS tree: kernel, /bin, /boot, and the rest of the staged image. Treat it as shared and replaceable from the swarms point of view.\n\nThe personal drive is yours for that node: guest and user home layouts under controlled prefixes, account material under /.bare/, vault snapshots, HDMS registry data, and similar. The virtual file system routes paths such as $HOME and parts of /.bare/ to this drive so the two namespaces feel like one tree.\n\nFor the protocol layout (MBR, keys, swarm topic names), read Handbook — Chapter 3: Protocol and disk <../handbook/03-protocol-and-disk.md>.\n\nPath routing (same session, two backing drives): typical $HOME, /tmp, /var/log, and /.bare/ resolve on the personal drive; /bin, /boot, /etc, and most of / resolve on the system** drive. The VFS presents one tree.\n\nHOW YOU GET THE IMAGE\n\nIn development you typically:\n\n1. Clone the git repository and run npm ci at the root.\n2. Run a seeder that stages kernel/ into the system Hyperdrive and advertises it on the network.\n3. Run a booter in another process that discovers peers and boots into the image (and can later help mirror block 0 when eligible).\n\nYou can run both sides with plain Node for quick iteration, or with Pear for behavior closer to a released app. The next chapters walk through install and commands; PEAR-RUN.md <../docs/PEAR-RUN.md> documents published Pear channels and pear:// links.\n\nBoot pipeline (who talks to whom):\n\nWHAT YOU CAN DO INSIDE\n\nStock images ship a line-oriented shell with pipelines and redirects, a large set of POSIX-style utilities under /bin, sed and awk, and man backed by merged handbook and coreutils pages. Identity starts as guest; login can unlock an Ed25519-backed account on the personal drive. Optional HDMS can attach more Hyperdrives under /mnt.\n\nThe exact surface and intentional POSIX gaps are summarized in Handbook — Chapter 9 <../handbook/09-posix-utilities-shell-and-vfs.md>.\n\nEXPERIMENTAL SOFTWARE\n\nBare OS is not a production operating system. APIs, disk formats, and network behavior can change. Use it for research, prototyping, and learning. For security and trust boundaries, read Handbook — Preface <../handbook/00-preface.md> and Developer guide — Security and trust <../developer-guide/09-security-and-trust.md>.\n\nTERMINOLOGY YOU WILL SEE ELSEWHERE\n\n- Holepunch / Pear / Bare — Bare OS targets the Bare JavaScript runtime and often ships as a Pear application. Your host may run Node for development even when the image expects Bare APIs.\n- System drive vs personal drive — Already introduced above; the handbook calls out routing rules, /.bare/, and mount namespaces in Chapter 5 <../handbook/05-identity-vault-and-hdms.md> and Chapter 3 <../handbook/03-protocol-and-disk.md>.\n- Stock image — The tree produced from this repositorys kernel/ plus built /bin and man.json, without your custom forks. Capability bits and ctx API versions describe what the stock booter and seeder advertise together; see compatibility matrix <../docs/reference/compatibility-matrix.md>.\n\nFor a full AZ list, use docs/glossary.md <../docs/glossary.md>.\n\nWHAT BARE OS IS NOT\n\nIt is not a Linux distribution, a container runtime, or a full hardware OS. There is no kernel mode, no hardware driver model, and no guarantee that arbitrary npm packages run unchanged inside the guest. Treat the POSIX-like surface as familiar ergonomics backed by JavaScript and Hyperdrive semantics, not as a certification target.\n\nRELATED READING\n\n- Chapter 2 — Install and repository layout <02-install-and-repository-layout.md>\n- Documentation home <../docs/README.md>\n\n_Previous: User manual home <README.md>_ · _Next: Chapter 2 — Install and repository layout <02-install-and-repository-layout.md>_","descriptionMode":"preserve","options":[],"keywords":["user","manual","tutorial","howto","bare-os","guide","users","01","what","this","is","chapter"],"seeAlso":[{"name":"users-manual-02-install-and-repository-layout","section":7},{"name":"bare-os-users-manual","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from users-manual/01-what-this-is.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"usersmanual"},{"name":"users-manual-02-install-and-repository-layout","section":7,"title":"Chapter 2 — Install and repository layout","synopsis":["man 7 users-manual-02-install-and-repository-layout","User manual chapter (users-manual/02-install-and-repository-layout.md)"],"description":"CHAPTER 2 — INSTALL AND REPOSITORY LAYOUT\n\nPrerequisites: Chapter 1 — What this is <01-what-this-is.md>. Time to read: about six minutes.\n\nCanonical refs: Compatibility matrix <../docs/reference/compatibility-matrix.md> · Environment appendix <../docs/reference/environment-and-posix-appendix.md>.\n\nFast path: Get started <../docs/get-started.md> compresses install + two terminals into one page.\n\nON THIS PAGE\n\n- What you need on the host <#what-you-need-on-the-host>\n- Clone and install <#clone-and-install>\n- Monorepo layout at a glance <#monorepo-layout-at-a-glance>\n- Where to go next <#where-to-go-next>\n- Root npm scripts (operators) <#root-npm-scripts-operators>\n- Disk, caches, and Corestore <#disk-caches-and-corestore>\n\nWHAT YOU NEED ON THE HOST\n\n- Node.js 20 or newer (see root package.json engines).\n- Git to clone the repository.\n- For Pear workflows: Pear CLI installed and configured on your machine. The repos npm run os:seeder and npm run os:booter scripts assume Pear when you use those entry points.\n\nContinuous integration also installs Bare globally for tests that touch identity crypto; if you run the full npm test suite locally, match that setup. Details live in Handbook — Chapter 7 <../handbook/07-operations-and-development.md#continuous-integration-github-actions>.\n\n> Warning\n> Skipping npm ci at the repo root before Pear runs often causes confusing module resolution errors. Always install from the root unless you know exactly which workspace layout Pear expects.\n\nCLONE AND INSTALL\n\nFrom a terminal:\n\n git clone https://git.ssh.surf/snxraven/bare-operating-system.git\n cd bare-operating-system\n npm ci\n\nRun npm test when you want to confirm the tree is healthy before you change code. pretest builds coreutils and bare-libs, verifies kernel and seeder parity, and runs several contract and documentation checks. If pretest fails, the handbooks operations chapter explains the common causes.\n\nMONOREPO LAYOUT AT A GLANCE\n\nThe repository is an npm workspace monorepo. These paths matter most when you are running or debugging Bare OS:\n\n| Path | Role |\n| kernel/ | Sources staged onto the system Hyperdrive by the seeder. A copy lives under packages/bare-os-seeder/kernel/ for Pear packaging; CI enforces byte parity. |\n| packages/bare-os-protocol | Shared protocol constants: swarm topic, MBR layout, Protomux identifiers, kernel feature bits. |\n| packages/bare-os-seeder | Publishes the OS drive and joins the swarm so booters can replicate. |\n| packages/bare-os-booter | Joins the swarm, opens system and personal drives, constructs the guest runtime, runs /boot/init.js. |\n| packages/bare-os-coreutils | Sources and build for /bin utilities and merged man.json. |\n| packages/bare-os-bare-libs | Optional /lib/bare bundles merged into ctx.bare when enabled. |\n| scripts/ | Automation: Pear node_modules helpers, parity verifiers, catalog generation, release checklist. |\n\nEach workspace package has its own README with package-specific commands. For a file-by-file inventory, use docs/reference — Repository layout <../docs/reference/repo-layout-and-root.md>.\n\nDefault Corestore directories for seeder and booter usually live under ~/.bare-os/ unless you override them with environment variables documented in the environment appendix <../docs/reference/environment-and-posix-appendix.md>.\n\nROOT NPM SCRIPTS (OPERATORS)\n\nFrom the repository root, the scripts you touch most often are:\n\n- npm run os:seeder — Builds coreutils and bare-libs, ensures Pear sees hoisted node_modules, then pear run --dev . inside packages/bare-os-seeder. Use when you want Pear-accurate seeding during app development.\n- npm run os:booter — Same Pear node_modules preparation for the booter package, then pear run --dev . in packages/bare-os-booter.\n- npm run pretest — Required gate before npm test: builds artifacts, runs parity and documentation verifiers (see Chapter 7 <07-troubleshooting-and-operations.md>).\n- npm test — Runs pretest, then npm run test --workspaces --if-present so every workspace package can contribute its own suite.\n\nMaintainers also use npm run gen:bare-catalog, npm run sync:bare-manifest, and npm run release-checklist; see Handbook — Chapter 7 <../handbook/07-operations-and-development.md> for workflow context.\n\nDISK, CACHES, AND CORESTORE\n\nSeeder and booter persist Hypercore storage on disk. Default layouts are described in package READMEs and the environment appendix <../docs/reference/environment-and-posix-appendix.md> (BARE_OS_SEED_STORE, BARE_OS_BOOT_STORE, BARE_OS_HOST_DATA). If you switch between Node and Pear runs, you usually keep the same store paths so the personal drive and replication state stay consistent. Deleting ~/.bare-os/ is a blunt “factory reset” for local development: you lose replicated drives unless you have keys or snapshots elsewhere.\n\nWHERE TO GO NEXT\n\n- Run the system: Chapter 3 — Running seeder and booter <03-running-seeder-and-booter.md>.\n- Deeper operations and CI: Handbook — Chapter 7 <../handbook/07-operations-and-development.md>.\n- Exact env var names: Environment variables and POSIX appendix <../docs/reference/environment-and-posix-appendix.md>.\n\n_Previous: Chapter 1 <01-what-this-is.md>_ · _Next: Chapter 3 — Running seeder and booter <03-running-seeder-and-booter.md>_","descriptionMode":"preserve","options":[],"keywords":["user","manual","tutorial","howto","bare-os","guide","users","02","install","and","repository","layout","chapter"],"seeAlso":[{"name":"users-manual-03-running-seeder-and-booter","section":7},{"name":"users-manual-01-what-this-is","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from users-manual/02-install-and-repository-layout.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"usersmanual"},{"name":"users-manual-03-running-seeder-and-booter","section":7,"title":"Chapter 3 — Running seeder and booter","synopsis":["man 7 users-manual-03-running-seeder-and-booter","User manual chapter (users-manual/03-running-seeder-and-booter.md)"],"description":"CHAPTER 3 — RUNNING SEEDER AND BOOTER\n\nPrerequisites: Install and repository layout <02-install-and-repository-layout.md>. Time to read: about seven minutes.\n\nCanonical refs: Compatibility matrix <../docs/reference/compatibility-matrix.md> · Environment appendix <../docs/reference/environment-and-posix-appendix.md> · Binary releases <../docs/BINARY-RELEASE.md>.\n\nOne-page quick path: Get started <../docs/get-started.md> (prerequisites table, success criteria, failure matrix).\n\nON THIS PAGE\n\n- Why there are two processes <#why-there-are-two-processes>\n- Run with Bare (dev checkout) <#run-with-bare-dev-checkout>\n- Run released binaries <#run-released-binaries>\n- Pear install and OTA channels <#pear-install-and-ota-channels>\n- Common mistakes <#common-mistakes>\n- Boot sequence in plain language <#boot-sequence-in-plain-language>\n- Choosing checkout versus binary <#choosing-checkout-versus-binary>\n\nWHY THERE ARE TWO PROCESSES\n\nThe seeder owns the publisher side: it stages the kernel tree into a system Hyperdrive, writes the MBR block that points at drive keys, and stays on the swarm so others can replicate.\n\nThe booter owns the consumer side: it looks up peers on the same topic, replicates the system drive, attaches or creates a personal drive, and starts the in-image runtime (/boot/init.js, shell, initd — including stock bare-os-www for ~/.www on loopback — and cron as configured).\n\nYou almost always run them as two separate processes (two terminal tabs or windows). The booter needs a live seeder (or an already-replicated drive) to make progress within its boot timeout.\n\nResilience — peer system seeding: By default, after a node has booted it may serve MBR block 0 and mirror the publishers early *bare_os. RPC hints to other cold booters (same Hyperswarm topic) when eligibility passes. Set BARE_OS_PEER_SYSTEM_SEED=0 (or false / no / off) on the host to turn this off. This does not remove the need for at least one trusted publisher for the first tip, but it spreads block and RPC load across up-to-date peers. Set the same BARE_OS_SEED_IMAGE_TIP_ID on the seeder and on booters (or BARE_OS_PEER_SEED_ADVERTISE_IMAGE_TIP_ID / BARE_OS_PEER_SEED_IMAGE_TIP_ID on helpers) so every node advertises one image tip; optional BARE_OS_PEER_SEED_IMAGE_TIP_ID* on a helper still gates whether that* node may mirror. By default BARE_OS_PEER_SEED_SYNTHETIC_CAPABILITIES stays on so helpers can mirror MBR block 0 even when the pre-MBR capability RPC was skipped or incomplete — see the environment appendix <../docs/reference/environment-and-posix-appendix.md>.\n\nRUN WITH BARE (DEV CHECKOUT)\n\nUse a git checkout + bare when developing. Host pear run is gone in Pear v3 — do not use it.\n\nFrom the repo root (builds kernel tools for the seeder path):\n\n npm run os:seeder\n\nIn a second terminal:\n\n npm run os:booter\n\nOr from package dirs: cd packages/bare-os-seeder && bare index.js (after ensuring kernel/ is built).\n\nDefault store paths are under ~/.bare-os/corestore/ for seeder and booter unless you set BARE_OS_SEED_STORE, BARE_OS_BOOT_STORE, or the shared base BARE_OS_HOST_DATA. See each packages lib/paths.js for how overrides compose.\n\nOn a fresh clone, build *kernel/bin/ and kernel/lib/bare/ before staging: from the repo root run npm run build -w bare-os-coreutils && npm run build -w bare-os-bare-libs (or npm run pretest, which also verifies kernel/seeder parity). Root npm run os:seeder** runs those builds automatically.\n\nRUN RELEASED BINARIES\n\nDownload bare-os-seeder-<ver>-<host>.tar.gz and bare-os-booter-<ver>-<host>.tar.gz from the Gitea rolling release (see BINARY-RELEASE.md <../docs/BINARY-RELEASE.md>). The seeder archive includes kernel/ next to the binary.\n\n tar -xzf bare-os-seeder-0.1.0-linux-x64.tar.gz\n ./bare-os-seeder --no-updates\n \n tar -xzf bare-os-booter-0.1.0-linux-x64.tar.gz\n ./bare-os-booter --no-updates\n\nLocal packed builds: npm run make:seeder:linux-x64 (etc.) → *out/bare-os--<host>/**.\n\nOr use the web installer:\n\n curl -fsSL https://install.bare-os.live | bash -s -- --both --yes\n\nPEAR INSTALL AND OTA CHANNELS\n\n pear install pear://1ycyj65xxgn6c5cirhtnm8aokkrpe9dzibriszyfkmfggc3opjzy # seeder\n pear install pear://khtauzttriz8dpgrphj79rfy98iwoatqm59fnogtsdqk5f1kg6ao # booter\n\nPackaged binaries embed pear-runtime against those upgrade links. Details: BINARY-RELEASE.md <../docs/BINARY-RELEASE.md>, PEAR-RUN.md <../docs/PEAR-RUN.md>.\n\nCOMMON MISTAKES\n\n- Expecting pear run — removed in Pear v3; use binaries or pear install.\n- Running the seeder binary without kernel/ beside it (or without BARE_OS_KERNEL_ROOT).\n- Starting only the booter with no live seeder / no prior drive tip.\n- Booter times out — No peer is serving the bare-os-v1 topic, or the network cannot reach bootstrap nodes. Confirm the seeder is running and check HYPERSWARM_BOOTSTRAP if you use custom bootstraps (Handbook — Chapter 7, troubleshooting <../handbook/07-operations-and-development.md#troubleshooting>).\n- Missing /bin utilities — Run npm run build -w bare-os-coreutils (and seed again) so the image contains a fresh /bin build.\n\nBOOT SEQUENCE IN PLAIN LANGUAGE\n\n1. Seeder stages kernel/ into a Hyperdrive and announces MBR on the swarm topic.\n2. Booter finds a peer, replicates the system drive, opens a personal drive, runs /boot/init.js.\n3. Optional: eligible booters later help cold joiners with block 0 / seed RPC.\n\nOnce the booter has replicated enough of the system drive, it mounts the personal drive (creating one if needed), wires the merged VFS, and executes /boot/init.js. When something fails during boot, enable BARE_OS_BOOT_TRACE (see environment appendix <../docs/reference/environment-and-posix-appendix.md>).\n\nCanonical booter boot steps are summarized in KERNEL_CONTRACT <../docs/architecture/KERNEL_CONTRACT.md>.\n\nCHOOSING CHECKOUT VERSUS BINARY\n\n| Mode | When |\n| *npm run os: / bare index.js** | Day-to-day development in this repo |\n| Rolling tarball / out/ binary | Operators, PM2, production-like hosts |\n| pear install | Install from upgrade channel with OTA |\n\nRELATED READING\n\n- Get started <../docs/get-started.md>\n- Binary releases <../docs/BINARY-RELEASE.md>\n- docs/troubleshooting.md <../docs/troubleshooting.md>\n- Handbook — Protocol and disk <../handbook/03-protocol-and-disk.md>\n\n_Previous: Chapter 2 <02-install-and-repository-layout.md>_ · _Next: Chapter 4 — Shell, PATH, and scripts <04-shell-path-and-scripts.md>_","descriptionMode":"preserve","options":[],"keywords":["user","manual","tutorial","howto","bare-os","guide","users","03","running","seeder","and","booter","chapter"],"seeAlso":[{"name":"users-manual-04-shell-path-and-scripts","section":7},{"name":"users-manual-02-install-and-repository-layout","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from users-manual/03-running-seeder-and-booter.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"usersmanual"},{"name":"users-manual-04-shell-path-and-scripts","section":7,"title":"Chapter 4 — Shell, PATH, and scripts","synopsis":["man 7 users-manual-04-shell-path-and-scripts","User manual chapter (users-manual/04-shell-path-and-scripts.md)"],"description":"CHAPTER 4 — SHELL, PATH, AND SCRIPTS\n\nPrerequisites: Running seeder and booter <03-running-seeder-and-booter.md>. Time to read: about six minutes.\n\nON THIS PAGE\n\n- Line shell and /bin <#line-shell-and-bin>\n- How a command runs (conceptually) <#how-a-command-runs-conceptually>\n- User scripts and PATH <#user-scripts-and-path>\n- What is different from Node on the host <#what-is-different-from-node-on-the-host>\n- Example commands (safe to try) <#example-commands-safe-to-try>\n- agent and chat <#agent-and-chat>\n- Builtins, /bin, and /proc <#builtins-bin-and-proc>\n\nLINE SHELL AND /BIN\n\nInside the booted image you interact through a line-oriented shell (Fish-style line editor with tab completion and history unless BARE_OS_FISH=0 — see Shell completion and REPL editor <../docs/reference/shell-completion-and-repl-editor.md>). It supports pipelines, redirects, wildcards (*`, ?, […]) on unquoted words against the VFS (quotes keep characters literal: echo '' vs echo ), and a broad set of utilities under /bin, including text tools such as sed and awk. Use set -f / set +f to turn globbing off or on for the session (BARE_OS_SHELL_NOGLOB`**).\n\nThe shell and utilities are part of the guest runtime built by the booter. They are not the same process as your hosts system shell; they execute against the virtual file system that merges the system drive, personal drive, and synthetic mounts such as /proc.\n\nFor POSIX coverage and deliberate gaps, see Handbook — Chapter 9 <../handbook/09-posix-utilities-shell-and-vfs.md>.\n\nPipeline capture (conceptual): stages connected by | pass simulated stdout between utilities (bounded bytes/lines); this is not a host OS pipe.\n\nHOW A COMMAND RUNS (CONCEPTUALLY)\n\nWhen you type a command name, the runtime resolves it against PATH. Built-in and /bin tools are implemented as guest JavaScript evaluated in a controlled way (no arbitrary Node import graph for drive-resident scripts). The booter supplies a ctx object that exposes the VFS, environment, subprocess helpers, and many optional bridges; in-image user scripts use the run(ctx, argv) convention.\n\nYou do not need the full ctx reference to use the system day to day. When you start writing or packaging scripts, read Developer guide — User scripts and PATH <../developer-guide/04-user-scripts-and-path.md> and Developer guide — The context object <../developer-guide/02-the-context-object.md>.\n\nUSER SCRIPTS AND PATH\n\nScripts on your personal or system drive can be executed when they are discoverable on PATH or invoked with a ./ path, subject to shebang and permission rules described in the developer guide. The stock kernels readline loop hands lines to the shell, which may invoke /bin tools or launch *.js handlers.\n\nIf a command is not found, verify PATH, whether the file is executable in the VFS sense, and whether you are in guest versus unlocked identity (some locations are only writable or meaningful after login).\n\nWHAT IS DIFFERENT FROM NODE ON THE HOST\n\nPear and Node on your laptop run ESM packages with normal import. Drive-resident scripts inside Bare OS follow the in-image execution model: they are not a second copy of Node with free module resolution. That distinction matters when you port tools from npm or expect node: built-ins to exist unchanged.\n\nFor a careful comparison of the two runtimes, read Developer guide — Two runtimes: host vs in-image <../developer-guide/01-two-runtimes-host-vs-image.md>. For guest-safe module choices, see Node → Bare module map <../developer-guide/node-to-bare-modules.md>.\n\nEXAMPLE COMMANDS (SAFE TO TRY)\n\nAfter the shell prompt appears, these exercises help build intuition without touching identity material:\n\n uname -a\n echo $HOME $USER\n ls -la /bin | head\n man ls | head -n 20\n\nPipelines and redirects behave like a small Unix (ls | wc -c, echo hello > /tmp/x), but paths such as /tmp map through the VFS—not every corner case matches Linux. When a command fails, read the stderr line first; many utilities print usage: hints aligned with man.\n\nAGENT AND CHAT\n\nThese are different commands:\n\n- agent — OpenAI-compatible HTTPS assistant with a ReAct-style tool loop (streaming on a TTY). Credentials and provider settings live under ~/.agent/ on the personal drive (~/.agent/config.json — not host environment variables). Use agent --setup on a TTY to create or adjust that file. Outbound HTTPS uses the same ctx.httpFetch path as delegated curl / wget (HTTP allow/deny lists, optional audit). The web_fetch tool fetches live http(s) URLs for the model; operators using BARE_OS_HTTP_ALLOWLIST must include both the API host (for example api.groq.com) and any hosts you expect web_fetch to reach. Full detail: man agent.\n\n- chat — Swarm / Protomux chat: full-screen TUI on a TTY when the booter exposes swarm chat, or scriptable subcommands (send, history, who, join, …). It is not the same program as agent. See man chat and Handbook — Chapter 3 <../handbook/03-protocol-and-disk.md> for P2P context.\n\nMaintainer sources: packages/bare-os-coreutils/src/agent.js <../packages/bare-os-coreutils/src/agent.js>, packages/bare-os-coreutils/lib/agent-*.js <../packages/bare-os-coreutils/lib/> (agent preamble), packages/bare-os-coreutils/src/chat.js <../packages/bare-os-coreutils/src/chat.js>, packages/bare-os-coreutils/lib/chat-tui.js <../packages/bare-os-coreutils/lib/chat-tui.js>. HTTP policy (for agent): HTTP: curl and wget <../docs/reference/http-curl-and-wget.md>.\n\nBUILTINS, /BIN, AND /PROC\n\nThe shell implements builtins (cd, export, control flow, …) in packages/bare-os-booter/lib/shell.js. Everything else normally resolves to /bin/<name> via PATH. Synthetic trees such as /proc/bare_os_features expose JSON or text summaries of capabilities and runtime state; they are documented in the kernel extensions reference <../docs/reference/kernel-extensions.md> and handbook chapters on the booter. If a name does not resolve, verify you are not shadowing a shell builtin and that PATH includes /bin (try command -v <name> when the shell supports it, or which <name> if installed).\n\n_Previous: Chapter 3 <03-running-seeder-and-booter.md>_ · _Next: Chapter 5 — Home, identity, and vault <05-home-identity-and-vault.md>_","descriptionMode":"preserve","options":[],"keywords":["user","manual","tutorial","howto","bare-os","guide","users","04","shell","path","and","scripts","chapter"],"seeAlso":[{"name":"users-manual-05-home-identity-and-vault","section":7},{"name":"users-manual-03-running-seeder-and-booter","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from users-manual/04-shell-path-and-scripts.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"usersmanual"},{"name":"users-manual-05-home-identity-and-vault","section":7,"title":"Chapter 5 — Home, identity, and vault","synopsis":["man 7 users-manual-05-home-identity-and-vault","User manual chapter (users-manual/05-home-identity-and-vault.md)"],"description":"CHAPTER 5 — HOME, IDENTITY, AND VAULT\n\nPrerequisites: Shell, PATH, and scripts <04-shell-path-and-scripts.md>. Time to read: about seven minutes.\n\n> Important\n> Identity and vault material are security-sensitive. Before you rely on them for anything serious, read the vault threat model <../docs/security/vault-threat-model.md> (what the design promises and what it does not).\n\nON THIS PAGE\n\n- Guest session <#guest-session>\n- Logging in <#logging-in>\n- Vault snapshots <#vault-snapshots>\n- HDMS and extra drives <#hdms-and-extra-drives>\n- Where to read the full story <#where-to-read-the-full-story>\n- Where state lives on disk (mental model) <#where-state-lives-on-disk-mental-model>\n- Passphrases, backups, and data loss <#passphrases-backups-and-data-loss>\n\nGUEST SESSION\n\nOn a fresh boot the session is guest: USER and HOME point at guest under /home/guest, and there is no Ed25519 identity material in the environment. You can still read the system image and write guest-scoped areas on the personal Hyperdrive.\n\nLogical $HOME, /tmp, and /var/log map into stable prefixes on the personal drive so guest data and unlocked-user data stay separated. Guest sessions cannot read or write sealed paths /.bare/account, /.bare/vault/, or vault-rotation-audit files (and ls /.bare hides account / vault) unless BARE_OS_GUEST_BARE_READ_ALL=1 (testing only). logout → login clears warm caches and shell job state so a previous users session does not leak into guest** or the next login.\n\nLOGGING IN\n\nlogin prompts for a passphrase. If an account already exists at /.bare/account, the booter decrypts it and derives session keys. login --new creates a new Ed25519 keypair and writes a versioned on-disk blob.\n\nAfter a successful login, HOME moves under /home/<public-key-prefix>, BARE_OS_PUBLIC_KEY is set, and optional HDMS features become available for managing extra drives. The booter also ensures ~/.www/ exists with a default index.html when missing (personal static site root). The initd unit bare-os-www serves that tree over HTTP on 127.0.0.1:8088 by default; see Handbook — Chapter 4 <../handbook/04-the-booter-runtime.md#bare-os-www-static-http-for-www>. logout clears sensitive state and returns you to guest. logout --save can combine logout with vault snapshotting (see below).\n\nCryptographic details are implementation-specific; this manual stays at the behavior level. For prose-level crypto and flow diagrams, read Handbook — Chapter 5 <../handbook/05-identity-vault-and-hdms.md>.\n\nThreat-model hint: /proc/bare_os/security_posture.json lists vaultCryptoPrimitives (algorithms the booter uses around vault-era material) and bareCryptoReportedVersion (resolved bare-crypto version). Compare these to your deployment policy when auditing upgrades — they contain no keys or ciphertext.\n\nLogout paths (see handbook ch.5 for crypto detail):\n\n> Warning\n> If you login --new and forget the passphrase, ciphertext under /.bare/ is not recoverable. Plan backups before you depend on vault or HDMS workflows.\n\nWHERE STATE LIVES ON DISK (MENTAL MODEL)\n\nThink in two layers:\n\n1. Hyperdrive blocks replicated through Corestore — durable bytes identified by keys and discovery topics, not by a traditional host path.\n2. VFS paths — what you see in the shell (/home/guest, /.bare/account, /mnt/...) as the booter merges drives and synthetic mounts.\n\n/.bare/ on the VFS resolves to the personal Hyperdrive (identity, vault blobs, HDMS registry snapshots), not the read-only system image. For very large trees, operators may set BARE_OS_PERSONAL_VAULT_INDEX_CACHE_MS so ls / readdir**-heavy tools can reuse directory listings for a short TTL (default: uncached, always consistent with replication). See the environment appendix <../docs/reference/environment-and-posix-appendix.md>.\n\nGuests can write under guest HOME and read shared system content. Unlocked users get a different HOME subtree and can manipulate HDMS registry entries that survive across sessions. If you are debugging “where did my file go?”, check both pwd and whether you logged out (which clears in-memory keys even when ciphertext remains on disk).\n\nPASSPHRASES, BACKUPS, AND DATA LOSS\n\nlogin --new creates keys derived from your passphrase. If you forget the passphrase, ciphertext under /.bare/ is not recoverable by design. If you lose the personal drive replication (new machine, wiped Corestore) without exporting keys or vault snapshots, you also lose access. For operational guidance beyond this overview, read Developer guide — Security and trust <../developer-guide/09-security-and-trust.md> and the handbooks identity chapter.\n\nVAULT SNAPSHOTS\n\nsavevault and logout --save can store encrypted snapshots of selected paths under /.bare/vault/. Vault security depends on your passphrase strength, who can replicate your personal drive, and your backup practices. Treat vault blobs as sensitive ciphertext, not as a substitute for off-machine backups if you care about durability. The guest uses AEAD envelopes so single-bit tampering in ciphertext should fail verification on read (see identity-account.js openBytes). Parameter choices (KDF, AEAD, nonces) are summarized for reviewers in Vault threat model — crypto parameters <../docs/reference/vault-threat-model.md>.\n\nHDMS AND EXTRA DRIVES\n\nHDMS (Hyperdrive management) lets an unlocked user register and mount additional Hyperdrives, exposed under /mnt/<label>. Guests may see mounts that are already open but cannot mutate the registry until login succeeds.\n\nPairing hints for operators can appear under /proc/bare_os/hdms_hints.json when the host sets BARE_OS_AUTOPASS_INVITE_URL. The guest does not open arbitrary network URLs by itself; automation on the host consumes those hints.\n\nFor subcommands and examples, use man hdms after seeding an image with a current man.json build.\n\nWHERE TO READ THE FULL STORY\n\n- Handbook — Chapter 5: Identity, vault, and HDMS <../handbook/05-identity-vault-and-hdms.md>\n- docs/reference — Booter package <../docs/reference/package-bare-os-booter.md> (identity-related sections)\n- Developer guide — Security and trust <../developer-guide/09-security-and-trust.md>\n- Glossary — guest, HDMS, personal drive <../docs/glossary.md>\n\n_Previous: Chapter 4 <04-shell-path-and-scripts.md>_ · _Next: Chapter 6 — Help, man, and documentation map <06-help-man-and-documentation-map.md>_","descriptionMode":"preserve","options":[],"keywords":["user","manual","tutorial","howto","bare-os","guide","users","05","home","identity","and","vault","chapter"],"seeAlso":[{"name":"users-manual-06-help-man-and-documentation-map","section":7},{"name":"users-manual-04-shell-path-and-scripts","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from users-manual/05-home-identity-and-vault.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"usersmanual"},{"name":"users-manual-06-help-man-and-documentation-map","section":7,"title":"Chapter 6 — Help, man, and the documentation map","synopsis":["man 7 users-manual-06-help-man-and-documentation-map","User manual chapter (users-manual/06-help-man-and-documentation-map.md)"],"description":"CHAPTER 6 — HELP, MAN, AND THE DOCUMENTATION MAP\n\nPrerequisites: Home, identity, and vault <05-home-identity-and-vault.md>. Time to read: about five minutes.\n\nON THIS PAGE\n\n- man inside the image <#man-inside-the-image>\n- agent and chat <#agent-and-chat>\n- help and discoverability <#help-and-discoverability>\n- Documentation trees and hubs <#documentation-trees-and-hubs>\n- Where JSON and schemas live <#where-json-and-schemas-live>\n- Regenerating man.json <#regenerating-manjson>\n- Searching topics (man -k) <#searching-topics-man--k>\n\nMAN INSIDE THE IMAGE\n\nThe stock image ships man(1) backed by a merged JSON database built from coreutils pages and handbook-derived material. After npm run build -w bare-os-coreutils and a fresh seed, you can run man ls, man sh, and many other topics the same way you would on a traditional Unix-like system, with the understanding that coverage follows what Bare OS packages—not every host man page exists here.\n\nFor how pages are ingested and how help differs from man, read Handbook — Chapter 10: Manual pages and online help <../handbook/10-manpages-and-online-help.md>.\n\nHandbook as a man page: the merged database includes long-form narrative topics. Try man handbook (section 7) for the full handbook text inside the guest when your image build includes it.\n\nAGENT AND CHAT\n\nman agent documents the OpenAI-compatible HTTPS assistant (tools including web_fetch, ~/.agent/ config). man chat documents swarm / Protomux chat (not the same program). Both live in the same merged man database as other /bin topics; a short operator overview is in Chapter 4 — Shell, PATH, and scripts <04-shell-path-and-scripts.md>.\n\nHELP AND DISCOVERABILITY\n\nSome commands expose a help subcommand or usage text aimed at interactive discovery. Use help when you want a short reminder; use man when you want structured sections and cross-references that match the JSON database.\n\nDOCUMENTATION TREES AND HUBS\n\nThese areas are intentional; each serves a different job:\n\n| Tree | Role |\n| User manual (README <README.md>) | Run and use Bare OS without reading the whole architecture first. |\n| Handbook (../handbook/README.md <../handbook/README.md>) | Narrative design, protocol, runtime, identity, POSIX surface, operations, research. |\n| Developer guide (../developer-guide/README.md <../developer-guide/README.md>) | Scripts, ctx, start(ctx), coreutils, testing, Pear, telemetry. |\n| Reference (../docs/reference/README.md <../docs/reference/README.md>) | Packages, env appendix, data flow, compatibility matrix, capabilities, vault threat model <../docs/reference/vault-threat-model.md>. |\n\nIf you are lost, start at the documentation home <../docs/README.md>, which lists every tree plus a topic index (which doc is canonical for env vars, ctx, protocol, POSIX, and so on), glossary <../docs/glossary.md>, FAQ <../docs/faq.md>, troubleshooting router <../docs/troubleshooting.md>, and contributing to docs <../docs/CONTRIBUTING-DOCS.md>.\n\nWHERE JSON AND SCHEMAS LIVE\n\nTelemetry, boot policy, and related artifacts are documented next to JSON Schemas under docs/schemas/. You usually touch these when integrating observability or strict boot checks, not for everyday shell use. Pointers appear in the root README <../README.md> and in Kernel extensions <../docs/reference/kernel-extensions.md>.\n\nREGENERATING MAN.JSON\n\nThe on-disk manual lives at kernel/share/man/man.json after npm run build -w bare-os-coreutils. If man <topic> is missing or stale, rebuild coreutils on the host, re-run the seeder so the system drive picks up the new JSON, then boot again. CIs verify-man-coverage ensures every /bin command has a matching page—local edits to packages/bare-os-coreutils should keep that invariant.\n\nSEARCHING TOPICS (MAN -K)\n\nman -k <word> (same as --apropos) searches keywords compiled into man.json. It is the fastest way to discover which utilities document a feature (for example man -k color). Results depend on the keyword index produced during the coreutils build; if nothing matches, fall back to ls /bin and man <cmd> directly.\n\n_Previous: Chapter 5 <05-home-identity-and-vault.md>_ · _Next: Chapter 7 — Troubleshooting and operations <07-troubleshooting-and-operations.md>_","descriptionMode":"preserve","options":[],"keywords":["user","manual","tutorial","howto","bare-os","guide","users","06","help","man","and","documentation","map","chapter","the"],"seeAlso":[{"name":"users-manual-07-troubleshooting-and-operations","section":7},{"name":"users-manual-05-home-identity-and-vault","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from users-manual/06-help-man-and-documentation-map.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"usersmanual"},{"name":"users-manual-07-troubleshooting-and-operations","section":7,"title":"Chapter 7 — Troubleshooting and operations","synopsis":["man 7 users-manual-07-troubleshooting-and-operations","User manual chapter (users-manual/07-troubleshooting-and-operations.md)"],"description":"CHAPTER 7 — TROUBLESHOOTING AND OPERATIONS\n\nPrerequisites: earlier chapters of this manual. Time to read: about eight minutes.\n\nON THIS PAGE\n\n- Boot and swarm issues <#boot-and-swarm-issues>\n- Missing binaries or stale image <#missing-binaries-or-stale-image>\n- Environment variables <#environment-variables>\n- SSH server (bare-openssh) <#ssh-server-bare-openssh>\n- Personal static HTTP (bare-os-www) <#personal-static-http-bare-os-www>\n- Themes and terminals <#themes-and-terminals>\n- CI and contributing <#ci-and-contributing>\n- Pretest and verifier failures <#pretest-and-verifier-failures>\n- Pear and module resolution <#pear-and-module-resolution>\n- Documentation link checks <#documentation-link-checks>\n\nBOOT AND SWARM ISSUES\n\nSymptom: booter exits on timeout. The booter could not replicate the system drive in time. Typical causes:\n\n- the seeder is not running or not reachable on the network;\n- bootstrap nodes are wrong or blocked—review HYPERSWARM_BOOTSTRAP and firewall rules;\n- you are using offline LKG mode without a valid local system drive (advanced; see reference docs).\n\nStart the seeder first, wait until it is advertising, then start the booter. For protocol-level failure modes, read Handbook — Chapter 3 <../handbook/03-protocol-and-disk.md>.\n\nSymptom: “no peers” or empty replication. Confirm both processes use compatible bootstrap configuration (HYPERSWARM_BOOTSTRAP, corporate VPNs, and local firewalls frequently block DHT traffic). Try a clean Corestore path only after you are sure networking is not the root cause, or you may chase ghosts while the real issue was connectivity.\n\nSymptom: boot reaches shell but /proc looks empty or wrong. Some /proc nodes require a minimum ctx API or capability words. Compare /proc/bare_os_features (when present) with the compatibility matrix <../docs/reference/compatibility-matrix.md> and the versions printed by bare_os.capabilities during seeding.\n\n> Tip\n> For a symptom-first index into these docs, open docs/troubleshooting.md <../docs/troubleshooting.md>.\n\nMISSING BINARIES OR STALE IMAGE\n\nSymptom: a /bin tool is missing or obviously old under Pear. The bare-os-coreutils workspace must be built before staging or seeding. From the repo root:\n\n npm run build -w bare-os-coreutils\n\nIf you changed kernel/ but the seeder still ships an old tree, CIs verify-kernel-seeder-parity error means packages/bare-os-seeder/kernel/ is out of sync with kernel/—copy or sync per maintainer workflow before release.\n\nSymptom: curl or wget prints “unavailable in this session” and exits 127. The drive-resident scripts require ctx.bareOsRunCurlCli / ctx.bareOsRunWgetCli, which every stock bare-os-booter provides. Upgrade the booter package and align ctx API versions (compatibility matrix <../docs/reference/compatibility-matrix.md>). Excluding curl or wget from BARE_OS_DELEGATE_ALLOW only skips the host delegate path; fetch still runs through those ctx hooks when the booter is current.\n\nENVIRONMENT VARIABLES\n\nThere are many *BARE_OS_** toggles. Host-side variables are often copied into the guest session so kernels and scripts see a consistent environment.\n\nFor a complete list and POSIX-related notes, use Environment variables and POSIX appendix <../docs/reference/environment-and-posix-appendix.md>. For a shorter operator cheat sheet grouped by component, see Handbook — Chapter 7 <../handbook/07-operations-and-development.md#environment-variables-cheat-sheet>. For throughput / RAMbudget tuning (pipeline absolute caps, IPC channel and POSIX MQ defaults, rlimits.json NOFILE hint, telemetry aliases), see Developer guide — Kernel extensions and Pear workflows <../developer-guide/11-kernel-pear-cookbook.md> (§ ~1GiB host RAM).\n\nWhen debugging, ask whether the variable was set on the host before launching the booter, because the guest only sees what the booter forwards into shellEnv. The canonical allowlist of copied keys is the loop over host env in packages/bare-os-booter/index.js <../packages/bare-os-booter/index.js> (see also Environment variables and POSIX appendix <../docs/reference/environment-and-posix-appendix.md#14-environment-variables-complete-list>).\n\nSSH SERVER (BARE-OPENSSH)\n\nThe stock booter starts several initd units after the console exists, including kernel-logger, bare-os-www (loopback HTTP for ~/.www, default port 8088), bare-holesail (managed tunnels; starts after bare-os-www so stock *bare-www- entries can reach the HTTP port), bare-cron, bare-openssh, and bare-os-chat when enabled. Unit bare-openssh runs an SSH-2 server inside the booter process (not a forked host sshd). /bin/sshd in the image calls ctx.bareOsRunSshdCli; configuration is /etc/ssh/sshd_config on the system drive, while host keys are stored on the personal drive (default under ~/.config/bare-os/ssh/host/), so a read-only /etc** is fine.\n\n- Localhost default — Stock ListenAddress is 127.0.0.1. To listen on all interfaces, set host BARE_OS_SSH_BIND_ALL=1 (this remaps 127.0.0.1 to 0.0.0.0 when that is the configured address) or edit sshd_config on your image.\n- Port override — Host BARE_OS_SSH_LISTEN_PORT overrides Port; use 0 for an ephemeral port (automation/tests).\n- Identity — Password login uses the same account as login and, on success, unlocks the shared session identity (not isolated per SSH connection). Prefer public-key auth for automation; place OpenSSH-format keys in ~/.ssh/authorized_keys (or the path from AuthorizedKeysFile).\n- Status — systemctl status bare-openssh or bare-openssh.service; /proc/bare_os/openssh.json for a JSON snapshot; logs under /var/log/bare-os/openssh.log on failures.\n- Disable — Add bare-openssh to ~/.config/bare-os/initd/disabled.txt for the next session.\n\nSee man sshd and man sshd_config in-guest after building bare-os-openssh.\n\nPERSONAL STATIC HTTP (BARE-OS-WWW)\n\nInitd bare-os-www serves GET/HEAD from ~/.www on 127.0.0.1:8088 by default ( BARE_OS_WWW_PORT / BARE_OS_WWW_HOST override bind and port). Access and path rules: Handbook — Chapter 4 <../handbook/04-the-booter-runtime.md#bare-os-www-static-http-for-www>.\n\n- Logs — /var/log/bare-os/www.log (same /var/log/bare-os tree as other initd services).\n- Quick check — After login, curl -I http://127.0.0.1:8088/ should show a non-zero Content-Length for / when ~/.www/index.html exists.\n- Disable the unit — BARE_OS_WWW_INITD=0 or add bare-os-www to ~/.config/bare-os/initd/disabled.txt for the next session.\n- Holesail row — With stock managed bare-holesail, bare-www-<port> is merged into ~/.holesail/state.json (default BARE_OS_HOLESAIL_STATE) after the HTTP listener is up. Each server row persists a seed (stable ctor secret) and key (shareable hs://… after ready()). Stock SSH uses bare-ssh-<port> the same way. Set BARE_OS_WWW_HOLESAIL=0 / BARE_OS_SSH_HOLESAIL=0 to skip the corresponding auto-merge. See Handbook ch.4 — bare-holesail <../handbook/04-the-booter-runtime.md>.\n\nTHEMES AND TERMINALS\n\nSymptom: colors or ls --color look wrong. Themes interact with LS_COLORS, ~/.barerc, and the truecolor versus 256-color capability of your terminal emulator. Read the themes documentation and handbook notes rather than chasing random color codes:\n\n- docs/themes/README.md <../docs/themes/README.md>\n- Handbook — Chapter 7: Themes, LS_COLORS, and real terminals <../handbook/07-operations-and-development.md#themes-ls_colors-and-real-terminals>\n\nCI AND CONTRIBUTING\n\nRoot npm test runs workspace tests after pretest, which builds artifacts and runs repository verifiers (kernel or seeder parity, ctx API alignment, capability contracts, documentation links, man coverage, compatibility matrix strings, kernel program governance + proc schema + roadmap table checks, Pear import rules, bare manifest smoke).\n\nIf gen:bare-catalog:check fails, regenerate the catalog with npm run gen:bare-catalog and commit the JSON. If verify-doc-links fails, fix broken relative .md links in the walked trees.\n\nFor a full maintainer-oriented walkthrough, Handbook — Chapter 7 <../handbook/07-operations-and-development.md> remains the authoritative operations chapter.\n\nPRETEST AND VERIFIER FAILURES\n\nverify-kernel-seeder-parity — kernel/ and packages/bare-os-seeder/kernel/ must match byte-for-byte. Copy the canonical tree into the package (maintainer scripts or cp -R) after editing kernel/, then re-run pretest.\n\n*verify-kernel-capabilities-word- — The feature roadmap <../docs/reference/feature-roadmap.md> keeps ## Capability word 6…11 checklists as pipe tables with fixed row counts. Do not shrink those tables without updating the matching script under scripts/**.\n\nverify-ctx-api-feature-bits / verify-ctx-dts — The ctx API semver and kernel capability documentation must agree with packages/bare-os-protocol and packages/bare-os-booter. Start from the compatibility matrix when bumping versions.\n\nverify-man-coverage — Every *kernel/bin/ file must include the BARE_OS_BIN_API pragma and have a man** page. Regenerate coreutils outputs after adding a command.\n\nverify-compat-matrix — Strings in compatibility-matrix.md <../docs/reference/compatibility-matrix.md> must mention current versions; the script is substring-based, not structural.\n\nverify-pear-no-static-node-import — Pear bundles must not embed forbidden static node: imports; follow patterns in the booters Pear entry code.\n\nPEAR AND MODULE RESOLUTION\n\nIf pear run fails with missing modules but npm ci at the repo root succeeded, run the npm run os:seeder / os:booter scripts from the root so scripts/ensure-pear-node-modules.mjs mirrors hoisted dependencies into the package node_modules Pear expects. Running pear run manually from a clean package directory without that step is a common source of Cannot find package errors.\n\nBACKUP, SNAPSHOTS, AND RESTORE DRILLS\n\nTreat the personal Hyperdrive as the primary backup surface: copy important files under $HOME and /.bare/ regularly. For disaster-recovery drills, export a known-good Corestore directory for the personal key after savevault, and keep a separate copy of the system drive key or MBR bytes documented in Handbook — Chapter 3 <../handbook/03-protocol-and-disk.md>. ctx.bareOsExportPersonalSnapshot (when exposed) mirrors the operator snapshot path—see the booter reference for flags and limits.\n\nDOCUMENTATION LINK CHECKS\n\nverify-doc-links walks docs/ (including docs/PEAR-RUN.md), handbook/, developer-guide/, scripts/, users-manual/, packages/, kernel/, and root README.md, DOCUMENTATION.md. It skips packages/bare-os-seeder/kernel/ because that tree is identical to kernel/*; fix links in kernel/ only. Use relative* something.md targets in links so CI can resolve them from each files directory.\n\n_Previous: Chapter 6 <06-help-man-and-documentation-map.md>_ · _Next: Chapter 8 — Further reading <08-further-reading.md>_","descriptionMode":"preserve","options":[],"keywords":["user","manual","tutorial","howto","bare-os","guide","users","07","troubleshooting","and","operations","chapter"],"seeAlso":[{"name":"users-manual-08-further-reading","section":7},{"name":"users-manual-06-help-man-and-documentation-map","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from users-manual/07-troubleshooting-and-operations.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"usersmanual"},{"name":"users-manual-08-further-reading","section":7,"title":"Chapter 8 — Further reading","synopsis":["man 7 users-manual-08-further-reading","User manual chapter (users-manual/08-further-reading.md)"],"description":"CHAPTER 8 — FURTHER READING\n\nPurpose: curated entry points after the user manual. Time to read: about four minutes.\n\nON THIS PAGE\n\n- Documentation hubs <#documentation-hubs>\n- Architecture and protocol <#architecture-and-protocol>\n- Booter runtime and kernel <#booter-runtime-and-kernel>\n- Extending the system <#extending-the-system>\n- Reference and contracts <#reference-and-contracts>\n- Handbook chapter index <#handbook-chapter-index>\n- Developer guide beyond scripting <#developer-guide-beyond-scripting>\n\nDOCUMENTATION HUBS\n\n- docs/README.md <../docs/README.md> — full map of all trees, glossary, FAQ, troubleshooting, contributing to docs.\n- docs/glossary.md <../docs/glossary.md> — canonical terminology.\n- docs/faq.md <../docs/faq.md> — cross-cutting questions.\n\nARCHITECTURE AND PROTOCOL\n\n- Handbook — Preface <../handbook/00-preface.md> — thesis, security limits, contributor paths.\n- Handbook — Chapter 2: Blueprints <../handbook/02-blueprints.md> — layered architecture and trust.\n- Handbook — Chapter 3: Protocol and disk <../handbook/03-protocol-and-disk.md> — MBR, swarm, Protomux, failure modes.\n\nBOOTER RUNTIME AND KERNEL\n\n- Handbook — Chapter 4: The booter runtime <../handbook/04-the-booter-runtime.md> — VFS, shell, initd, cron, bridges.\n- Handbook — Chapter 6: Kernel and binaries <../handbook/06-kernel-and-binaries.md> — /boot/init.js, coreutils pipeline.\n- Developer guide — Kernel: /boot/init.js <../developer-guide/03-kernel-boot-init.md> — start(ctx) and the readline loop.\n\nEXTENDING THE SYSTEM\n\n- Developer guide — Extending /bin <../developer-guide/06-extending-bin-coreutils.md>\n- Developer guide — Kernel + Pear cookbook <../developer-guide/11-kernel-pear-cookbook.md>\n- Developer guide — Bare modules and Pear ecosystem <../developer-guide/12-bare-modules-and-pear-ecosystem.md>\n\nREFERENCE AND CONTRACTS\n\n- docs/reference/README.md <../docs/reference/README.md> — index of all reference topics.\n- Compatibility matrix <../docs/reference/compatibility-matrix.md> — ctx API, feature-bits doc, telemetry schema versions.\n- Naming alias matrix <../docs/reference/naming-alias-matrix.md> — legacy ↔ canonical boot hooks and policy keys.\n- Naming migrations <../developer-guide/naming-migrations.md> — deprecation windows for renamed symbols.\n- Capability words <../docs/reference/capability-words.md> — wire layout for kernelCapabilityWords.\n- Feature roadmap <../docs/reference/feature-roadmap.md> — kernel program batches, capability-word checklists, integration status tables.\n- Environment and POSIX appendix <../docs/reference/environment-and-posix-appendix.md> — exhaustive *BARE_OS_** list and POSIX notes.\n- packages/bare-os-booter/CHANGELOG.md <../packages/bare-os-booter/CHANGELOG.md> — bareOsCtxApiVersion history.\n\nHANDBOOK CHAPTER INDEX\n\nRead in order for the full narrative, or jump by topic:\n\n- Preface <../handbook/00-preface.md>\n- 1 — Introduction <../handbook/01-introduction.md>\n- 2 — Blueprints <../handbook/02-blueprints.md>\n- 3 — Protocol and disk <../handbook/03-protocol-and-disk.md>\n- 4 — The booter runtime <../handbook/04-the-booter-runtime.md>\n- 5 — Identity, vault, and HDMS <../handbook/05-identity-vault-and-hdms.md>\n- 6 — Kernel and binaries <../handbook/06-kernel-and-binaries.md>\n- 7 — Operations and development <../handbook/07-operations-and-development.md>\n- 8 — Git on Bare OS <../handbook/08-git-on-bare-os.md>\n- 9 — POSIX utilities, shell, and VFS <../handbook/09-posix-utilities-shell-and-vfs.md>\n- 10 — Man pages and online help <../handbook/10-manpages-and-online-help.md>\n- 11 — Kernel program and research <../handbook/11-kernel-program-and-research.md>\n\nDEVELOPER GUIDE BEYOND SCRIPTING\n\n- Modules and imports <../developer-guide/05-modules-and-imports.md>\n- Extending /bin <../developer-guide/06-extending-bin-coreutils.md>\n- Apps beyond the shell <../developer-guide/07-apps-beyond-the-shell.md>\n- Testing and debugging <../developer-guide/08-testing-and-debugging.md>\n- Security and trust <../developer-guide/09-security-and-trust.md>\n- Glossary and FAQ <../developer-guide/10-glossary-and-faq.md>\n- Kernel + Pear cookbook <../developer-guide/11-kernel-pear-cookbook.md>\n- Bare modules and Pear ecosystem <../developer-guide/12-bare-modules-and-pear-ecosystem.md>\n- Privacy, telemetry, and PII <../developer-guide/13-privacy-telemetry-pii.md>\n- ADR 001 — Kernel feature bit governance <../developer-guide/adr/001-kernel-feature-bits-governance.md>\n- Bare boot / kernel phase alignment <../developer-guide/bare-boot-kernel-phase-alignment.md>\n- Node → Bare module map <../developer-guide/node-to-bare-modules.md>\n\n_Previous: Chapter 7 <07-troubleshooting-and-operations.md>_ · _Back to user manual home <README.md>_","descriptionMode":"preserve","options":[],"keywords":["user","manual","tutorial","howto","bare-os","guide","users","08","further","reading","chapter"],"seeAlso":[{"name":"users-manual-07-troubleshooting-and-operations","section":7},{"name":"man","section":1},{"name":"bare-os-handbook","section":7}],"bareOsNotes":"Generated at build time from users-manual/08-further-reading.md. Mermaid diagrams omitted in terminal; see repo Markdown for figures.","listCategory":"usersmanual"}],"index":{"agent":0,"appctl":1,"appstore":2,"arch":3,"awk":4,"baretop":5,"btop":6,"base32":7,"base64":8,"basename":9,"baresay":10,"basenc":11,"cat":12,"chat":13,"chgrp":14,"chmod":15,"chown":16,"cksum":17,"clear":18,"comm":19,"cmp":20,"cp":21,"corestorectl":22,"crontab":23,"ctxbaredoctor":24,"curl":25,"cut":26,"date":27,"dd":28,"df":29,"diff":30,"dir":31,"dirname":32,"dircolors":33,"dhtctl":34,"dhtscan":35,"dhttop":36,"discord-bot":37,"du":38,"edit":39,"echo":40,"env":41,"exit":42,"expand":43,"expr":44,"factor":45,"false":46,"find":47,"fmt":48,"fold":49,"getconf":50,"getfacl":51,"git-pear":52,"grep":53,"groups":54,"head":55,"hdms":56,"help":57,"holesail":58,"holepunch-view":59,"hostid":60,"hostname":61,"hypershell-board":62,"iconv":63,"id":64,"install":65,"irc":66,"join":67,"kill":68,"kernel-boot-diff":69,"kernel-doctor":70,"kernel-explain":71,"kernel-fsck":72,"kernel-home-snapshot":73,"kernel-manifest-validate":74,"kernel-preflight":75,"kernel-triage":76,"jq":77,"ln":78,"link":79,"logger":80,"login":81,"logout":82,"logname":83,"locale":84,"ls":85,"man":86,"md5sum":87,"meshdrop":88,"mkdir":89,"mkfifo":90,"mktemp":91,"mount":92,"mv":93,"nano":94,"nice":95,"nl":96,"nohup":97,"nproc":98,"numfmt":99,"od":100,"openssl":101,"oidc-publish":102,"paste":103,"patch":104,"pear":105,"pathchk":106,"pathcap-verify":107,"p2ping":108,"p2ptrace":109,"peerctl":110,"peerdiscover":111,"peernote":112,"pr":113,"printenv":114,"pkg-swarm-index":115,"printf":116,"procstat":117,"ps":118,"pwd":119,"readlink":120,"realpath":121,"rev":122,"rm":123,"rmdir":124,"routeview":125,"savevault":126,"say":127,"sed":128,"seq":129,"setfacl":130,"sha1sum":131,"sha224sum":132,"sha256sum":133,"sha384sum":134,"sha512sum":135,"sh":136,"shuf":137,"sleep":138,"sort":139,"split":140,"ssh":141,"ssh-keygen":142,"sshd":143,"stat":144,"swarmtop":145,"swarmdoctor":146,"swarmmap":147,"sum":148,"summon":149,"sync":150,"tar":151,"tac":152,"tail":153,"tee":154,"telnet":155,"test":156,"theme":157,"time":158,"timeout":159,"touch":160,"tr":161,"truncate":162,"true":163,"trustctl":164,"tsort":165,"tty":166,"tui":167,"taskmesh":168,"ulimit":169,"uname":170,"uniq":171,"unlink":172,"umount":173,"unexpand":174,"uptime":175,"users":176,"vdir":177,"wc":178,"wget":179,"which":180,"who":181,"whoami":182,"whois":183,"xattr":184,"xargs":185,"yes":186,"bare-cron":187,"bare-os-ctx-bare":188,"bare-os-shell":189,"sh-builtins":189,"sshd_config":190,"systemctl":191,"bare-initctl":191,"git":192,"bare-os-handbook":193,"handbook":193,"bare-os-handbook-index":193,"handbook-00-preface":194,"handbook-01-introduction":195,"handbook-02-blueprints":196,"handbook-03-protocol-and-disk":197,"handbook-04-the-booter-runtime":198,"handbook-05-identity-vault-and-hdms":199,"handbook-06-kernel-and-binaries":200,"handbook-07-operations-and-development":201,"handbook-08-git-on-bare-os":202,"handbook-09-posix-utilities-shell-and-vfs":203,"handbook-10-manpages-and-online-help":204,"handbook-11-kernel-program-and-research":205,"handbook-12-p2p-stack-and-posix-boundaries":206,"bare-os-developer-guide":207,"developer-guide":207,"devguide":207,"devguide-01-two-runtimes-host-vs-image":208,"devguide-02-the-context-object":209,"devguide-03-kernel-boot-init":210,"devguide-04-user-scripts-and-path":211,"devguide-05-modules-and-imports":212,"devguide-06-extending-bin-coreutils":213,"devguide-07-apps-beyond-the-shell":214,"devguide-08-testing-and-debugging":215,"devguide-09-security-and-trust":216,"devguide-10-glossary-and-faq":217,"devguide-11-kernel-pear-cookbook":218,"devguide-12-bare-modules-and-pear-ecosystem":219,"devguide-13-holepunch-contributor-track":220,"devguide-13-privacy-telemetry-pii":221,"devguide-14-how-to-add-seed-rpc":222,"devguide-15-how-to-add-proc-node":223,"devguide-16-how-to-add-bin-utility":224,"devguide-17-how-to-add-shell-builtin":225,"devguide-18-how-to-add-shell-grammar-feature":226,"devguide-19-how-to-fish-keybinding-completer":227,"devguide-20-tui-and-sdk":228,"devguide-bare-boot-kernel-phase-alignment":229,"devguide-kernel-explain-and-doctor-conventions":230,"devguide-kernel-program":231,"devguide-naming-conventions":232,"devguide-naming-migrations":233,"devguide-node-to-bare-modules":234,"docs-adr-0001-kernel-subsystem-boundaries":235,"docs-adr-0001-two-drive-p2p-model":236,"docs-adr-0002-deny-default-rpc-hrpc":237,"docs-adr-0003-posix-facade-no-fork":238,"docs-adr-0004-extension-trust-graph":239,"docs-adr-0005-observability-boundaries":240,"docs-adr-readme":241,"docs-architecture-adr-hyperbee-guest-index":242,"docs-architecture-kernel_contract":243,"docs-architecture-kernel-subsystems":244,"docs-architecture-posix_declared_profile":245,"docs-audit-ctx-bare-audit-notes":246,"docs-audit-holepunch-lockfile-drift-dashboard":247,"docs-audit-placeholder_baseline":248,"docs-binary-release":249,"docs-concepts-boot-and-init-timeline":250,"docs-concepts-identity-and-vault":251,"docs-concepts-p2p-swarm-and-protomux":252,"docs-concepts-posix-stance":253,"docs-concepts-readme":254,"docs-concepts-two-drive-model":255,"docs-contributing-docs":256,"docs-data-readme":257,"docs-deployment-ota_and_bundles":258,"docs-design-ctx-pear-surface-and-bare-audit-plan":259,"docs-design-multi-account-personal-subvolumes":260,"docs-design-p2p-app-store":261,"docs-faq":262,"docs-get-started":263,"docs-glossary":264,"docs-guides-guest-pear-and-appstore-workflow":265,"docs-images-readme":266,"docs-operations-reliability-playbook":267,"docs-pear-run":268,"bare-os-docs":269,"docs":269,"documentation":269,"bare-os-documentation":269,"docs-reference-agent-os-automation-next-slices":270,"docs-reference-architecture-data-flow":271,"docs-reference-blind-peer-hint-recipe":272,"docs-reference-capability-words":273,"docs-reference-compatibility-matrix":274,"docs-reference-conformance-dashboard":275,"docs-reference-conformance-matrix":276,"docs-reference-ctx-api-versioning":277,"docs-reference-ctx-tui":278,"docs-reference-environment-and-posix-appendix":279,"docs-reference-feature-roadmap":280,"docs-reference-holepunch-stack-alignment-implementation":281,"docs-reference-http-curl-and-wget":282,"docs-reference-hyperswarm-protomux-teardown":283,"docs-reference-irc-client":284,"docs-reference-kernel-capabilities-index":285,"docs-reference-kernel-extensions-capability-specs":286,"docs-reference-kernel-extensions-generated-toc":287,"docs-reference-kernel-extensions":288,"docs-reference-kernel-image":289,"docs-reference-kernel-security-subsystems":290,"docs-reference-naming-alias-matrix":291,"docs-reference-node-vs-bare-host-matrix":292,"docs-reference-observability-contracts":293,"docs-reference-ota-channels":294,"docs-reference-out-of-scope-and-tooling":295,"docs-reference-package-bare-os-booter":296,"docs-reference-package-bare-os-coreutils-and-ci":297,"docs-reference-package-bare-os-protocol":298,"docs-reference-package-bare-os-seeder":299,"docs-reference-posix-dashboard":300,"docs-reference-posix-issue7-traceability":301,"docs-reference-posix-syscall-facade-map":302,"docs-reference-protomux-channel-catalog":303,"docs-reference-readme":304,"docs-reference-repo-layout-and-root":305,"docs-reference-shell-completion-and-repl-editor":306,"docs-reference-shell-grammar":307,"docs-reference-shell-troubleshooting":308,"docs-reference-shell-unsupported-behavior":309,"docs-reference-summon":310,"docs-reference-syscall-socket-contract":311,"docs-reference-vault-threat-model":312,"docs-reference-vfs-path-classes":313,"docs-release-checklist":314,"docs-schemas-readme":315,"docs-security-blind-relay-p2p-hardening":316,"docs-security-boot-trust-model":317,"docs-security-vault-multisig-continuity":318,"docs-security-vault-threat-model":319,"docs-sitemap":320,"docs-themes-readme":321,"docs-troubleshooting":322,"bare-os-users-manual":323,"users-manual":323,"user-manual":323,"users-manual-01-what-this-is":324,"users-manual-02-install-and-repository-layout":325,"users-manual-03-running-seeder-and-booter":326,"users-manual-04-shell-path-and-scripts":327,"users-manual-05-home-identity-and-vault":328,"users-manual-06-help-man-and-documentation-map":329,"users-manual-07-troubleshooting-and-operations":330,"users-manual-08-further-reading":331},"apropos":[{"kw":"agent","pageRef":0},{"kw":"bare-os","pageRef":0},{"kw":"coreutils","pageRef":0},{"kw":"appctl","pageRef":1},{"kw":"bare-os","pageRef":1},{"kw":"coreutils","pageRef":1},{"kw":"appstore","pageRef":2},{"kw":"bare-os","pageRef":2},{"kw":"coreutils","pageRef":2},{"kw":"pear","pageRef":2},{"kw":"p2p","pageRef":2},{"kw":"hdms","pageRef":2},{"kw":"arch","pageRef":3},{"kw":"bare-os","pageRef":3},{"kw":"coreutils","pageRef":3},{"kw":"awk","pageRef":4},{"kw":"pattern","pageRef":4},{"kw":"field","pageRef":4},{"kw":"script","pageRef":4},{"kw":"scanning","pageRef":4},{"kw":"and","pageRef":4},{"kw":"processing","pageRef":4},{"kw":"language","pageRef":4},{"kw":"print","pageRef":4},{"kw":"column","pageRef":4},{"kw":"1","pageRef":4},{"kw":"separator","pageRef":4},{"kw":"sum","pageRef":4},{"kw":"numbers","pageRef":4},{"kw":"in","pageRef":4},{"kw":"first","pageRef":4},{"kw":"lines","pageRef":4},{"kw":"matching","pageRef":4},{"kw":"re","pageRef":4},{"kw":"baretop","pageRef":5},{"kw":"bare-os","pageRef":5},{"kw":"coreutils","pageRef":5},{"kw":"btop","pageRef":6},{"kw":"bare-os","pageRef":6},{"kw":"coreutils","pageRef":6},{"kw":"base32","pageRef":7},{"kw":"bare-os","pageRef":7},{"kw":"coreutils","pageRef":7},{"kw":"base64","pageRef":8},{"kw":"bare-os","pageRef":8},{"kw":"coreutils","pageRef":8},{"kw":"basename","pageRef":9},{"kw":"bare-os","pageRef":9},{"kw":"coreutils","pageRef":9},{"kw":"strip","pageRef":9},{"kw":"directory","pageRef":9},{"kw":"and","pageRef":9},{"kw":"suffix","pageRef":9},{"kw":"from","pageRef":9},{"kw":"pathnames","pageRef":9},{"kw":"baresay","pageRef":10},{"kw":"bare-os","pageRef":10},{"kw":"coreutils","pageRef":10},{"kw":"basenc","pageRef":11},{"kw":"bare-os","pageRef":11},{"kw":"coreutils","pageRef":11},{"kw":"cat","pageRef":12},{"kw":"bare-os","pageRef":12},{"kw":"coreutils","pageRef":12},{"kw":"concatenate","pageRef":12},{"kw":"and","pageRef":12},{"kw":"print","pageRef":12},{"kw":"files","pageRef":12},{"kw":"stdout","pageRef":12},{"kw":"several","pageRef":12},{"kw":"number","pageRef":12},{"kw":"lines","pageRef":12},{"kw":"use","pageRef":12},{"kw":"nl","pageRef":12},{"kw":"here-string","pageRef":12},{"kw":"via","pageRef":12},{"kw":"echo","pageRef":12},{"kw":"pipe","pageRef":12},{"kw":"chat","pageRef":13},{"kw":"bare-os","pageRef":13},{"kw":"coreutils","pageRef":13},{"kw":"chgrp","pageRef":14},{"kw":"bare-os","pageRef":14},{"kw":"coreutils","pageRef":14},{"kw":"change","pageRef":14},{"kw":"file","pageRef":14},{"kw":"group","pageRef":14},{"kw":"ownership","pageRef":14},{"kw":"set","pageRef":14},{"kw":"by","pageRef":14},{"kw":"name","pageRef":14},{"kw":"chmod","pageRef":15},{"kw":"mode","pageRef":15},{"kw":"permission","pageRef":15},{"kw":"octal","pageRef":15},{"kw":"symbolic","pageRef":15},{"kw":"change","pageRef":15},{"kw":"file","pageRef":15},{"kw":"bits","pageRef":15},{"kw":"recursive-ish","pageRef":15},{"kw":"run","pageRef":15},{"kw":"find","pageRef":15},{"kw":"per","pageRef":15},{"kw":"user","pageRef":15},{"kw":"all","pageRef":15},{"kw":"read","pageRef":15},{"kw":"owner","pageRef":15},{"kw":"write","pageRef":15},{"kw":"chown","pageRef":16},{"kw":"bare-os","pageRef":16},{"kw":"coreutils","pageRef":16},{"kw":"change","pageRef":16},{"kw":"file","pageRef":16},{"kw":"owner","pageRef":16},{"kw":"and","pageRef":16},{"kw":"group","pageRef":16},{"kw":"only","pageRef":16},{"kw":"numeric","pageRef":16},{"kw":"ids","pageRef":16},{"kw":"cksum","pageRef":17},{"kw":"bare-os","pageRef":17},{"kw":"coreutils","pageRef":17},{"kw":"write","pageRef":17},{"kw":"file","pageRef":17},{"kw":"checksums","pageRef":17},{"kw":"and","pageRef":17},{"kw":"sizes","pageRef":17},{"kw":"checksum","pageRef":17},{"kw":"verify","pageRef":17},{"kw":"pipeline","pageRef":17},{"kw":"clear","pageRef":18},{"kw":"bare-os","pageRef":18},{"kw":"coreutils","pageRef":18},{"kw":"the","pageRef":18},{"kw":"terminal","pageRef":18},{"kw":"screen","pageRef":18},{"kw":"wipe","pageRef":18},{"kw":"comm","pageRef":19},{"kw":"bare-os","pageRef":19},{"kw":"coreutils","pageRef":19},{"kw":"cmp","pageRef":20},{"kw":"bare-os","pageRef":20},{"kw":"coreutils","pageRef":20},{"kw":"cp","pageRef":21},{"kw":"bare-os","pageRef":21},{"kw":"coreutils","pageRef":21},{"kw":"copy","pageRef":21},{"kw":"files","pageRef":21},{"kw":"file","pageRef":21},{"kw":"into","pageRef":21},{"kw":"directory","pageRef":21},{"kw":"preserve","pageRef":21},{"kw":"implied","pageRef":21},{"kw":"if","pageRef":21},{"kw":"implemented","pageRef":21},{"kw":"corestorectl","pageRef":22},{"kw":"bare-os","pageRef":22},{"kw":"coreutils","pageRef":22},{"kw":"crontab","pageRef":23},{"kw":"bare-os","pageRef":23},{"kw":"coreutils","pageRef":23},{"kw":"user","pageRef":23},{"kw":"manipulation","pageRef":23},{"kw":"list","pageRef":23},{"kw":"jobs","pageRef":23},{"kw":"install","pageRef":23},{"kw":"from","pageRef":23},{"kw":"file","pageRef":23},{"kw":"remove","pageRef":23},{"kw":"all","pageRef":23},{"kw":"ctxbaredoctor","pageRef":24},{"kw":"bare-os","pageRef":24},{"kw":"coreutils","pageRef":24},{"kw":"curl","pageRef":25},{"kw":"bare-os","pageRef":25},{"kw":"coreutils","pageRef":25},{"kw":"cut","pageRef":26},{"kw":"bare-os","pageRef":26},{"kw":"coreutils","pageRef":26},{"kw":"out","pageRef":26},{"kw":"selected","pageRef":26},{"kw":"fields","pageRef":26},{"kw":"of","pageRef":26},{"kw":"each","pageRef":26},{"kw":"line","pageRef":26},{"kw":"by","pageRef":26},{"kw":"delimiter","pageRef":26},{"kw":"characters","pageRef":26},{"kw":"date","pageRef":27},{"kw":"bare-os","pageRef":27},{"kw":"coreutils","pageRef":27},{"kw":"display","pageRef":27},{"kw":"or","pageRef":27},{"kw":"set","pageRef":27},{"kw":"and","pageRef":27},{"kw":"time","pageRef":27},{"kw":"rfc-ish","pageRef":27},{"kw":"output","pageRef":27},{"kw":"epoch","pageRef":27},{"kw":"seconds","pageRef":27},{"kw":"dd","pageRef":28},{"kw":"bare-os","pageRef":28},{"kw":"coreutils","pageRef":28},{"kw":"df","pageRef":29},{"kw":"bare-os","pageRef":29},{"kw":"coreutils","pageRef":29},{"kw":"diff","pageRef":30},{"kw":"bare-os","pageRef":30},{"kw":"coreutils","pageRef":30},{"kw":"dir","pageRef":31},{"kw":"bare-os","pageRef":31},{"kw":"coreutils","pageRef":31},{"kw":"dirname","pageRef":32},{"kw":"bare-os","pageRef":32},{"kw":"coreutils","pageRef":32},{"kw":"return","pageRef":32},{"kw":"directory","pageRef":32},{"kw":"portion","pageRef":32},{"kw":"of","pageRef":32},{"kw":"a","pageRef":32},{"kw":"pathname","pageRef":32},{"kw":"parent","pageRef":32},{"kw":"path","pageRef":32},{"kw":"compose","pageRef":32},{"kw":"with","pageRef":32},{"kw":"basename","pageRef":32},{"kw":"dircolors","pageRef":33},{"kw":"ls_colors","pageRef":33},{"kw":"color","pageRef":33},{"kw":"dhtctl","pageRef":34},{"kw":"bare-os","pageRef":34},{"kw":"coreutils","pageRef":34},{"kw":"dhtscan","pageRef":35},{"kw":"bare-os","pageRef":35},{"kw":"coreutils","pageRef":35},{"kw":"dhttop","pageRef":36},{"kw":"bare-os","pageRef":36},{"kw":"coreutils","pageRef":36},{"kw":"discord","pageRef":37},{"kw":"bot","pageRef":37},{"kw":"ping","pageRef":37},{"kw":"pong","pageRef":37},{"kw":"ctx.bare","pageRef":37},{"kw":"discord-bot","pageRef":37},{"kw":"check","pageRef":37},{"kw":"token","pageRef":37},{"kw":"resolution","pageRef":37},{"kw":"without","pageRef":37},{"kw":"connecting","pageRef":37},{"kw":"run","pageRef":37},{"kw":"the","pageRef":37},{"kw":"ping-pong","pageRef":37},{"kw":"du","pageRef":38},{"kw":"bare-os","pageRef":38},{"kw":"coreutils","pageRef":38},{"kw":"estimate","pageRef":38},{"kw":"file","pageRef":38},{"kw":"space","pageRef":38},{"kw":"usage","pageRef":38},{"kw":"sizes","pageRef":38},{"kw":"under","pageRef":38},{"kw":"cwd","pageRef":38},{"kw":"human","pageRef":38},{"kw":"if","pageRef":38},{"kw":"supported","pageRef":38},{"kw":"edit","pageRef":39},{"kw":"bare-os","pageRef":39},{"kw":"coreutils","pageRef":39},{"kw":"echo","pageRef":40},{"kw":"bare-os","pageRef":40},{"kw":"coreutils","pageRef":40},{"kw":"write","pageRef":40},{"kw":"arguments","pageRef":40},{"kw":"to","pageRef":40},{"kw":"standard","pageRef":40},{"kw":"output","pageRef":40},{"kw":"literal","pageRef":40},{"kw":"no","pageRef":40},{"kw":"newline","pageRef":40},{"kw":"if","pageRef":40},{"kw":"-n","pageRef":40},{"kw":"supported","pageRef":40},{"kw":"env","pageRef":41},{"kw":"bare-os","pageRef":41},{"kw":"coreutils","pageRef":41},{"kw":"set","pageRef":41},{"kw":"the","pageRef":41},{"kw":"environment","pageRef":41},{"kw":"for","pageRef":41},{"kw":"command","pageRef":41},{"kw":"invocation","pageRef":41},{"kw":"print","pageRef":41},{"kw":"run","pageRef":41},{"kw":"with","pageRef":41},{"kw":"override","pageRef":41},{"kw":"exit","pageRef":42},{"kw":"bare-os","pageRef":42},{"kw":"coreutils","pageRef":42},{"kw":"the","pageRef":42},{"kw":"shell","pageRef":42},{"kw":"or","pageRef":42},{"kw":"booter","pageRef":42},{"kw":"session","pageRef":42},{"kw":"leave","pageRef":42},{"kw":"with","pageRef":42},{"kw":"status","pageRef":42},{"kw":"from","pageRef":42},{"kw":"script","pageRef":42},{"kw":"expand","pageRef":43},{"kw":"bare-os","pageRef":43},{"kw":"coreutils","pageRef":43},{"kw":"expr","pageRef":44},{"kw":"bare-os","pageRef":44},{"kw":"coreutils","pageRef":44},{"kw":"factor","pageRef":45},{"kw":"bare-os","pageRef":45},{"kw":"coreutils","pageRef":45},{"kw":"false","pageRef":46},{"kw":"bare-os","pageRef":46},{"kw":"coreutils","pageRef":46},{"kw":"return","pageRef":46},{"kw":"value","pageRef":46},{"kw":"force","pageRef":46},{"kw":"failure","pageRef":46},{"kw":"in","pageRef":46},{"kw":"pipeline","pageRef":46},{"kw":"tests","pageRef":46},{"kw":"find","pageRef":47},{"kw":"directory","pageRef":47},{"kw":"walk","pageRef":47},{"kw":"search","pageRef":47},{"kw":"files","pageRef":47},{"kw":"by","pageRef":47},{"kw":"name","pageRef":47},{"kw":"glob","pageRef":47},{"kw":"directories","pageRef":47},{"kw":"only","pageRef":47},{"kw":"max","pageRef":47},{"kw":"depth","pageRef":47},{"kw":"or","pageRef":47},{"kw":"names","pageRef":47},{"kw":"fmt","pageRef":48},{"kw":"bare-os","pageRef":48},{"kw":"coreutils","pageRef":48},{"kw":"fold","pageRef":49},{"kw":"bare-os","pageRef":49},{"kw":"coreutils","pageRef":49},{"kw":"getconf","pageRef":50},{"kw":"bare-os","pageRef":50},{"kw":"coreutils","pageRef":50},{"kw":"get","pageRef":50},{"kw":"configuration","pageRef":50},{"kw":"values","pageRef":50},{"kw":"path","pageRef":50},{"kw":"length","pageRef":50},{"kw":"limit","pageRef":50},{"kw":"list","pageRef":50},{"kw":"known","pageRef":50},{"kw":"names","pageRef":50},{"kw":"and","pageRef":50},{"kw":"getfacl","pageRef":51},{"kw":"bare-os","pageRef":51},{"kw":"coreutils","pageRef":51},{"kw":"git-pear","pageRef":52},{"kw":"bare-os","pageRef":52},{"kw":"coreutils","pageRef":52},{"kw":"grep","pageRef":53},{"kw":"search","pageRef":53},{"kw":"regex","pageRef":53},{"kw":"pattern","pageRef":53},{"kw":"filter","pageRef":53},{"kw":"matching","pageRef":53},{"kw":"utility","pageRef":53},{"kw":"recursive","pageRef":53},{"kw":"feel","pageRef":53},{"kw":"each","pageRef":53},{"kw":"file","pageRef":53},{"kw":"case","pageRef":53},{"kw":"insensitive","pageRef":53},{"kw":"invert","pageRef":53},{"kw":"lines","pageRef":53},{"kw":"without","pageRef":53},{"kw":"fixed","pageRef":53},{"kw":"string","pageRef":53},{"kw":"no","pageRef":53},{"kw":"count","pageRef":53},{"kw":"matches","pageRef":53},{"kw":"only","pageRef":53},{"kw":"filenames","pageRef":53},{"kw":"multiple","pageRef":53},{"kw":"patterns","pageRef":53},{"kw":"groups","pageRef":54},{"kw":"bare-os","pageRef":54},{"kw":"coreutils","pageRef":54},{"kw":"head","pageRef":55},{"kw":"bare-os","pageRef":55},{"kw":"coreutils","pageRef":55},{"kw":"copy","pageRef":55},{"kw":"the","pageRef":55},{"kw":"first","pageRef":55},{"kw":"part","pageRef":55},{"kw":"of","pageRef":55},{"kw":"files","pageRef":55},{"kw":"10","pageRef":55},{"kw":"lines","pageRef":55},{"kw":"n","pageRef":55},{"kw":"stdin","pageRef":55},{"kw":"hdms","pageRef":56},{"kw":"hyperswarm","pageRef":56},{"kw":"map","pageRef":56},{"kw":"distributed","pageRef":56},{"kw":"store","pageRef":56},{"kw":"when","pageRef":56},{"kw":"booter","pageRef":56},{"kw":"wires","pageRef":56},{"kw":"otherwise","pageRef":56},{"kw":"help","pageRef":57},{"kw":"summary","pageRef":57},{"kw":"builtins","pageRef":57},{"kw":"commands","pageRef":57},{"kw":"bare","pageRef":57},{"kw":"os","pageRef":57},{"kw":"quick","pageRef":57},{"kw":"index","pageRef":57},{"kw":"then","pageRef":57},{"kw":"deep","pageRef":57},{"kw":"dive","pageRef":57},{"kw":"holesail","pageRef":58},{"kw":"bare-os","pageRef":58},{"kw":"coreutils","pageRef":58},{"kw":"holepunch-view","pageRef":59},{"kw":"bare-os","pageRef":59},{"kw":"coreutils","pageRef":59},{"kw":"hostid","pageRef":60},{"kw":"bare-os","pageRef":60},{"kw":"coreutils","pageRef":60},{"kw":"hostname","pageRef":61},{"kw":"bare-os","pageRef":61},{"kw":"coreutils","pageRef":61},{"kw":"set","pageRef":61},{"kw":"or","pageRef":61},{"kw":"print","pageRef":61},{"kw":"show","pageRef":61},{"kw":"host","pageRef":61},{"kw":"hypershell-board","pageRef":62},{"kw":"bare-os","pageRef":62},{"kw":"coreutils","pageRef":62},{"kw":"iconv","pageRef":63},{"kw":"bare-os","pageRef":63},{"kw":"coreutils","pageRef":63},{"kw":"id","pageRef":64},{"kw":"bare-os","pageRef":64},{"kw":"coreutils","pageRef":64},{"kw":"return","pageRef":64},{"kw":"user","pageRef":64},{"kw":"identity","pageRef":64},{"kw":"who","pageRef":64},{"kw":"am","pageRef":64},{"kw":"i","pageRef":64},{"kw":"numerically","pageRef":64},{"kw":"install","pageRef":65},{"kw":"bare-os","pageRef":65},{"kw":"coreutils","pageRef":65},{"kw":"irc","pageRef":66},{"kw":"libera","pageRef":66},{"kw":"tui","pageRef":66},{"kw":"chat","pageRef":66},{"kw":"join","pageRef":67},{"kw":"bare-os","pageRef":67},{"kw":"coreutils","pageRef":67},{"kw":"kill","pageRef":68},{"kw":"bare-os","pageRef":68},{"kw":"coreutils","pageRef":68},{"kw":"kernel-boot-diff","pageRef":69},{"kw":"bare-os","pageRef":69},{"kw":"coreutils","pageRef":69},{"kw":"kernel-doctor","pageRef":70},{"kw":"bare-os","pageRef":70},{"kw":"coreutils","pageRef":70},{"kw":"kernel-explain","pageRef":71},{"kw":"bare-os","pageRef":71},{"kw":"coreutils","pageRef":71},{"kw":"kernel-fsck","pageRef":72},{"kw":"bare-os","pageRef":72},{"kw":"coreutils","pageRef":72},{"kw":"kernel-home-snapshot","pageRef":73},{"kw":"bare-os","pageRef":73},{"kw":"coreutils","pageRef":73},{"kw":"kernel-manifest-validate","pageRef":74},{"kw":"bare-os","pageRef":74},{"kw":"coreutils","pageRef":74},{"kw":"kernel-preflight","pageRef":75},{"kw":"bare-os","pageRef":75},{"kw":"coreutils","pageRef":75},{"kw":"kernel-triage","pageRef":76},{"kw":"bare-os","pageRef":76},{"kw":"coreutils","pageRef":76},{"kw":"jq","pageRef":77},{"kw":"json","pageRef":77},{"kw":"query","pageRef":77},{"kw":"filter","pageRef":77},{"kw":"jqjs","pageRef":77},{"kw":"command-line","pageRef":77},{"kw":"processor","pageRef":77},{"kw":"language","pageRef":77},{"kw":"subset","pageRef":77},{"kw":"pretty-print","pageRef":77},{"kw":"field","pageRef":77},{"kw":"slurp","pageRef":77},{"kw":"array","pageRef":77},{"kw":"compact","pageRef":77},{"kw":"ln","pageRef":78},{"kw":"bare-os","pageRef":78},{"kw":"coreutils","pageRef":78},{"kw":"link","pageRef":78},{"kw":"files","pageRef":78},{"kw":"symlink","pageRef":78},{"kw":"hard","pageRef":78},{"kw":"if","pageRef":78},{"kw":"supported","pageRef":78},{"kw":"link","pageRef":79},{"kw":"bare-os","pageRef":79},{"kw":"coreutils","pageRef":79},{"kw":"logger","pageRef":80},{"kw":"bare-os","pageRef":80},{"kw":"coreutils","pageRef":80},{"kw":"login","pageRef":81},{"kw":"identity","pageRef":81},{"kw":"passphrase","pageRef":81},{"kw":"begin","pageRef":81},{"kw":"a","pageRef":81},{"kw":"session","pageRef":81},{"kw":"on","pageRef":81},{"kw":"the","pageRef":81},{"kw":"system","pageRef":81},{"kw":"unlock","pageRef":81},{"kw":"run","pageRef":81},{"kw":"then","pageRef":81},{"kw":"type","pageRef":81},{"kw":"at","pageRef":81},{"kw":"prompt","pageRef":81},{"kw":"multi-word","pageRef":81},{"kw":"ok","pageRef":81},{"kw":"register","pageRef":81},{"kw":"new","pageRef":81},{"kw":"logout","pageRef":82},{"kw":"session","pageRef":82},{"kw":"end","pageRef":82},{"kw":"save","pageRef":82},{"kw":"vault","pageRef":82},{"kw":"hint","pageRef":82},{"kw":"logname","pageRef":83},{"kw":"bare-os","pageRef":83},{"kw":"coreutils","pageRef":83},{"kw":"return","pageRef":83},{"kw":"the","pageRef":83},{"kw":"user","pageRef":83},{"kw":"s","pageRef":83},{"kw":"login","pageRef":83},{"kw":"name","pageRef":83},{"kw":"locale","pageRef":84},{"kw":"bare-os","pageRef":84},{"kw":"coreutils","pageRef":84},{"kw":"ls","pageRef":85},{"kw":"list","pageRef":85},{"kw":"directory","pageRef":85},{"kw":"dir","pageRef":85},{"kw":"contents","pageRef":85},{"kw":"long","pageRef":85},{"kw":"hidden","pageRef":85},{"kw":"one","pageRef":85},{"kw":"per","pageRef":85},{"kw":"line","pageRef":85},{"kw":"multiple","pageRef":85},{"kw":"paths","pageRef":85},{"kw":"man","pageRef":86},{"kw":"manual","pageRef":86},{"kw":"help","pageRef":86},{"kw":"documentation","pageRef":86},{"kw":"apropos","pageRef":86},{"kw":"whatis","pageRef":86},{"kw":"cheat","pageRef":86},{"kw":"examples","pageRef":86},{"kw":"display","pageRef":86},{"kw":"on-line","pageRef":86},{"kw":"pages","pageRef":86},{"kw":"open","pageRef":86},{"kw":"page","pageRef":86},{"kw":"handbook","pageRef":86},{"kw":"toc","pageRef":86},{"kw":"section","pageRef":86},{"kw":"7","pageRef":86},{"kw":"chapter","pageRef":86},{"kw":"by","pageRef":86},{"kw":"all","pageRef":86},{"kw":"fixed","pageRef":86},{"kw":"width","pageRef":86},{"kw":"overrides","pageRef":86},{"kw":"tty","pageRef":86},{"kw":"md5sum","pageRef":87},{"kw":"bare-os","pageRef":87},{"kw":"coreutils","pageRef":87},{"kw":"meshdrop","pageRef":88},{"kw":"bare-os","pageRef":88},{"kw":"coreutils","pageRef":88},{"kw":"mkdir","pageRef":89},{"kw":"bare-os","pageRef":89},{"kw":"coreutils","pageRef":89},{"kw":"make","pageRef":89},{"kw":"directories","pageRef":89},{"kw":"one","pageRef":89},{"kw":"dir","pageRef":89},{"kw":"parents","pageRef":89},{"kw":"mkfifo","pageRef":90},{"kw":"bare-os","pageRef":90},{"kw":"coreutils","pageRef":90},{"kw":"make","pageRef":90},{"kw":"fifo","pageRef":90},{"kw":"special","pageRef":90},{"kw":"files","pageRef":90},{"kw":"stub","pageRef":90},{"kw":"mktemp","pageRef":91},{"kw":"bare-os","pageRef":91},{"kw":"coreutils","pageRef":91},{"kw":"mount","pageRef":92},{"kw":"bare-os","pageRef":92},{"kw":"coreutils","pageRef":92},{"kw":"mv","pageRef":93},{"kw":"bare-os","pageRef":93},{"kw":"coreutils","pageRef":93},{"kw":"move","pageRef":93},{"kw":"or","pageRef":93},{"kw":"rename","pageRef":93},{"kw":"files","pageRef":93},{"kw":"into","pageRef":93},{"kw":"dir","pageRef":93},{"kw":"nano","pageRef":94},{"kw":"bare-os","pageRef":94},{"kw":"coreutils","pageRef":94},{"kw":"nice","pageRef":95},{"kw":"bare-os","pageRef":95},{"kw":"coreutils","pageRef":95},{"kw":"nl","pageRef":96},{"kw":"bare-os","pageRef":96},{"kw":"coreutils","pageRef":96},{"kw":"line","pageRef":96},{"kw":"numbering","pageRef":96},{"kw":"utility","pageRef":96},{"kw":"number","pageRef":96},{"kw":"all","pageRef":96},{"kw":"lines","pageRef":96},{"kw":"nohup","pageRef":97},{"kw":"bare-os","pageRef":97},{"kw":"coreutils","pageRef":97},{"kw":"run","pageRef":97},{"kw":"command","pageRef":97},{"kw":"hangup","pageRef":97},{"kw":"is","pageRef":97},{"kw":"a","pageRef":97},{"kw":"no-op","pageRef":97},{"kw":"in","pageRef":97},{"kw":"bare","pageRef":97},{"kw":"os","pageRef":97},{"kw":"utility","pageRef":97},{"kw":"no","pageRef":97},{"kw":"real","pageRef":97},{"kw":"sighup","pageRef":97},{"kw":"guest","pageRef":97},{"kw":"nproc","pageRef":98},{"kw":"bare-os","pageRef":98},{"kw":"coreutils","pageRef":98},{"kw":"numfmt","pageRef":99},{"kw":"bare-os","pageRef":99},{"kw":"coreutils","pageRef":99},{"kw":"od","pageRef":100},{"kw":"bare-os","pageRef":100},{"kw":"coreutils","pageRef":100},{"kw":"octal","pageRef":100},{"kw":"dump","pageRef":100},{"kw":"hex","pageRef":100},{"kw":"vibe","pageRef":100},{"kw":"openssl","pageRef":101},{"kw":"bare-os","pageRef":101},{"kw":"coreutils","pageRef":101},{"kw":"oidc-publish","pageRef":102},{"kw":"bare-os","pageRef":102},{"kw":"coreutils","pageRef":102},{"kw":"paste","pageRef":103},{"kw":"bare-os","pageRef":103},{"kw":"coreutils","pageRef":103},{"kw":"patch","pageRef":104},{"kw":"bare-os","pageRef":104},{"kw":"coreutils","pageRef":104},{"kw":"pear","pageRef":105},{"kw":"bare-os","pageRef":105},{"kw":"coreutils","pageRef":105},{"kw":"p2p","pageRef":105},{"kw":"build","pageRef":105},{"kw":"release","pageRef":105},{"kw":"hdms","pageRef":105},{"kw":"pathchk","pageRef":106},{"kw":"bare-os","pageRef":106},{"kw":"coreutils","pageRef":106},{"kw":"check","pageRef":106},{"kw":"pathname","pageRef":106},{"kw":"portability","pageRef":106},{"kw":"portable","pageRef":106},{"kw":"path","pageRef":106},{"kw":"pathcap-verify","pageRef":107},{"kw":"bare-os","pageRef":107},{"kw":"coreutils","pageRef":107},{"kw":"p2ping","pageRef":108},{"kw":"bare-os","pageRef":108},{"kw":"coreutils","pageRef":108},{"kw":"p2ptrace","pageRef":109},{"kw":"bare-os","pageRef":109},{"kw":"coreutils","pageRef":109},{"kw":"peerctl","pageRef":110},{"kw":"bare-os","pageRef":110},{"kw":"coreutils","pageRef":110},{"kw":"peerdiscover","pageRef":111},{"kw":"bare-os","pageRef":111},{"kw":"coreutils","pageRef":111},{"kw":"peernote","pageRef":112},{"kw":"bare-os","pageRef":112},{"kw":"coreutils","pageRef":112},{"kw":"pr","pageRef":113},{"kw":"bare-os","pageRef":113},{"kw":"coreutils","pageRef":113},{"kw":"printenv","pageRef":114},{"kw":"bare-os","pageRef":114},{"kw":"coreutils","pageRef":114},{"kw":"print","pageRef":114},{"kw":"environment","pageRef":114},{"kw":"variables","pageRef":114},{"kw":"one","pageRef":114},{"kw":"variable","pageRef":114},{"kw":"all","pageRef":114},{"kw":"pkg-swarm-index","pageRef":115},{"kw":"bare-os","pageRef":115},{"kw":"coreutils","pageRef":115},{"kw":"printf","pageRef":116},{"kw":"bare-os","pageRef":116},{"kw":"coreutils","pageRef":116},{"kw":"format","pageRef":116},{"kw":"and","pageRef":116},{"kw":"print","pageRef":116},{"kw":"no","pageRef":116},{"kw":"newline","pageRef":116},{"kw":"procstat","pageRef":117},{"kw":"bare-os","pageRef":117},{"kw":"coreutils","pageRef":117},{"kw":"ps","pageRef":118},{"kw":"bare-os","pageRef":118},{"kw":"coreutils","pageRef":118},{"kw":"pwd","pageRef":119},{"kw":"bare-os","pageRef":119},{"kw":"coreutils","pageRef":119},{"kw":"return","pageRef":119},{"kw":"working","pageRef":119},{"kw":"directory","pageRef":119},{"kw":"name","pageRef":119},{"kw":"where","pageRef":119},{"kw":"am","pageRef":119},{"kw":"i","pageRef":119},{"kw":"readlink","pageRef":120},{"kw":"bare-os","pageRef":120},{"kw":"coreutils","pageRef":120},{"kw":"print","pageRef":120},{"kw":"symbolic","pageRef":120},{"kw":"link","pageRef":120},{"kw":"targets","pageRef":120},{"kw":"symlink","pageRef":120},{"kw":"target","pageRef":120},{"kw":"realpath","pageRef":121},{"kw":"bare-os","pageRef":121},{"kw":"coreutils","pageRef":121},{"kw":"rev","pageRef":122},{"kw":"bare-os","pageRef":122},{"kw":"coreutils","pageRef":122},{"kw":"rm","pageRef":123},{"kw":"bare-os","pageRef":123},{"kw":"coreutils","pageRef":123},{"kw":"remove","pageRef":123},{"kw":"files","pageRef":123},{"kw":"file","pageRef":123},{"kw":"tree","pageRef":123},{"kw":"rmdir","pageRef":124},{"kw":"bare-os","pageRef":124},{"kw":"coreutils","pageRef":124},{"kw":"remove","pageRef":124},{"kw":"empty","pageRef":124},{"kw":"directories","pageRef":124},{"kw":"dir","pageRef":124},{"kw":"routeview","pageRef":125},{"kw":"bare-os","pageRef":125},{"kw":"coreutils","pageRef":125},{"kw":"savevault","pageRef":126},{"kw":"vault","pageRef":126},{"kw":"encrypt","pageRef":126},{"kw":"backup","pageRef":126},{"kw":"snapshot","pageRef":126},{"kw":"of","pageRef":126},{"kw":"personal","pageRef":126},{"kw":"drive","pageRef":126},{"kw":"encrypted","pageRef":126},{"kw":"say","pageRef":127},{"kw":"bare-os","pageRef":127},{"kw":"coreutils","pageRef":127},{"kw":"sed","pageRef":128},{"kw":"stream","pageRef":128},{"kw":"edit","pageRef":128},{"kw":"substitute","pageRef":128},{"kw":"editor","pageRef":128},{"kw":"first","pageRef":128},{"kw":"per","pageRef":128},{"kw":"line","pageRef":128},{"kw":"global","pageRef":128},{"kw":"in-place","pageRef":128},{"kw":"if","pageRef":128},{"kw":"supported","pageRef":128},{"kw":"print","pageRef":128},{"kw":"5","pageRef":128},{"kw":"only","pageRef":128},{"kw":"delete","pageRef":128},{"kw":"blank","pageRef":128},{"kw":"lines","pageRef":128},{"kw":"seq","pageRef":129},{"kw":"bare-os","pageRef":129},{"kw":"coreutils","pageRef":129},{"kw":"print","pageRef":129},{"kw":"sequences","pageRef":129},{"kw":"of","pageRef":129},{"kw":"numbers","pageRef":129},{"kw":"1","pageRef":129},{"kw":"10","pageRef":129},{"kw":"step","pageRef":129},{"kw":"setfacl","pageRef":130},{"kw":"bare-os","pageRef":130},{"kw":"coreutils","pageRef":130},{"kw":"sha1sum","pageRef":131},{"kw":"bare-os","pageRef":131},{"kw":"coreutils","pageRef":131},{"kw":"sha224sum","pageRef":132},{"kw":"bare-os","pageRef":132},{"kw":"coreutils","pageRef":132},{"kw":"sha256sum","pageRef":133},{"kw":"bare-os","pageRef":133},{"kw":"coreutils","pageRef":133},{"kw":"sha384sum","pageRef":134},{"kw":"bare-os","pageRef":134},{"kw":"coreutils","pageRef":134},{"kw":"sha512sum","pageRef":135},{"kw":"bare-os","pageRef":135},{"kw":"coreutils","pageRef":135},{"kw":"sh","pageRef":136},{"kw":"bare-os","pageRef":136},{"kw":"coreutils","pageRef":136},{"kw":"shuf","pageRef":137},{"kw":"bare-os","pageRef":137},{"kw":"coreutils","pageRef":137},{"kw":"sleep","pageRef":138},{"kw":"bare-os","pageRef":138},{"kw":"coreutils","pageRef":138},{"kw":"suspend","pageRef":138},{"kw":"execution","pageRef":138},{"kw":"for","pageRef":138},{"kw":"an","pageRef":138},{"kw":"interval","pageRef":138},{"kw":"pause","pageRef":138},{"kw":"seconds","pageRef":138},{"kw":"sort","pageRef":139},{"kw":"bare-os","pageRef":139},{"kw":"coreutils","pageRef":139},{"kw":"lines","pageRef":139},{"kw":"lexicographic","pageRef":139},{"kw":"numeric","pageRef":139},{"kw":"unique","pageRef":139},{"kw":"split","pageRef":140},{"kw":"bare-os","pageRef":140},{"kw":"coreutils","pageRef":140},{"kw":"ssh","pageRef":141},{"kw":"bare-os","pageRef":141},{"kw":"coreutils","pageRef":141},{"kw":"ssh-keygen","pageRef":142},{"kw":"bare-os","pageRef":142},{"kw":"coreutils","pageRef":142},{"kw":"sshd","pageRef":143},{"kw":"bare-os","pageRef":143},{"kw":"coreutils","pageRef":143},{"kw":"stat","pageRef":144},{"kw":"bare-os","pageRef":144},{"kw":"coreutils","pageRef":144},{"kw":"display","pageRef":144},{"kw":"file","pageRef":144},{"kw":"status","pageRef":144},{"kw":"metadata","pageRef":144},{"kw":"swarmtop","pageRef":145},{"kw":"bare-os","pageRef":145},{"kw":"coreutils","pageRef":145},{"kw":"swarmdoctor","pageRef":146},{"kw":"bare-os","pageRef":146},{"kw":"coreutils","pageRef":146},{"kw":"swarmmap","pageRef":147},{"kw":"bare-os","pageRef":147},{"kw":"coreutils","pageRef":147},{"kw":"sum","pageRef":148},{"kw":"bare-os","pageRef":148},{"kw":"coreutils","pageRef":148},{"kw":"summon","pageRef":149},{"kw":"browser","pageRef":149},{"kw":"html","pageRef":149},{"kw":"tui","pageRef":149},{"kw":"http","pageRef":149},{"kw":"sync","pageRef":150},{"kw":"bare-os","pageRef":150},{"kw":"coreutils","pageRef":150},{"kw":"tar","pageRef":151},{"kw":"bare-os","pageRef":151},{"kw":"coreutils","pageRef":151},{"kw":"tac","pageRef":152},{"kw":"bare-os","pageRef":152},{"kw":"coreutils","pageRef":152},{"kw":"tail","pageRef":153},{"kw":"bare-os","pageRef":153},{"kw":"coreutils","pageRef":153},{"kw":"copy","pageRef":153},{"kw":"the","pageRef":153},{"kw":"last","pageRef":153},{"kw":"part","pageRef":153},{"kw":"of","pageRef":153},{"kw":"a","pageRef":153},{"kw":"file","pageRef":153},{"kw":"lines","pageRef":153},{"kw":"follow","pageRef":153},{"kw":"vibe","pageRef":153},{"kw":"bare","pageRef":153},{"kw":"poll","pageRef":153},{"kw":"manually","pageRef":153},{"kw":"tee","pageRef":154},{"kw":"bare-os","pageRef":154},{"kw":"coreutils","pageRef":154},{"kw":"duplicate","pageRef":154},{"kw":"standard","pageRef":154},{"kw":"input","pageRef":154},{"kw":"copy","pageRef":154},{"kw":"stdout","pageRef":154},{"kw":"to","pageRef":154},{"kw":"file","pageRef":154},{"kw":"telnet","pageRef":155},{"kw":"bare-os","pageRef":155},{"kw":"coreutils","pageRef":155},{"kw":"test","pageRef":156},{"kw":"bare-os","pageRef":156},{"kw":"coreutils","pageRef":156},{"kw":"evaluate","pageRef":156},{"kw":"a","pageRef":156},{"kw":"condition","pageRef":156},{"kw":"file","pageRef":156},{"kw":"exists","pageRef":156},{"kw":"directory","pageRef":156},{"kw":"string","pageRef":156},{"kw":"equal","pageRef":156},{"kw":"theme","pageRef":157},{"kw":"colors","pageRef":157},{"kw":"prompt","pageRef":157},{"kw":"time","pageRef":158},{"kw":"bare-os","pageRef":158},{"kw":"coreutils","pageRef":158},{"kw":"a","pageRef":158},{"kw":"simple","pageRef":158},{"kw":"command","pageRef":158},{"kw":"wall","pageRef":158},{"kw":"timeout","pageRef":159},{"kw":"bare-os","pageRef":159},{"kw":"coreutils","pageRef":159},{"kw":"run","pageRef":159},{"kw":"command","pageRef":159},{"kw":"with","pageRef":159},{"kw":"bounded","pageRef":159},{"kw":"wall","pageRef":159},{"kw":"time","pageRef":159},{"kw":"kill","pageRef":159},{"kw":"long","pageRef":159},{"kw":"job","pageRef":159},{"kw":"after","pageRef":159},{"kw":"5s","pageRef":159},{"kw":"touch","pageRef":160},{"kw":"bare-os","pageRef":160},{"kw":"coreutils","pageRef":160},{"kw":"change","pageRef":160},{"kw":"file","pageRef":160},{"kw":"timestamps","pageRef":160},{"kw":"or","pageRef":160},{"kw":"create","pageRef":160},{"kw":"files","pageRef":160},{"kw":"empty","pageRef":160},{"kw":"refresh","pageRef":160},{"kw":"mtime","pageRef":160},{"kw":"tr","pageRef":161},{"kw":"bare-os","pageRef":161},{"kw":"coreutils","pageRef":161},{"kw":"translate","pageRef":161},{"kw":"or","pageRef":161},{"kw":"delete","pageRef":161},{"kw":"characters","pageRef":161},{"kw":"uppercase","pageRef":161},{"kw":"chars","pageRef":161},{"kw":"truncate","pageRef":162},{"kw":"bare-os","pageRef":162},{"kw":"coreutils","pageRef":162},{"kw":"true","pageRef":163},{"kw":"bare-os","pageRef":163},{"kw":"coreutils","pageRef":163},{"kw":"return","pageRef":163},{"kw":"value","pageRef":163},{"kw":"always","pageRef":163},{"kw":"success","pageRef":163},{"kw":"trustctl","pageRef":164},{"kw":"bare-os","pageRef":164},{"kw":"coreutils","pageRef":164},{"kw":"tsort","pageRef":165},{"kw":"bare-os","pageRef":165},{"kw":"coreutils","pageRef":165},{"kw":"tty","pageRef":166},{"kw":"bare-os","pageRef":166},{"kw":"coreutils","pageRef":166},{"kw":"return","pageRef":166},{"kw":"user","pageRef":166},{"kw":"s","pageRef":166},{"kw":"terminal","pageRef":166},{"kw":"name","pageRef":166},{"kw":"am","pageRef":166},{"kw":"i","pageRef":166},{"kw":"a","pageRef":166},{"kw":"tui","pageRef":167},{"kw":"ctx","pageRef":167},{"kw":"terminal","pageRef":167},{"kw":"taskmesh","pageRef":168},{"kw":"bare-os","pageRef":168},{"kw":"coreutils","pageRef":168},{"kw":"ulimit","pageRef":169},{"kw":"bare-os","pageRef":169},{"kw":"coreutils","pageRef":169},{"kw":"uname","pageRef":170},{"kw":"bare-os","pageRef":170},{"kw":"coreutils","pageRef":170},{"kw":"return","pageRef":170},{"kw":"operating","pageRef":170},{"kw":"system","pageRef":170},{"kw":"name","pageRef":170},{"kw":"kernel-ish","pageRef":170},{"kw":"info","pageRef":170},{"kw":"uniq","pageRef":171},{"kw":"bare-os","pageRef":171},{"kw":"coreutils","pageRef":171},{"kw":"unlink","pageRef":172},{"kw":"bare-os","pageRef":172},{"kw":"coreutils","pageRef":172},{"kw":"umount","pageRef":173},{"kw":"bare-os","pageRef":173},{"kw":"coreutils","pageRef":173},{"kw":"unexpand","pageRef":174},{"kw":"bare-os","pageRef":174},{"kw":"coreutils","pageRef":174},{"kw":"uptime","pageRef":175},{"kw":"bare-os","pageRef":175},{"kw":"coreutils","pageRef":175},{"kw":"users","pageRef":176},{"kw":"bare-os","pageRef":176},{"kw":"coreutils","pageRef":176},{"kw":"vdir","pageRef":177},{"kw":"bare-os","pageRef":177},{"kw":"coreutils","pageRef":177},{"kw":"wc","pageRef":178},{"kw":"bare-os","pageRef":178},{"kw":"coreutils","pageRef":178},{"kw":"word","pageRef":178},{"kw":"line","pageRef":178},{"kw":"and","pageRef":178},{"kw":"byte","pageRef":178},{"kw":"or","pageRef":178},{"kw":"character","pageRef":178},{"kw":"count","pageRef":178},{"kw":"lines","pageRef":178},{"kw":"words","pageRef":178},{"kw":"bytes","pageRef":178},{"kw":"stdin","pageRef":178},{"kw":"only","pageRef":178},{"kw":"wget","pageRef":179},{"kw":"bare-os","pageRef":179},{"kw":"coreutils","pageRef":179},{"kw":"which","pageRef":180},{"kw":"bare-os","pageRef":180},{"kw":"coreutils","pageRef":180},{"kw":"locate","pageRef":180},{"kw":"a","pageRef":180},{"kw":"command","pageRef":180},{"kw":"resolve","pageRef":180},{"kw":"on","pageRef":180},{"kw":"path","pageRef":180},{"kw":"who","pageRef":181},{"kw":"bare-os","pageRef":181},{"kw":"coreutils","pageRef":181},{"kw":"whoami","pageRef":182},{"kw":"bare-os","pageRef":182},{"kw":"coreutils","pageRef":182},{"kw":"display","pageRef":182},{"kw":"effective","pageRef":182},{"kw":"user","pageRef":182},{"kw":"id","pageRef":182},{"kw":"whois","pageRef":183},{"kw":"bare-os","pageRef":183},{"kw":"coreutils","pageRef":183},{"kw":"xattr","pageRef":184},{"kw":"bare-os","pageRef":184},{"kw":"coreutils","pageRef":184},{"kw":"xargs","pageRef":185},{"kw":"bare-os","pageRef":185},{"kw":"coreutils","pageRef":185},{"kw":"construct","pageRef":185},{"kw":"argument","pageRef":185},{"kw":"lists","pageRef":185},{"kw":"and","pageRef":185},{"kw":"invoke","pageRef":185},{"kw":"utility","pageRef":185},{"kw":"pass","pageRef":185},{"kw":"lines","pageRef":185},{"kw":"as","pageRef":185},{"kw":"arguments","pageRef":185},{"kw":"one","pageRef":185},{"kw":"per","pageRef":185},{"kw":"run","pageRef":185},{"kw":"workaround","pageRef":185},{"kw":"for","pageRef":185},{"kw":"complex","pageRef":185},{"kw":"scripts","pageRef":185},{"kw":"yes","pageRef":186},{"kw":"bare-os","pageRef":186},{"kw":"coreutils","pageRef":186},{"kw":"cron","pageRef":187},{"kw":"scheduler","pageRef":187},{"kw":"bare-initd","pageRef":187},{"kw":"timer","pageRef":187},{"kw":"crontab","pageRef":187},{"kw":"bare-cron","pageRef":187},{"kw":"bare","pageRef":187},{"kw":"os","pageRef":187},{"kw":"minute","pageRef":187},{"kw":"unit","pageRef":187},{"kw":"list","pageRef":187},{"kw":"user","pageRef":187},{"kw":"line","pageRef":187},{"kw":"five-field","pageRef":187},{"kw":"bare_os_bare_modules","pageRef":188},{"kw":"bare_os_bare_drive_bundles","pageRef":188},{"kw":"ctx.bare","pageRef":188},{"kw":"bare-module-manifest","pageRef":188},{"kw":"bare-os-bare-libs","pageRef":188},{"kw":"bare-os-ctx-bare","pageRef":188},{"kw":"ctx","pageRef":188},{"kw":"bare","pageRef":188},{"kw":"library","pageRef":188},{"kw":"and","pageRef":188},{"kw":"drive","pageRef":188},{"kw":"bundles","pageRef":188},{"kw":"shell","pageRef":189},{"kw":"builtin","pageRef":189},{"kw":"pipeline","pageRef":189},{"kw":"jobs","pageRef":189},{"kw":"execline","pageRef":189},{"kw":"bare-os-shell","pageRef":189},{"kw":"sh-builtins","pageRef":189},{"kw":"bare","pageRef":189},{"kw":"os","pageRef":189},{"kw":"interactive","pageRef":189},{"kw":"issue","pageRef":189},{"kw":"7","pageRef":189},{"kw":"inspired","pageRef":189},{"kw":"subset","pageRef":189},{"kw":"simulated","pageRef":189},{"kw":"errexit","pageRef":189},{"kw":"compound","pageRef":189},{"kw":"background","pageRef":189},{"kw":"job","pageRef":189},{"kw":"redirect","pageRef":189},{"kw":"out","pageRef":189},{"kw":"alias","pageRef":189},{"kw":"use","pageRef":189},{"kw":"ssh","pageRef":190},{"kw":"sshd","pageRef":190},{"kw":"config","pageRef":190},{"kw":"security","pageRef":190},{"kw":"sshd_config","pageRef":190},{"kw":"openssh","pageRef":190},{"kw":"configuration","pageRef":190},{"kw":"file","pageRef":190},{"kw":"bare","pageRef":190},{"kw":"os","pageRef":190},{"kw":"subset","pageRef":190},{"kw":"bare-initd","pageRef":191},{"kw":"initctl","pageRef":191},{"kw":"service","pageRef":191},{"kw":"supervisor","pageRef":191},{"kw":"cron","pageRef":191},{"kw":"systemd","pageRef":191},{"kw":"systemctl","pageRef":191},{"kw":"control","pageRef":191},{"kw":"systemd-like","pageRef":191},{"kw":"subset","pageRef":191},{"kw":"list","pageRef":191},{"kw":"units","pageRef":191},{"kw":"restart","pageRef":191},{"kw":"scheduler","pageRef":191},{"kw":"tail","pageRef":191},{"kw":"errors","pageRef":191},{"kw":"git","pageRef":192},{"kw":"version control","pageRef":192},{"kw":"repository","pageRef":192},{"kw":"clone","pageRef":192},{"kw":"commit","pageRef":192},{"kw":"isomorphic-git","pageRef":192},{"kw":"bare","pageRef":192},{"kw":"os","pageRef":192},{"kw":"front-end","pageRef":192},{"kw":"new","pageRef":192},{"kw":"repo","pageRef":192},{"kw":"status","pageRef":192},{"kw":"over","pageRef":192},{"kw":"http","pageRef":192},{"kw":"needs","pageRef":192},{"kw":"remote","pageRef":192},{"kw":"fetch","pageRef":192},{"kw":"config","pageRef":192},{"kw":"local","pageRef":192},{"kw":"log","pageRef":192},{"kw":"one","pageRef":192},{"kw":"line","pageRef":192},{"kw":"handbook","pageRef":193},{"kw":"bare-os","pageRef":193},{"kw":"documentation","pageRef":193},{"kw":"narrative","pageRef":193},{"kw":"chapter","pageRef":193},{"kw":"bare","pageRef":193},{"kw":"os","pageRef":193},{"kw":"table","pageRef":193},{"kw":"contents","pageRef":193},{"kw":"and","pageRef":193},{"kw":"reading","pageRef":193},{"kw":"order","pageRef":193},{"kw":"bare-os-handbook","pageRef":193},{"kw":"of","pageRef":193},{"kw":"handbook","pageRef":194},{"kw":"bare-os","pageRef":194},{"kw":"documentation","pageRef":194},{"kw":"narrative","pageRef":194},{"kw":"chapter","pageRef":194},{"kw":"00","pageRef":194},{"kw":"preface","pageRef":194},{"kw":"why","pageRef":194},{"kw":"bare","pageRef":194},{"kw":"exists","pageRef":194},{"kw":"handbook-00-preface","pageRef":194},{"kw":"os","pageRef":194},{"kw":"handbook","pageRef":195},{"kw":"bare-os","pageRef":195},{"kw":"documentation","pageRef":195},{"kw":"narrative","pageRef":195},{"kw":"chapter","pageRef":195},{"kw":"01","pageRef":195},{"kw":"introduction","pageRef":195},{"kw":"what","pageRef":195},{"kw":"bare","pageRef":195},{"kw":"handbook-01-introduction","pageRef":195},{"kw":"1","pageRef":195},{"kw":"os","pageRef":195},{"kw":"is","pageRef":195},{"kw":"handbook","pageRef":196},{"kw":"bare-os","pageRef":196},{"kw":"documentation","pageRef":196},{"kw":"narrative","pageRef":196},{"kw":"chapter","pageRef":196},{"kw":"02","pageRef":196},{"kw":"blueprints","pageRef":196},{"kw":"architecture","pageRef":196},{"kw":"and","pageRef":196},{"kw":"trust","pageRef":196},{"kw":"handbook-02-blueprints","pageRef":196},{"kw":"2","pageRef":196},{"kw":"handbook","pageRef":197},{"kw":"bare-os","pageRef":197},{"kw":"documentation","pageRef":197},{"kw":"narrative","pageRef":197},{"kw":"chapter","pageRef":197},{"kw":"03","pageRef":197},{"kw":"protocol","pageRef":197},{"kw":"and","pageRef":197},{"kw":"disk","pageRef":197},{"kw":"mbr","pageRef":197},{"kw":"swarmdisk","pageRef":197},{"kw":"handbook-03-protocol-and-disk","pageRef":197},{"kw":"3","pageRef":197},{"kw":"handbook","pageRef":198},{"kw":"bare-os","pageRef":198},{"kw":"documentation","pageRef":198},{"kw":"narrative","pageRef":198},{"kw":"chapter","pageRef":198},{"kw":"04","pageRef":198},{"kw":"the","pageRef":198},{"kw":"booter","pageRef":198},{"kw":"runtime","pageRef":198},{"kw":"ctx","pageRef":198},{"kw":"vfs","pageRef":198},{"kw":"shell","pageRef":198},{"kw":"kernel","pageRef":198},{"kw":"services","pageRef":198},{"kw":"handbook-04-the-booter-runtime","pageRef":198},{"kw":"4","pageRef":198},{"kw":"handbook","pageRef":199},{"kw":"bare-os","pageRef":199},{"kw":"documentation","pageRef":199},{"kw":"narrative","pageRef":199},{"kw":"chapter","pageRef":199},{"kw":"05","pageRef":199},{"kw":"identity","pageRef":199},{"kw":"vault","pageRef":199},{"kw":"and","pageRef":199},{"kw":"hdms","pageRef":199},{"kw":"handbook-05-identity-vault-and-hdms","pageRef":199},{"kw":"5","pageRef":199},{"kw":"handbook","pageRef":200},{"kw":"bare-os","pageRef":200},{"kw":"documentation","pageRef":200},{"kw":"narrative","pageRef":200},{"kw":"chapter","pageRef":200},{"kw":"06","pageRef":200},{"kw":"kernel","pageRef":200},{"kw":"and","pageRef":200},{"kw":"binaries","pageRef":200},{"kw":"bin","pageRef":200},{"kw":"utilities","pageRef":200},{"kw":"handbook-06-kernel-and-binaries","pageRef":200},{"kw":"6","pageRef":200},{"kw":"handbook","pageRef":201},{"kw":"bare-os","pageRef":201},{"kw":"documentation","pageRef":201},{"kw":"narrative","pageRef":201},{"kw":"chapter","pageRef":201},{"kw":"07","pageRef":201},{"kw":"operations","pageRef":201},{"kw":"and","pageRef":201},{"kw":"development","pageRef":201},{"kw":"release","pageRef":201},{"kw":"handbook-07-operations-and-development","pageRef":201},{"kw":"7","pageRef":201},{"kw":"handbook","pageRef":202},{"kw":"bare-os","pageRef":202},{"kw":"documentation","pageRef":202},{"kw":"narrative","pageRef":202},{"kw":"chapter","pageRef":202},{"kw":"08","pageRef":202},{"kw":"git","pageRef":202},{"kw":"on","pageRef":202},{"kw":"bare","pageRef":202},{"kw":"os","pageRef":202},{"kw":"handbook-08-git-on-bare-os","pageRef":202},{"kw":"8","pageRef":202},{"kw":"handbook","pageRef":203},{"kw":"bare-os","pageRef":203},{"kw":"documentation","pageRef":203},{"kw":"narrative","pageRef":203},{"kw":"chapter","pageRef":203},{"kw":"09","pageRef":203},{"kw":"posix","pageRef":203},{"kw":"utilities","pageRef":203},{"kw":"shell","pageRef":203},{"kw":"and","pageRef":203},{"kw":"vfs","pageRef":203},{"kw":"style","pageRef":203},{"kw":"builtins","pageRef":203},{"kw":"alignment","pageRef":203},{"kw":"handbook-09-posix-utilities-shell-and-vfs","pageRef":203},{"kw":"9","pageRef":203},{"kw":"posix-style","pageRef":203},{"kw":"handbook","pageRef":204},{"kw":"bare-os","pageRef":204},{"kw":"documentation","pageRef":204},{"kw":"narrative","pageRef":204},{"kw":"chapter","pageRef":204},{"kw":"10","pageRef":204},{"kw":"manpages","pageRef":204},{"kw":"and","pageRef":204},{"kw":"online","pageRef":204},{"kw":"help","pageRef":204},{"kw":"manual","pageRef":204},{"kw":"pages","pageRef":204},{"kw":"man","pageRef":204},{"kw":"handbook-10-manpages-and-online-help","pageRef":204},{"kw":"handbook","pageRef":205},{"kw":"bare-os","pageRef":205},{"kw":"documentation","pageRef":205},{"kw":"narrative","pageRef":205},{"kw":"chapter","pageRef":205},{"kw":"11","pageRef":205},{"kw":"kernel","pageRef":205},{"kw":"program","pageRef":205},{"kw":"and","pageRef":205},{"kw":"research","pageRef":205},{"kw":"ecosystem","pageRef":205},{"kw":"non","pageRef":205},{"kw":"goals","pageRef":205},{"kw":"handbook-11-kernel-program-and-research","pageRef":205},{"kw":"non-goals","pageRef":205},{"kw":"handbook","pageRef":206},{"kw":"bare-os","pageRef":206},{"kw":"documentation","pageRef":206},{"kw":"narrative","pageRef":206},{"kw":"chapter","pageRef":206},{"kw":"12","pageRef":206},{"kw":"p2p","pageRef":206},{"kw":"stack","pageRef":206},{"kw":"and","pageRef":206},{"kw":"posix","pageRef":206},{"kw":"boundaries","pageRef":206},{"kw":"native","pageRef":206},{"kw":"handbook-12-p2p-stack-and-posix-boundaries","pageRef":206},{"kw":"p2p-native","pageRef":206},{"kw":"vs","pageRef":206},{"kw":"developer","pageRef":207},{"kw":"devguide","pageRef":207},{"kw":"develop","pageRef":207},{"kw":"script","pageRef":207},{"kw":"asyncfunction","pageRef":207},{"kw":"ctx","pageRef":207},{"kw":"bare-os","pageRef":207},{"kw":"guide","pageRef":207},{"kw":"bare","pageRef":207},{"kw":"os","pageRef":207},{"kw":"index","pageRef":207},{"kw":"and","pageRef":207},{"kw":"reading","pageRef":207},{"kw":"order","pageRef":207},{"kw":"bare-os-developer-guide","pageRef":207},{"kw":"developer","pageRef":208},{"kw":"devguide","pageRef":208},{"kw":"develop","pageRef":208},{"kw":"script","pageRef":208},{"kw":"asyncfunction","pageRef":208},{"kw":"ctx","pageRef":208},{"kw":"bare-os","pageRef":208},{"kw":"guide","pageRef":208},{"kw":"01","pageRef":208},{"kw":"two","pageRef":208},{"kw":"runtimes","pageRef":208},{"kw":"host","pageRef":208},{"kw":"vs","pageRef":208},{"kw":"image","pageRef":208},{"kw":"chapter","pageRef":208},{"kw":"pear","pageRef":208},{"kw":"node","pageRef":208},{"kw":"devguide-01-two-runtimes-host-vs-image","pageRef":208},{"kw":"1","pageRef":208},{"kw":"in-image","pageRef":208},{"kw":"developer","pageRef":209},{"kw":"devguide","pageRef":209},{"kw":"develop","pageRef":209},{"kw":"script","pageRef":209},{"kw":"asyncfunction","pageRef":209},{"kw":"ctx","pageRef":209},{"kw":"bare-os","pageRef":209},{"kw":"guide","pageRef":209},{"kw":"02","pageRef":209},{"kw":"the","pageRef":209},{"kw":"context","pageRef":209},{"kw":"object","pageRef":209},{"kw":"chapter","pageRef":209},{"kw":"devguide-02-the-context-object","pageRef":209},{"kw":"2","pageRef":209},{"kw":"developer","pageRef":210},{"kw":"devguide","pageRef":210},{"kw":"develop","pageRef":210},{"kw":"script","pageRef":210},{"kw":"asyncfunction","pageRef":210},{"kw":"ctx","pageRef":210},{"kw":"bare-os","pageRef":210},{"kw":"guide","pageRef":210},{"kw":"03","pageRef":210},{"kw":"kernel","pageRef":210},{"kw":"boot","pageRef":210},{"kw":"init","pageRef":210},{"kw":"chapter","pageRef":210},{"kw":"and","pageRef":210},{"kw":"start","pageRef":210},{"kw":"devguide-03-kernel-boot-init","pageRef":210},{"kw":"3","pageRef":210},{"kw":"js","pageRef":210},{"kw":"developer","pageRef":211},{"kw":"devguide","pageRef":211},{"kw":"develop","pageRef":211},{"kw":"script","pageRef":211},{"kw":"asyncfunction","pageRef":211},{"kw":"ctx","pageRef":211},{"kw":"bare-os","pageRef":211},{"kw":"guide","pageRef":211},{"kw":"04","pageRef":211},{"kw":"user","pageRef":211},{"kw":"scripts","pageRef":211},{"kw":"and","pageRef":211},{"kw":"path","pageRef":211},{"kw":"chapter","pageRef":211},{"kw":"resolution","pageRef":211},{"kw":"devguide-04-user-scripts-and-path","pageRef":211},{"kw":"4","pageRef":211},{"kw":"developer","pageRef":212},{"kw":"devguide","pageRef":212},{"kw":"develop","pageRef":212},{"kw":"script","pageRef":212},{"kw":"asyncfunction","pageRef":212},{"kw":"ctx","pageRef":212},{"kw":"bare-os","pageRef":212},{"kw":"guide","pageRef":212},{"kw":"05","pageRef":212},{"kw":"modules","pageRef":212},{"kw":"and","pageRef":212},{"kw":"imports","pageRef":212},{"kw":"chapter","pageRef":212},{"kw":"import","pageRef":212},{"kw":"packaging","pageRef":212},{"kw":"the","pageRef":212},{"kw":"honest","pageRef":212},{"kw":"version","pageRef":212},{"kw":"devguide-05-modules-and-imports","pageRef":212},{"kw":"5","pageRef":212},{"kw":"developer","pageRef":213},{"kw":"devguide","pageRef":213},{"kw":"develop","pageRef":213},{"kw":"script","pageRef":213},{"kw":"asyncfunction","pageRef":213},{"kw":"ctx","pageRef":213},{"kw":"bare-os","pageRef":213},{"kw":"guide","pageRef":213},{"kw":"06","pageRef":213},{"kw":"extending","pageRef":213},{"kw":"bin","pageRef":213},{"kw":"coreutils","pageRef":213},{"kw":"chapter","pageRef":213},{"kw":"bare","pageRef":213},{"kw":"devguide-06-extending-bin-coreutils","pageRef":213},{"kw":"6","pageRef":213},{"kw":"bare-os-coreutils","pageRef":213},{"kw":"developer","pageRef":214},{"kw":"devguide","pageRef":214},{"kw":"develop","pageRef":214},{"kw":"script","pageRef":214},{"kw":"asyncfunction","pageRef":214},{"kw":"ctx","pageRef":214},{"kw":"bare-os","pageRef":214},{"kw":"guide","pageRef":214},{"kw":"07","pageRef":214},{"kw":"apps","pageRef":214},{"kw":"beyond","pageRef":214},{"kw":"the","pageRef":214},{"kw":"shell","pageRef":214},{"kw":"chapter","pageRef":214},{"kw":"devguide-07-apps-beyond-the-shell","pageRef":214},{"kw":"7","pageRef":214},{"kw":"developer","pageRef":215},{"kw":"devguide","pageRef":215},{"kw":"develop","pageRef":215},{"kw":"script","pageRef":215},{"kw":"asyncfunction","pageRef":215},{"kw":"ctx","pageRef":215},{"kw":"bare-os","pageRef":215},{"kw":"guide","pageRef":215},{"kw":"08","pageRef":215},{"kw":"testing","pageRef":215},{"kw":"and","pageRef":215},{"kw":"debugging","pageRef":215},{"kw":"chapter","pageRef":215},{"kw":"devguide-08-testing-and-debugging","pageRef":215},{"kw":"8","pageRef":215},{"kw":"developer","pageRef":216},{"kw":"devguide","pageRef":216},{"kw":"develop","pageRef":216},{"kw":"script","pageRef":216},{"kw":"asyncfunction","pageRef":216},{"kw":"ctx","pageRef":216},{"kw":"bare-os","pageRef":216},{"kw":"guide","pageRef":216},{"kw":"09","pageRef":216},{"kw":"security","pageRef":216},{"kw":"and","pageRef":216},{"kw":"trust","pageRef":216},{"kw":"chapter","pageRef":216},{"kw":"mindset","pageRef":216},{"kw":"devguide-09-security-and-trust","pageRef":216},{"kw":"9","pageRef":216},{"kw":"developer","pageRef":217},{"kw":"devguide","pageRef":217},{"kw":"develop","pageRef":217},{"kw":"script","pageRef":217},{"kw":"asyncfunction","pageRef":217},{"kw":"ctx","pageRef":217},{"kw":"bare-os","pageRef":217},{"kw":"guide","pageRef":217},{"kw":"10","pageRef":217},{"kw":"glossary","pageRef":217},{"kw":"and","pageRef":217},{"kw":"faq","pageRef":217},{"kw":"chapter","pageRef":217},{"kw":"devguide-10-glossary-and-faq","pageRef":217},{"kw":"developer","pageRef":218},{"kw":"devguide","pageRef":218},{"kw":"develop","pageRef":218},{"kw":"script","pageRef":218},{"kw":"asyncfunction","pageRef":218},{"kw":"ctx","pageRef":218},{"kw":"bare-os","pageRef":218},{"kw":"guide","pageRef":218},{"kw":"11","pageRef":218},{"kw":"kernel","pageRef":218},{"kw":"pear","pageRef":218},{"kw":"cookbook","pageRef":218},{"kw":"chapter","pageRef":218},{"kw":"extensions","pageRef":218},{"kw":"and","pageRef":218},{"kw":"workflows","pageRef":218},{"kw":"devguide-11-kernel-pear-cookbook","pageRef":218},{"kw":"developer","pageRef":219},{"kw":"devguide","pageRef":219},{"kw":"develop","pageRef":219},{"kw":"script","pageRef":219},{"kw":"asyncfunction","pageRef":219},{"kw":"ctx","pageRef":219},{"kw":"bare-os","pageRef":219},{"kw":"guide","pageRef":219},{"kw":"12","pageRef":219},{"kw":"bare","pageRef":219},{"kw":"modules","pageRef":219},{"kw":"and","pageRef":219},{"kw":"pear","pageRef":219},{"kw":"ecosystem","pageRef":219},{"kw":"chapter","pageRef":219},{"kw":"the","pageRef":219},{"kw":"devguide-12-bare-modules-and-pear-ecosystem","pageRef":219},{"kw":"developer","pageRef":220},{"kw":"devguide","pageRef":220},{"kw":"develop","pageRef":220},{"kw":"script","pageRef":220},{"kw":"asyncfunction","pageRef":220},{"kw":"ctx","pageRef":220},{"kw":"bare-os","pageRef":220},{"kw":"guide","pageRef":220},{"kw":"13","pageRef":220},{"kw":"holepunch","pageRef":220},{"kw":"contributor","pageRef":220},{"kw":"track","pageRef":220},{"kw":"chapter","pageRef":220},{"kw":"devguide-13-holepunch-contributor-track","pageRef":220},{"kw":"developer","pageRef":221},{"kw":"devguide","pageRef":221},{"kw":"develop","pageRef":221},{"kw":"script","pageRef":221},{"kw":"asyncfunction","pageRef":221},{"kw":"ctx","pageRef":221},{"kw":"bare-os","pageRef":221},{"kw":"guide","pageRef":221},{"kw":"13","pageRef":221},{"kw":"privacy","pageRef":221},{"kw":"telemetry","pageRef":221},{"kw":"pii","pageRef":221},{"kw":"and","pageRef":221},{"kw":"capability","pageRef":221},{"kw":"word","pageRef":221},{"kw":"devguide-13-privacy-telemetry-pii","pageRef":221},{"kw":"10","pageRef":221},{"kw":"developer","pageRef":222},{"kw":"devguide","pageRef":222},{"kw":"develop","pageRef":222},{"kw":"script","pageRef":222},{"kw":"asyncfunction","pageRef":222},{"kw":"ctx","pageRef":222},{"kw":"bare-os","pageRef":222},{"kw":"guide","pageRef":222},{"kw":"14","pageRef":222},{"kw":"how","pageRef":222},{"kw":"to","pageRef":222},{"kw":"add","pageRef":222},{"kw":"seed","pageRef":222},{"kw":"rpc","pageRef":222},{"kw":"devguide-14-how-to-add-seed-rpc","pageRef":222},{"kw":"a","pageRef":222},{"kw":"developer","pageRef":223},{"kw":"devguide","pageRef":223},{"kw":"develop","pageRef":223},{"kw":"script","pageRef":223},{"kw":"asyncfunction","pageRef":223},{"kw":"ctx","pageRef":223},{"kw":"bare-os","pageRef":223},{"kw":"guide","pageRef":223},{"kw":"15","pageRef":223},{"kw":"how","pageRef":223},{"kw":"to","pageRef":223},{"kw":"add","pageRef":223},{"kw":"proc","pageRef":223},{"kw":"node","pageRef":223},{"kw":"bare","pageRef":223},{"kw":"devguide-15-how-to-add-proc-node","pageRef":223},{"kw":"a","pageRef":223},{"kw":"bare_os","pageRef":223},{"kw":"developer","pageRef":224},{"kw":"devguide","pageRef":224},{"kw":"develop","pageRef":224},{"kw":"script","pageRef":224},{"kw":"asyncfunction","pageRef":224},{"kw":"ctx","pageRef":224},{"kw":"bare-os","pageRef":224},{"kw":"guide","pageRef":224},{"kw":"16","pageRef":224},{"kw":"how","pageRef":224},{"kw":"to","pageRef":224},{"kw":"add","pageRef":224},{"kw":"bin","pageRef":224},{"kw":"utility","pageRef":224},{"kw":"devguide-16-how-to-add-bin-utility","pageRef":224},{"kw":"a","pageRef":224},{"kw":"developer","pageRef":225},{"kw":"devguide","pageRef":225},{"kw":"develop","pageRef":225},{"kw":"script","pageRef":225},{"kw":"asyncfunction","pageRef":225},{"kw":"ctx","pageRef":225},{"kw":"bare-os","pageRef":225},{"kw":"guide","pageRef":225},{"kw":"17","pageRef":225},{"kw":"how","pageRef":225},{"kw":"to","pageRef":225},{"kw":"add","pageRef":225},{"kw":"shell","pageRef":225},{"kw":"builtin","pageRef":225},{"kw":"safely","pageRef":225},{"kw":"devguide-17-how-to-add-shell-builtin","pageRef":225},{"kw":"a","pageRef":225},{"kw":"developer","pageRef":226},{"kw":"devguide","pageRef":226},{"kw":"develop","pageRef":226},{"kw":"script","pageRef":226},{"kw":"asyncfunction","pageRef":226},{"kw":"ctx","pageRef":226},{"kw":"bare-os","pageRef":226},{"kw":"guide","pageRef":226},{"kw":"18","pageRef":226},{"kw":"how","pageRef":226},{"kw":"to","pageRef":226},{"kw":"add","pageRef":226},{"kw":"shell","pageRef":226},{"kw":"grammar","pageRef":226},{"kw":"feature","pageRef":226},{"kw":"safely","pageRef":226},{"kw":"devguide-18-how-to-add-shell-grammar-feature","pageRef":226},{"kw":"a","pageRef":226},{"kw":"developer","pageRef":227},{"kw":"devguide","pageRef":227},{"kw":"develop","pageRef":227},{"kw":"script","pageRef":227},{"kw":"asyncfunction","pageRef":227},{"kw":"ctx","pageRef":227},{"kw":"bare-os","pageRef":227},{"kw":"guide","pageRef":227},{"kw":"19","pageRef":227},{"kw":"how","pageRef":227},{"kw":"to","pageRef":227},{"kw":"fish","pageRef":227},{"kw":"keybinding","pageRef":227},{"kw":"completer","pageRef":227},{"kw":"extend","pageRef":227},{"kw":"style","pageRef":227},{"kw":"keybindings","pageRef":227},{"kw":"and","pageRef":227},{"kw":"completion","pageRef":227},{"kw":"devguide-19-how-to-fish-keybinding-completer","pageRef":227},{"kw":"fish-style","pageRef":227},{"kw":"developer","pageRef":228},{"kw":"devguide","pageRef":228},{"kw":"develop","pageRef":228},{"kw":"script","pageRef":228},{"kw":"asyncfunction","pageRef":228},{"kw":"ctx","pageRef":228},{"kw":"bare-os","pageRef":228},{"kw":"guide","pageRef":228},{"kw":"20","pageRef":228},{"kw":"tui","pageRef":228},{"kw":"and","pageRef":228},{"kw":"sdk","pageRef":228},{"kw":"chapter","pageRef":228},{"kw":"guest","pageRef":228},{"kw":"framework","pageRef":228},{"kw":"devguide-20-tui-and-sdk","pageRef":228},{"kw":"developer","pageRef":229},{"kw":"devguide","pageRef":229},{"kw":"develop","pageRef":229},{"kw":"script","pageRef":229},{"kw":"asyncfunction","pageRef":229},{"kw":"ctx","pageRef":229},{"kw":"bare-os","pageRef":229},{"kw":"guide","pageRef":229},{"kw":"bare","pageRef":229},{"kw":"boot","pageRef":229},{"kw":"kernel","pageRef":229},{"kw":"phase","pageRef":229},{"kw":"alignment","pageRef":229},{"kw":"stock","pageRef":229},{"kw":"init","pageRef":229},{"kw":"phases","pageRef":229},{"kw":"devguide-bare-boot-kernel-phase-alignment","pageRef":229},{"kw":"bare-boot","pageRef":229},{"kw":"vs","pageRef":229},{"kw":"js","pageRef":229},{"kw":"developer","pageRef":230},{"kw":"devguide","pageRef":230},{"kw":"develop","pageRef":230},{"kw":"script","pageRef":230},{"kw":"asyncfunction","pageRef":230},{"kw":"ctx","pageRef":230},{"kw":"bare-os","pageRef":230},{"kw":"guide","pageRef":230},{"kw":"kernel","pageRef":230},{"kw":"explain","pageRef":230},{"kw":"and","pageRef":230},{"kw":"doctor","pageRef":230},{"kw":"conventions","pageRef":230},{"kw":"devguide-kernel-explain-and-doctor-conventions","pageRef":230},{"kw":"kernel-explain","pageRef":230},{"kw":"developer","pageRef":231},{"kw":"devguide","pageRef":231},{"kw":"develop","pageRef":231},{"kw":"script","pageRef":231},{"kw":"asyncfunction","pageRef":231},{"kw":"ctx","pageRef":231},{"kw":"bare-os","pageRef":231},{"kw":"guide","pageRef":231},{"kw":"kernel","pageRef":231},{"kw":"program","pageRef":231},{"kw":"governed","pageRef":231},{"kw":"expansion","pageRef":231},{"kw":"devguide-kernel-program","pageRef":231},{"kw":"developer","pageRef":232},{"kw":"devguide","pageRef":232},{"kw":"develop","pageRef":232},{"kw":"script","pageRef":232},{"kw":"asyncfunction","pageRef":232},{"kw":"ctx","pageRef":232},{"kw":"bare-os","pageRef":232},{"kw":"guide","pageRef":232},{"kw":"naming","pageRef":232},{"kw":"conventions","pageRef":232},{"kw":"first","pageRef":232},{"kw":"party","pageRef":232},{"kw":"vendored","pageRef":232},{"kw":"devguide-naming-conventions","pageRef":232},{"kw":"first-party","pageRef":232},{"kw":"vs","pageRef":232},{"kw":"developer","pageRef":233},{"kw":"devguide","pageRef":233},{"kw":"develop","pageRef":233},{"kw":"script","pageRef":233},{"kw":"asyncfunction","pageRef":233},{"kw":"ctx","pageRef":233},{"kw":"bare-os","pageRef":233},{"kw":"guide","pageRef":233},{"kw":"naming","pageRef":233},{"kw":"migrations","pageRef":233},{"kw":"and","pageRef":233},{"kw":"contract","pageRef":233},{"kw":"devguide-naming-migrations","pageRef":233},{"kw":"developer","pageRef":234},{"kw":"devguide","pageRef":234},{"kw":"develop","pageRef":234},{"kw":"script","pageRef":234},{"kw":"asyncfunction","pageRef":234},{"kw":"ctx","pageRef":234},{"kw":"bare-os","pageRef":234},{"kw":"guide","pageRef":234},{"kw":"node","pageRef":234},{"kw":"to","pageRef":234},{"kw":"bare","pageRef":234},{"kw":"modules","pageRef":234},{"kw":"built","pageRef":234},{"kw":"ins","pageRef":234},{"kw":"pear","pageRef":234},{"kw":"guest","pageRef":234},{"kw":"safe","pageRef":234},{"kw":"devguide-node-to-bare-modules","pageRef":234},{"kw":"built-ins","pageRef":234},{"kw":"guest-safe","pageRef":234},{"kw":"docs","pageRef":235},{"kw":"documentation","pageRef":235},{"kw":"bare-os","pageRef":235},{"kw":"reference","pageRef":235},{"kw":"markdown","pageRef":235},{"kw":"adr","pageRef":235},{"kw":"0001","pageRef":235},{"kw":"kernel","pageRef":235},{"kw":"subsystem","pageRef":235},{"kw":"boundaries","pageRef":235},{"kw":"booter","pageRef":235},{"kw":"image","pageRef":235},{"kw":"docs-adr-0001-kernel-subsystem-boundaries","pageRef":235},{"kw":"vs","pageRef":235},{"kw":"docs","pageRef":236},{"kw":"documentation","pageRef":236},{"kw":"bare-os","pageRef":236},{"kw":"reference","pageRef":236},{"kw":"markdown","pageRef":236},{"kw":"adr","pageRef":236},{"kw":"0001","pageRef":236},{"kw":"two","pageRef":236},{"kw":"drive","pageRef":236},{"kw":"p2p","pageRef":236},{"kw":"model","pageRef":236},{"kw":"and","pageRef":236},{"kw":"swarm","pageRef":236},{"kw":"centric","pageRef":236},{"kw":"replication","pageRef":236},{"kw":"docs-adr-0001-two-drive-p2p-model","pageRef":236},{"kw":"two-drive","pageRef":236},{"kw":"swarm-centric","pageRef":236},{"kw":"docs","pageRef":237},{"kw":"documentation","pageRef":237},{"kw":"bare-os","pageRef":237},{"kw":"reference","pageRef":237},{"kw":"markdown","pageRef":237},{"kw":"adr","pageRef":237},{"kw":"0002","pageRef":237},{"kw":"deny","pageRef":237},{"kw":"default","pageRef":237},{"kw":"rpc","pageRef":237},{"kw":"hrpc","pageRef":237},{"kw":"seed","pageRef":237},{"kw":"and","pageRef":237},{"kw":"docs-adr-0002-deny-default-rpc-hrpc","pageRef":237},{"kw":"deny-by-default","pageRef":237},{"kw":"docs","pageRef":238},{"kw":"documentation","pageRef":238},{"kw":"bare-os","pageRef":238},{"kw":"reference","pageRef":238},{"kw":"markdown","pageRef":238},{"kw":"adr","pageRef":238},{"kw":"0003","pageRef":238},{"kw":"posix","pageRef":238},{"kw":"facade","pageRef":238},{"kw":"no","pageRef":238},{"kw":"fork","pageRef":238},{"kw":"like","pageRef":238},{"kw":"without","pageRef":238},{"kw":"linux","pageRef":238},{"kw":"abi","pageRef":238},{"kw":"docs-adr-0003-posix-facade-no-fork","pageRef":238},{"kw":"posix-like","pageRef":238},{"kw":"or","pageRef":238},{"kw":"docs","pageRef":239},{"kw":"documentation","pageRef":239},{"kw":"bare-os","pageRef":239},{"kw":"reference","pageRef":239},{"kw":"markdown","pageRef":239},{"kw":"adr","pageRef":239},{"kw":"0004","pageRef":239},{"kw":"extension","pageRef":239},{"kw":"trust","pageRef":239},{"kw":"graph","pageRef":239},{"kw":"kernel","pageRef":239},{"kw":"ext","pageRef":239},{"kw":"semver","pageRef":239},{"kw":"provides","pageRef":239},{"kw":"and","pageRef":239},{"kw":"pins","pageRef":239},{"kw":"docs-adr-0004-extension-trust-graph","pageRef":239},{"kw":"d","pageRef":239},{"kw":"docs","pageRef":240},{"kw":"documentation","pageRef":240},{"kw":"bare-os","pageRef":240},{"kw":"reference","pageRef":240},{"kw":"markdown","pageRef":240},{"kw":"adr","pageRef":240},{"kw":"0005","pageRef":240},{"kw":"observability","pageRef":240},{"kw":"boundaries","pageRef":240},{"kw":"guest","pageRef":240},{"kw":"proc","pageRef":240},{"kw":"host","pageRef":240},{"kw":"logging","pageRef":240},{"kw":"docs-adr-0005-observability-boundaries","pageRef":240},{"kw":"vs","pageRef":240},{"kw":"docs","pageRef":241},{"kw":"documentation","pageRef":241},{"kw":"bare-os","pageRef":241},{"kw":"reference","pageRef":241},{"kw":"markdown","pageRef":241},{"kw":"adr","pageRef":241},{"kw":"readme","pageRef":241},{"kw":"architecture","pageRef":241},{"kw":"decision","pageRef":241},{"kw":"records","pageRef":241},{"kw":"p2p","pageRef":241},{"kw":"first","pageRef":241},{"kw":"docs-adr-readme","pageRef":241},{"kw":"p2p-first","pageRef":241},{"kw":"docs","pageRef":242},{"kw":"documentation","pageRef":242},{"kw":"bare-os","pageRef":242},{"kw":"reference","pageRef":242},{"kw":"markdown","pageRef":242},{"kw":"architecture","pageRef":242},{"kw":"adr","pageRef":242},{"kw":"hyperbee","pageRef":242},{"kw":"guest","pageRef":242},{"kw":"index","pageRef":242},{"kw":"optional","pageRef":242},{"kw":"style","pageRef":242},{"kw":"hint","pageRef":242},{"kw":"docs-architecture-adr-hyperbee-guest-index","pageRef":242},{"kw":"hyperbee-style","pageRef":242},{"kw":"docs","pageRef":243},{"kw":"documentation","pageRef":243},{"kw":"bare-os","pageRef":243},{"kw":"reference","pageRef":243},{"kw":"markdown","pageRef":243},{"kw":"architecture","pageRef":243},{"kw":"kernel","pageRef":243},{"kw":"contract","pageRef":243},{"kw":"stock","pageRef":243},{"kw":"booter","pageRef":243},{"kw":"guest","pageRef":243},{"kw":"image","pageRef":243},{"kw":"docs-architecture-kernel_contract","pageRef":243},{"kw":"docs","pageRef":244},{"kw":"documentation","pageRef":244},{"kw":"bare-os","pageRef":244},{"kw":"reference","pageRef":244},{"kw":"markdown","pageRef":244},{"kw":"architecture","pageRef":244},{"kw":"kernel","pageRef":244},{"kw":"subsystems","pageRef":244},{"kw":"subsystem","pageRef":244},{"kw":"map","pageRef":244},{"kw":"booter","pageRef":244},{"kw":"guest","pageRef":244},{"kw":"image","pageRef":244},{"kw":"docs-architecture-kernel-subsystems","pageRef":244},{"kw":"docs","pageRef":245},{"kw":"documentation","pageRef":245},{"kw":"bare-os","pageRef":245},{"kw":"reference","pageRef":245},{"kw":"markdown","pageRef":245},{"kw":"architecture","pageRef":245},{"kw":"posix","pageRef":245},{"kw":"declared","pageRef":245},{"kw":"profile","pageRef":245},{"kw":"like","pageRef":245},{"kw":"bare","pageRef":245},{"kw":"docs-architecture-posix_declared_profile","pageRef":245},{"kw":"posix-like","pageRef":245},{"kw":"os","pageRef":245},{"kw":"docs","pageRef":246},{"kw":"documentation","pageRef":246},{"kw":"bare-os","pageRef":246},{"kw":"reference","pageRef":246},{"kw":"markdown","pageRef":246},{"kw":"audit","pageRef":246},{"kw":"ctx","pageRef":246},{"kw":"bare","pageRef":246},{"kw":"notes","pageRef":246},{"kw":"code","pageRef":246},{"kw":"docs-audit-ctx-bare-audit-notes","pageRef":246},{"kw":"docs","pageRef":247},{"kw":"documentation","pageRef":247},{"kw":"bare-os","pageRef":247},{"kw":"reference","pageRef":247},{"kw":"markdown","pageRef":247},{"kw":"audit","pageRef":247},{"kw":"holepunch","pageRef":247},{"kw":"lockfile","pageRef":247},{"kw":"drift","pageRef":247},{"kw":"dashboard","pageRef":247},{"kw":"docs-audit-holepunch-lockfile-drift-dashboard","pageRef":247},{"kw":"docs","pageRef":248},{"kw":"documentation","pageRef":248},{"kw":"bare-os","pageRef":248},{"kw":"reference","pageRef":248},{"kw":"markdown","pageRef":248},{"kw":"audit","pageRef":248},{"kw":"placeholder","pageRef":248},{"kw":"baseline","pageRef":248},{"kw":"and","pageRef":248},{"kw":"incomplete","pageRef":248},{"kw":"code","pageRef":248},{"kw":"authoritative","pageRef":248},{"kw":"docs-audit-placeholder_baseline","pageRef":248},{"kw":"incomplete-code","pageRef":248},{"kw":"docs","pageRef":249},{"kw":"documentation","pageRef":249},{"kw":"bare-os","pageRef":249},{"kw":"reference","pageRef":249},{"kw":"markdown","pageRef":249},{"kw":"binary","pageRef":249},{"kw":"release","pageRef":249},{"kw":"releases","pageRef":249},{"kw":"seeder","pageRef":249},{"kw":"booter","pageRef":249},{"kw":"docs-binary-release","pageRef":249},{"kw":"docs","pageRef":250},{"kw":"documentation","pageRef":250},{"kw":"bare-os","pageRef":250},{"kw":"reference","pageRef":250},{"kw":"markdown","pageRef":250},{"kw":"concepts","pageRef":250},{"kw":"boot","pageRef":250},{"kw":"and","pageRef":250},{"kw":"init","pageRef":250},{"kw":"timeline","pageRef":250},{"kw":"concept","pageRef":250},{"kw":"docs-concepts-boot-and-init-timeline","pageRef":250},{"kw":"docs","pageRef":251},{"kw":"documentation","pageRef":251},{"kw":"bare-os","pageRef":251},{"kw":"reference","pageRef":251},{"kw":"markdown","pageRef":251},{"kw":"concepts","pageRef":251},{"kw":"identity","pageRef":251},{"kw":"and","pageRef":251},{"kw":"vault","pageRef":251},{"kw":"concept","pageRef":251},{"kw":"docs-concepts-identity-and-vault","pageRef":251},{"kw":"docs","pageRef":252},{"kw":"documentation","pageRef":252},{"kw":"bare-os","pageRef":252},{"kw":"reference","pageRef":252},{"kw":"markdown","pageRef":252},{"kw":"concepts","pageRef":252},{"kw":"p2p","pageRef":252},{"kw":"swarm","pageRef":252},{"kw":"and","pageRef":252},{"kw":"protomux","pageRef":252},{"kw":"concept","pageRef":252},{"kw":"docs-concepts-p2p-swarm-and-protomux","pageRef":252},{"kw":"docs","pageRef":253},{"kw":"documentation","pageRef":253},{"kw":"bare-os","pageRef":253},{"kw":"reference","pageRef":253},{"kw":"markdown","pageRef":253},{"kw":"concepts","pageRef":253},{"kw":"posix","pageRef":253},{"kw":"stance","pageRef":253},{"kw":"concept","pageRef":253},{"kw":"docs-concepts-posix-stance","pageRef":253},{"kw":"docs","pageRef":254},{"kw":"documentation","pageRef":254},{"kw":"bare-os","pageRef":254},{"kw":"reference","pageRef":254},{"kw":"markdown","pageRef":254},{"kw":"concepts","pageRef":254},{"kw":"readme","pageRef":254},{"kw":"evergreen","pageRef":254},{"kw":"explainers","pageRef":254},{"kw":"docs-concepts-readme","pageRef":254},{"kw":"docs","pageRef":255},{"kw":"documentation","pageRef":255},{"kw":"bare-os","pageRef":255},{"kw":"reference","pageRef":255},{"kw":"markdown","pageRef":255},{"kw":"concepts","pageRef":255},{"kw":"two","pageRef":255},{"kw":"drive","pageRef":255},{"kw":"model","pageRef":255},{"kw":"concept","pageRef":255},{"kw":"docs-concepts-two-drive-model","pageRef":255},{"kw":"two-drive","pageRef":255},{"kw":"docs","pageRef":256},{"kw":"documentation","pageRef":256},{"kw":"bare-os","pageRef":256},{"kw":"reference","pageRef":256},{"kw":"markdown","pageRef":256},{"kw":"contributing","pageRef":256},{"kw":"bare","pageRef":256},{"kw":"docs-contributing-docs","pageRef":256},{"kw":"to","pageRef":256},{"kw":"os","pageRef":256},{"kw":"docs","pageRef":257},{"kw":"documentation","pageRef":257},{"kw":"bare-os","pageRef":257},{"kw":"reference","pageRef":257},{"kw":"markdown","pageRef":257},{"kw":"data","pageRef":257},{"kw":"readme","pageRef":257},{"kw":"machine","pageRef":257},{"kw":"readable","pageRef":257},{"kw":"doc","pageRef":257},{"kw":"docs-data-readme","pageRef":257},{"kw":"machine-readable","pageRef":257},{"kw":"docs","pageRef":258},{"kw":"documentation","pageRef":258},{"kw":"bare-os","pageRef":258},{"kw":"reference","pageRef":258},{"kw":"markdown","pageRef":258},{"kw":"deployment","pageRef":258},{"kw":"ota","pageRef":258},{"kw":"and","pageRef":258},{"kw":"bundles","pageRef":258},{"kw":"updates","pageRef":258},{"kw":"reproducible","pageRef":258},{"kw":"artifacts","pageRef":258},{"kw":"docs-deployment-ota_and_bundles","pageRef":258},{"kw":"docs","pageRef":259},{"kw":"documentation","pageRef":259},{"kw":"bare-os","pageRef":259},{"kw":"reference","pageRef":259},{"kw":"markdown","pageRef":259},{"kw":"design","pageRef":259},{"kw":"ctx","pageRef":259},{"kw":"pear","pageRef":259},{"kw":"surface","pageRef":259},{"kw":"and","pageRef":259},{"kw":"bare","pageRef":259},{"kw":"audit","pageRef":259},{"kw":"plan","pageRef":259},{"kw":"code","pageRef":259},{"kw":"implementation","pageRef":259},{"kw":"docs-design-ctx-pear-surface-and-bare-audit-plan","pageRef":259},{"kw":"docs","pageRef":260},{"kw":"documentation","pageRef":260},{"kw":"bare-os","pageRef":260},{"kw":"reference","pageRef":260},{"kw":"markdown","pageRef":260},{"kw":"design","pageRef":260},{"kw":"multi","pageRef":260},{"kw":"account","pageRef":260},{"kw":"personal","pageRef":260},{"kw":"subvolumes","pageRef":260},{"kw":"docs-design-multi-account-personal-subvolumes","pageRef":260},{"kw":"multi-account","pageRef":260},{"kw":"docs","pageRef":261},{"kw":"documentation","pageRef":261},{"kw":"bare-os","pageRef":261},{"kw":"reference","pageRef":261},{"kw":"markdown","pageRef":261},{"kw":"design","pageRef":261},{"kw":"p2p","pageRef":261},{"kw":"app","pageRef":261},{"kw":"store","pageRef":261},{"kw":"docs-design-p2p-app-store","pageRef":261},{"kw":"docs","pageRef":262},{"kw":"documentation","pageRef":262},{"kw":"bare-os","pageRef":262},{"kw":"reference","pageRef":262},{"kw":"markdown","pageRef":262},{"kw":"faq","pageRef":262},{"kw":"frequently","pageRef":262},{"kw":"asked","pageRef":262},{"kw":"questions","pageRef":262},{"kw":"docs-faq","pageRef":262},{"kw":"docs","pageRef":263},{"kw":"documentation","pageRef":263},{"kw":"bare-os","pageRef":263},{"kw":"reference","pageRef":263},{"kw":"markdown","pageRef":263},{"kw":"get","pageRef":263},{"kw":"started","pageRef":263},{"kw":"with","pageRef":263},{"kw":"bare","pageRef":263},{"kw":"docs-get-started","pageRef":263},{"kw":"os","pageRef":263},{"kw":"docs","pageRef":264},{"kw":"documentation","pageRef":264},{"kw":"bare-os","pageRef":264},{"kw":"reference","pageRef":264},{"kw":"markdown","pageRef":264},{"kw":"glossary","pageRef":264},{"kw":"canonical","pageRef":264},{"kw":"docs-glossary","pageRef":264},{"kw":"docs","pageRef":265},{"kw":"documentation","pageRef":265},{"kw":"bare-os","pageRef":265},{"kw":"reference","pageRef":265},{"kw":"markdown","pageRef":265},{"kw":"guides","pageRef":265},{"kw":"guest","pageRef":265},{"kw":"pear","pageRef":265},{"kw":"and","pageRef":265},{"kw":"appstore","pageRef":265},{"kw":"workflow","pageRef":265},{"kw":"development","pageRef":265},{"kw":"p2p","pageRef":265},{"kw":"app","pageRef":265},{"kw":"store","pageRef":265},{"kw":"docs-guides-guest-pear-and-appstore-workflow","pageRef":265},{"kw":"docs","pageRef":266},{"kw":"documentation","pageRef":266},{"kw":"bare-os","pageRef":266},{"kw":"reference","pageRef":266},{"kw":"markdown","pageRef":266},{"kw":"images","pageRef":266},{"kw":"readme","pageRef":266},{"kw":"docs-images-readme","pageRef":266},{"kw":"docs","pageRef":267},{"kw":"documentation","pageRef":267},{"kw":"bare-os","pageRef":267},{"kw":"reference","pageRef":267},{"kw":"markdown","pageRef":267},{"kw":"operations","pageRef":267},{"kw":"reliability","pageRef":267},{"kw":"playbook","pageRef":267},{"kw":"docs-operations-reliability-playbook","pageRef":267},{"kw":"docs","pageRef":268},{"kw":"documentation","pageRef":268},{"kw":"bare-os","pageRef":268},{"kw":"reference","pageRef":268},{"kw":"markdown","pageRef":268},{"kw":"pear","pageRef":268},{"kw":"run","pageRef":268},{"kw":"channels","pageRef":268},{"kw":"legacy","pageRef":268},{"kw":"notes","pageRef":268},{"kw":"docs-pear-run","pageRef":268},{"kw":"docs","pageRef":269},{"kw":"documentation","pageRef":269},{"kw":"bare-os","pageRef":269},{"kw":"reference","pageRef":269},{"kw":"markdown","pageRef":269},{"kw":"bare","pageRef":269},{"kw":"os","pageRef":269},{"kw":"readme","pageRef":269},{"kw":"hub","pageRef":269},{"kw":"maps","pageRef":269},{"kw":"and","pageRef":269},{"kw":"where","pageRef":269},{"kw":"read","pageRef":269},{"kw":"next","pageRef":269},{"kw":"bare-os-docs","pageRef":269},{"kw":"to","pageRef":269},{"kw":"docs","pageRef":270},{"kw":"documentation","pageRef":270},{"kw":"bare-os","pageRef":270},{"kw":"reference","pageRef":270},{"kw":"markdown","pageRef":270},{"kw":"agent","pageRef":270},{"kw":"os","pageRef":270},{"kw":"automation","pageRef":270},{"kw":"next","pageRef":270},{"kw":"slices","pageRef":270},{"kw":"docs-reference-agent-os-automation-next-slices","pageRef":270},{"kw":"docs","pageRef":271},{"kw":"documentation","pageRef":271},{"kw":"bare-os","pageRef":271},{"kw":"reference","pageRef":271},{"kw":"markdown","pageRef":271},{"kw":"architecture","pageRef":271},{"kw":"data","pageRef":271},{"kw":"flow","pageRef":271},{"kw":"end","pageRef":271},{"kw":"docs-reference-architecture-data-flow","pageRef":271},{"kw":"end-to-end","pageRef":271},{"kw":"docs","pageRef":272},{"kw":"documentation","pageRef":272},{"kw":"bare-os","pageRef":272},{"kw":"reference","pageRef":272},{"kw":"markdown","pageRef":272},{"kw":"blind","pageRef":272},{"kw":"peer","pageRef":272},{"kw":"hint","pageRef":272},{"kw":"recipe","pageRef":272},{"kw":"bare","pageRef":272},{"kw":"docs-reference-blind-peer-hint-recipe","pageRef":272},{"kw":"os","pageRef":272},{"kw":"docs","pageRef":273},{"kw":"documentation","pageRef":273},{"kw":"bare-os","pageRef":273},{"kw":"reference","pageRef":273},{"kw":"markdown","pageRef":273},{"kw":"capability","pageRef":273},{"kw":"words","pageRef":273},{"kw":"kernel","pageRef":273},{"kw":"authoritative","pageRef":273},{"kw":"map","pageRef":273},{"kw":"docs-reference-capability-words","pageRef":273},{"kw":"docs","pageRef":274},{"kw":"documentation","pageRef":274},{"kw":"bare-os","pageRef":274},{"kw":"reference","pageRef":274},{"kw":"markdown","pageRef":274},{"kw":"compatibility","pageRef":274},{"kw":"matrix","pageRef":274},{"kw":"bare","pageRef":274},{"kw":"docs-reference-compatibility-matrix","pageRef":274},{"kw":"os","pageRef":274},{"kw":"docs","pageRef":275},{"kw":"documentation","pageRef":275},{"kw":"bare-os","pageRef":275},{"kw":"reference","pageRef":275},{"kw":"markdown","pageRef":275},{"kw":"conformance","pageRef":275},{"kw":"dashboard","pageRef":275},{"kw":"posix","pageRef":275},{"kw":"utilities","pageRef":275},{"kw":"sketch","pageRef":275},{"kw":"docs-reference-conformance-dashboard","pageRef":275},{"kw":"docs","pageRef":276},{"kw":"documentation","pageRef":276},{"kw":"bare-os","pageRef":276},{"kw":"reference","pageRef":276},{"kw":"markdown","pageRef":276},{"kw":"conformance","pageRef":276},{"kw":"matrix","pageRef":276},{"kw":"posix","pageRef":276},{"kw":"susv4","pageRef":276},{"kw":"bare","pageRef":276},{"kw":"docs-reference-conformance-matrix","pageRef":276},{"kw":"os","pageRef":276},{"kw":"docs","pageRef":277},{"kw":"documentation","pageRef":277},{"kw":"bare-os","pageRef":277},{"kw":"reference","pageRef":277},{"kw":"markdown","pageRef":277},{"kw":"ctx","pageRef":277},{"kw":"api","pageRef":277},{"kw":"versioning","pageRef":277},{"kw":"policy","pageRef":277},{"kw":"docs-reference-ctx-api-versioning","pageRef":277},{"kw":"docs","pageRef":278},{"kw":"documentation","pageRef":278},{"kw":"bare-os","pageRef":278},{"kw":"reference","pageRef":278},{"kw":"markdown","pageRef":278},{"kw":"ctx","pageRef":278},{"kw":"tui","pageRef":278},{"kw":"sdk","pageRef":278},{"kw":"api","pageRef":278},{"kw":"docs-reference-ctx-tui","pageRef":278},{"kw":"docs","pageRef":279},{"kw":"documentation","pageRef":279},{"kw":"bare-os","pageRef":279},{"kw":"reference","pageRef":279},{"kw":"markdown","pageRef":279},{"kw":"environment","pageRef":279},{"kw":"and","pageRef":279},{"kw":"posix","pageRef":279},{"kw":"appendix","pageRef":279},{"kw":"variables","pageRef":279},{"kw":"docs-reference-environment-and-posix-appendix","pageRef":279},{"kw":"docs","pageRef":280},{"kw":"documentation","pageRef":280},{"kw":"bare-os","pageRef":280},{"kw":"reference","pageRef":280},{"kw":"markdown","pageRef":280},{"kw":"feature","pageRef":280},{"kw":"roadmap","pageRef":280},{"kw":"kernel","pageRef":280},{"kw":"capability","pageRef":280},{"kw":"program","pageRef":280},{"kw":"status","pageRef":280},{"kw":"docs-reference-feature-roadmap","pageRef":280},{"kw":"docs","pageRef":281},{"kw":"documentation","pageRef":281},{"kw":"bare-os","pageRef":281},{"kw":"reference","pageRef":281},{"kw":"markdown","pageRef":281},{"kw":"holepunch","pageRef":281},{"kw":"stack","pageRef":281},{"kw":"alignment","pageRef":281},{"kw":"implementation","pageRef":281},{"kw":"docs-reference-holepunch-stack-alignment-implementation","pageRef":281},{"kw":"docs","pageRef":282},{"kw":"documentation","pageRef":282},{"kw":"bare-os","pageRef":282},{"kw":"reference","pageRef":282},{"kw":"markdown","pageRef":282},{"kw":"http","pageRef":282},{"kw":"curl","pageRef":282},{"kw":"and","pageRef":282},{"kw":"wget","pageRef":282},{"kw":"clients","pageRef":282},{"kw":"bare","pageRef":282},{"kw":"docs-reference-http-curl-and-wget","pageRef":282},{"kw":"on","pageRef":282},{"kw":"os","pageRef":282},{"kw":"docs","pageRef":283},{"kw":"documentation","pageRef":283},{"kw":"bare-os","pageRef":283},{"kw":"reference","pageRef":283},{"kw":"markdown","pageRef":283},{"kw":"hyperswarm","pageRef":283},{"kw":"protomux","pageRef":283},{"kw":"teardown","pageRef":283},{"kw":"and","pageRef":283},{"kw":"booter","pageRef":283},{"kw":"docs-reference-hyperswarm-protomux-teardown","pageRef":283},{"kw":"docs","pageRef":284},{"kw":"documentation","pageRef":284},{"kw":"bare-os","pageRef":284},{"kw":"reference","pageRef":284},{"kw":"markdown","pageRef":284},{"kw":"irc","pageRef":284},{"kw":"client","pageRef":284},{"kw":"bin","pageRef":284},{"kw":"modern","pageRef":284},{"kw":"tui","pageRef":284},{"kw":"docs-reference-irc-client","pageRef":284},{"kw":"docs","pageRef":285},{"kw":"documentation","pageRef":285},{"kw":"bare-os","pageRef":285},{"kw":"reference","pageRef":285},{"kw":"markdown","pageRef":285},{"kw":"kernel","pageRef":285},{"kw":"capabilities","pageRef":285},{"kw":"index","pageRef":285},{"kw":"capability","pageRef":285},{"kw":"words","pageRef":285},{"kw":"env","pageRef":285},{"kw":"proc","pageRef":285},{"kw":"ctx","pageRef":285},{"kw":"docs-reference-kernel-capabilities-index","pageRef":285},{"kw":"docs","pageRef":286},{"kw":"documentation","pageRef":286},{"kw":"bare-os","pageRef":286},{"kw":"reference","pageRef":286},{"kw":"markdown","pageRef":286},{"kw":"kernel","pageRef":286},{"kw":"extensions","pageRef":286},{"kw":"capability","pageRef":286},{"kw":"specs","pageRef":286},{"kw":"index","pageRef":286},{"kw":"docs-reference-kernel-extensions-capability-specs","pageRef":286},{"kw":"docs","pageRef":287},{"kw":"documentation","pageRef":287},{"kw":"bare-os","pageRef":287},{"kw":"reference","pageRef":287},{"kw":"markdown","pageRef":287},{"kw":"kernel","pageRef":287},{"kw":"extensions","pageRef":287},{"kw":"generated","pageRef":287},{"kw":"toc","pageRef":287},{"kw":"docs-reference-kernel-extensions-generated-toc","pageRef":287},{"kw":"docs","pageRef":288},{"kw":"documentation","pageRef":288},{"kw":"bare-os","pageRef":288},{"kw":"reference","pageRef":288},{"kw":"markdown","pageRef":288},{"kw":"kernel","pageRef":288},{"kw":"extensions","pageRef":288},{"kw":"and","pageRef":288},{"kw":"feature","pageRef":288},{"kw":"matrix","pageRef":288},{"kw":"bare","pageRef":288},{"kw":"docs-reference-kernel-extensions","pageRef":288},{"kw":"os","pageRef":288},{"kw":"docs","pageRef":289},{"kw":"documentation","pageRef":289},{"kw":"bare-os","pageRef":289},{"kw":"reference","pageRef":289},{"kw":"markdown","pageRef":289},{"kw":"kernel","pageRef":289},{"kw":"image","pageRef":289},{"kw":"sources","pageRef":289},{"kw":"docs-reference-kernel-image","pageRef":289},{"kw":"docs","pageRef":290},{"kw":"documentation","pageRef":290},{"kw":"bare-os","pageRef":290},{"kw":"reference","pageRef":290},{"kw":"markdown","pageRef":290},{"kw":"kernel","pageRef":290},{"kw":"security","pageRef":290},{"kw":"subsystems","pageRef":290},{"kw":"identity","pageRef":290},{"kw":"handles","pageRef":290},{"kw":"audit","pageRef":290},{"kw":"acl","pageRef":290},{"kw":"docs-reference-kernel-security-subsystems","pageRef":290},{"kw":"docs","pageRef":291},{"kw":"documentation","pageRef":291},{"kw":"bare-os","pageRef":291},{"kw":"reference","pageRef":291},{"kw":"markdown","pageRef":291},{"kw":"naming","pageRef":291},{"kw":"alias","pageRef":291},{"kw":"matrix","pageRef":291},{"kw":"legacy","pageRef":291},{"kw":"canonical","pageRef":291},{"kw":"docs-reference-naming-alias-matrix","pageRef":291},{"kw":"docs","pageRef":292},{"kw":"documentation","pageRef":292},{"kw":"bare-os","pageRef":292},{"kw":"reference","pageRef":292},{"kw":"markdown","pageRef":292},{"kw":"node","pageRef":292},{"kw":"vs","pageRef":292},{"kw":"bare","pageRef":292},{"kw":"host","pageRef":292},{"kw":"matrix","pageRef":292},{"kw":"docs-reference-node-vs-bare-host-matrix","pageRef":292},{"kw":"docs","pageRef":293},{"kw":"documentation","pageRef":293},{"kw":"bare-os","pageRef":293},{"kw":"reference","pageRef":293},{"kw":"markdown","pageRef":293},{"kw":"observability","pageRef":293},{"kw":"contracts","pageRef":293},{"kw":"ndjson","pageRef":293},{"kw":"otel","pageRef":293},{"kw":"audit","pageRef":293},{"kw":"docs-reference-observability-contracts","pageRef":293},{"kw":"docs","pageRef":294},{"kw":"documentation","pageRef":294},{"kw":"bare-os","pageRef":294},{"kw":"reference","pageRef":294},{"kw":"markdown","pageRef":294},{"kw":"ota","pageRef":294},{"kw":"channels","pageRef":294},{"kw":"update","pageRef":294},{"kw":"sketch","pageRef":294},{"kw":"docs-reference-ota-channels","pageRef":294},{"kw":"docs","pageRef":295},{"kw":"documentation","pageRef":295},{"kw":"bare-os","pageRef":295},{"kw":"reference","pageRef":295},{"kw":"markdown","pageRef":295},{"kw":"out","pageRef":295},{"kw":"of","pageRef":295},{"kw":"scope","pageRef":295},{"kw":"and","pageRef":295},{"kw":"tooling","pageRef":295},{"kw":"docs-reference-out-of-scope-and-tooling","pageRef":295},{"kw":"docs","pageRef":296},{"kw":"documentation","pageRef":296},{"kw":"bare-os","pageRef":296},{"kw":"reference","pageRef":296},{"kw":"markdown","pageRef":296},{"kw":"package","pageRef":296},{"kw":"bare","pageRef":296},{"kw":"os","pageRef":296},{"kw":"booter","pageRef":296},{"kw":"docs-reference-package-bare-os-booter","pageRef":296},{"kw":"bare-os-booter","pageRef":296},{"kw":"docs","pageRef":297},{"kw":"documentation","pageRef":297},{"kw":"bare-os","pageRef":297},{"kw":"reference","pageRef":297},{"kw":"markdown","pageRef":297},{"kw":"package","pageRef":297},{"kw":"bare","pageRef":297},{"kw":"os","pageRef":297},{"kw":"coreutils","pageRef":297},{"kw":"and","pageRef":297},{"kw":"ci","pageRef":297},{"kw":"tests","pageRef":297},{"kw":"seeder","pageRef":297},{"kw":"build","pageRef":297},{"kw":"hook","pageRef":297},{"kw":"docs-reference-package-bare-os-coreutils-and-ci","pageRef":297},{"kw":"bare-os-coreutils","pageRef":297},{"kw":"docs","pageRef":298},{"kw":"documentation","pageRef":298},{"kw":"bare-os","pageRef":298},{"kw":"reference","pageRef":298},{"kw":"markdown","pageRef":298},{"kw":"package","pageRef":298},{"kw":"bare","pageRef":298},{"kw":"os","pageRef":298},{"kw":"protocol","pageRef":298},{"kw":"docs-reference-package-bare-os-protocol","pageRef":298},{"kw":"bare-os-protocol","pageRef":298},{"kw":"docs","pageRef":299},{"kw":"documentation","pageRef":299},{"kw":"bare-os","pageRef":299},{"kw":"reference","pageRef":299},{"kw":"markdown","pageRef":299},{"kw":"package","pageRef":299},{"kw":"bare","pageRef":299},{"kw":"os","pageRef":299},{"kw":"seeder","pageRef":299},{"kw":"docs-reference-package-bare-os-seeder","pageRef":299},{"kw":"bare-os-seeder","pageRef":299},{"kw":"docs","pageRef":300},{"kw":"documentation","pageRef":300},{"kw":"bare-os","pageRef":300},{"kw":"reference","pageRef":300},{"kw":"markdown","pageRef":300},{"kw":"posix","pageRef":300},{"kw":"dashboard","pageRef":300},{"kw":"compliance","pageRef":300},{"kw":"generated","pageRef":300},{"kw":"docs-reference-posix-dashboard","pageRef":300},{"kw":"docs","pageRef":301},{"kw":"documentation","pageRef":301},{"kw":"bare-os","pageRef":301},{"kw":"reference","pageRef":301},{"kw":"markdown","pageRef":301},{"kw":"posix","pageRef":301},{"kw":"issue7","pageRef":301},{"kw":"traceability","pageRef":301},{"kw":"issue","pageRef":301},{"kw":"guest","pageRef":301},{"kw":"observability","pageRef":301},{"kw":"index","pageRef":301},{"kw":"docs-reference-posix-issue7-traceability","pageRef":301},{"kw":"7","pageRef":301},{"kw":"docs","pageRef":302},{"kw":"documentation","pageRef":302},{"kw":"bare-os","pageRef":302},{"kw":"reference","pageRef":302},{"kw":"markdown","pageRef":302},{"kw":"posix","pageRef":302},{"kw":"syscall","pageRef":302},{"kw":"facade","pageRef":302},{"kw":"map","pageRef":302},{"kw":"ctx","pageRef":302},{"kw":"bareossyscall","pageRef":302},{"kw":"proc","pageRef":302},{"kw":"bare","pageRef":302},{"kw":"syscalls","pageRef":302},{"kw":"json","pageRef":302},{"kw":"docs-reference-posix-syscall-facade-map","pageRef":302},{"kw":"bare_os","pageRef":302},{"kw":"docs","pageRef":303},{"kw":"documentation","pageRef":303},{"kw":"bare-os","pageRef":303},{"kw":"reference","pageRef":303},{"kw":"markdown","pageRef":303},{"kw":"protomux","pageRef":303},{"kw":"channel","pageRef":303},{"kw":"catalog","pageRef":303},{"kw":"bare","pageRef":303},{"kw":"docs-reference-protomux-channel-catalog","pageRef":303},{"kw":"os","pageRef":303},{"kw":"docs","pageRef":304},{"kw":"documentation","pageRef":304},{"kw":"bare-os","pageRef":304},{"kw":"reference","pageRef":304},{"kw":"markdown","pageRef":304},{"kw":"readme","pageRef":304},{"kw":"file","pageRef":304},{"kw":"level","pageRef":304},{"kw":"docs-reference-readme","pageRef":304},{"kw":"file-level","pageRef":304},{"kw":"docs","pageRef":305},{"kw":"documentation","pageRef":305},{"kw":"bare-os","pageRef":305},{"kw":"reference","pageRef":305},{"kw":"markdown","pageRef":305},{"kw":"repo","pageRef":305},{"kw":"layout","pageRef":305},{"kw":"and","pageRef":305},{"kw":"root","pageRef":305},{"kw":"repository","pageRef":305},{"kw":"metadata","pageRef":305},{"kw":"docs-reference-repo-layout-and-root","pageRef":305},{"kw":"docs","pageRef":306},{"kw":"documentation","pageRef":306},{"kw":"bare-os","pageRef":306},{"kw":"reference","pageRef":306},{"kw":"markdown","pageRef":306},{"kw":"shell","pageRef":306},{"kw":"completion","pageRef":306},{"kw":"and","pageRef":306},{"kw":"repl","pageRef":306},{"kw":"editor","pageRef":306},{"kw":"engine","pageRef":306},{"kw":"fish","pageRef":306},{"kw":"style","pageRef":306},{"kw":"docs-reference-shell-completion-and-repl-editor","pageRef":306},{"kw":"fish-style","pageRef":306},{"kw":"docs","pageRef":307},{"kw":"documentation","pageRef":307},{"kw":"bare-os","pageRef":307},{"kw":"reference","pageRef":307},{"kw":"markdown","pageRef":307},{"kw":"shell","pageRef":307},{"kw":"grammar","pageRef":307},{"kw":"draft","pageRef":307},{"kw":"docs-reference-shell-grammar","pageRef":307},{"kw":"docs","pageRef":308},{"kw":"documentation","pageRef":308},{"kw":"bare-os","pageRef":308},{"kw":"reference","pageRef":308},{"kw":"markdown","pageRef":308},{"kw":"shell","pageRef":308},{"kw":"troubleshooting","pageRef":308},{"kw":"docs-reference-shell-troubleshooting","pageRef":308},{"kw":"docs","pageRef":309},{"kw":"documentation","pageRef":309},{"kw":"bare-os","pageRef":309},{"kw":"reference","pageRef":309},{"kw":"markdown","pageRef":309},{"kw":"shell","pageRef":309},{"kw":"unsupported","pageRef":309},{"kw":"behavior","pageRef":309},{"kw":"intentionally","pageRef":309},{"kw":"different","pageRef":309},{"kw":"docs-reference-shell-unsupported-behavior","pageRef":309},{"kw":"docs","pageRef":310},{"kw":"documentation","pageRef":310},{"kw":"bare-os","pageRef":310},{"kw":"reference","pageRef":310},{"kw":"markdown","pageRef":310},{"kw":"summon","pageRef":310},{"kw":"bin","pageRef":310},{"kw":"text","pageRef":310},{"kw":"web","pageRef":310},{"kw":"browser","pageRef":310},{"kw":"docs-reference-summon","pageRef":310},{"kw":"docs","pageRef":311},{"kw":"documentation","pageRef":311},{"kw":"bare-os","pageRef":311},{"kw":"reference","pageRef":311},{"kw":"markdown","pageRef":311},{"kw":"syscall","pageRef":311},{"kw":"socket","pageRef":311},{"kw":"contract","pageRef":311},{"kw":"and","pageRef":311},{"kw":"bridge","pageRef":311},{"kw":"docs-reference-syscall-socket-contract","pageRef":311},{"kw":"docs","pageRef":312},{"kw":"documentation","pageRef":312},{"kw":"bare-os","pageRef":312},{"kw":"reference","pageRef":312},{"kw":"markdown","pageRef":312},{"kw":"vault","pageRef":312},{"kw":"threat","pageRef":312},{"kw":"model","pageRef":312},{"kw":"and","pageRef":312},{"kw":"key","pageRef":312},{"kw":"rotation","pageRef":312},{"kw":"bare","pageRef":312},{"kw":"docs-reference-vault-threat-model","pageRef":312},{"kw":"key-rotation","pageRef":312},{"kw":"os","pageRef":312},{"kw":"docs","pageRef":313},{"kw":"documentation","pageRef":313},{"kw":"bare-os","pageRef":313},{"kw":"reference","pageRef":313},{"kw":"markdown","pageRef":313},{"kw":"vfs","pageRef":313},{"kw":"path","pageRef":313},{"kw":"classes","pageRef":313},{"kw":"policy","pageRef":313},{"kw":"sketch","pageRef":313},{"kw":"docs-reference-vfs-path-classes","pageRef":313},{"kw":"docs","pageRef":314},{"kw":"documentation","pageRef":314},{"kw":"bare-os","pageRef":314},{"kw":"reference","pageRef":314},{"kw":"markdown","pageRef":314},{"kw":"release","pageRef":314},{"kw":"checklist","pageRef":314},{"kw":"bare","pageRef":314},{"kw":"operating","pageRef":314},{"kw":"system","pageRef":314},{"kw":"docs-release-checklist","pageRef":314},{"kw":"docs","pageRef":315},{"kw":"documentation","pageRef":315},{"kw":"bare-os","pageRef":315},{"kw":"reference","pageRef":315},{"kw":"markdown","pageRef":315},{"kw":"schemas","pageRef":315},{"kw":"readme","pageRef":315},{"kw":"published","pageRef":315},{"kw":"json","pageRef":315},{"kw":"docs-schemas-readme","pageRef":315},{"kw":"docs","pageRef":316},{"kw":"documentation","pageRef":316},{"kw":"bare-os","pageRef":316},{"kw":"reference","pageRef":316},{"kw":"markdown","pageRef":316},{"kw":"security","pageRef":316},{"kw":"blind","pageRef":316},{"kw":"relay","pageRef":316},{"kw":"p2p","pageRef":316},{"kw":"hardening","pageRef":316},{"kw":"pairing","pageRef":316},{"kw":"and","pageRef":316},{"kw":"docs-security-blind-relay-p2p-hardening","pageRef":316},{"kw":"docs","pageRef":317},{"kw":"documentation","pageRef":317},{"kw":"bare-os","pageRef":317},{"kw":"reference","pageRef":317},{"kw":"markdown","pageRef":317},{"kw":"security","pageRef":317},{"kw":"boot","pageRef":317},{"kw":"trust","pageRef":317},{"kw":"model","pageRef":317},{"kw":"docs-security-boot-trust-model","pageRef":317},{"kw":"docs","pageRef":318},{"kw":"documentation","pageRef":318},{"kw":"bare-os","pageRef":318},{"kw":"reference","pageRef":318},{"kw":"markdown","pageRef":318},{"kw":"security","pageRef":318},{"kw":"vault","pageRef":318},{"kw":"multisig","pageRef":318},{"kw":"continuity","pageRef":318},{"kw":"multi","pageRef":318},{"kw":"device","pageRef":318},{"kw":"sketch","pageRef":318},{"kw":"docs-security-vault-multisig-continuity","pageRef":318},{"kw":"multi-device","pageRef":318},{"kw":"docs","pageRef":319},{"kw":"documentation","pageRef":319},{"kw":"bare-os","pageRef":319},{"kw":"reference","pageRef":319},{"kw":"markdown","pageRef":319},{"kw":"security","pageRef":319},{"kw":"vault","pageRef":319},{"kw":"threat","pageRef":319},{"kw":"model","pageRef":319},{"kw":"and","pageRef":319},{"kw":"identity","pageRef":319},{"kw":"operator","pageRef":319},{"kw":"docs-security-vault-threat-model","pageRef":319},{"kw":"docs","pageRef":320},{"kw":"documentation","pageRef":320},{"kw":"bare-os","pageRef":320},{"kw":"reference","pageRef":320},{"kw":"markdown","pageRef":320},{"kw":"sitemap","pageRef":320},{"kw":"docs-sitemap","pageRef":320},{"kw":"docs","pageRef":321},{"kw":"documentation","pageRef":321},{"kw":"bare-os","pageRef":321},{"kw":"reference","pageRef":321},{"kw":"markdown","pageRef":321},{"kw":"themes","pageRef":321},{"kw":"readme","pageRef":321},{"kw":"host","pageRef":321},{"kw":"terminal","pageRef":321},{"kw":"bare","pageRef":321},{"kw":"maintained","pageRef":321},{"kw":"docs-themes-readme","pageRef":321},{"kw":"os","pageRef":321},{"kw":"docs","pageRef":322},{"kw":"documentation","pageRef":322},{"kw":"bare-os","pageRef":322},{"kw":"reference","pageRef":322},{"kw":"markdown","pageRef":322},{"kw":"troubleshooting","pageRef":322},{"kw":"router","pageRef":322},{"kw":"docs-troubleshooting","pageRef":322},{"kw":"user","pageRef":323},{"kw":"manual","pageRef":323},{"kw":"tutorial","pageRef":323},{"kw":"howto","pageRef":323},{"kw":"bare-os","pageRef":323},{"kw":"guide","pageRef":323},{"kw":"bare","pageRef":323},{"kw":"os","pageRef":323},{"kw":"users","pageRef":323},{"kw":"index","pageRef":323},{"kw":"and","pageRef":323},{"kw":"reading","pageRef":323},{"kw":"order","pageRef":323},{"kw":"bare-os-users-manual","pageRef":323},{"kw":"user","pageRef":324},{"kw":"manual","pageRef":324},{"kw":"tutorial","pageRef":324},{"kw":"howto","pageRef":324},{"kw":"bare-os","pageRef":324},{"kw":"guide","pageRef":324},{"kw":"users","pageRef":324},{"kw":"01","pageRef":324},{"kw":"what","pageRef":324},{"kw":"this","pageRef":324},{"kw":"is","pageRef":324},{"kw":"chapter","pageRef":324},{"kw":"users-manual-01-what-this-is","pageRef":324},{"kw":"1","pageRef":324},{"kw":"user","pageRef":325},{"kw":"manual","pageRef":325},{"kw":"tutorial","pageRef":325},{"kw":"howto","pageRef":325},{"kw":"bare-os","pageRef":325},{"kw":"guide","pageRef":325},{"kw":"users","pageRef":325},{"kw":"02","pageRef":325},{"kw":"install","pageRef":325},{"kw":"and","pageRef":325},{"kw":"repository","pageRef":325},{"kw":"layout","pageRef":325},{"kw":"chapter","pageRef":325},{"kw":"users-manual-02-install-and-repository-layout","pageRef":325},{"kw":"2","pageRef":325},{"kw":"user","pageRef":326},{"kw":"manual","pageRef":326},{"kw":"tutorial","pageRef":326},{"kw":"howto","pageRef":326},{"kw":"bare-os","pageRef":326},{"kw":"guide","pageRef":326},{"kw":"users","pageRef":326},{"kw":"03","pageRef":326},{"kw":"running","pageRef":326},{"kw":"seeder","pageRef":326},{"kw":"and","pageRef":326},{"kw":"booter","pageRef":326},{"kw":"chapter","pageRef":326},{"kw":"users-manual-03-running-seeder-and-booter","pageRef":326},{"kw":"3","pageRef":326},{"kw":"user","pageRef":327},{"kw":"manual","pageRef":327},{"kw":"tutorial","pageRef":327},{"kw":"howto","pageRef":327},{"kw":"bare-os","pageRef":327},{"kw":"guide","pageRef":327},{"kw":"users","pageRef":327},{"kw":"04","pageRef":327},{"kw":"shell","pageRef":327},{"kw":"path","pageRef":327},{"kw":"and","pageRef":327},{"kw":"scripts","pageRef":327},{"kw":"chapter","pageRef":327},{"kw":"users-manual-04-shell-path-and-scripts","pageRef":327},{"kw":"4","pageRef":327},{"kw":"user","pageRef":328},{"kw":"manual","pageRef":328},{"kw":"tutorial","pageRef":328},{"kw":"howto","pageRef":328},{"kw":"bare-os","pageRef":328},{"kw":"guide","pageRef":328},{"kw":"users","pageRef":328},{"kw":"05","pageRef":328},{"kw":"home","pageRef":328},{"kw":"identity","pageRef":328},{"kw":"and","pageRef":328},{"kw":"vault","pageRef":328},{"kw":"chapter","pageRef":328},{"kw":"users-manual-05-home-identity-and-vault","pageRef":328},{"kw":"5","pageRef":328},{"kw":"user","pageRef":329},{"kw":"manual","pageRef":329},{"kw":"tutorial","pageRef":329},{"kw":"howto","pageRef":329},{"kw":"bare-os","pageRef":329},{"kw":"guide","pageRef":329},{"kw":"users","pageRef":329},{"kw":"06","pageRef":329},{"kw":"help","pageRef":329},{"kw":"man","pageRef":329},{"kw":"and","pageRef":329},{"kw":"documentation","pageRef":329},{"kw":"map","pageRef":329},{"kw":"chapter","pageRef":329},{"kw":"the","pageRef":329},{"kw":"users-manual-06-help-man-and-documentation-map","pageRef":329},{"kw":"6","pageRef":329},{"kw":"user","pageRef":330},{"kw":"manual","pageRef":330},{"kw":"tutorial","pageRef":330},{"kw":"howto","pageRef":330},{"kw":"bare-os","pageRef":330},{"kw":"guide","pageRef":330},{"kw":"users","pageRef":330},{"kw":"07","pageRef":330},{"kw":"troubleshooting","pageRef":330},{"kw":"and","pageRef":330},{"kw":"operations","pageRef":330},{"kw":"chapter","pageRef":330},{"kw":"users-manual-07-troubleshooting-and-operations","pageRef":330},{"kw":"7","pageRef":330},{"kw":"user","pageRef":331},{"kw":"manual","pageRef":331},{"kw":"tutorial","pageRef":331},{"kw":"howto","pageRef":331},{"kw":"bare-os","pageRef":331},{"kw":"guide","pageRef":331},{"kw":"users","pageRef":331},{"kw":"08","pageRef":331},{"kw":"further","pageRef":331},{"kw":"reading","pageRef":331},{"kw":"chapter","pageRef":331},{"kw":"users-manual-08-further-reading","pageRef":331},{"kw":"8","pageRef":331}]}