Add tenth capability word (STOCK_V10), protocol 0.6.0, ctx API 1.19.0, and

strict seed coverage for bits10. Extend seed RPC, replication adjuncts,
Wave 10 /proc JSON + proc index schema 6, boot.policy v10 enforcement in
kernel/init.js, sysproc:* workers, NDJSON/OTel/audit schema bumps, CI
(verify-kernel-roadmap-wave10.mjs) and doc updates across handbook,
developer-guide, compatibility matrix, and seeder kernel parity.
This commit is contained in:
Raven Scott
2026-04-04 06:15:24 -04:00
parent fccd07b726
commit b3eac448d1
67 changed files with 2736 additions and 485 deletions
+2 -2
View File
@@ -10,9 +10,9 @@ Shared **wire format and constants** for the Bare operating system monorepo: Hyp
| `topicKey()` | 32-byte topic for `swarm.join()` |
| `BLOCK_SIZE`, `MBR_MAGIC` | 512-byte MBR, magic `BIOS` at offset 0 |
| `buildMbr` / `parseMbr` | Pack/unpack primary + optional failover Hyperdrive keys |
| `setupSeedChannel` | Wire Protomux messages 06 for RAM block reads, gossip bitfield, manifest path **search**, **RPC** (incl. `bare_os.capabilities` with **`bits`** … **`bits9`** when non-zero, typed errors for unknown RPC methods, `bare_os.replication_status`, `bare_os.replication_queue`, wave 69 RPC short names in **`seed-rpc-methods.js`**, `bare_os.gossip`), and `drive.replicate` |
| `setupSeedChannel` | Wire Protomux messages 06 for RAM block reads, gossip bitfield, manifest path **search**, **RPC** (incl. `bare_os.capabilities` with **`bits`** … **`bits10`** when non-zero, typed errors for unknown RPC methods, `bare_os.replication_status`, `bare_os.replication_queue`, wave 610 RPC short names in **`seed-rpc-methods.js`**, `bare_os.gossip`), and `drive.replicate` |
Subpath exports: `bare-os-protocol/constants.js`, `bare-os-protocol/messages` (compact-encoding schemas), `bare-os-protocol/kernel-feature-bits.js` (documented booter capability words **`STOCK_V1`** … **`STOCK_V9`**; **`BARE_OS_KERNEL_FEATURE_BITS_DOC=11`**; surfaced in **`/proc/bare_os_features`** and **`/proc/bare_os/`**), `bare-os-protocol/lib/seed-rpc-methods.js` (authoritative **`bare_os.*`** RPC name list for **`kernel_info`**), `bare-os-protocol/protocol-meta.js` (**`BARE_OS_PROTOCOL_PACKAGE_VERSION`** for the seed handshake).
Subpath exports: `bare-os-protocol/constants.js`, `bare-os-protocol/messages` (compact-encoding schemas), `bare-os-protocol/kernel-feature-bits.js` (documented booter capability words **`STOCK_V1`** … **`STOCK_V10`**; **`BARE_OS_KERNEL_FEATURE_BITS_DOC=12`**; surfaced in **`/proc/bare_os_features`** and **`/proc/bare_os/`**), `bare-os-protocol/lib/seed-rpc-methods.js` (authoritative **`bare_os.*`** RPC name list for **`kernel_info`**), `bare-os-protocol/protocol-meta.js` (**`BARE_OS_PROTOCOL_PACKAGE_VERSION`** for the seed handshake).
## Consumers
+15 -1
View File
@@ -174,5 +174,19 @@ export {
BARE_OS_FEATURE9_WORKER_NET_WAVE9,
BARE_OS_FEATURE9_TELEMETRY_AUDIT_WAVE9,
BARE_OS_FEATURE9_DOC_CI_WAVE9,
BARE_OS_FEATURE9_HTTP_DHT_PROXY_ROUTES_V2
BARE_OS_FEATURE9_HTTP_DHT_PROXY_ROUTES_V2,
BARE_OS_KERNEL_FEATURES_STOCK_V10,
BARE_OS_FEATURE10_CAP_WORD,
BARE_OS_FEATURE10_SEED_RPC_WAVE10,
BARE_OS_FEATURE10_REPLICATION_JSON_WAVE10,
BARE_OS_FEATURE10_PROC_METRICS_WAVE10,
BARE_OS_FEATURE10_BOOT_POLICY_V10,
BARE_OS_FEATURE10_KERNEL_EXT_REGISTRY_V7,
BARE_OS_FEATURE10_PEAR_BARE_BRIDGE_WAVE10,
BARE_OS_FEATURE10_VFS_POSIX_WAVE10,
BARE_OS_FEATURE10_INITD_SUBPROC_WAVE10,
BARE_OS_FEATURE10_WORKER_NET_WAVE10,
BARE_OS_FEATURE10_TELEMETRY_AUDIT_WAVE10,
BARE_OS_FEATURE10_DOC_CI_WAVE10,
BARE_OS_FEATURE10_COMPACT_READY_RPC_V4
} from './lib/kernel-feature-bits.js'
+249 -7
View File
@@ -11,7 +11,8 @@ import {
BARE_OS_KERNEL_FEATURES_STOCK_V6,
BARE_OS_KERNEL_FEATURES_STOCK_V7,
BARE_OS_KERNEL_FEATURES_STOCK_V8,
BARE_OS_KERNEL_FEATURES_STOCK_V9
BARE_OS_KERNEL_FEATURES_STOCK_V9,
BARE_OS_KERNEL_FEATURES_STOCK_V10
} from './kernel-feature-bits.js'
import {
BARE_OS_SEED_RPC_METHODS,
@@ -121,7 +122,37 @@ import {
* mirrorDriveCompactionV4Json?: string,
* readyGuardV3Json?: string,
* blindRelayCircuitV2Json?: string,
* httpDhtProxyRoutesV2Json?: string
* httpDhtProxyRoutesV2Json?: string,
* pearBundleTier?: string,
* autobaseDiscoveryHintJson?: string,
* handshakeTokenBucketV4Json?: string,
* peerFirewallStatsV5Json?: string,
* stagingSlotWave10Json?: string,
* compactPingV4Json?: string,
* seederPearRuntimeBareFingerprint?: string,
* pearDoctorHintJson?: string,
* pearInfoSketchJson?: string,
* pearInspectCapsJson?: string,
* pearDumpBudgetJson?: string,
* pearResetGuardJson?: string,
* pearRestartWindowJson?: string,
* pearRunFlagsJson?: string,
* pearBundleManifestSliceJson?: string,
* pearPackLayoutHintJson?: string,
* pearSeedTopologyJson?: string,
* pearStateSnapshotJson?: string,
* pearStampPointerJson?: string,
* pearShakeLatencyJson?: string,
* pearCrasherClassJson?: string,
* pearErrorsRateHintJson?: string,
* pearBridgeHealthJson?: string,
* pearLinkMatrixJson?: string,
* pearPipeBackpressureJson?: string,
* pearOpwaitBudgetJson?: string,
* pearTerminalCapsJson?: string,
* readyGuardV4Json?: string,
* mirrorDriveCompactionV5Json?: string,
* blindRelayCircuitV3Json?: string
* }} [opts]
*/
export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
@@ -222,6 +253,14 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
const seederPearApplingId = String(opts.seederPearApplingId ?? '')
.trim()
.slice(0, 256)
const seederPearRuntimeBareFingerprint = String(
opts.seederPearRuntimeBareFingerprint ?? ''
)
.trim()
.slice(0, 256)
const pearBundleTier = String(opts.pearBundleTier ?? '')
.trim()
.slice(0, 64)
const compactPingEncodingHint = String(opts.compactPingEncodingHint ?? '')
.trim()
.slice(0, 64)
@@ -345,7 +384,9 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
pearRuntimeFingerprint:
seederPearRuntimeFingerprint || undefined,
booterPackageVersion: booterPackageVersionHint || undefined,
pearApplingId: seederPearApplingId || undefined
pearApplingId: seederPearApplingId || undefined,
pearRuntimeBareFingerprint:
seederPearRuntimeBareFingerprint || undefined
}),
error: ''
})
@@ -367,6 +408,7 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
bits7: BARE_OS_KERNEL_FEATURES_STOCK_V7 >>> 0,
bits8: BARE_OS_KERNEL_FEATURES_STOCK_V8 >>> 0,
bits9: BARE_OS_KERNEL_FEATURES_STOCK_V9 >>> 0,
bits10: BARE_OS_KERNEL_FEATURES_STOCK_V10 >>> 0,
protocolPackageVersion: BARE_OS_PROTOCOL_PACKAGE_VERSION,
booterPackageVersion: booterPackageVersionHint || undefined,
role: 'seeder',
@@ -407,6 +449,11 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
rs.pearUpdaterDelegate = pearUpdaterDelegateClass
const tb3 = parseOptJson(opts.handshakeTokenBucketV3Json)
if (tb3) rs.handshakeTokenBucketV3 = tb3
if (pearBundleTier) rs.pearBundleTier = pearBundleTier
const abdisc = parseOptJson(opts.autobaseDiscoveryHintJson)
if (abdisc) rs.autobaseDiscoveryHint = abdisc
const tb4 = parseOptJson(opts.handshakeTokenBucketV4Json)
if (tb4) rs.handshakeTokenBucketV4 = tb4
chan.messages[6].send({
id: m.id,
success: true,
@@ -470,7 +517,7 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
result: JSON.stringify({
role: 'seeder',
protocol: PROTOCOL_NAME,
schema: 6,
schema: 7,
activeSlot: stagingActiveSlot,
pendingSlot: stagingPendingSlot || null,
previousSlot: stagingPreviousSlot || null,
@@ -478,12 +525,15 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
drainDeadlineMs: stagingDrainDeadlineMs,
quarantine: parseOptJson(opts.stagingQuarantineJson),
wave9: parseOptJson(opts.stagingSlotWave9Json),
wave10: parseOptJson(opts.stagingSlotWave10Json),
rollbackHint:
'pending slot is rollback candidate when switching A/B; verify image before activate',
tripleSlotNote:
'canarySlot is optional third slot metadata for staged rollouts (operator-defined).',
schema6Note:
'schema 6 adds optional wave9 operator blob; schema 5 fields remain stable.',
schema7Note:
'schema 7 adds optional wave10 operator blob; prior fields remain stable.',
atMs: Date.now()
}),
error: ''
@@ -636,6 +686,8 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
if (sat) stats.saturationClass = sat
const fw4 = parseOptJson(opts.peerFirewallStatsV4Json)
if (fw4) stats.wave9 = fw4
const fw5 = parseOptJson(opts.peerFirewallStatsV5Json)
if (fw5) stats.wave10 = fw5
chan.messages[6].send({
id: m.id,
success: true,
@@ -643,7 +695,7 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
role: 'seeder',
protocol: PROTOCOL_NAME,
firewall: stats,
firewallSchema: 4,
firewallSchema: 5,
atMs: Date.now()
}),
error: ''
@@ -754,6 +806,7 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
perf && typeof perf.now === 'function'
? Math.floor(perf.now() * 1000)
: Date.now() * 1000
const v4 = parseOptJson(opts.compactPingV4Json)
chan.messages[6].send({
id: m.id,
success: true,
@@ -762,8 +815,9 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
pong: true,
tUs,
protocol: PROTOCOL_NAME,
schema: 3,
encodingHint: compactPingEncodingHint || undefined
schema: 4,
encodingHint: compactPingEncodingHint || undefined,
wave10: v4 || undefined
}),
error: ''
})
@@ -1282,6 +1336,194 @@ export function setupSeedChannel(mux, localRAM, replicateDrive, opts = {}) {
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_doctor_hint') {
const h = parseOptJson(opts.pearDoctorHintJson)
sendWave9Rpc({
doctor: h || { note: 'pear-doctor health class (non-secret)' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_info_sketch') {
const h = parseOptJson(opts.pearInfoSketchJson)
sendWave9Rpc({
info: h || { note: 'pear-info build/runtime pointer' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_inspect_caps') {
const h = parseOptJson(opts.pearInspectCapsJson)
sendWave9Rpc({
inspect: h || { note: 'pear-inspect capability flags' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_dump_budget') {
const h = parseOptJson(opts.pearDumpBudgetJson)
sendWave9Rpc({
dumpBudget: h || { note: 'pear-dump export budget class' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_reset_guard') {
const h = parseOptJson(opts.pearResetGuardJson)
sendWave9Rpc({
resetGuard: h || { note: 'pear-reset policy hint' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_restart_window') {
const h = parseOptJson(opts.pearRestartWindowJson)
sendWave9Rpc({
restartWindow: h || { note: 'pear-restart backoff window' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_run_flags') {
const h = parseOptJson(opts.pearRunFlagsJson)
sendWave9Rpc({
runFlags: h || { note: 'pear-run mode flags' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_bundle_manifest_slice') {
const h = parseOptJson(opts.pearBundleManifestSliceJson)
sendWave9Rpc({
bundleSlice: h || { note: 'pear-bundle manifest sample' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_pack_layout_hint') {
const h = parseOptJson(opts.pearPackLayoutHintJson)
sendWave9Rpc({
packLayout: h || { note: 'pear-pack layout operator hint' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_seed_topology') {
const h = parseOptJson(opts.pearSeedTopologyJson)
sendWave9Rpc({
seedTopology: h || { note: 'pear-seed graph sketch' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_state_snapshot') {
const h = parseOptJson(opts.pearStateSnapshotJson)
sendWave9Rpc({
stateSnapshot: h || { note: 'pear-state volatile class' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_stamp_pointer') {
const h = parseOptJson(opts.pearStampPointerJson)
sendWave9Rpc({
stamp: h || { note: 'pear-stamp provenance pointer' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_shake_latency') {
const h = parseOptJson(opts.pearShakeLatencyJson)
sendWave9Rpc({
shakeLatency: h || { note: 'pear-shake handshake latency sketch' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_crasher_class') {
const h = parseOptJson(opts.pearCrasherClassJson)
sendWave9Rpc({
crasherClass: h || { note: 'pear-crasher reporting class (non-secret)' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_errors_rate_hint') {
const h = parseOptJson(opts.pearErrorsRateHintJson)
sendWave9Rpc({
errorsRate: h || { note: 'pear-errors taxonomy rate bucket' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_bridge_health') {
const h = parseOptJson(opts.pearBridgeHealthJson)
sendWave9Rpc({
bridgeHealth: h || { note: 'pear-bridge health sketch' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_link_matrix') {
const h = parseOptJson(opts.pearLinkMatrixJson)
sendWave9Rpc({
linkMatrix: h || { note: 'pear-link alias matrix' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_pipe_backpressure') {
const h = parseOptJson(opts.pearPipeBackpressureJson)
sendWave9Rpc({
pipeBackpressure: h || { note: 'pear-pipe backlog class' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_opwait_budget') {
const h = parseOptJson(opts.pearOpwaitBudgetJson)
sendWave9Rpc({
opwaitBudget: h || { note: 'pear-opwait budget' }
})
return
}
if (m.module === 'bare_os' && m.method === 'pear_terminal_caps') {
const h = parseOptJson(opts.pearTerminalCapsJson)
sendWave9Rpc({
terminalCaps: h || { note: 'pear-terminal capability flags' }
})
return
}
if (m.module === 'bare_os' && m.method === 'ready_guard_v4') {
const h = parseOptJson(opts.readyGuardV4Json)
sendWave9Rpc({
readyGuardV4:
h || { matrix: [], note: 'ready-guard v4 enum expansion' }
})
return
}
if (m.module === 'bare_os' && m.method === 'mirror_drive_compaction_v5') {
const h = parseOptJson(opts.mirrorDriveCompactionV5Json)
sendWave9Rpc({
compactionV5:
h || { phases: [], note: 'mirror-drive compaction enum v5' }
})
return
}
if (m.module === 'bare_os' && m.method === 'blind_relay_circuit_v3') {
const h = parseOptJson(opts.blindRelayCircuitV3Json)
sendWave9Rpc({
circuitsV3:
h || { note: 'blind-relay circuit v3 reason codes' }
})
return
}
if (m.module === 'bare_os' && m.method === 'compact_ping_v4') {
const perf = globalThis.performance
const tUs =
perf && typeof perf.now === 'function'
? Math.floor(perf.now() * 1000)
: Date.now() * 1000
const v4 = parseOptJson(opts.compactPingV4Json)
chan.messages[6].send({
id: m.id,
success: true,
result: JSON.stringify({
role: 'seeder',
pong: true,
tUs,
protocol: PROTOCOL_NAME,
schema: 4,
variant: 'compact_ping_v4',
wave10: v4 || { note: 'compact ping v4 dedicated RPC' },
atMs: Date.now()
}),
error: ''
})
return
}
chan.messages[6].send({
id: m.id,
success: false,
@@ -4,7 +4,7 @@
*/
/** Protocol document version for this bitmask file (bump when bit semantics or governance changes). */
export const BARE_OS_KERNEL_FEATURE_BITS_DOC = 11
export const BARE_OS_KERNEL_FEATURE_BITS_DOC = 12
/**
* Second capability word (bits 031, always use `>>> 0` when masking).
@@ -474,6 +474,52 @@ export const BARE_OS_KERNEL_FEATURES_STOCK_V9 =
BARE_OS_FEATURE9_DOC_CI_WAVE9 |
BARE_OS_FEATURE9_HTTP_DHT_PROXY_ROUTES_V2
/**
* Tenth capability word (bits 031, use `>>> 0`). Wave 10 mega-phase — ADR 001 §13.
*/
/** Word10 bit 0: `bits10` on seed `capabilities` + `/proc/bare_os_features`. */
export const BARE_OS_FEATURE10_CAP_WORD = 1 << 0
/** Word10 bit 1: Extended seed RPCs (pear_doctor_hint, pear_inspect_caps, …). */
export const BARE_OS_FEATURE10_SEED_RPC_WAVE10 = 1 << 1
/** Word10 bit 2: Replication JSON / staging schema 7 / kernel_info wave 10 adjuncts. */
export const BARE_OS_FEATURE10_REPLICATION_JSON_WAVE10 = 1 << 2
/** Word10 bit 3: Wave 10 `/proc/bare_os/*.json` (bare-boot, bare-rpc, pear-doctor, …). */
export const BARE_OS_FEATURE10_PROC_METRICS_WAVE10 = 1 << 3
/** Word10 bit 4: Boot policy v10 (`requireFeatureBits10`, `requireBareBootMin`, …). */
export const BARE_OS_FEATURE10_BOOT_POLICY_V10 = 1 << 4
/** Word10 bit 5: Kernel extension registry schema 7 + extensionSignerPins v3 hints. */
export const BARE_OS_FEATURE10_KERNEL_EXT_REGISTRY_V7 = 1 << 5
/** Word10 bit 6: Pear/Bare bridge wave 10 (doctor hint, bare logger tap, …). */
export const BARE_OS_FEATURE10_PEAR_BARE_BRIDGE_WAVE10 = 1 << 6
/** Word10 bit 7: VFS/POSIX/shell wave 10 (ssh-keygen stub, xargs -P, tar xattr). */
export const BARE_OS_FEATURE10_VFS_POSIX_WAVE10 = 1 << 7
/** Word10 bit 8: Initd / subprocess / git worktree policy wave 10. */
export const BARE_OS_FEATURE10_INITD_SUBPROC_WAVE10 = 1 << 8
/** Word10 bit 9: Workers / sandbox / net wave 10 (`sysproc:*`, mTLS map, happy eyeballs v4). */
export const BARE_OS_FEATURE10_WORKER_NET_WAVE10 = 1 << 9
/** Word10 bit 10: Telemetry NDJSON v9 / OTel v7 / audit v7. */
export const BARE_OS_FEATURE10_TELEMETRY_AUDIT_WAVE10 = 1 << 10
/** Word10 bit 11: CI (`verify-kernel-roadmap-wave10`). */
export const BARE_OS_FEATURE10_DOC_CI_WAVE10 = 1 << 11
/** Word10 bit 12: Seed RPC `compact_ping_v4` + `ready_guard_v4` surface. */
export const BARE_OS_FEATURE10_COMPACT_READY_RPC_V4 = 1 << 12
/** Stock booter tenth word (wave 10). */
export const BARE_OS_KERNEL_FEATURES_STOCK_V10 =
BARE_OS_FEATURE10_CAP_WORD |
BARE_OS_FEATURE10_SEED_RPC_WAVE10 |
BARE_OS_FEATURE10_REPLICATION_JSON_WAVE10 |
BARE_OS_FEATURE10_PROC_METRICS_WAVE10 |
BARE_OS_FEATURE10_BOOT_POLICY_V10 |
BARE_OS_FEATURE10_KERNEL_EXT_REGISTRY_V7 |
BARE_OS_FEATURE10_PEAR_BARE_BRIDGE_WAVE10 |
BARE_OS_FEATURE10_VFS_POSIX_WAVE10 |
BARE_OS_FEATURE10_INITD_SUBPROC_WAVE10 |
BARE_OS_FEATURE10_WORKER_NET_WAVE10 |
BARE_OS_FEATURE10_TELEMETRY_AUDIT_WAVE10 |
BARE_OS_FEATURE10_DOC_CI_WAVE10 |
BARE_OS_FEATURE10_COMPACT_READY_RPC_V4
/** Bit 0: IPC fan-out / pub-sub style channels (booter `bareOsIpc`). */
export const BARE_OS_FEATURE_IPC_FANOUT = 1 << 0
@@ -2,4 +2,4 @@
* Published package version string for seed-channel handshake (keep in sync with package.json).
* @type {string}
*/
export const BARE_OS_PROTOCOL_PACKAGE_VERSION = '0.5.0'
export const BARE_OS_PROTOCOL_PACKAGE_VERSION = '0.6.0'
@@ -65,7 +65,31 @@ export const BARE_OS_SEED_RPC_METHOD_SHORT_NAMES = [
'mirror_drive_compaction_v4',
'ready_guard_v3',
'blind_relay_circuit_v2',
'http_dht_proxy_routes_v2'
'http_dht_proxy_routes_v2',
'pear_doctor_hint',
'pear_info_sketch',
'pear_inspect_caps',
'pear_dump_budget',
'pear_reset_guard',
'pear_restart_window',
'pear_run_flags',
'pear_bundle_manifest_slice',
'pear_pack_layout_hint',
'pear_seed_topology',
'pear_state_snapshot',
'pear_stamp_pointer',
'pear_shake_latency',
'pear_crasher_class',
'pear_errors_rate_hint',
'pear_bridge_health',
'pear_link_matrix',
'pear_pipe_backpressure',
'pear_opwait_budget',
'pear_terminal_caps',
'ready_guard_v4',
'mirror_drive_compaction_v5',
'blind_relay_circuit_v3',
'compact_ping_v4'
]
/** @type {Set<string>} */
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "bare-os-protocol",
"version": "0.5.0",
"version": "0.6.0",
"description": "MBR layout, swarm topic, and Protomux encodings for bare-operating-system",
"type": "module",
"main": "./index.js",
+6 -1
View File
@@ -17,7 +17,8 @@ import {
BARE_OS_KERNEL_FEATURES_STOCK_V6,
BARE_OS_KERNEL_FEATURES_STOCK_V7,
BARE_OS_KERNEL_FEATURES_STOCK_V8,
BARE_OS_KERNEL_FEATURES_STOCK_V9
BARE_OS_KERNEL_FEATURES_STOCK_V9,
BARE_OS_KERNEL_FEATURES_STOCK_V10
} from './lib/kernel-feature-bits.js'
import { msgDataEncoding, msgSearchReqEncoding } from './lib/messages.js'
test('topicKey is deterministic 32-byte hash', (t) => {
@@ -98,3 +99,7 @@ test('STOCK_V8 is non-zero wave-8 advertisement', (t) => {
test('STOCK_V9 is non-zero wave-9 advertisement', (t) => {
t.ok((BARE_OS_KERNEL_FEATURES_STOCK_V9 >>> 0) > 0)
})
test('STOCK_V10 is non-zero wave-10 advertisement', (t) => {
t.ok((BARE_OS_KERNEL_FEATURES_STOCK_V10 >>> 0) > 0)
})