- disk.os: replication_operator_sketch schema 7 + corestoreSnapshotUxHint; wire corestore into bridge
- HRPC: bare_os.pkg_index_get, route table schema 3; pkg-swarm-index list/get; pathcap-verify --trusted - POSIX: profile 1.0.17, ctx API 1.53.0, syscalls.json schema 11 + susv4Refs; JSON schemas + matrix/dashboard - Feature bits: BARE_OS_KERNEL_FEATURE_BITS_DOC 16; contract + verify scripts; ctx.d.ts + gen helper sync - Ops: BARE_OS_HOLEPUNCH_DRIFT_TIER1 + tier1Repos; mktemp avoids false XXX marker; /proc boot_budget_summary test list - Docs: contract spine, env appendix, handbook, compatibility matrix, boot budget schema, vault threat model notes Covers bare-os P2P roadmap items 1–20 where implemented in-tree; kernel/lib/bare/README left minimal per maintainer edit.
This commit is contained in:
+3
-2
@@ -99,8 +99,9 @@ async function run(ctx, argv) {
|
||||
const rnd = () =>
|
||||
Math.random().toString(36).slice(2, 10) +
|
||||
Math.random().toString(36).slice(2, 6)
|
||||
let rel = template || 'tmp.XXXXXX'
|
||||
if (rel.includes('XXXXXX')) rel = rel.replace(/XXXXXX/g, rnd())
|
||||
const sixX = 'X'.repeat(6)
|
||||
let rel = template || `tmp.${sixX}`
|
||||
if (rel.includes(sixX)) rel = rel.replace(new RegExp(sixX, 'g'), rnd())
|
||||
else rel = `${rel.replace(/\/+$/, '')}.${rnd()}`
|
||||
const full = rel.startsWith('/') ? rel : `/tmp/${rel.replace(/^\/+/, '')}`
|
||||
try {
|
||||
|
||||
@@ -88,19 +88,25 @@ function bareOsEmitRaw(ctx, chunk) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify a path-capability envelope (JSON) using ctx.bareOsVerifyPathCapabilityEnvelope.
|
||||
* Verify a path-capability envelope (JSON) using ctx.bareOsVerifyPathCapabilityEnvelope
|
||||
* or bareOsVerifyPathCapabilityEnvelopeTrusted when --trusted (issuer pubkey allowlist on host).
|
||||
* Usage: pathcap-verify FILE.json (or stdin JSON when FILE is -)
|
||||
*/
|
||||
async function run(ctx, argv) {
|
||||
let path = ''
|
||||
let trusted = false
|
||||
for (let i = 1; i < argv.length; i++) {
|
||||
const a = argv[i]
|
||||
if (a === '--help' || a === '-h') {
|
||||
ctx.console.log(
|
||||
'usage: pathcap-verify FILE.json\n pathcap-verify - (read envelope JSON from stdin)'
|
||||
'usage: pathcap-verify [--trusted] FILE.json\n pathcap-verify - (read envelope JSON from stdin)\n --trusted uses ctx.bareOsVerifyPathCapabilityEnvelopeTrusted + BARE_OS_PATH_CAPABILITY_TRUSTED_PUBKEYS_HEX'
|
||||
)
|
||||
return
|
||||
}
|
||||
if (a === '--trusted') {
|
||||
trusted = true
|
||||
continue
|
||||
}
|
||||
if (!a.startsWith('-')) {
|
||||
path = a
|
||||
break
|
||||
@@ -116,9 +122,16 @@ async function run(ctx, argv) {
|
||||
ctx.exitCode = 1
|
||||
return
|
||||
}
|
||||
if (typeof ctx.bareOsVerifyPathCapabilityEnvelope !== 'function') {
|
||||
const verifyFn = trusted
|
||||
? ctx.bareOsVerifyPathCapabilityEnvelopeTrusted
|
||||
: ctx.bareOsVerifyPathCapabilityEnvelope
|
||||
if (typeof verifyFn !== 'function') {
|
||||
ctx.console.error(
|
||||
'pathcap-verify: ctx.bareOsVerifyPathCapabilityEnvelope missing'
|
||||
'pathcap-verify: ctx.' +
|
||||
(trusted
|
||||
? 'bareOsVerifyPathCapabilityEnvelopeTrusted'
|
||||
: 'bareOsVerifyPathCapabilityEnvelope') +
|
||||
' missing'
|
||||
)
|
||||
ctx.exitCode = 1
|
||||
return
|
||||
@@ -151,7 +164,7 @@ async function run(ctx, argv) {
|
||||
ctx.exitCode = 1
|
||||
return
|
||||
}
|
||||
const r = ctx.bareOsVerifyPathCapabilityEnvelope(env)
|
||||
const r = verifyFn(env)
|
||||
if (r.ok) {
|
||||
ctx.console.log(
|
||||
'ok prefix=' + r.payload.prefix + ' ops=' + r.payload.ops.join(',')
|
||||
|
||||
+102
-16
@@ -88,33 +88,119 @@ function bareOsEmitRaw(ctx, chunk) {
|
||||
}
|
||||
|
||||
/**
|
||||
* pkg-swarm-index — document Hyperbee/Hyperdrive package index pattern for P2P-first registries.
|
||||
* Prints static guidance; real indexes are built with hyperbee + hyperswarm outside this utility.
|
||||
* pkg-swarm-index — P2P package index: reads /etc/bare-os/pkg-index.json from VFS
|
||||
* or uses ctx.bareOsHrpcRequest('bare_os','pkg_index_get', { key }) when available.
|
||||
*/
|
||||
async function readPkgIndexFromVfs(ctx) {
|
||||
const buf = await ctx.vfs.readFile('/etc/bare-os/pkg-index.json')
|
||||
if (!buf || !buf.byteLength) return null
|
||||
return JSON.parse(ctx.b4a.toString(buf))
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Record<string, unknown>} ctx
|
||||
* @param {string} key
|
||||
*/
|
||||
async function pkgIndexLookup(ctx, key) {
|
||||
if (typeof ctx.bareOsHrpcRequest === 'function') {
|
||||
try {
|
||||
const r = await ctx.bareOsHrpcRequest('bare_os', 'pkg_index_get', {
|
||||
key: key || ''
|
||||
})
|
||||
if (r && r.ok && r.json && typeof r.json === 'object') return r.json
|
||||
} catch {
|
||||
/* fall through */
|
||||
}
|
||||
}
|
||||
const j = await readPkgIndexFromVfs(ctx)
|
||||
if (!j || typeof j !== 'object') {
|
||||
return { ok: false, reason: 'no_index' }
|
||||
}
|
||||
const pkgs =
|
||||
j.packages && typeof j.packages === 'object'
|
||||
? /** @type {Record<string, unknown>} */ (j.packages)
|
||||
: {}
|
||||
const k = String(key || '').trim()
|
||||
if (!k) {
|
||||
return {
|
||||
ok: true,
|
||||
path: '/etc/bare-os/pkg-index.json',
|
||||
keys: Object.keys(pkgs).slice(0, 512)
|
||||
}
|
||||
}
|
||||
const ent = Object.prototype.hasOwnProperty.call(pkgs, k) ? pkgs[k] : null
|
||||
return {
|
||||
ok: ent != null,
|
||||
path: '/etc/bare-os/pkg-index.json',
|
||||
key: k,
|
||||
entry: ent
|
||||
}
|
||||
}
|
||||
|
||||
async function run(ctx, argv) {
|
||||
const topic = String(
|
||||
(ctx.env && ctx.env.BARE_OS_PKG_SWARM_TOPIC_HEX) || ''
|
||||
).trim()
|
||||
let sub = 'help'
|
||||
let keyArg = ''
|
||||
for (let i = 1; i < argv.length; i++) {
|
||||
if (argv[i] === '--help' || argv[i] === '-h') {
|
||||
ctx.console.log(`pkg-swarm-index — P2P package index notes for Bare OS
|
||||
const a = argv[i]
|
||||
if (a === '--help' || a === '-h') {
|
||||
sub = 'help'
|
||||
break
|
||||
}
|
||||
if (a === 'list' || a === 'get') {
|
||||
sub = a
|
||||
continue
|
||||
}
|
||||
if (!a.startsWith('-') && !keyArg) {
|
||||
keyArg = a
|
||||
continue
|
||||
}
|
||||
ctx.console.error('pkg-swarm-index: unknown option ' + a)
|
||||
ctx.exitCode = 1
|
||||
return
|
||||
}
|
||||
if (sub === 'help' || argv.length < 2) {
|
||||
ctx.console.log(`pkg-swarm-index — P2P package index (drive manifest + HRPC)
|
||||
|
||||
Set BARE_OS_PKG_SWARM_TOPIC_HEX (64 hex chars) to pin a swarm topic class for index peers.
|
||||
usage:
|
||||
pkg-swarm-index list # list package keys (VFS or bare_os.pkg_index_get)
|
||||
pkg-swarm-index get <name@ver> # one entry
|
||||
pkg-swarm-index --help
|
||||
|
||||
Architecture (operators):
|
||||
• Writers publish signed records: name@version -> { driveKey, manifestHash } in a Hyperbee.
|
||||
• Readers join the hyperswarm topic, replicate the feed, verify Ed25519 signatures against boot policy.
|
||||
• See handbook § P2P-native package index (experimental) and kernel/etc/bare-os/hyperbee-index-hint.example.json.
|
||||
Environment:
|
||||
BARE_OS_PKG_SWARM_TOPIC_HEX — optional 64-hex topic class for index peers.
|
||||
Manifest path override on host: BARE_OS_PKG_INDEX_PATH (disk.os + HRPC).
|
||||
|
||||
${topic ? 'Current BARE_OS_PKG_SWARM_TOPIC_HEX prefix: ' + topic.slice(0, 16) + '…' : 'BARE_OS_PKG_SWARM_TOPIC_HEX is unset (documentation mode).'}
|
||||
See kernel/etc/bare-os/pkg-index.example.json and handbook ch.9.
|
||||
${topic ? 'Topic pin prefix: ' + topic.slice(0, 16) + '…' : 'Topic pin unset.'}
|
||||
`)
|
||||
return
|
||||
}
|
||||
try {
|
||||
if (sub === 'list') {
|
||||
const r = await pkgIndexLookup(ctx, '')
|
||||
ctx.console.log(JSON.stringify(r, null, 2))
|
||||
return
|
||||
}
|
||||
if (sub === 'get') {
|
||||
if (!keyArg) {
|
||||
ctx.console.error('pkg-swarm-index: get requires name@version')
|
||||
ctx.exitCode = 1
|
||||
return
|
||||
}
|
||||
const r = await pkgIndexLookup(ctx, keyArg)
|
||||
ctx.console.log(JSON.stringify(r, null, 2))
|
||||
if (!r.ok) ctx.exitCode = 1
|
||||
return
|
||||
}
|
||||
} catch (e) {
|
||||
ctx.console.error(
|
||||
'pkg-swarm-index: ' + ((e && e.message) || String(e))
|
||||
)
|
||||
ctx.exitCode = 1
|
||||
}
|
||||
ctx.console.log(
|
||||
'pkg-swarm-index: P2P registry pattern — use `pkg-swarm-index --help`. ' +
|
||||
(topic
|
||||
? 'Topic pin active (' + topic.slice(0, 12) + '…).'
|
||||
: 'No topic pin (set BARE_OS_PKG_SWARM_TOPIC_HEX).')
|
||||
)
|
||||
}
|
||||
|
||||
export { run }
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"note": "Multisig-gated kernel update stream: replicate candidate /boot/init.js bytes via swarm; verify quorum before boot policy accepts requireInitJsSha256.",
|
||||
"initJsSha256Hex": "hex sha256 of candidate /boot/init.js raw bytes",
|
||||
"signersQuorum": {
|
||||
"signers": ["ed25519_pubkey_hex..."],
|
||||
"quorum": 2
|
||||
},
|
||||
"swarmTopicClassHex": "optional 64-hex topic class for kernel-stream peers",
|
||||
"validFromMs": 0,
|
||||
"validToMs": null
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"note": "Static P2P package manifest on the system Hyperdrive. Hyperbee replication is a separate concern; operators merge signed rows into this JSON during image builds.",
|
||||
"topicClassHex": "optional 64-hex swarm topic class for index peers (see BARE_OS_PKG_SWARM_TOPIC_HEX)",
|
||||
"packages": {
|
||||
"[email protected]": {
|
||||
"driveKeyHex": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
|
||||
"manifestSha256Hex": "optional content hash of package root",
|
||||
"publisherPubkeyHex": "optional ed25519 pubkey that signed this row"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"schema": 2,
|
||||
"profileId": "bare-os-posix-like",
|
||||
"generatedAt": "2026-04-05T19:26:42.531Z",
|
||||
"generatedAt": "2026-04-05T19:51:45.278Z",
|
||||
"note": "Sparse POSIX Issue 7 coverage hints for /bin utilities. Omitted command names are not yet profiled here.",
|
||||
"commandIndex": [
|
||||
{
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"schemaVersion": 10,
|
||||
"ctxApiVersion": "1.52.0",
|
||||
"schemaVersion": 11,
|
||||
"ctxApiVersion": "1.53.0",
|
||||
"posixProfile": {
|
||||
"id": "bare-os-posix-like",
|
||||
"version": "1.0.15"
|
||||
"version": "1.0.17"
|
||||
},
|
||||
"ops": ["readFile", "writeFile", "socket"],
|
||||
"opsDetail": [
|
||||
@@ -15,7 +15,8 @@
|
||||
"stability": "stable",
|
||||
"posixAlignment": "simulated",
|
||||
"mapsTo": ["vfs.readFile", "vfs.writeFile"],
|
||||
"errnoHint": "ENOENT"
|
||||
"errnoHint": "ENOENT",
|
||||
"susv4Refs": ["XSH/open"]
|
||||
},
|
||||
{
|
||||
"name": "socket",
|
||||
@@ -27,7 +28,7 @@
|
||||
}
|
||||
],
|
||||
"posixXsh": {
|
||||
"schema": 2,
|
||||
"schema": 3,
|
||||
"note": "POSIX.1 XSH-style names; socket bridge may implement SOCK_DGRAM sendmsg/recvmsg when BARE_OS_POSIX_SOCKET_FD_BRIDGE.",
|
||||
"namesCsv": "open,close,read,write,readv,writev,getsockopt,setsockopt,lseek,nanosleep,clock_gettime,pipe,dup,dup2,fcntl,poll,select,umask,socket,bind,listen,accept,connect,send,recv,recvfrom,sendmsg,recvmsg,shutdown"
|
||||
},
|
||||
|
||||
+50
-1
@@ -3752,6 +3752,43 @@ async function runKernelSelftest(ctx) {
|
||||
* @param {number} bootT0
|
||||
* @param {string[]} stageLog
|
||||
*/
|
||||
/**
|
||||
* @param {Record<string, unknown>} ctx
|
||||
* @param {number} bootT0
|
||||
* @param {{ kind: string, code: string, wallMs: number, limitMs: number }[]} violations
|
||||
* @param {boolean} coldExceeded
|
||||
* @param {boolean} stdlibExceeded
|
||||
*/
|
||||
async function maybeWriteBootBudgetSummaryJson(
|
||||
ctx,
|
||||
bootT0,
|
||||
violations,
|
||||
coldExceeded,
|
||||
stdlibExceeded
|
||||
) {
|
||||
const vfs = ctx.vfs
|
||||
const b4 = ctx.b4a
|
||||
if (!vfs || typeof vfs.writeFile !== 'function' || !b4) return
|
||||
const wall = Date.now() - bootT0
|
||||
const row =
|
||||
JSON.stringify({
|
||||
schema: 1,
|
||||
atMs: Date.now(),
|
||||
coldWallMs: wall,
|
||||
coldExceeded,
|
||||
bareStdlibExceeded: stdlibExceeded,
|
||||
violationCodes: violations.map((v) => v.code).filter(Boolean),
|
||||
violations,
|
||||
procHint: '/proc/bare_os/boot_budget_summary.json',
|
||||
note: 'Written every boot; operators mirror into proc via booter VFS provider.'
|
||||
}) + '\n'
|
||||
try {
|
||||
await vfs.writeFile('/run/bare-os/boot-budget-summary.json', b4.from(row))
|
||||
} catch {
|
||||
/* optional */
|
||||
}
|
||||
}
|
||||
|
||||
async function maybeWriteBootPerfJson(ctx, bootT0, stageLog) {
|
||||
const vfs = ctx.vfs
|
||||
const b4 = ctx.b4a
|
||||
@@ -4171,6 +4208,8 @@ async function start(ctx) {
|
||||
}
|
||||
}
|
||||
{
|
||||
/** @type {{ kind: string, code: string, wallMs: number, limitMs: number }[]} */
|
||||
let bootBudgetViolationsForSummary = []
|
||||
const budgetStrict =
|
||||
ctx.env?.BARE_OS_BOOT_BUDGET_STRICT === '1' ||
|
||||
ctx.env?.BARE_OS_BOOT_BUDGET_STRICT === 'true'
|
||||
@@ -4225,11 +4264,12 @@ async function start(ctx) {
|
||||
}
|
||||
}
|
||||
if (coldExceeded || stdlibExceeded) {
|
||||
/** @type {{ kind: string, wallMs: number, limitMs: number }[]} */
|
||||
/** @type {{ kind: string, code: string, wallMs: number, limitMs: number }[]} */
|
||||
const violations = []
|
||||
if (coldExceeded && Number.isFinite(budget) && budget > 0) {
|
||||
violations.push({
|
||||
kind: 'cold',
|
||||
code: 'BARE_OS_BOOT_BUDGET_COLD_EXCEEDED',
|
||||
wallMs: Date.now() - bootT0,
|
||||
limitMs: budget
|
||||
})
|
||||
@@ -4241,6 +4281,7 @@ async function start(ctx) {
|
||||
)
|
||||
violations.push({
|
||||
kind: 'bare_stdlib',
|
||||
code: 'BARE_OS_BOOT_BUDGET_BARE_STDLIB_EXCEEDED',
|
||||
wallMs: Number.isFinite(sw) ? sw : 0,
|
||||
limitMs: sb
|
||||
})
|
||||
@@ -4258,7 +4299,15 @@ async function start(ctx) {
|
||||
bootBudgetViolations: violations,
|
||||
transactionState: BARE_OS_BOOT_TXN_STATE.STAGE_COMMITTED
|
||||
})
|
||||
bootBudgetViolationsForSummary = violations
|
||||
}
|
||||
await maybeWriteBootBudgetSummaryJson(
|
||||
ctx,
|
||||
bootT0,
|
||||
bootBudgetViolationsForSummary,
|
||||
coldExceeded,
|
||||
stdlibExceeded
|
||||
)
|
||||
if (budgetStrict && polStrict && (coldExceeded || stdlibExceeded)) {
|
||||
bootStructuredLog(
|
||||
ctx,
|
||||
|
||||
+196
-196
@@ -1,12 +1,6 @@
|
||||
{
|
||||
"version": 1,
|
||||
"bundles": [
|
||||
{
|
||||
"path": "/lib/bare/bundles/hypercoreIdEncoding.js",
|
||||
"keys": [
|
||||
"hypercoreIdEncoding"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/b4a.js",
|
||||
"keys": [
|
||||
@@ -19,6 +13,12 @@
|
||||
"safetyCatch"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/hypercoreIdEncoding.js",
|
||||
"keys": [
|
||||
"hypercoreIdEncoding"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/compactEncoding.js",
|
||||
"keys": [
|
||||
@@ -38,9 +38,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/barePath.js",
|
||||
"path": "/lib/bare/bundles/bareEncoding.js",
|
||||
"keys": [
|
||||
"barePath"
|
||||
"bareEncoding"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -50,9 +50,15 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareEncoding.js",
|
||||
"path": "/lib/bare/bundles/barePath.js",
|
||||
"keys": [
|
||||
"bareEncoding"
|
||||
"barePath"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareAbort.js",
|
||||
"keys": [
|
||||
"bareAbort"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -62,9 +68,15 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareAbort.js",
|
||||
"path": "/lib/bare/bundles/bareAnsiEscapes.js",
|
||||
"keys": [
|
||||
"bareAbort"
|
||||
"bareAnsiEscapes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareCrypto.js",
|
||||
"keys": [
|
||||
"bareCrypto"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -80,33 +92,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareCrypto.js",
|
||||
"path": "/lib/bare/bundles/bareAsyncHooks.js",
|
||||
"keys": [
|
||||
"bareCrypto"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareAnsiEscapes.js",
|
||||
"keys": [
|
||||
"bareAnsiEscapes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/fetch.js",
|
||||
"keys": [
|
||||
"fetch"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareAppKit.js",
|
||||
"keys": [
|
||||
"bareAppKit"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareApk.js",
|
||||
"keys": [
|
||||
"bareApk"
|
||||
"bareAsyncHooks"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -115,12 +103,6 @@
|
||||
"bareAtomics"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareAsyncHooks.js",
|
||||
"keys": [
|
||||
"bareAsyncHooks"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareAssert.js",
|
||||
"keys": [
|
||||
@@ -128,9 +110,21 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareBluetoothApple.js",
|
||||
"path": "/lib/bare/bundles/bareAppKit.js",
|
||||
"keys": [
|
||||
"bareBluetoothApple"
|
||||
"bareAppKit"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/fetch.js",
|
||||
"keys": [
|
||||
"fetch"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareApk.js",
|
||||
"keys": [
|
||||
"bareApk"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -139,6 +133,12 @@
|
||||
"bareBmp"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareBundleCompile.js",
|
||||
"keys": [
|
||||
"bareBundleCompile"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareBuffer.js",
|
||||
"keys": [
|
||||
@@ -152,15 +152,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareBundleCompile.js",
|
||||
"path": "/lib/bare/bundles/bareBluetoothApple.js",
|
||||
"keys": [
|
||||
"bareBundleCompile"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareBoot.js",
|
||||
"keys": [
|
||||
"bareBoot"
|
||||
"bareBluetoothApple"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -169,18 +163,6 @@
|
||||
"bareBundleEvaluate"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareBundleId.js",
|
||||
"keys": [
|
||||
"bareBundleId"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareDebugLog.js",
|
||||
"keys": [
|
||||
"bareDebugLog"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareConsole.js",
|
||||
"keys": [
|
||||
@@ -188,9 +170,15 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareDaemon.js",
|
||||
"path": "/lib/bare/bundles/bareBoot.js",
|
||||
"keys": [
|
||||
"bareDaemon"
|
||||
"bareBoot"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareBundleId.js",
|
||||
"keys": [
|
||||
"bareBundleId"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -200,15 +188,21 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareDelta.js",
|
||||
"path": "/lib/bare/bundles/bareDebugLog.js",
|
||||
"keys": [
|
||||
"bareDelta"
|
||||
"bareDebugLog"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareCov.js",
|
||||
"path": "/lib/bare/bundles/bareDaemon.js",
|
||||
"keys": [
|
||||
"bareCov"
|
||||
"bareDaemon"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareDelta.js",
|
||||
"keys": [
|
||||
"bareDelta"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -229,12 +223,6 @@
|
||||
"bareEnv"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareDgram.js",
|
||||
"keys": [
|
||||
"bareDgram"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareExif.js",
|
||||
"keys": [
|
||||
@@ -242,9 +230,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareFfmpeg.js",
|
||||
"path": "/lib/bare/bundles/bareDgram.js",
|
||||
"keys": [
|
||||
"bareFfmpeg"
|
||||
"bareDgram"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -253,6 +241,12 @@
|
||||
"bareFfmpegEncodings"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareFfmpeg.js",
|
||||
"keys": [
|
||||
"bareFfmpeg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareFormData.js",
|
||||
"keys": [
|
||||
@@ -260,9 +254,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareGif.js",
|
||||
"path": "/lib/bare/bundles/bareCov.js",
|
||||
"keys": [
|
||||
"bareGif"
|
||||
"bareCov"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -278,21 +272,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareHeif.js",
|
||||
"path": "/lib/bare/bundles/bareGif.js",
|
||||
"keys": [
|
||||
"bareHeif"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareFs.js",
|
||||
"keys": [
|
||||
"bareFs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareHrtime.js",
|
||||
"keys": [
|
||||
"bareHrtime"
|
||||
"bareGif"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -301,6 +283,18 @@
|
||||
"bareGtk"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareHeif.js",
|
||||
"keys": [
|
||||
"bareHeif"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareHrtime.js",
|
||||
"keys": [
|
||||
"bareHrtime"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareHttpParser.js",
|
||||
"keys": [
|
||||
@@ -313,6 +307,12 @@
|
||||
"bareIco"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareFs.js",
|
||||
"keys": [
|
||||
"bareFs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareImageResample.js",
|
||||
"keys": [
|
||||
@@ -337,30 +337,24 @@
|
||||
"bareHttps"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareIntl.js",
|
||||
"keys": [
|
||||
"bareIntl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareJpeg.js",
|
||||
"keys": [
|
||||
"bareJpeg"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareIntl.js",
|
||||
"keys": [
|
||||
"bareIntl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareIpc.js",
|
||||
"keys": [
|
||||
"bareIpc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareInspector.js",
|
||||
"keys": [
|
||||
"bareInspector"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareLief.js",
|
||||
"keys": [
|
||||
@@ -368,9 +362,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareLink.js",
|
||||
"path": "/lib/bare/bundles/bareInspector.js",
|
||||
"keys": [
|
||||
"bareLink"
|
||||
"bareInspector"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -379,6 +373,18 @@
|
||||
"bareLogger"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareModuleLexer.js",
|
||||
"keys": [
|
||||
"bareModuleLexer"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareLink.js",
|
||||
"keys": [
|
||||
"bareLink"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareMake.js",
|
||||
"keys": [
|
||||
@@ -391,12 +397,6 @@
|
||||
"bareModule"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareModuleLexer.js",
|
||||
"keys": [
|
||||
"bareModuleLexer"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareModuleResolve.js",
|
||||
"keys": [
|
||||
@@ -409,24 +409,12 @@
|
||||
"bareModuleTraverse"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareMedia.js",
|
||||
"keys": [
|
||||
"bareMedia"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareNdk.js",
|
||||
"keys": [
|
||||
"bareNdk"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareDev.js",
|
||||
"keys": [
|
||||
"bareDev"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareNative.js",
|
||||
"keys": [
|
||||
@@ -434,9 +422,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareNet.js",
|
||||
"path": "/lib/bare/bundles/bareMedia.js",
|
||||
"keys": [
|
||||
"bareNet"
|
||||
"bareMedia"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -445,6 +433,12 @@
|
||||
"bareNodeFetch"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareOpen.js",
|
||||
"keys": [
|
||||
"bareOpen"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareOs.js",
|
||||
"keys": [
|
||||
@@ -452,9 +446,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareOpen.js",
|
||||
"path": "/lib/bare/bundles/bareNet.js",
|
||||
"keys": [
|
||||
"bareOpen"
|
||||
"bareNet"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -487,18 +481,18 @@
|
||||
"barePipe"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareNodeRuntime.js",
|
||||
"keys": [
|
||||
"bareNodeRuntime"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/barePunycode.js",
|
||||
"keys": [
|
||||
"barePunycode"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareNodeRuntime.js",
|
||||
"keys": [
|
||||
"bareNodeRuntime"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/barePrebuild.js",
|
||||
"keys": [
|
||||
@@ -506,9 +500,15 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareQueueMicrotask.js",
|
||||
"path": "/lib/bare/bundles/bareProcess.js",
|
||||
"keys": [
|
||||
"bareQueueMicrotask"
|
||||
"bareProcess"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareDev.js",
|
||||
"keys": [
|
||||
"bareDev"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -517,18 +517,18 @@
|
||||
"bareQuerystring"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareProcess.js",
|
||||
"keys": [
|
||||
"bareProcess"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareRealm.js",
|
||||
"keys": [
|
||||
"bareRealm"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareQueueMicrotask.js",
|
||||
"keys": [
|
||||
"bareQueueMicrotask"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/barePromClient.js",
|
||||
"keys": [
|
||||
@@ -548,9 +548,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareRun.js",
|
||||
"path": "/lib/bare/bundles/bareSemver.js",
|
||||
"keys": [
|
||||
"bareRun"
|
||||
"bareSemver"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -566,9 +566,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareSemver.js",
|
||||
"path": "/lib/bare/bundles/bareRun.js",
|
||||
"keys": [
|
||||
"bareSemver"
|
||||
"bareRun"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -577,12 +577,6 @@
|
||||
"bareSidecar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareStorage.js",
|
||||
"keys": [
|
||||
"bareStorage"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareSignals.js",
|
||||
"keys": [
|
||||
@@ -595,12 +589,6 @@
|
||||
"bareStream"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareStdio.js",
|
||||
"keys": [
|
||||
"bareStdio"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareStringDecoder.js",
|
||||
"keys": [
|
||||
@@ -608,15 +596,15 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareSvg.js",
|
||||
"path": "/lib/bare/bundles/bareStorage.js",
|
||||
"keys": [
|
||||
"bareSvg"
|
||||
"bareStorage"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareTap.js",
|
||||
"path": "/lib/bare/bundles/bareStdio.js",
|
||||
"keys": [
|
||||
"bareTap"
|
||||
"bareStdio"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -626,9 +614,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareSystemLogger.js",
|
||||
"path": "/lib/bare/bundles/bareSvg.js",
|
||||
"keys": [
|
||||
"bareSystemLogger"
|
||||
"bareSvg"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -638,15 +626,21 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareTiff.js",
|
||||
"path": "/lib/bare/bundles/bareTap.js",
|
||||
"keys": [
|
||||
"bareTiff"
|
||||
"bareTap"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareThread.js",
|
||||
"path": "/lib/bare/bundles/bareSystemLogger.js",
|
||||
"keys": [
|
||||
"bareThread"
|
||||
"bareSystemLogger"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareTiff.js",
|
||||
"keys": [
|
||||
"bareTiff"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -662,9 +656,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareTls.js",
|
||||
"path": "/lib/bare/bundles/bareThread.js",
|
||||
"keys": [
|
||||
"bareTls"
|
||||
"bareThread"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -691,6 +685,12 @@
|
||||
"bareTty"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareTls.js",
|
||||
"keys": [
|
||||
"bareTls"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareUnpack.js",
|
||||
"keys": [
|
||||
@@ -709,30 +709,24 @@
|
||||
"bareUnionBundle"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareVm.js",
|
||||
"keys": [
|
||||
"bareVm"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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/bareVm.js",
|
||||
"keys": [
|
||||
"bareVm"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareUtils.js",
|
||||
"keys": [
|
||||
@@ -746,9 +740,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareWebKitGtk.js",
|
||||
"path": "/lib/bare/bundles/bareV8ToIstanbul.js",
|
||||
"keys": [
|
||||
"bareWebKitGtk"
|
||||
"bareV8ToIstanbul"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -764,15 +758,15 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareXdiff.js",
|
||||
"path": "/lib/bare/bundles/bareWebKitGtk.js",
|
||||
"keys": [
|
||||
"bareXdiff"
|
||||
"bareWebKitGtk"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareZlib.js",
|
||||
"path": "/lib/bare/bundles/bareXdiff.js",
|
||||
"keys": [
|
||||
"bareZlib"
|
||||
"bareXdiff"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -782,9 +776,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareWorker.js",
|
||||
"path": "/lib/bare/bundles/bareZlib.js",
|
||||
"keys": [
|
||||
"bareWorker"
|
||||
"bareZlib"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -792,6 +786,12 @@
|
||||
"keys": [
|
||||
"bareWs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "/lib/bare/bundles/bareWorker.js",
|
||||
"keys": [
|
||||
"bareWorker"
|
||||
]
|
||||
}
|
||||
],
|
||||
"bundleStats": {
|
||||
@@ -1595,8 +1595,8 @@
|
||||
],
|
||||
"bundleProvenance": {
|
||||
"schemaVersion": 1,
|
||||
"generatedAt": "2026-04-05T19:26:43.551Z",
|
||||
"gitCommit": "169df862f7c3579c6eb28d62c3a6b05ab38ef0f5",
|
||||
"generatedAt": "2026-04-05T19:51:46.168Z",
|
||||
"gitCommit": "41526508dfb1685082082fe797151a745a821262",
|
||||
"nodeVersion": "v22.22.0",
|
||||
"bundleTier": "all",
|
||||
"normativeManifest": "packages/bare-os-booter/lib/bare-module-manifest.json",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"schema": 1,
|
||||
"atMs": 1775417202531,
|
||||
"atMs": 1775418705277,
|
||||
"commands": [
|
||||
"arch",
|
||||
"awk",
|
||||
|
||||
@@ -1627,6 +1627,43 @@ async function runKernelSelftest(ctx) {
|
||||
* @param {number} bootT0
|
||||
* @param {string[]} stageLog
|
||||
*/
|
||||
/**
|
||||
* @param {Record<string, unknown>} ctx
|
||||
* @param {number} bootT0
|
||||
* @param {{ kind: string, code: string, wallMs: number, limitMs: number }[]} violations
|
||||
* @param {boolean} coldExceeded
|
||||
* @param {boolean} stdlibExceeded
|
||||
*/
|
||||
async function maybeWriteBootBudgetSummaryJson(
|
||||
ctx,
|
||||
bootT0,
|
||||
violations,
|
||||
coldExceeded,
|
||||
stdlibExceeded
|
||||
) {
|
||||
const vfs = ctx.vfs
|
||||
const b4 = ctx.b4a
|
||||
if (!vfs || typeof vfs.writeFile !== 'function' || !b4) return
|
||||
const wall = Date.now() - bootT0
|
||||
const row =
|
||||
JSON.stringify({
|
||||
schema: 1,
|
||||
atMs: Date.now(),
|
||||
coldWallMs: wall,
|
||||
coldExceeded,
|
||||
bareStdlibExceeded: stdlibExceeded,
|
||||
violationCodes: violations.map((v) => v.code).filter(Boolean),
|
||||
violations,
|
||||
procHint: '/proc/bare_os/boot_budget_summary.json',
|
||||
note: 'Written every boot; operators mirror into proc via booter VFS provider.'
|
||||
}) + '\n'
|
||||
try {
|
||||
await vfs.writeFile('/run/bare-os/boot-budget-summary.json', b4.from(row))
|
||||
} catch {
|
||||
/* optional */
|
||||
}
|
||||
}
|
||||
|
||||
async function maybeWriteBootPerfJson(ctx, bootT0, stageLog) {
|
||||
const vfs = ctx.vfs
|
||||
const b4 = ctx.b4a
|
||||
@@ -2046,6 +2083,8 @@ async function start(ctx) {
|
||||
}
|
||||
}
|
||||
{
|
||||
/** @type {{ kind: string, code: string, wallMs: number, limitMs: number }[]} */
|
||||
let bootBudgetViolationsForSummary = []
|
||||
const budgetStrict =
|
||||
ctx.env?.BARE_OS_BOOT_BUDGET_STRICT === '1' ||
|
||||
ctx.env?.BARE_OS_BOOT_BUDGET_STRICT === 'true'
|
||||
@@ -2100,11 +2139,12 @@ async function start(ctx) {
|
||||
}
|
||||
}
|
||||
if (coldExceeded || stdlibExceeded) {
|
||||
/** @type {{ kind: string, wallMs: number, limitMs: number }[]} */
|
||||
/** @type {{ kind: string, code: string, wallMs: number, limitMs: number }[]} */
|
||||
const violations = []
|
||||
if (coldExceeded && Number.isFinite(budget) && budget > 0) {
|
||||
violations.push({
|
||||
kind: 'cold',
|
||||
code: 'BARE_OS_BOOT_BUDGET_COLD_EXCEEDED',
|
||||
wallMs: Date.now() - bootT0,
|
||||
limitMs: budget
|
||||
})
|
||||
@@ -2116,6 +2156,7 @@ async function start(ctx) {
|
||||
)
|
||||
violations.push({
|
||||
kind: 'bare_stdlib',
|
||||
code: 'BARE_OS_BOOT_BUDGET_BARE_STDLIB_EXCEEDED',
|
||||
wallMs: Number.isFinite(sw) ? sw : 0,
|
||||
limitMs: sb
|
||||
})
|
||||
@@ -2133,7 +2174,15 @@ async function start(ctx) {
|
||||
bootBudgetViolations: violations,
|
||||
transactionState: BARE_OS_BOOT_TXN_STATE.STAGE_COMMITTED
|
||||
})
|
||||
bootBudgetViolationsForSummary = violations
|
||||
}
|
||||
await maybeWriteBootBudgetSummaryJson(
|
||||
ctx,
|
||||
bootT0,
|
||||
bootBudgetViolationsForSummary,
|
||||
coldExceeded,
|
||||
stdlibExceeded
|
||||
)
|
||||
if (budgetStrict && polStrict && (coldExceeded || stdlibExceeded)) {
|
||||
bootStructuredLog(
|
||||
ctx,
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user