docs(ci): rename ctx client script, extend bare-import scan, POSIX tests, and doc sync

- Rename scripts/gen-ctx-client-stub.mjs to gen-ctx-client-helper.mjs; update
  pretest, scripts README, and PLACEHOLDER_BASELINE.
- Scan packages/bare-os-protocol/lib in verify-bare-imports.mjs; clarify scope
  in script header.
- Document bundle health / marker allowlist workflow in bare-os-bare-libs README
  and quarterly upstream notes in docs/release-checklist.md.
- Add ctx API release checklist to docs/reference/ctx-api-versioning.md.
- Add shell param expansion V3 tests in bare-os-booter/test.js; add coreutils
  posix-test-int-compare.test.mjs and wire into bare-os-coreutils test script.
- Sync conformance matrix, environment appendix, handbook ch.9, and add
  pathconf to docs/reference/posix-conformance-matrix.json for verify-compat-matrix.
This commit is contained in:
Raven Scott
2026-04-04 19:41:15 -04:00
parent 44355f6924
commit f8ddef7950
22 changed files with 524 additions and 428 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ This document classifies incomplete surfaces as of the kernel hardening pass. It
| Item | Location | Notes |
| ---------------------------- | --------------------------- | ----- |
| `gen-ctx-client-stub.mjs` name | `scripts/` | Generates client helper; naming is historical. |
| ~~`gen-ctx-client-stub.mjs`~~**`gen-ctx-client-helper.mjs`** | `scripts/` | Renamed; generates TS client version constant aligned with **`BARE_OS_CTX_API_VERSION`**. |
| Man / reference “placeholder” prose | `docs/`, `kernel/share/man/` | Tracked for alignment with implemented behavior. |
## P3 — Vendored `kernel/lib/bare/bundles/*.js`
+1 -1
View File
@@ -1,6 +1,6 @@
{
"schemaVersion": 1,
"generatedAt": "2026-04-04T23:35:51.774Z",
"generatedAt": "2026-04-04T23:40:16.309Z",
"normativeManifest": "packages/bare-os-booter/lib/bare-module-manifest.json",
"buildTool": "packages/bare-os-bare-libs/build.mjs",
"bundles": [
+2
View File
@@ -67,6 +67,8 @@ Bare OS targets **maximal POSIX-like** behavior on the **Bare** runtime with a *
## CI and evidence
- Booter + coreutils: `packages/bare-os-booter/test.js`, `packages/bare-os-coreutils` tests.
- Shell parameter expansion (POSIX Issue 7 subset): `expandWord` tests including **`BARE_OS_SHELL_PARAM_EXPANSION_V3`** (`:-`, `:+`, `:?`) in `packages/bare-os-booter/test.js`.
- `/bin/test` integer primaries (`-eq`, `-ne`, `-lt`, …): mirrored vectors in `packages/bare-os-coreutils/test/posix-test-int-compare.test.mjs`.
- Man coverage: `scripts/verify-man-coverage.mjs`.
- 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`).
- Dashboard sketch: [conformance-dashboard.md](conformance-dashboard.md).
+8
View File
@@ -12,6 +12,14 @@
3. **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.
4. **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.
## Release checklist (same PR as `ctx` edits)
1. Edit **`BARE_OS_CTX_API_VERSION`** in [`bare-os-ctx-api.js`](../../packages/bare-os-booter/lib/bare-os-ctx-api.js).
2. 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.
3. Run **`node scripts/gen-ctx-client-helper.mjs`** and refresh any consumer that vendors the emitted header.
4. Add or extend **`packages/bare-os-booter/test.js`** (and workspace tests) for behavior that must not regress.
5. Run root **`npm test`** so **`pretest`** (`verify-ctx-api-feature-bits`, `verify-bare-imports`, …) passes.
## Related
- [Kernel subsystem map](../architecture/kernel-subsystems.md)
@@ -69,7 +69,7 @@ The list below is one **bullet per variable** in the form **name — component
- `BARE_OS_PROC_POLL_MS` — VFS — Coalescing interval for **`/proc/bare_os/metrics_live.json`** and poll cadence for related pseudo metrics reads (25060000).
- `BARE_OS_SHELL_PARAM_EXPANSION` — Shell — When **`1`**, enable **`${VAR:-word}`** and **`${VAR#prefix}`** in **`expandWord`**.
- `BARE_OS_SHELL_PARAM_EXPANSION_V2` — Shell — With param expansion on, enable **`${VAR:=word}`**, **`${VAR##*/}`** / **`${VAR#*/}`**, **`${VAR%%suffix}`** / **`${VAR%suffix}`** (bounded patterns).
- `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).
- `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`**.
- `BARE_OS_ENV_DASH_S``/bin/env` — When **`1`**, enable **`-S` / `--split-string`** and **`--env-file`** (bounded).
- `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).
- `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`**).
@@ -23,6 +23,7 @@
"lstat",
"rmdir",
"mount",
"pathconf",
"umount",
"kill",
"rename",
+2
View File
@@ -10,3 +10,5 @@ Run these steps before tagging or publishing a Pear bundle so the kernel, seeder
6. **`npm test`** at the root (runs **`pretest`** parity, banned terminology, bundle markers/throws, ctx API checks, and workspace tests).
Optional: **`npm run release-checklist`** runs **`scripts/release-checklist.mjs`** for automated JSON checks when configured.
**Quarterly:** 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.
@@ -105,6 +105,8 @@ Hyperdrive does not always behave like a POSIX directory tree. Empty directories
**Parameter 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).
**Parameter 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`**).
**Pathname 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.
**Stderr 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).
+206 -206
View File
@@ -2,9 +2,9 @@
"version": 1,
"bundles": [
{
"path": "/lib/bare/bundles/b4a.js",
"path": "/lib/bare/bundles/safetyCatch.js",
"keys": [
"b4a"
"safetyCatch"
]
},
{
@@ -14,9 +14,15 @@
]
},
{
"path": "/lib/bare/bundles/safetyCatch.js",
"path": "/lib/bare/bundles/b4a.js",
"keys": [
"safetyCatch"
"b4a"
]
},
{
"path": "/lib/bare/bundles/bareUrl.js",
"keys": [
"bareUrl"
]
},
{
@@ -31,12 +37,6 @@
"protomux"
]
},
{
"path": "/lib/bare/bundles/bareUrl.js",
"keys": [
"bareUrl"
]
},
{
"path": "/lib/bare/bundles/bareEncoding.js",
"keys": [
@@ -73,18 +73,18 @@
"bareReadline"
]
},
{
"path": "/lib/bare/bundles/bareAnsiEscapes.js",
"keys": [
"bareAnsiEscapes"
]
},
{
"path": "/lib/bare/bundles/bareCrypto.js",
"keys": [
"bareCrypto"
]
},
{
"path": "/lib/bare/bundles/bareAnsiEscapes.js",
"keys": [
"bareAnsiEscapes"
]
},
{
"path": "/lib/bare/bundles/bareAddonResolve.js",
"keys": [
@@ -92,9 +92,9 @@
]
},
{
"path": "/lib/bare/bundles/bareAppKit.js",
"path": "/lib/bare/bundles/fetch.js",
"keys": [
"bareAppKit"
"fetch"
]
},
{
@@ -104,9 +104,9 @@
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"path": "/lib/bare/bundles/bareAppKit.js",
"keys": [
"bareApk"
"bareAppKit"
]
},
{
@@ -115,6 +115,12 @@
"bareAssert"
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"keys": [
"bareApk"
]
},
{
"path": "/lib/bare/bundles/bareAtomics.js",
"keys": [
@@ -128,9 +134,9 @@
]
},
{
"path": "/lib/bare/bundles/fetch.js",
"path": "/lib/bare/bundles/bareBundleCompile.js",
"keys": [
"fetch"
"bareBundleCompile"
]
},
{
@@ -140,9 +146,9 @@
]
},
{
"path": "/lib/bare/bundles/bareBundleCompile.js",
"path": "/lib/bare/bundles/bareBluetoothApple.js",
"keys": [
"bareBundleCompile"
"bareBluetoothApple"
]
},
{
@@ -151,12 +157,6 @@
"bareBuffer"
]
},
{
"path": "/lib/bare/bundles/bareBluetoothApple.js",
"keys": [
"bareBluetoothApple"
]
},
{
"path": "/lib/bare/bundles/bareBundleEvaluate.js",
"keys": [
@@ -169,24 +169,12 @@
"bareBoot"
]
},
{
"path": "/lib/bare/bundles/bareBundleId.js",
"keys": [
"bareBundleId"
]
},
{
"path": "/lib/bare/bundles/bareConsole.js",
"keys": [
"bareConsole"
]
},
{
"path": "/lib/bare/bundles/bareDaemon.js",
"keys": [
"bareDaemon"
]
},
{
"path": "/lib/bare/bundles/bareDebugLog.js",
"keys": [
@@ -199,18 +187,30 @@
"bareChannel"
]
},
{
"path": "/lib/bare/bundles/bareDiagnosticsChannel.js",
"keys": [
"bareDiagnosticsChannel"
]
},
{
"path": "/lib/bare/bundles/bareDelta.js",
"keys": [
"bareDelta"
]
},
{
"path": "/lib/bare/bundles/bareBundleId.js",
"keys": [
"bareBundleId"
]
},
{
"path": "/lib/bare/bundles/bareDaemon.js",
"keys": [
"bareDaemon"
]
},
{
"path": "/lib/bare/bundles/bareDiagnosticsChannel.js",
"keys": [
"bareDiagnosticsChannel"
]
},
{
"path": "/lib/bare/bundles/bareDns.js",
"keys": [
@@ -223,12 +223,6 @@
"bareEnv"
]
},
{
"path": "/lib/bare/bundles/bareDgram.js",
"keys": [
"bareDgram"
]
},
{
"path": "/lib/bare/bundles/bareExif.js",
"keys": [
@@ -247,6 +241,12 @@
"bareFfmpeg"
]
},
{
"path": "/lib/bare/bundles/bareDgram.js",
"keys": [
"bareDgram"
]
},
{
"path": "/lib/bare/bundles/bareFfmpegEncodings.js",
"keys": [
@@ -259,18 +259,6 @@
"bareFormData"
]
},
{
"path": "/lib/bare/bundles/bareFormat.js",
"keys": [
"bareFormat"
]
},
{
"path": "/lib/bare/bundles/bareFileLogger.js",
"keys": [
"bareFileLogger"
]
},
{
"path": "/lib/bare/bundles/bareGif.js",
"keys": [
@@ -283,12 +271,30 @@
"bareGtk"
]
},
{
"path": "/lib/bare/bundles/bareFormat.js",
"keys": [
"bareFormat"
]
},
{
"path": "/lib/bare/bundles/bareFileLogger.js",
"keys": [
"bareFileLogger"
]
},
{
"path": "/lib/bare/bundles/bareHeif.js",
"keys": [
"bareHeif"
]
},
{
"path": "/lib/bare/bundles/bareFs.js",
"keys": [
"bareFs"
]
},
{
"path": "/lib/bare/bundles/bareHrtime.js",
"keys": [
@@ -302,9 +308,9 @@
]
},
{
"path": "/lib/bare/bundles/bareFs.js",
"path": "/lib/bare/bundles/bareIco.js",
"keys": [
"bareFs"
"bareIco"
]
},
{
@@ -314,9 +320,9 @@
]
},
{
"path": "/lib/bare/bundles/bareIco.js",
"path": "/lib/bare/bundles/bareInspect.js",
"keys": [
"bareIco"
"bareInspect"
]
},
{
@@ -325,12 +331,6 @@
"bareHttp1"
]
},
{
"path": "/lib/bare/bundles/bareInspect.js",
"keys": [
"bareInspect"
]
},
{
"path": "/lib/bare/bundles/bareHttps.js",
"keys": [
@@ -343,36 +343,36 @@
"bareJpeg"
]
},
{
"path": "/lib/bare/bundles/bareIpc.js",
"keys": [
"bareIpc"
]
},
{
"path": "/lib/bare/bundles/bareIntl.js",
"keys": [
"bareIntl"
]
},
{
"path": "/lib/bare/bundles/bareIpc.js",
"keys": [
"bareIpc"
]
},
{
"path": "/lib/bare/bundles/bareLief.js",
"keys": [
"bareLief"
]
},
{
"path": "/lib/bare/bundles/bareLink.js",
"keys": [
"bareLink"
]
},
{
"path": "/lib/bare/bundles/bareLogger.js",
"keys": [
"bareLogger"
]
},
{
"path": "/lib/bare/bundles/bareLink.js",
"keys": [
"bareLink"
]
},
{
"path": "/lib/bare/bundles/bareInspector.js",
"keys": [
@@ -409,24 +409,12 @@
"bareNdk"
]
},
{
"path": "/lib/bare/bundles/bareMedia.js",
"keys": [
"bareMedia"
]
},
{
"path": "/lib/bare/bundles/bareModuleTraverse.js",
"keys": [
"bareModuleTraverse"
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareNative.js",
"keys": [
@@ -439,6 +427,18 @@
"bareNodeFetch"
]
},
{
"path": "/lib/bare/bundles/bareMedia.js",
"keys": [
"bareMedia"
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareOpen.js",
"keys": [
@@ -451,6 +451,12 @@
"bareOs"
]
},
{
"path": "/lib/bare/bundles/bareDev.js",
"keys": [
"bareDev"
]
},
{
"path": "/lib/bare/bundles/barePerformance.js",
"keys": [
@@ -463,6 +469,12 @@
"barePack"
]
},
{
"path": "/lib/bare/bundles/barePipe.js",
"keys": [
"barePipe"
]
},
{
"path": "/lib/bare/bundles/barePackDrive.js",
"keys": [
@@ -476,27 +488,9 @@
]
},
{
"path": "/lib/bare/bundles/barePipe.js",
"path": "/lib/bare/bundles/barePunycode.js",
"keys": [
"barePipe"
]
},
{
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"keys": [
"bareNodeRuntime"
]
},
{
"path": "/lib/bare/bundles/barePrebuild.js",
"keys": [
"barePrebuild"
]
},
{
"path": "/lib/bare/bundles/bareProcess.js",
"keys": [
"bareProcess"
"barePunycode"
]
},
{
@@ -506,15 +500,15 @@
]
},
{
"path": "/lib/bare/bundles/barePunycode.js",
"path": "/lib/bare/bundles/barePrebuild.js",
"keys": [
"barePunycode"
"barePrebuild"
]
},
{
"path": "/lib/bare/bundles/bareDev.js",
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"keys": [
"bareDev"
"bareNodeRuntime"
]
},
{
@@ -523,6 +517,18 @@
"bareQueueMicrotask"
]
},
{
"path": "/lib/bare/bundles/bareProcess.js",
"keys": [
"bareProcess"
]
},
{
"path": "/lib/bare/bundles/barePromClient.js",
"keys": [
"barePromClient"
]
},
{
"path": "/lib/bare/bundles/bareRealm.js",
"keys": [
@@ -535,18 +541,18 @@
"bareRuntime"
]
},
{
"path": "/lib/bare/bundles/bareRpc.js",
"keys": [
"bareRpc"
]
},
{
"path": "/lib/bare/bundles/bareSdl.js",
"keys": [
"bareSdl"
]
},
{
"path": "/lib/bare/bundles/bareRpc.js",
"keys": [
"bareRpc"
]
},
{
"path": "/lib/bare/bundles/bareSemver.js",
"keys": [
@@ -554,15 +560,9 @@
]
},
{
"path": "/lib/bare/bundles/barePromClient.js",
"path": "/lib/bare/bundles/bareRepl.js",
"keys": [
"barePromClient"
]
},
{
"path": "/lib/bare/bundles/bareSidecar.js",
"keys": [
"bareSidecar"
"bareRepl"
]
},
{
@@ -572,15 +572,9 @@
]
},
{
"path": "/lib/bare/bundles/bareRepl.js",
"path": "/lib/bare/bundles/bareSidecar.js",
"keys": [
"bareRepl"
]
},
{
"path": "/lib/bare/bundles/bareStringDecoder.js",
"keys": [
"bareStringDecoder"
"bareSidecar"
]
},
{
@@ -589,12 +583,6 @@
"bareSignals"
]
},
{
"path": "/lib/bare/bundles/bareStream.js",
"keys": [
"bareStream"
]
},
{
"path": "/lib/bare/bundles/bareStorage.js",
"keys": [
@@ -602,15 +590,15 @@
]
},
{
"path": "/lib/bare/bundles/bareSvg.js",
"path": "/lib/bare/bundles/bareStringDecoder.js",
"keys": [
"bareSvg"
"bareStringDecoder"
]
},
{
"path": "/lib/bare/bundles/bareStructuredClone.js",
"path": "/lib/bare/bundles/bareStream.js",
"keys": [
"bareStructuredClone"
"bareStream"
]
},
{
@@ -620,21 +608,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSystemLogger.js",
"path": "/lib/bare/bundles/bareSvg.js",
"keys": [
"bareSystemLogger"
]
},
{
"path": "/lib/bare/bundles/bareTiff.js",
"keys": [
"bareTiff"
]
},
{
"path": "/lib/bare/bundles/bareSubprocess.js",
"keys": [
"bareSubprocess"
"bareSvg"
]
},
{
@@ -644,15 +620,27 @@
]
},
{
"path": "/lib/bare/bundles/bareTimers.js",
"path": "/lib/bare/bundles/bareSystemLogger.js",
"keys": [
"bareTimers"
"bareSystemLogger"
]
},
{
"path": "/lib/bare/bundles/bareTpl.js",
"path": "/lib/bare/bundles/bareStructuredClone.js",
"keys": [
"bareTpl"
"bareStructuredClone"
]
},
{
"path": "/lib/bare/bundles/bareSubprocess.js",
"keys": [
"bareSubprocess"
]
},
{
"path": "/lib/bare/bundles/bareTiff.js",
"keys": [
"bareTiff"
]
},
{
@@ -662,15 +650,21 @@
]
},
{
"path": "/lib/bare/bundles/bareThread.js",
"path": "/lib/bare/bundles/bareTpl.js",
"keys": [
"bareThread"
"bareTpl"
]
},
{
"path": "/lib/bare/bundles/bareType.js",
"path": "/lib/bare/bundles/bareTimers.js",
"keys": [
"bareType"
"bareTimers"
]
},
{
"path": "/lib/bare/bundles/bareThread.js",
"keys": [
"bareThread"
]
},
{
@@ -680,9 +674,15 @@
]
},
{
"path": "/lib/bare/bundles/bareTty.js",
"path": "/lib/bare/bundles/bareType.js",
"keys": [
"bareTty"
"bareType"
]
},
{
"path": "/lib/bare/bundles/bareUnpack.js",
"keys": [
"bareUnpack"
]
},
{
@@ -692,9 +692,9 @@
]
},
{
"path": "/lib/bare/bundles/bareUnpack.js",
"path": "/lib/bare/bundles/bareTty.js",
"keys": [
"bareUnpack"
"bareTty"
]
},
{
@@ -709,30 +709,24 @@
"bareVm"
]
},
{
"path": "/lib/bare/bundles/bareUnionBundle.js",
"keys": [
"bareUnionBundle"
]
},
{
"path": "/lib/bare/bundles/bareWalkHandles.js",
"keys": [
"bareWalkHandles"
]
},
{
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareWebKit.js",
"keys": [
"bareWebKit"
]
},
{
"path": "/lib/bare/bundles/bareUnionBundle.js",
"keys": [
"bareUnionBundle"
]
},
{
"path": "/lib/bare/bundles/bareWebp.js",
"keys": [
@@ -740,9 +734,9 @@
]
},
{
"path": "/lib/bare/bundles/bareUtils.js",
"path": "/lib/bare/bundles/bareWebKitGtk.js",
"keys": [
"bareUtils"
"bareWebKitGtk"
]
},
{
@@ -752,9 +746,15 @@
]
},
{
"path": "/lib/bare/bundles/bareWebKitGtk.js",
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareWebKitGtk"
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareUtils.js",
"keys": [
"bareUtils"
]
},
{
@@ -769,12 +769,6 @@
"bareXdiff"
]
},
{
"path": "/lib/bare/bundles/bareZmq.js",
"keys": [
"bareZmq"
]
},
{
"path": "/lib/bare/bundles/bareZlib.js",
"keys": [
@@ -782,9 +776,9 @@
]
},
{
"path": "/lib/bare/bundles/bareWorker.js",
"path": "/lib/bare/bundles/bareZmq.js",
"keys": [
"bareWorker"
"bareZmq"
]
},
{
@@ -792,6 +786,12 @@
"keys": [
"bareWs"
]
},
{
"path": "/lib/bare/bundles/bareWorker.js",
"keys": [
"bareWorker"
]
}
],
"bundleStats": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"schema": 1,
"atMs": 1775345751113,
"atMs": 1775346015505,
"commands": [
"arch",
"awk",
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -15,7 +15,7 @@
"sync:bare-manifest": "node scripts/sync-bare-module-manifest-from-catalog.mjs",
"smoke:bare-manifest": "node scripts/smoke-bare-manifest-imports.mjs",
"bundle:kernel": "node scripts/bundle-kernel-init.mjs",
"pretest": "npm run build -w bare-os-coreutils && npm run build -w bare-os-bare-libs && npm run bundle:kernel && node scripts/gen-kernel-extensions-index.mjs && node scripts/verify-kernel-seeder-parity.mjs && node scripts/verify-banned-terminology.mjs && node scripts/verify-naming-alias-matrix.mjs && node scripts/verify-feature-roadmap-canonical.mjs && node scripts/verify-no-new-giant-phase-identifiers.mjs && node scripts/verify-runtime-no-incomplete-markers.mjs && node scripts/verify-bare-imports.mjs && node scripts/verify-booter-boot-steps-alignment.mjs && node scripts/gen-ctx-client-stub.mjs > /dev/null && node scripts/verify-extension-manifest-schema.mjs && node scripts/verify-ctx-api-feature-bits.mjs && node scripts/verify-kernel-capabilities-contract.mjs && node scripts/verify-kernel-capabilities-word-6.mjs && node scripts/verify-kernel-capabilities-word-7.mjs && node scripts/verify-kernel-capabilities-word-8.mjs && node scripts/verify-kernel-capabilities-word-9.mjs && node scripts/verify-kernel-capabilities-word-10.mjs && node scripts/verify-kernel-capabilities-word-11.mjs && node scripts/verify-ctx-dts.mjs && node scripts/validate-example-schemas.mjs && node scripts/verify-doc-links.mjs && node scripts/verify-man-coverage.mjs && node scripts/verify-compat-matrix.mjs && node scripts/verify-bundle-health.mjs && node scripts/verify-bundle-markers.mjs && node scripts/verify-bundle-throws.mjs && node scripts/verify-kernel-program-doc.mjs && node scripts/verify-kernel-program-proc-schema.mjs && node scripts/verify-kernel-program-roadmap-table.mjs && node scripts/verify-pear-no-static-node-import.mjs && npm run smoke:bare-manifest",
"pretest": "npm run build -w bare-os-coreutils && npm run build -w bare-os-bare-libs && npm run bundle:kernel && node scripts/gen-kernel-extensions-index.mjs && node scripts/verify-kernel-seeder-parity.mjs && node scripts/verify-banned-terminology.mjs && node scripts/verify-naming-alias-matrix.mjs && node scripts/verify-feature-roadmap-canonical.mjs && node scripts/verify-no-new-giant-phase-identifiers.mjs && node scripts/verify-runtime-no-incomplete-markers.mjs && node scripts/verify-bare-imports.mjs && node scripts/verify-booter-boot-steps-alignment.mjs && node scripts/gen-ctx-client-helper.mjs > /dev/null && node scripts/verify-extension-manifest-schema.mjs && node scripts/verify-ctx-api-feature-bits.mjs && node scripts/verify-kernel-capabilities-contract.mjs && node scripts/verify-kernel-capabilities-word-6.mjs && node scripts/verify-kernel-capabilities-word-7.mjs && node scripts/verify-kernel-capabilities-word-8.mjs && node scripts/verify-kernel-capabilities-word-9.mjs && node scripts/verify-kernel-capabilities-word-10.mjs && node scripts/verify-kernel-capabilities-word-11.mjs && node scripts/verify-ctx-dts.mjs && node scripts/validate-example-schemas.mjs && node scripts/verify-doc-links.mjs && node scripts/verify-man-coverage.mjs && node scripts/verify-compat-matrix.mjs && node scripts/verify-bundle-health.mjs && node scripts/verify-bundle-markers.mjs && node scripts/verify-bundle-throws.mjs && node scripts/verify-kernel-program-doc.mjs && node scripts/verify-kernel-program-proc-schema.mjs && node scripts/verify-kernel-program-roadmap-table.mjs && node scripts/verify-pear-no-static-node-import.mjs && npm run smoke:bare-manifest",
"test": "npm run test --workspaces --if-present",
"verify-kernel-seeder": "node scripts/verify-kernel-seeder-parity.mjs",
"release-checklist": "node scripts/release-checklist.mjs",
+16
View File
@@ -17,3 +17,19 @@ npm run build -w bare-os-bare-libs
The booter loads these only when `BARE_OS_BARE_MODULES` is enabled and `BARE_OS_BARE_DRIVE_BUNDLES` is not disabled; see the developer guide.
Manifest rows may include optional **`tier`** (**`core`** default when omitted) and **`risk`** (**`low`** / **`medium`** / **`high`**) so distributors can filter bundles without reading upstream READMEs. The catalog sync scripts preserve unknown fields when merging from **`docs/bare-holepunch-catalog.json`**.
## Bundle health, markers, and upstream closure
- **`docs/audit/bundle-health.json`** — per-bundle byte sizes; regenerated by **`npm run build -w bare-os-bare-libs`**. When a bundles size moves by more than roughly **10%**, add a dated one-line note under **Bundle health log** below (or in the same PR description) so reviewers can tell intentional catalog bumps from accidents.
- **`scripts/verify-bundle-health.mjs`** — CI compares committed JSON to on-disk bundle sizes.
- **`scripts/verify-bundle-markers.mjs`** + **`docs/audit/bundle-marker-allowlist.json`** — gate **`TODO` / `NOT_IMPLEMENTED`** substrings inside vendored IIFEs; shrink the allowlist when upgrading Holepunch packages removes markers.
- **`scripts/verify-bundle-throws.mjs`** + **`docs/audit/bundle-throw-allowlist.json`** — same for **`throw new Error("not implemented")`** phrasing.
See **[`docs/audit/PLACEHOLDER_BASELINE.md`](../../docs/audit/PLACEHOLDER_BASELINE.md)** § P3 for policy: first-party kernel code stays marker-free via **`verify-runtime-no-incomplete-markers.mjs`**; bundle gaps close through **version bumps**, **post-processing** (rare), or **allowlist shrink**.
### Bundle health log
| Date (UTC) | Note |
|------------|------|
| _Append a row when a bundle size change ≥ ~10% is intentional (catalog version, esbuild flags, or new upstream files)._ | |
+22
View File
@@ -1484,6 +1484,28 @@ test('expandWord param expansion v2 (## %% :=)', async (t) => {
t.is(assign.EMPTY, 'set')
})
/** POSIX-style parameter expansion vectors (Issue 7 subset; env-gated V3). */
test('expandWord param expansion v3 (:- :+ :?)', async (t) => {
const base = {
BARE_OS_SHELL_PARAM_EXPANSION: '1',
BARE_OS_SHELL_PARAM_EXPANSION_V3: '1',
HOME: '/home/u'
}
t.is(expandWord('${UNSET:-/default}', base), '/default')
t.is(expandWord('${EMPTY:-/alt}', { ...base, EMPTY: '' }), '/alt')
t.is(expandWord('${SET:-ignored}', { ...base, SET: 'ok' }), 'ok')
t.is(expandWord('${SET:+present}', { ...base, SET: 'v' }), 'present')
t.is(expandWord('${UNSET:+absent}', base), '')
t.exception(
() => expandWord('${UNSET:?hard fail}', base),
/hard fail|parameter null or unset/
)
t.exception(
() => expandWord('${EMPTY:?msg}', { ...base, EMPTY: '' }),
/msg|parameter null or unset/
)
})
test('syncBareOsExitStatusEnv and execShellLine update env', async (t) => {
const dir = testCorestoreDir('exstat')
const store = new Corestore(dir)
+1 -1
View File
@@ -6,6 +6,6 @@
"description": "Build JS /bin utilities for bare-operating-system (concat + stage to kernel/)",
"scripts": {
"build": "node ./scripts/ensure-man-pages.mjs && node ./build.mjs",
"test": "node ./test/help-bin-list.test.mjs && node ./test/edit-key-parse.test.mjs && node ./test/edit-teardown.test.mjs && node ./test/baretop-bundle.test.mjs && node ./test/baretop-fixture.test.mjs"
"test": "node ./test/help-bin-list.test.mjs && node ./test/edit-key-parse.test.mjs && node ./test/edit-teardown.test.mjs && node ./test/baretop-bundle.test.mjs && node ./test/baretop-fixture.test.mjs && node ./test/posix-test-int-compare.test.mjs"
}
}
@@ -0,0 +1,40 @@
/**
* POSIX Issue 7style integer comparison primaries for /bin/test (mirrors
* packages/bare-os-coreutils/src/test.js evalTest three-arg int branch).
*/
import test from 'brittle'
/** @param {string | number} a @param {string} op @param {string | number} b */
function evalIntRel(a, op, b) {
const la = Number.parseInt(String(a), 10)
const lb = Number.parseInt(String(b), 10)
if (!Number.isFinite(la) || !Number.isFinite(lb)) return false
switch (op) {
case '-eq':
return la === lb
case '-ne':
return la !== lb
case '-lt':
return la < lb
case '-le':
return la <= lb
case '-gt':
return la > lb
case '-ge':
return la >= lb
default:
return false
}
}
test('posix test integer relations (-eq -ne -lt -le -gt -ge)', async (t) => {
t.ok(evalIntRel(0, '-eq', 0))
t.ok(evalIntRel(3, '-ne', 4))
t.ok(evalIntRel(2, '-lt', 5))
t.ok(evalIntRel(5, '-le', 5))
t.ok(evalIntRel(9, '-gt', 1))
t.ok(evalIntRel(7, '-ge', 7))
t.absent(evalIntRel(1, '-eq', 2))
t.absent(evalIntRel('x', '-eq', 1))
t.absent(evalIntRel(1, '-eq', 'y'))
})
@@ -2,9 +2,9 @@
"version": 1,
"bundles": [
{
"path": "/lib/bare/bundles/b4a.js",
"path": "/lib/bare/bundles/safetyCatch.js",
"keys": [
"b4a"
"safetyCatch"
]
},
{
@@ -14,9 +14,15 @@
]
},
{
"path": "/lib/bare/bundles/safetyCatch.js",
"path": "/lib/bare/bundles/b4a.js",
"keys": [
"safetyCatch"
"b4a"
]
},
{
"path": "/lib/bare/bundles/bareUrl.js",
"keys": [
"bareUrl"
]
},
{
@@ -31,12 +37,6 @@
"protomux"
]
},
{
"path": "/lib/bare/bundles/bareUrl.js",
"keys": [
"bareUrl"
]
},
{
"path": "/lib/bare/bundles/bareEncoding.js",
"keys": [
@@ -73,18 +73,18 @@
"bareReadline"
]
},
{
"path": "/lib/bare/bundles/bareAnsiEscapes.js",
"keys": [
"bareAnsiEscapes"
]
},
{
"path": "/lib/bare/bundles/bareCrypto.js",
"keys": [
"bareCrypto"
]
},
{
"path": "/lib/bare/bundles/bareAnsiEscapes.js",
"keys": [
"bareAnsiEscapes"
]
},
{
"path": "/lib/bare/bundles/bareAddonResolve.js",
"keys": [
@@ -92,9 +92,9 @@
]
},
{
"path": "/lib/bare/bundles/bareAppKit.js",
"path": "/lib/bare/bundles/fetch.js",
"keys": [
"bareAppKit"
"fetch"
]
},
{
@@ -104,9 +104,9 @@
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"path": "/lib/bare/bundles/bareAppKit.js",
"keys": [
"bareApk"
"bareAppKit"
]
},
{
@@ -115,6 +115,12 @@
"bareAssert"
]
},
{
"path": "/lib/bare/bundles/bareApk.js",
"keys": [
"bareApk"
]
},
{
"path": "/lib/bare/bundles/bareAtomics.js",
"keys": [
@@ -128,9 +134,9 @@
]
},
{
"path": "/lib/bare/bundles/fetch.js",
"path": "/lib/bare/bundles/bareBundleCompile.js",
"keys": [
"fetch"
"bareBundleCompile"
]
},
{
@@ -140,9 +146,9 @@
]
},
{
"path": "/lib/bare/bundles/bareBundleCompile.js",
"path": "/lib/bare/bundles/bareBluetoothApple.js",
"keys": [
"bareBundleCompile"
"bareBluetoothApple"
]
},
{
@@ -151,12 +157,6 @@
"bareBuffer"
]
},
{
"path": "/lib/bare/bundles/bareBluetoothApple.js",
"keys": [
"bareBluetoothApple"
]
},
{
"path": "/lib/bare/bundles/bareBundleEvaluate.js",
"keys": [
@@ -169,24 +169,12 @@
"bareBoot"
]
},
{
"path": "/lib/bare/bundles/bareBundleId.js",
"keys": [
"bareBundleId"
]
},
{
"path": "/lib/bare/bundles/bareConsole.js",
"keys": [
"bareConsole"
]
},
{
"path": "/lib/bare/bundles/bareDaemon.js",
"keys": [
"bareDaemon"
]
},
{
"path": "/lib/bare/bundles/bareDebugLog.js",
"keys": [
@@ -199,18 +187,30 @@
"bareChannel"
]
},
{
"path": "/lib/bare/bundles/bareDiagnosticsChannel.js",
"keys": [
"bareDiagnosticsChannel"
]
},
{
"path": "/lib/bare/bundles/bareDelta.js",
"keys": [
"bareDelta"
]
},
{
"path": "/lib/bare/bundles/bareBundleId.js",
"keys": [
"bareBundleId"
]
},
{
"path": "/lib/bare/bundles/bareDaemon.js",
"keys": [
"bareDaemon"
]
},
{
"path": "/lib/bare/bundles/bareDiagnosticsChannel.js",
"keys": [
"bareDiagnosticsChannel"
]
},
{
"path": "/lib/bare/bundles/bareDns.js",
"keys": [
@@ -223,12 +223,6 @@
"bareEnv"
]
},
{
"path": "/lib/bare/bundles/bareDgram.js",
"keys": [
"bareDgram"
]
},
{
"path": "/lib/bare/bundles/bareExif.js",
"keys": [
@@ -247,6 +241,12 @@
"bareFfmpeg"
]
},
{
"path": "/lib/bare/bundles/bareDgram.js",
"keys": [
"bareDgram"
]
},
{
"path": "/lib/bare/bundles/bareFfmpegEncodings.js",
"keys": [
@@ -259,18 +259,6 @@
"bareFormData"
]
},
{
"path": "/lib/bare/bundles/bareFormat.js",
"keys": [
"bareFormat"
]
},
{
"path": "/lib/bare/bundles/bareFileLogger.js",
"keys": [
"bareFileLogger"
]
},
{
"path": "/lib/bare/bundles/bareGif.js",
"keys": [
@@ -283,12 +271,30 @@
"bareGtk"
]
},
{
"path": "/lib/bare/bundles/bareFormat.js",
"keys": [
"bareFormat"
]
},
{
"path": "/lib/bare/bundles/bareFileLogger.js",
"keys": [
"bareFileLogger"
]
},
{
"path": "/lib/bare/bundles/bareHeif.js",
"keys": [
"bareHeif"
]
},
{
"path": "/lib/bare/bundles/bareFs.js",
"keys": [
"bareFs"
]
},
{
"path": "/lib/bare/bundles/bareHrtime.js",
"keys": [
@@ -302,9 +308,9 @@
]
},
{
"path": "/lib/bare/bundles/bareFs.js",
"path": "/lib/bare/bundles/bareIco.js",
"keys": [
"bareFs"
"bareIco"
]
},
{
@@ -314,9 +320,9 @@
]
},
{
"path": "/lib/bare/bundles/bareIco.js",
"path": "/lib/bare/bundles/bareInspect.js",
"keys": [
"bareIco"
"bareInspect"
]
},
{
@@ -325,12 +331,6 @@
"bareHttp1"
]
},
{
"path": "/lib/bare/bundles/bareInspect.js",
"keys": [
"bareInspect"
]
},
{
"path": "/lib/bare/bundles/bareHttps.js",
"keys": [
@@ -343,36 +343,36 @@
"bareJpeg"
]
},
{
"path": "/lib/bare/bundles/bareIpc.js",
"keys": [
"bareIpc"
]
},
{
"path": "/lib/bare/bundles/bareIntl.js",
"keys": [
"bareIntl"
]
},
{
"path": "/lib/bare/bundles/bareIpc.js",
"keys": [
"bareIpc"
]
},
{
"path": "/lib/bare/bundles/bareLief.js",
"keys": [
"bareLief"
]
},
{
"path": "/lib/bare/bundles/bareLink.js",
"keys": [
"bareLink"
]
},
{
"path": "/lib/bare/bundles/bareLogger.js",
"keys": [
"bareLogger"
]
},
{
"path": "/lib/bare/bundles/bareLink.js",
"keys": [
"bareLink"
]
},
{
"path": "/lib/bare/bundles/bareInspector.js",
"keys": [
@@ -409,24 +409,12 @@
"bareNdk"
]
},
{
"path": "/lib/bare/bundles/bareMedia.js",
"keys": [
"bareMedia"
]
},
{
"path": "/lib/bare/bundles/bareModuleTraverse.js",
"keys": [
"bareModuleTraverse"
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareNative.js",
"keys": [
@@ -439,6 +427,18 @@
"bareNodeFetch"
]
},
{
"path": "/lib/bare/bundles/bareMedia.js",
"keys": [
"bareMedia"
]
},
{
"path": "/lib/bare/bundles/bareNet.js",
"keys": [
"bareNet"
]
},
{
"path": "/lib/bare/bundles/bareOpen.js",
"keys": [
@@ -451,6 +451,12 @@
"bareOs"
]
},
{
"path": "/lib/bare/bundles/bareDev.js",
"keys": [
"bareDev"
]
},
{
"path": "/lib/bare/bundles/barePerformance.js",
"keys": [
@@ -463,6 +469,12 @@
"barePack"
]
},
{
"path": "/lib/bare/bundles/barePipe.js",
"keys": [
"barePipe"
]
},
{
"path": "/lib/bare/bundles/barePackDrive.js",
"keys": [
@@ -476,27 +488,9 @@
]
},
{
"path": "/lib/bare/bundles/barePipe.js",
"path": "/lib/bare/bundles/barePunycode.js",
"keys": [
"barePipe"
]
},
{
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"keys": [
"bareNodeRuntime"
]
},
{
"path": "/lib/bare/bundles/barePrebuild.js",
"keys": [
"barePrebuild"
]
},
{
"path": "/lib/bare/bundles/bareProcess.js",
"keys": [
"bareProcess"
"barePunycode"
]
},
{
@@ -506,15 +500,15 @@
]
},
{
"path": "/lib/bare/bundles/barePunycode.js",
"path": "/lib/bare/bundles/barePrebuild.js",
"keys": [
"barePunycode"
"barePrebuild"
]
},
{
"path": "/lib/bare/bundles/bareDev.js",
"path": "/lib/bare/bundles/bareNodeRuntime.js",
"keys": [
"bareDev"
"bareNodeRuntime"
]
},
{
@@ -523,6 +517,18 @@
"bareQueueMicrotask"
]
},
{
"path": "/lib/bare/bundles/bareProcess.js",
"keys": [
"bareProcess"
]
},
{
"path": "/lib/bare/bundles/barePromClient.js",
"keys": [
"barePromClient"
]
},
{
"path": "/lib/bare/bundles/bareRealm.js",
"keys": [
@@ -535,18 +541,18 @@
"bareRuntime"
]
},
{
"path": "/lib/bare/bundles/bareRpc.js",
"keys": [
"bareRpc"
]
},
{
"path": "/lib/bare/bundles/bareSdl.js",
"keys": [
"bareSdl"
]
},
{
"path": "/lib/bare/bundles/bareRpc.js",
"keys": [
"bareRpc"
]
},
{
"path": "/lib/bare/bundles/bareSemver.js",
"keys": [
@@ -554,15 +560,9 @@
]
},
{
"path": "/lib/bare/bundles/barePromClient.js",
"path": "/lib/bare/bundles/bareRepl.js",
"keys": [
"barePromClient"
]
},
{
"path": "/lib/bare/bundles/bareSidecar.js",
"keys": [
"bareSidecar"
"bareRepl"
]
},
{
@@ -572,15 +572,9 @@
]
},
{
"path": "/lib/bare/bundles/bareRepl.js",
"path": "/lib/bare/bundles/bareSidecar.js",
"keys": [
"bareRepl"
]
},
{
"path": "/lib/bare/bundles/bareStringDecoder.js",
"keys": [
"bareStringDecoder"
"bareSidecar"
]
},
{
@@ -589,12 +583,6 @@
"bareSignals"
]
},
{
"path": "/lib/bare/bundles/bareStream.js",
"keys": [
"bareStream"
]
},
{
"path": "/lib/bare/bundles/bareStorage.js",
"keys": [
@@ -602,15 +590,15 @@
]
},
{
"path": "/lib/bare/bundles/bareSvg.js",
"path": "/lib/bare/bundles/bareStringDecoder.js",
"keys": [
"bareSvg"
"bareStringDecoder"
]
},
{
"path": "/lib/bare/bundles/bareStructuredClone.js",
"path": "/lib/bare/bundles/bareStream.js",
"keys": [
"bareStructuredClone"
"bareStream"
]
},
{
@@ -620,21 +608,9 @@
]
},
{
"path": "/lib/bare/bundles/bareSystemLogger.js",
"path": "/lib/bare/bundles/bareSvg.js",
"keys": [
"bareSystemLogger"
]
},
{
"path": "/lib/bare/bundles/bareTiff.js",
"keys": [
"bareTiff"
]
},
{
"path": "/lib/bare/bundles/bareSubprocess.js",
"keys": [
"bareSubprocess"
"bareSvg"
]
},
{
@@ -644,15 +620,27 @@
]
},
{
"path": "/lib/bare/bundles/bareTimers.js",
"path": "/lib/bare/bundles/bareSystemLogger.js",
"keys": [
"bareTimers"
"bareSystemLogger"
]
},
{
"path": "/lib/bare/bundles/bareTpl.js",
"path": "/lib/bare/bundles/bareStructuredClone.js",
"keys": [
"bareTpl"
"bareStructuredClone"
]
},
{
"path": "/lib/bare/bundles/bareSubprocess.js",
"keys": [
"bareSubprocess"
]
},
{
"path": "/lib/bare/bundles/bareTiff.js",
"keys": [
"bareTiff"
]
},
{
@@ -662,15 +650,21 @@
]
},
{
"path": "/lib/bare/bundles/bareThread.js",
"path": "/lib/bare/bundles/bareTpl.js",
"keys": [
"bareThread"
"bareTpl"
]
},
{
"path": "/lib/bare/bundles/bareType.js",
"path": "/lib/bare/bundles/bareTimers.js",
"keys": [
"bareType"
"bareTimers"
]
},
{
"path": "/lib/bare/bundles/bareThread.js",
"keys": [
"bareThread"
]
},
{
@@ -680,9 +674,15 @@
]
},
{
"path": "/lib/bare/bundles/bareTty.js",
"path": "/lib/bare/bundles/bareType.js",
"keys": [
"bareTty"
"bareType"
]
},
{
"path": "/lib/bare/bundles/bareUnpack.js",
"keys": [
"bareUnpack"
]
},
{
@@ -692,9 +692,9 @@
]
},
{
"path": "/lib/bare/bundles/bareUnpack.js",
"path": "/lib/bare/bundles/bareTty.js",
"keys": [
"bareUnpack"
"bareTty"
]
},
{
@@ -709,30 +709,24 @@
"bareVm"
]
},
{
"path": "/lib/bare/bundles/bareUnionBundle.js",
"keys": [
"bareUnionBundle"
]
},
{
"path": "/lib/bare/bundles/bareWalkHandles.js",
"keys": [
"bareWalkHandles"
]
},
{
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareWebKit.js",
"keys": [
"bareWebKit"
]
},
{
"path": "/lib/bare/bundles/bareUnionBundle.js",
"keys": [
"bareUnionBundle"
]
},
{
"path": "/lib/bare/bundles/bareWebp.js",
"keys": [
@@ -740,9 +734,9 @@
]
},
{
"path": "/lib/bare/bundles/bareUtils.js",
"path": "/lib/bare/bundles/bareWebKitGtk.js",
"keys": [
"bareUtils"
"bareWebKitGtk"
]
},
{
@@ -752,9 +746,15 @@
]
},
{
"path": "/lib/bare/bundles/bareWebKitGtk.js",
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
"keys": [
"bareWebKitGtk"
"bareV8ToIstanbul"
]
},
{
"path": "/lib/bare/bundles/bareUtils.js",
"keys": [
"bareUtils"
]
},
{
@@ -769,12 +769,6 @@
"bareXdiff"
]
},
{
"path": "/lib/bare/bundles/bareZmq.js",
"keys": [
"bareZmq"
]
},
{
"path": "/lib/bare/bundles/bareZlib.js",
"keys": [
@@ -782,9 +776,9 @@
]
},
{
"path": "/lib/bare/bundles/bareWorker.js",
"path": "/lib/bare/bundles/bareZmq.js",
"keys": [
"bareWorker"
"bareZmq"
]
},
{
@@ -792,6 +786,12 @@
"keys": [
"bareWs"
]
},
{
"path": "/lib/bare/bundles/bareWorker.js",
"keys": [
"bareWorker"
]
}
],
"bundleStats": {
@@ -1,6 +1,6 @@
{
"schema": 1,
"atMs": 1775345751113,
"atMs": 1775346015505,
"commands": [
"arch",
"awk",
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -93,11 +93,11 @@ Fails on incomplete-runtime markers (**`TODO`**, **`FIXME`**, **`HACK`**, **`XXX
**Usage:** `node scripts/verify-bare-imports.mjs`
Forbids **`node:`** in static **`from`**, dynamic **`import()`**, and **`require()`** for **`kernel/init.js`**, **`kernel/lib/init/`**, **`kernel/lib/boot/`** (excluding **`bundles/`** subtree via walk rules), **`packages/bare-os-booter/index.js`**, and **`packages/bare-os-booter/lib/**/*.js`** (skips **`*.node.js`** shims). Does not scan **`scripts/`** (Node tooling may use **`node:fs`**). Root **`pretest`**.
Forbids **`node:`** in static **`from`**, dynamic **`import()`**, and **`require()`** for **`kernel/init.js`**, **`kernel/lib/init/`**, **`kernel/lib/boot/`** (excluding **`bundles/`** subtree via walk rules), **`packages/bare-os-booter/index.js`**, **`packages/bare-os-booter/lib/**/*.js`** (skips **`*.node.js`** shims), and **`packages/bare-os-protocol/lib/**/*.js`**. Does not scan **`scripts/`** (Node tooling may use **`node:fs`**). Root **`pretest`**.
## `gen-ctx-client-stub.mjs`
## `gen-ctx-client-helper.mjs`
**Usage:** `node scripts/gen-ctx-client-stub.mjs`
**Usage:** `node scripts/gen-ctx-client-helper.mjs`
Emits a TypeScript header with **`BARE_OS_CTX_API_CLIENT_VERSION`** aligned to **`bare-os-ctx-api.js`**. Root **`pretest`** (stdout discarded).
@@ -17,7 +17,7 @@ const src = fs.readFileSync(apiPath, 'utf8')
const m = src.match(/export const BARE_OS_CTX_API_VERSION = '([^']+)'/)
const ver = m ? m[1] : 'unknown'
const out = `// Auto-generated by scripts/gen-ctx-client-stub.mjs — do not edit by hand.
const out = `// Auto-generated by scripts/gen-ctx-client-helper.mjs — do not edit by hand.
// Types: import type { BareOsKernelContext } from 'bare-os-booter/lib/bare-os-ctx.js'
// (path varies by consumer package layout)
+6 -3
View File
@@ -1,8 +1,9 @@
#!/usr/bin/env node
/**
* CI: forbid `node:` specifiers in Bare OS runtime sources (booter + guest kernel).
* Repo maintenance scripts under scripts/ may use node: they are not scanned.
* CI: forbid `node:` specifiers in Bare OS runtime sources (booter + guest kernel +
* bare-os-protocol lib). Repo maintenance scripts under scripts/ may use node:.
* Dual booter files `*.node.js` are excluded (Node-only shims).
* `kernel/lib/bare/bundles/` is never walked (vendored IIFEs).
*/
import fs from 'node:fs'
import path from 'node:path'
@@ -63,12 +64,14 @@ function checkFile(abs) {
}
function main() {
const protocolLib = path.join(root, 'packages', 'bare-os-protocol', 'lib')
const files = [
path.join(root, 'kernel', 'init.js'),
path.join(root, 'kernel', 'lib', 'init', 'init-main.js'),
...walk(path.join(root, 'kernel', 'lib', 'boot')),
...walk(path.join(root, 'packages', 'bare-os-booter', 'lib')),
path.join(root, 'packages', 'bare-os-booter', 'index.js')
path.join(root, 'packages', 'bare-os-booter', 'index.js'),
...(fs.existsSync(protocolLib) ? walk(protocolLib) : [])
]
for (const abs of files) {
if (!fs.existsSync(abs)) continue