feat: complete 20-track kernel roadmap (P2P ops, POSIX, HRPC, CI, docs)

- Add optional Holepunch clone lag gate (holepunch-freshness-gate.json,
  verify-holepunch-clone-freshness.mjs) and wire into pretest/docs.
- Extend stock ctx.bareOsHrpcRequest with disk.os replication routes;
  bump hrpc_allowlist_sketch proc to schema 2 with stockRoutes list.
- Security posture: blindRelayAudit; hyper_multisig_trust_pointer schema 2
  + vault multisig continuity env; login/unlock audit hook.
- Syscalls schema 9 alignment (JSON schema, compatibility matrix, conformance
  matrix clock_gettime); boot budget telemetry schema 2 in metrics_live.
- Coreutils hostname -s/--short man/options; rebuild kernel bins/man.
- POSIX + P2P dashboard section in docs/README; handbook/DOCUMENTATION/
  release-checklist/OTA/KERNEL_CONTRACT/PEAR-RUN and related reference updates.
- verify-boot-policy-extension-signer-pins: scan kernel init fragments.

Note: vendor drift section removed from kernel/lib/bare/README.md (intentional).
This commit is contained in:
Raven Scott
2026-04-05 14:17:20 -04:00
parent c15e8fa5be
commit 8bde745191
87 changed files with 7385 additions and 6725 deletions
+39 -120
View File
@@ -1,6 +1,7 @@
#!/usr/bin/env node
/**
* CI: ensure booter wires ctx API semver and protocol stock feature mask.
* Stock symbol lists: packages/bare-os-protocol/lib/stock-booter-capability-contract.json
*/
import fs from 'node:fs'
import path from 'node:path'
@@ -18,12 +19,22 @@ const bitsPath = path.join(
root,
'packages/bare-os-protocol/lib/kernel-feature-bits.js'
)
const contractPath = path.join(
root,
'packages/bare-os-protocol/lib/stock-booter-capability-contract.json'
)
function read(p) {
return fs.readFileSync(p, 'utf8')
}
function main() {
const contract = JSON.parse(read(contractPath))
if (contract.schema !== 1) {
console.error('stock-booter-capability-contract.json: unsupported schema')
process.exit(1)
}
const ctxSrc = read(ctxApiPath)
const verMatch = ctxSrc.match(
/export const BARE_OS_CTX_API_VERSION = '([^']+)'/
@@ -34,128 +45,28 @@ function main() {
}
const idx = read(indexPath)
if (!idx.includes('bareOsCtxApiVersion: BARE_OS_CTX_API_VERSION')) {
console.error(
'index.js should assign bareOsCtxApiVersion from BARE_OS_CTX_API_VERSION'
)
process.exit(1)
}
if (!idx.includes('BARE_OS_KERNEL_FEATURES_STOCK_WORD_PRIMARY')) {
console.error('index.js should reference BARE_OS_KERNEL_FEATURES_STOCK_WORD_PRIMARY')
process.exit(1)
}
if (!idx.includes('BARE_OS_KERNEL_FEATURES_STOCK_WORD_EXTENDED_SEEDING_PLATFORM')) {
console.error('index.js should reference BARE_OS_KERNEL_FEATURES_STOCK_WORD_EXTENDED_SEEDING_PLATFORM')
process.exit(1)
}
if (!idx.includes('BARE_OS_KERNEL_FEATURES_STOCK_WORD_RLIMITS_DELEGATES_SHELL')) {
console.error('index.js should reference BARE_OS_KERNEL_FEATURES_STOCK_WORD_RLIMITS_DELEGATES_SHELL')
process.exit(1)
}
if (!idx.includes('bareOsAdvertisedKernelCapabilityWords')) {
console.error('index.js should expose bareOsAdvertisedKernelCapabilityWords (wire v2)')
process.exit(1)
}
if (!idx.includes('bareOsSeedKernelCapabilityWords')) {
console.error('index.js should expose bareOsSeedKernelCapabilityWords (wire v2)')
process.exit(1)
}
if (!idx.includes('KERNEL_CAPABILITY_SEED_STRICT_ROWS')) {
console.error('index.js should define KERNEL_CAPABILITY_SEED_STRICT_ROWS for seed strict checks')
process.exit(1)
}
if (!idx.includes('BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE')) {
console.error('index.js should reference BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE')
process.exit(1)
}
if (!idx.includes('BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC')) {
console.error('index.js should reference BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC')
process.exit(1)
}
if (!idx.includes('BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX')) {
console.error('index.js should reference BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX')
process.exit(1)
}
if (!idx.includes('BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING')) {
console.error('index.js should reference BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING')
process.exit(1)
}
if (!idx.includes('BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS')) {
console.error('index.js should reference BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS')
process.exit(1)
}
if (!idx.includes('BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE')) {
console.error('index.js should reference BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE')
process.exit(1)
const reqIdx = Array.isArray(contract.requiredIndexSubstrings)
? contract.requiredIndexSubstrings
: []
for (const s of reqIdx) {
if (!idx.includes(s)) {
console.error('index.js should include substring:', s)
process.exit(1)
}
}
const bitsSrc = read(bitsPath)
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_PRIMARY')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_PRIMARY'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_EXTENDED_SEEDING_PLATFORM')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_EXTENDED_SEEDING_PLATFORM'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_RLIMITS_DELEGATES_SHELL')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_RLIMITS_DELEGATES_SHELL'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_OFFLINE_NET_EXTENSIONS')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_OFFLINE_NET_EXTENSIONS'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_HOST_TRANSPORT_DELEGATES')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_HOST_TRANSPORT_DELEGATES'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_REPLICATION_OPERATOR_SURFACE'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_CORESTORE_HRPC'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_RUNTIME_PROTO_MUX'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_BARE_MODULE_CRYPTO_STAGING'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_PEAR_INSPECT_LOGGER_TLS'
)
process.exit(1)
}
if (!bitsSrc.includes('export const BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE')) {
console.error(
'kernel-feature-bits.js missing BARE_OS_KERNEL_FEATURES_STOCK_WORD_HYPERCORE_PACK_HRPC_LIFECYCLE'
)
process.exit(1)
const reqBits = Array.isArray(contract.requiredBitsExports)
? contract.requiredBitsExports
: []
for (const name of reqBits) {
const needle = `export const ${name}`
if (!bitsSrc.includes(needle)) {
console.error('kernel-feature-bits.js missing', name)
process.exit(1)
}
}
const docMatch = bitsSrc.match(
/export const BARE_OS_KERNEL_FEATURE_BITS_DOC = (\d+)/
)
@@ -163,8 +74,14 @@ function main() {
console.error('Could not parse BARE_OS_KERNEL_FEATURE_BITS_DOC')
process.exit(1)
}
if (docMatch[1] !== '15') {
console.error('Expected BARE_OS_KERNEL_FEATURE_BITS_DOC = 15')
const wantDoc = String(contract.expectedFeatureBitsDoc ?? '')
if (!wantDoc || docMatch[1] !== wantDoc) {
console.error(
'Expected BARE_OS_KERNEL_FEATURE_BITS_DOC =',
wantDoc,
'got',
docMatch[1]
)
process.exit(1)
}
@@ -209,6 +126,8 @@ function main() {
verMatch[1],
'| bits doc',
docMatch[1],
'| contract',
path.relative(root, contractPath),
'OK'
)
}