From 47bfa6b99d4b8adbdeac682d808677b873777164 Mon Sep 17 00:00:00 2001 From: SIKTEC Date: Mon, 9 Nov 2026 17:35:06 -0500 Subject: [PATCH 1/3] perf,feat: fast JSON.stringify, HTTP dispatch, source maps, fs/readline --- crates/slice-cas/src/archive/builder.rs | 75 +++ crates/slice-cas/src/archive/mod.rs | 6 + crates/slice-cas/src/archive/reader.rs | 2 +- crates/slice-cas/src/bundler/graph_bundler.rs | 20 + crates/slice-cas/src/bundler/source_map.rs | 76 +++- .../slice-cas/src/linker/builtins_and_ids.rs | 67 +++ .../tests/bundler_and_resolver_tests.rs | 115 +++++ .../src/commands/pack_and_compile.rs | 13 + crates/slice-cli/src/config/cas_packager.rs | 1 + crates/slice-cli/src/server/connection.rs | 90 +++- crates/slice-cli/src/server/mod.rs | 33 +- crates/slice-engine/src/bindings/core.rs | 12 + crates/slice-engine/src/bindings/fs.rs | 136 +++++- .../src/bindings/http_and_fetch.rs | 33 ++ crates/slice-engine/src/isolate/exec_boa.rs | 38 +- .../src/preludes/00_ultra_core.js | 4 +- .../src/preludes/11_fetch_headers_req_res.js | 148 ++++-- .../slice-engine/src/preludes/js_preludes.rs | 13 +- .../src/preludes/node_builtins.rs | 25 +- crates/slice-engine/src/runtime/boa_realm.rs | 14 + .../wasm_vfs_and_module_resolution_tests.rs | 176 ++++++++ docs/system/08_benchmarks_and_comparisons.md | 2 +- vendor/boa_engine/SLICE_PATCH.md | 11 +- vendor/boa_engine/src/builtins/json/mod.rs | 427 +++++++++++++++++- vendor/boa_engine/src/object/shape/mod.rs | 9 + .../src/object/shape/shared_shape/mod.rs | 8 + .../src/object/shape/unique_shape.rs | 7 + 27 files changed, 1452 insertions(+), 109 deletions(-) diff --git a/crates/slice-cas/src/archive/builder.rs b/crates/slice-cas/src/archive/builder.rs index 12a06a9..f58264b 100644 --- a/crates/slice-cas/src/archive/builder.rs +++ b/crates/slice-cas/src/archive/builder.rs @@ -14,6 +14,8 @@ use std::path::{Path, PathBuf}; pub struct CasBuilder { entrypoint: String, modules: Vec<(String, PathBuf, String, Vec)>, // (specifier, path, stripped_source, precompiled_bytecode) + lockfile_blake3: Option, + resolved_dependencies: Vec<(String, String)>, } impl CasBuilder { @@ -21,6 +23,76 @@ impl CasBuilder { Self { entrypoint: entrypoint.into(), modules: Vec::new(), + lockfile_blake3: None, + resolved_dependencies: Vec::new(), + } + } + + /// Scans `project_path` (or its ancestor directories) for `package.json` and lockfiles + /// (`package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `bun.lock`, `bun.lockb`), recording + /// deterministic lockfile BLAKE3 provenance and resolved `node_modules//package.json` versions. + pub fn scan_project_dependencies(&mut self, project_path: &Path) { + let start_dir = if project_path.is_dir() { + project_path + } else { + project_path.parent().unwrap_or(project_path) + }; + let mut cur = Some(start_dir); + while let Some(dir) = cur { + let pkg_json = dir.join("package.json"); + if pkg_json.is_file() { + for lock_name in [ + "package-lock.json", + "pnpm-lock.yaml", + "yarn.lock", + "bun.lock", + "bun.lockb", + ] { + let lock_path = dir.join(lock_name); + if lock_path.is_file() { + if let Ok(bytes) = std::fs::read(&lock_path) { + self.lockfile_blake3 = + Some(blake3::hash(&bytes).to_hex().to_string()); + break; + } + } + } + if let Ok(raw) = std::fs::read_to_string(&pkg_json) { + if let Ok(val) = serde_json::from_str::(&raw) { + let mut deps = Vec::new(); + for section in ["dependencies", "devDependencies"] { + if let Some(obj) = val.get(section).and_then(|v| v.as_object()) { + for (name, spec_val) in obj { + let declared = + spec_val.as_str().unwrap_or("*").to_string(); + let resolved_pkg = dir + .join("node_modules") + .join(name) + .join("package.json"); + let version = std::fs::read_to_string(&resolved_pkg) + .ok() + .and_then(|s| { + serde_json::from_str::(&s).ok() + }) + .and_then(|v| { + v.get("version") + .and_then(|ver| ver.as_str()) + .map(|s| s.to_string()) + }) + .unwrap_or(declared); + if !deps.iter().any(|(n, _)| n == name) { + deps.push((name.clone(), version)); + } + } + } + } + deps.sort_by(|a, b| a.0.cmp(&b.0)); + self.resolved_dependencies = deps; + } + } + break; + } + cur = dir.parent(); } } @@ -49,6 +121,7 @@ impl CasBuilder { root_dir: &Path, bytecode_compiler_fn: &dyn Fn(&str) -> Vec, ) -> Result { + self.scan_project_dependencies(root_dir); let mut count = 0; let mut stack = vec![root_dir.to_path_buf()]; @@ -318,6 +391,8 @@ impl CasBuilder { radix_resolution_map: radix_map, blobs, source_map_markers, + lockfile_blake3: self.lockfile_blake3.clone(), + resolved_dependencies: self.resolved_dependencies.clone(), }; let header_bytes = serde_json::to_vec(&header)?; diff --git a/crates/slice-cas/src/archive/mod.rs b/crates/slice-cas/src/archive/mod.rs index f534698..2554148 100644 --- a/crates/slice-cas/src/archive/mod.rs +++ b/crates/slice-cas/src/archive/mod.rs @@ -51,4 +51,10 @@ pub struct CasIndexHeader { /// Compact source-line table (`(compacted_line_1, "#slice-source payload")`) for `.cas` and `SLICEEXE` stack traces #[serde(default)] pub source_map_markers: Vec<(usize, String)>, + /// Optional BLAKE3 hash of the project's lockfile (`package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `bun.lock`) + #[serde(default)] + pub lockfile_blake3: Option, + /// Resolved `(package_name, resolved_version)` pairs recorded from `package.json` and `node_modules/` + #[serde(default)] + pub resolved_dependencies: Vec<(String, String)>, } diff --git a/crates/slice-cas/src/archive/reader.rs b/crates/slice-cas/src/archive/reader.rs index 50a397d..06d999d 100644 --- a/crates/slice-cas/src/archive/reader.rs +++ b/crates/slice-cas/src/archive/reader.rs @@ -212,7 +212,7 @@ impl MappedCasArchive { pub fn reconstruct_annotated_source(&self, entry: &CasBlobEntry) -> String { let src = self.get_source_slice(entry); let markers = &self.header.source_map_markers; - if markers.is_empty() || src.contains("// #slice-source: ") { + if markers.is_empty() || src.contains("// #slice-source: ") || src.contains("//@sm:") { return src.to_string(); } let mut out = String::with_capacity(src.len() + markers.len() * 64); diff --git a/crates/slice-cas/src/bundler/graph_bundler.rs b/crates/slice-cas/src/bundler/graph_bundler.rs index d047422..988dd56 100644 --- a/crates/slice-cas/src/bundler/graph_bundler.rs +++ b/crates/slice-cas/src/bundler/graph_bundler.rs @@ -167,6 +167,15 @@ pub fn bundle_entrypoint_with_deps(entry_path: &Path) -> Result { "var __slice_modules = {{}};//__SLICE_RC:{}\nvar __rc = globalThis.__slice_rc || (globalThis.__slice_rc = Object.create(null));\nvar __run = __rc[\"{}\"];\nif (!__run) {{\nvar __h = null;\n__run = __rc[\"{}\"] = {} {{\nif (!__h) {{\nvar exports = {{}}, module = {{ exports: exports }};\n{}\n__h = exports.default || module.exports;\n}}\nif (__h) globalThis.__slice_dispatch_fetch(__h);\n}};\n}}\n__run();\n", rc_key, rc_key, rc_key, fn_kw, direct_body )); + } else if (direct_body.contains("Slice.serve(") + || direct_body.contains("Deno.serve(") + || direct_body.contains("Bun.serve(")) + && !direct_body.contains("Slice.respond(") + { + bundle.push_str(&format!( + "var __slice_modules = {{}};//__SLICE_RC:{}\nvar __rc = globalThis.__slice_rc || (globalThis.__slice_rc = Object.create(null));\nvar __run = __rc[\"{}\"];\nif (!__run) {{\nvar __h = null;\n__run = __rc[\"{}\"] = {} {{\nif (__h && globalThis.__slice_active_http_server && typeof __slice_http_is_active === 'function' && __slice_http_is_active()) {{ globalThis.__slice_dispatch_fetch(__h); return; }}\nvar exports = {{}}, module = {{ exports: exports }};\n{}\nif (globalThis.__slice_active_http_server) __h = globalThis.__slice_active_http_server._handler;\n}};\n}}\n__run();\n", + rc_key, rc_key, rc_key, fn_kw, direct_body + )); } else { bundle.push_str(&format!( "var __slice_modules = {{}};//__SLICE_RC:{}\nvar __rc = globalThis.__slice_rc || (globalThis.__slice_rc = Object.create(null));\nvar __run = __rc[\"{}\"] || (__rc[\"{}\"] = {} {{\nvar exports = {{}}, module = {{ exports: exports }};\n{}\n}});\n__run();\n", @@ -320,6 +329,17 @@ pub fn bundle_entrypoint_with_deps(entry_path: &Path) -> Result { bundle.push_str("if (!__h) {\nvar require = __slice_require, exports = {}, module = { exports: exports };\n"); bundle.push_str(&entry_body); bundle.push_str("\n__h = exports.default || module.exports;\n}\nif (__h) globalThis.__slice_dispatch_fetch(__h);\n};\n}\n__run();\n"); + } else if (entry_body.contains("Slice.serve(") + || entry_body.contains("Deno.serve(") + || entry_body.contains("Bun.serve(")) + && !entry_body.contains("Slice.respond(") + { + bundle.push_str("var __h = null;\n"); + bundle.push_str(&format!("__run = __rc[\"{}\"] = {} {{\n", rc_key, fn_kw)); + bundle.push_str("if (__h && globalThis.__slice_active_http_server && typeof __slice_http_is_active === 'function' && __slice_http_is_active()) { globalThis.__slice_dispatch_fetch(__h); return; }\n"); + bundle.push_str("var require = __slice_require, exports = {}, module = { exports: exports };\n"); + bundle.push_str(&entry_body); + bundle.push_str("\nif (globalThis.__slice_active_http_server) __h = globalThis.__slice_active_http_server._handler;\n};\n}\n__run();\n"); } else { bundle.push_str(&format!("__run = __rc[\"{}\"] = {} {{\n", rc_key, fn_kw)); bundle.push_str( diff --git a/crates/slice-cas/src/bundler/source_map.rs b/crates/slice-cas/src/bundler/source_map.rs index 827890b..98f32e3 100644 --- a/crates/slice-cas/src/bundler/source_map.rs +++ b/crates/slice-cas/src/bundler/source_map.rs @@ -137,7 +137,11 @@ pub fn map_bundled_error_location(bundled_js: &str, error_msg: &str) -> String { if line_1 > b_line { break; } - if let Some(rest) = line.trim().strip_prefix("// #slice-source: ") { + let trimmed = line.trim(); + if let Some(rest) = trimmed + .strip_prefix("// #slice-source: ") + .or_else(|| trimmed.strip_prefix("//@sm:")) + { let (s, f, lm) = parse_slice_source_marker(rest); active_short = s; active_full = f; @@ -146,9 +150,9 @@ pub fn map_bundled_error_location(bundled_js: &str, error_msg: &str) -> String { } } if !active_short.is_empty() && b_line > marker_line_idx { - let rel_idx_0 = (b_line - marker_line_idx).saturating_sub(1); + let rel_idx_0 = count_code_lines_between(&lines, marker_line_idx, b_line); let mut resolved_line = lookup_embedded_line_map(active_line_map, rel_idx_0) - .unwrap_or(b_line - marker_line_idx); + .unwrap_or(rel_idx_0 + 1); if let Some(stmt_text) = lines.get(b_line - 1).map(|s| s.trim()) { if !stmt_text.is_empty() { if let Ok(orig_src) = std::fs::read_to_string(active_full) { @@ -176,13 +180,21 @@ pub fn map_bundled_error_location(bundled_js: &str, error_msg: &str) -> String { .trim(); if !core_msg.is_empty() { + let prefix_probe = core_msg + .split_once(':') + .map(|(p, _)| p.trim()) + .filter(|p| p.len() >= 6); let mut active_short = ""; let mut active_full = ""; let mut active_line_map = ""; let mut marker_line_idx = 0usize; for (idx, line) in lines.iter().enumerate() { let line_1 = idx + 1; - if let Some(rest) = line.trim().strip_prefix("// #slice-source: ") { + let trimmed = line.trim(); + if let Some(rest) = trimmed + .strip_prefix("// #slice-source: ") + .or_else(|| trimmed.strip_prefix("//@sm:")) + { let (s, f, lm) = parse_slice_source_marker(rest); active_short = s; active_full = f; @@ -190,16 +202,22 @@ pub fn map_bundled_error_location(bundled_js: &str, error_msg: &str) -> String { marker_line_idx = line_1; continue; } - if !active_short.is_empty() && line.contains(core_msg) { - let rel_idx_0 = (line_1 - marker_line_idx).saturating_sub(1); + let matches_line = !active_short.is_empty() + && (line.contains(core_msg) + || prefix_probe.is_some_and(|pp| { + (line.contains("throw ") || line.contains("Error(")) && line.contains(pp) + })); + if matches_line { + let rel_idx_0 = count_code_lines_between(&lines, marker_line_idx, line_1); let mut resolved_line = lookup_embedded_line_map(active_line_map, rel_idx_0) - .unwrap_or(line_1 - marker_line_idx); + .unwrap_or(rel_idx_0 + 1); if let Ok(orig_src) = std::fs::read_to_string(active_full) { - if let Some((orig_idx, _)) = orig_src - .lines() - .enumerate() - .find(|(_, ol)| ol.contains(core_msg)) - { + if let Some((orig_idx, _)) = orig_src.lines().enumerate().find(|(_, ol)| { + ol.contains(core_msg) + || prefix_probe.is_some_and(|pp| { + (ol.contains("throw ") || ol.contains("Error(")) && ol.contains(pp) + }) + }) { resolved_line = orig_idx + 1; } } @@ -362,17 +380,30 @@ pub fn map_bundled_stack_trace(bundled_js: &str, raw_stack: &str) -> String { let mut resolved: Option<(&str, usize)> = None; if let Some(fn_name) = fn_name_opt { - let fn_pat_1 = format!("function {}(", fn_name); - let fn_pat_2 = format!("function {} (", fn_name); - let fn_pat_3 = format!("{} = function", fn_name); + let bare_fn = fn_name + .rsplit_once('.') + .map(|(_, m)| m) + .unwrap_or(fn_name); + let fn_pat_1 = format!("function {}(", bare_fn); + let fn_pat_2 = format!("function {} (", bare_fn); + let fn_pat_3 = format!("{} = function", bare_fn); + let method_pat_1 = format!("{}(", bare_fn); + let method_pat_2 = format!("async {}(", bare_fn); + let method_pat_3 = format!("static {}(", bare_fn); for sec in §ions { let mut decl_line_1 = None; for l_1 in (sec.marker_line_1 + 1)..=sec.end_line_1.min(lines.len()) { let text = lines[l_1 - 1]; + let trimmed_l = text.trim(); + let is_method_decl = (trimmed_l.starts_with(&method_pat_1) + || trimmed_l.starts_with(&method_pat_2) + || trimmed_l.starts_with(&method_pat_3)) + && trimmed_l.ends_with('{'); if text.contains(&fn_pat_1) || text.contains(&fn_pat_2) || text.contains(&fn_pat_3) + || is_method_decl { decl_line_1 = Some(l_1); break; @@ -407,7 +438,9 @@ pub fn map_bundled_stack_trace(bundled_js: &str, raw_stack: &str) -> String { } } } else if let Some(callee) = prev_callee_fn { - let call_pat = format!("{}(", callee); + let bare_callee = + callee.rsplit_once('.').map(|(_, m)| m).unwrap_or(callee); + let call_pat = format!("{}(", bare_callee); for l_1 in d_line_1..=fn_end_1 { if lines[l_1 - 1].contains(&call_pat) { target_line_1 = l_1; @@ -428,13 +461,18 @@ pub fn map_bundled_stack_trace(bundled_js: &str, raw_stack: &str) -> String { break; } } - } else { + } + if resolved.is_none() { if let Some(callee) = prev_callee_fn { - let call_pat = format!("{}(", callee); + let bare_callee = callee.rsplit_once('.').map(|(_, m)| m).unwrap_or(callee); + let call_pat = format!("{}(", bare_callee); for sec in sections.iter().rev() { for l_1 in (sec.marker_line_1 + 1)..=sec.end_line_1.min(lines.len()) { let t = lines[l_1 - 1].trim(); - if t.contains(&call_pat) && !t.starts_with("function ") { + if t.contains(&call_pat) + && !t.starts_with("function ") + && !(t.starts_with(&call_pat) && t.ends_with('{')) + { let orig_line = resolve_section_line(&lines, sec, l_1); resolved = Some((sec.short_label, orig_line)); break; diff --git a/crates/slice-cas/src/linker/builtins_and_ids.rs b/crates/slice-cas/src/linker/builtins_and_ids.rs index 5be5735..bee9a0b 100644 --- a/crates/slice-cas/src/linker/builtins_and_ids.rs +++ b/crates/slice-cas/src/linker/builtins_and_ids.rs @@ -48,6 +48,19 @@ pub fn is_builtin_module(spec: &str) -> bool { | "vm" | "string_decoder" | "querystring" + | "readline" + | "readline/promises" + | "diagnostics_channel" + | "dns" + | "dns/promises" + | "tls" + | "console" + | "v8" + | "inspector" + | "inspector/promises" + | "cluster" + | "http2" + | "wasi" ) } @@ -114,11 +127,64 @@ thread_local! { std::cell::RefCell::new(FxHashMap::default()); pub(crate) static MUTABLE_EXPORTS_CACHE: std::cell::RefCell>> = std::cell::RefCell::new(FxHashMap::default()); + static WARNED_MISSING_PACKAGES: std::cell::RefCell> = + std::cell::RefCell::new(FxHashSet::default()); } pub fn clear_canonical_mod_id_cache() { CANONICAL_MOD_ID_CACHE.with(|c| c.borrow_mut().clear()); MUTABLE_EXPORTS_CACHE.with(|c| c.borrow_mut().clear()); + WARNED_MISSING_PACKAGES.with(|c| c.borrow_mut().clear()); +} + +fn bare_package_name(spec: &str) -> Option<&str> { + if spec.is_empty() || spec.starts_with('.') || spec.starts_with('/') || spec.contains(':') { + return None; + } + if spec.starts_with('@') { + let mut parts = spec.splitn(3, '/'); + let scope = parts.next()?; + let pkg = parts.next()?; + Some(&spec[..scope.len() + 1 + pkg.len()]) + } else { + Some(spec.split('/').next().unwrap_or(spec)) + } +} + +fn warn_if_declared_in_package_json_but_uninstalled(spec: &str, from_dir: &Path) { + let Some(pkg_name) = bare_package_name(spec) else { + return; + }; + let already_warned = WARNED_MISSING_PACKAGES.with(|w| !w.borrow_mut().insert(pkg_name.to_string())); + if already_warned { + return; + } + let mut cur = Some(from_dir); + while let Some(dir) = cur { + let pkg_json = dir.join("package.json"); + if pkg_json.is_file() { + if let Ok(raw) = std::fs::read_to_string(&pkg_json) { + if let Ok(val) = serde_json::from_str::(&raw) { + let declared = ["dependencies", "devDependencies", "peerDependencies"] + .iter() + .any(|sec| { + val.get(*sec) + .and_then(|v| v.as_object()) + .is_some_and(|obj| obj.contains_key(pkg_name)) + }); + if declared && !dir.join("node_modules").join(pkg_name).exists() { + eprintln!( + "Hint: package '{}' is declared in {} but missing from node_modules/ — run 'npm install' (or pnpm/bun install) before packing or running.", + pkg_name, + pkg_json.display() + ); + return; + } + } + } + } + cur = dir.parent(); + } } #[inline] @@ -147,6 +213,7 @@ pub fn resolve_spec_and_record(spec: &str, from_dir: &Path, deps_out: &mut Vec

a + b, 0); + } +} +"#, + ) + .unwrap(); + + let entry_path = test_dir.join("src/index.ts"); + std::fs::write( + &entry_path, + r#"import { PricingEngine } from "./pricing_engine"; +const engine = new PricingEngine(); +engine.processCheckout({ requestId: "ORD-99", items: [] }); +"#, + ) + .unwrap(); + + let bundled = bundle_entrypoint_with_deps(&entry_path).expect("bundle issue 33 app"); + let mapped_err = map_bundled_error_location( + &bundled, + "Uncaught Error: Invalid checkout request: ORD-99", + ); + assert!( + mapped_err.contains("(src/pricing_engine.ts:9)"), + "Dynamic error message in class method must map to src/pricing_engine.ts:9, got: {}", + mapped_err + ); + + let cas_path = test_dir.join("app.cas"); + let mut builder = CasBuilder::new("./index.ts"); + builder.scan_project_dependencies(&test_dir); + builder.add_module("./index.ts", entry_path.clone(), &bundled, |s| { + s.as_bytes().to_vec() + }); + let header = builder.write_to_file(&cas_path).expect("write cas"); + assert!( + header.lockfile_blake3.is_some(), + "CasIndexHeader must record lockfile_blake3" + ); + assert_eq!( + header.resolved_dependencies, + vec![("ms".to_string(), "2.1.3".to_string())] + ); + + let archive = MappedCasArchive::open(&cas_path).expect("open cas"); + let annotated = archive.reconstruct_annotated_source( + archive + .resolve_specifier("./index.ts") + .expect("resolve ./index.ts"), + ); + let mapped_compacted_err = map_bundled_error_location( + &annotated, + "Uncaught Error: Invalid checkout request: ORD-99", + ); + assert!( + mapped_compacted_err.contains("(src/pricing_engine.ts:9)"), + "Compacted CAS //@sm: source map must also resolve src/pricing_engine.ts:9, got: {}", + mapped_compacted_err + ); + let fake_raw_stack = "Error: Invalid checkout request: ORD-99\n at processCheckout (:10:13)"; + let mapped_stack = map_bundled_stack_trace(&annotated, fake_raw_stack); + assert!( + mapped_stack.contains("src/pricing_engine.ts:"), + "ES6 class method stack frame must map to src/pricing_engine.ts, got: {}", + mapped_stack + ); + + let _ = std::fs::remove_dir_all(&test_dir); +} diff --git a/crates/slice-cli/src/commands/pack_and_compile.rs b/crates/slice-cli/src/commands/pack_and_compile.rs index ae6aaf2..a2dea83 100644 --- a/crates/slice-cli/src/commands/pack_and_compile.rs +++ b/crates/slice-cli/src/commands/pack_and_compile.rs @@ -249,6 +249,19 @@ pub(crate) fn cmd_inspect(args: &[String]) -> Result<()> { " Radix Index Entries : {}", archive.header.radix_resolution_map.len() ); + if let Some(ref lf_hash) = archive.header.lockfile_blake3 { + println!(" Lockfile BLAKE3 : {}", lf_hash); + } + if !archive.header.resolved_dependencies.is_empty() { + let deps_str = archive + .header + .resolved_dependencies + .iter() + .map(|(k, v)| format!("{}@{}", k, v)) + .collect::>() + .join(", "); + println!(" Resolved NPM Deps : {}", deps_str); + } println!("-------------------------------------------------------------------------"); let mut blobs: Vec<_> = archive.header.blobs.values().collect(); blobs.sort_by_key(|b| b.offset); diff --git a/crates/slice-cli/src/config/cas_packager.rs b/crates/slice-cli/src/config/cas_packager.rs index e8743e6..12dc371 100644 --- a/crates/slice-cli/src/config/cas_packager.rs +++ b/crates/slice-cli/src/config/cas_packager.rs @@ -45,6 +45,7 @@ pub(crate) fn build_cas_archive_with_static( .to_string(); let spec = format!("./{}", file_name); let mut b = CasBuilder::new(&spec); + b.scan_project_dependencies(input_path); let bundled = slice_cas::bundle_entrypoint_with_deps(&entry_file)?; b.add_module(spec, entry_file, &bundled, compile_source_to_bytecode); b diff --git a/crates/slice-cli/src/server/connection.rs b/crates/slice-cli/src/server/connection.rs index 599f280..30c2b4a 100644 --- a/crates/slice-cli/src/server/connection.rs +++ b/crates/slice-cli/src/server/connection.rs @@ -168,10 +168,40 @@ pub(crate) fn serve_connection_keep_alive( ) } +pub(crate) fn spawn_worker_isolate( + slot_id: u32, + deterministic_seed: Option, + caps: &CapabilityToken, + audit_secrets: &[String], + fuel_limit: u64, + mem_limit: usize, +) -> SliceIsolate { + let mut isolate = SliceIsolate::spawn( + "tenant-default", + slot_id, + caps.clone(), + fuel_limit, + mem_limit, + ); + isolate.set_deterministic_seed(deterministic_seed); + for (k, v) in &caps.allowed_env_keys { + if slice_sandbox::is_sensitive_env_key(k) && v.len() >= 6 { + isolate.add_egress_audit_secret(v.clone()); + } + } + // CLI-SEC-01: Register explicit DLP secrets (`--audit-egress`, `SLICE_AUDIT_EGRESS`, `slice.toml` `audit_egress`, `.env`) + for sec in audit_secrets { + if !sec.is_empty() { + isolate.add_egress_audit_secret(sec.clone()); + } + } + isolate +} + #[allow(clippy::too_many_arguments)] pub(crate) fn serve_connection_keep_alive_with_tls_and_secrets( tcp_stream: TcpStream, - mut slot_id: u32, + slot_id: u32, bytecode: &[u8], tenant_dir_opt: Option<&Path>, static_assets_opt: Option<&slice_cas::StaticAssetTable>, @@ -184,6 +214,45 @@ pub(crate) fn serve_connection_keep_alive_with_tls_and_secrets( write_buf: &mut Vec, max_requests_tracker: Option<(&std::sync::atomic::AtomicUsize, usize)>, tls_server_cfg: Option<&std::sync::Arc>, +) -> Result<()> { + let mut isolate = spawn_worker_isolate( + slot_id, + deterministic_seed, + caps, + audit_secrets, + fuel_limit, + mem_limit, + ); + serve_connection_with_isolate( + tcp_stream, + slot_id, + &mut isolate, + bytecode, + tenant_dir_opt, + static_assets_opt, + fuel_limit, + mem_limit, + read_buf, + write_buf, + max_requests_tracker, + tls_server_cfg, + ) +} + +#[allow(clippy::too_many_arguments)] +pub(crate) fn serve_connection_with_isolate( + tcp_stream: TcpStream, + mut slot_id: u32, + isolate: &mut SliceIsolate, + bytecode: &[u8], + tenant_dir_opt: Option<&Path>, + static_assets_opt: Option<&slice_cas::StaticAssetTable>, + fuel_limit: u64, + mem_limit: usize, + read_buf: &mut [u8], + write_buf: &mut Vec, + max_requests_tracker: Option<(&std::sync::atomic::AtomicUsize, usize)>, + tls_server_cfg: Option<&std::sync::Arc>, ) -> Result<()> { let _ = tcp_stream.set_nodelay(true); // N-Sec-4: Defend against Slowloris socket starvation with 10s read/write socket timeouts @@ -198,25 +267,6 @@ pub(crate) fn serve_connection_keep_alive_with_tls_and_secrets( let mut filled: usize = 0; write_buf.clear(); - let mut isolate = SliceIsolate::spawn( - "tenant-default", - slot_id, - caps.clone(), - fuel_limit, - mem_limit, - ); - isolate.set_deterministic_seed(deterministic_seed); - for (k, v) in &caps.allowed_env_keys { - if slice_sandbox::is_sensitive_env_key(k) && v.len() >= 6 { - isolate.add_egress_audit_secret(v.clone()); - } - } - // CLI-SEC-01: Register explicit DLP secrets (`--audit-egress`, `SLICE_AUDIT_EGRESS`, `slice.toml` `audit_egress`, `.env`) - for sec in audit_secrets { - if !sec.is_empty() { - isolate.add_egress_audit_secret(sec.clone()); - } - } loop { let mut header_deadline: Option = if filled > 0 { diff --git a/crates/slice-cli/src/server/mod.rs b/crates/slice-cli/src/server/mod.rs index 885f2b3..f2f4770 100644 --- a/crates/slice-cli/src/server/mod.rs +++ b/crates/slice-cli/src/server/mod.rs @@ -3,7 +3,10 @@ pub(crate) mod tls; #[cfg(test)] pub(crate) use connection::serve_connection_keep_alive; -pub(crate) use connection::serve_connection_keep_alive_with_tls_and_secrets; +pub(crate) use connection::{ + serve_connection_keep_alive_with_tls_and_secrets, serve_connection_with_isolate, + spawn_worker_isolate, +}; pub(crate) use tls::load_tls_server_config; use crate::config::{install_ctrlc_handler, ResolvedExecutionConfig}; @@ -193,17 +196,23 @@ console.log(route_res); let mut read_buf = vec![0u8; 65536]; let mut write_buf = Vec::with_capacity(4096); let mut local_slot = (worker_idx as u32) << 20; + let mut isolate = spawn_worker_isolate( + local_slot, + deterministic_seed, + &caps_clone, + &secrets_clone, + fuel_limit, + mem_limit, + ); while let Ok((stream, _)) = listener_clone.accept() { local_slot = local_slot.wrapping_add(1); - let _ = serve_connection_keep_alive_with_tls_and_secrets( + let _ = serve_connection_with_isolate( stream, local_slot, + &mut isolate, &bc_clone, td_clone.as_deref().map(|p| p.as_path()), st_clone.as_deref(), - deterministic_seed, - &caps_clone, - &secrets_clone, fuel_limit, mem_limit, &mut read_buf, @@ -219,17 +228,23 @@ console.log(route_res); let mut read_buf = vec![0u8; 65536]; let mut write_buf = Vec::with_capacity(4096); let mut local_slot: u32 = 0; + let mut isolate = spawn_worker_isolate( + local_slot, + deterministic_seed, + &caps, + &audit_secrets, + fuel_limit, + mem_limit, + ); while let Ok((stream, _)) = listener.accept() { local_slot = local_slot.wrapping_add(1); - let _ = serve_connection_keep_alive_with_tls_and_secrets( + let _ = serve_connection_with_isolate( stream, local_slot, + &mut isolate, &bytecode, tenant_dir_arc.as_deref().map(|p| p.as_path()), static_table_arc.as_deref(), - deterministic_seed, - &caps, - &audit_secrets, fuel_limit, mem_limit, &mut read_buf, diff --git a/crates/slice-engine/src/bindings/core.rs b/crates/slice-engine/src/bindings/core.rs index c1ab5c9..8e9bb17 100644 --- a/crates/slice-engine/src/bindings/core.rs +++ b/crates/slice-engine/src/bindings/core.rs @@ -31,6 +31,18 @@ pub(crate) fn register_slice_native_host_functions(ctx: &mut boa_engine::Context return; } + static PERF_ORIGIN: std::sync::OnceLock = std::sync::OnceLock::new(); + let _ = ctx.register_global_builtin_callable( + js_string!("__slice_perf_now"), + 0, + NativeFunction::from_fn_ptr(|_this, _args, _context| { + let origin = PERF_ORIGIN.get_or_init(std::time::Instant::now); + let elapsed_ms = origin.elapsed().as_secs_f64() * 1000.0 + + (crate::event_loop::virtual_time_warped_ms() as f64); + Ok(BoaVal::from(elapsed_ms)) + }), + ); + let _ = ctx.register_global_builtin_callable( js_string!("__slice_console_log"), 1, diff --git a/crates/slice-engine/src/bindings/fs.rs b/crates/slice-engine/src/bindings/fs.rs index 493d835..32a3a69 100644 --- a/crates/slice-engine/src/bindings/fs.rs +++ b/crates/slice-engine/src/bindings/fs.rs @@ -205,9 +205,14 @@ pub(crate) fn register_fs_host_functions(ctx: &mut boa_engine::Context) { if !check_boa_fs_read_ocap(&norm) { return Ok(BoaVal::from(false)); } - let exists = BOA_VFS_CACHE.with(|c| c.borrow().contains_key(&norm)) - || BOA_VFS_DIRS.with(|d| d.borrow().contains(&norm)) - || std::path::Path::new(&norm).exists() + let prefix = format!("{}/", norm); + let exists = BOA_VFS_CACHE.with(|c| { + let map = c.borrow(); + map.contains_key(&norm) || map.keys().any(|k| k.starts_with(&prefix)) + }) || BOA_VFS_DIRS.with(|d| { + let dirs = d.borrow(); + dirs.contains(&norm) || dirs.iter().any(|k| k.starts_with(&prefix)) + }) || std::path::Path::new(&norm).exists() || std::path::Path::new(&path).exists(); Ok(BoaVal::from(exists)) }), @@ -228,7 +233,16 @@ pub(crate) fn register_fs_host_functions(ctx: &mut boa_engine::Context) { } let norm = norm_vfs_path(&path); BOA_VFS_DIRS.with(|d| { - d.borrow_mut().insert(norm); + let mut dirs = d.borrow_mut(); + let mut cur = norm.as_str(); + while !cur.is_empty() && cur != "/" { + dirs.insert(cur.to_string()); + if let Some(idx) = cur.rfind('/') { + cur = &cur[..idx]; + } else { + break; + } + } }); Ok(BoaVal::undefined()) }), @@ -256,8 +270,21 @@ pub(crate) fn register_fs_host_functions(ctx: &mut boa_engine::Context) { BOA_VFS_CACHE.with(|c| { for k in c.borrow().keys() { if let Some(rest) = k.strip_prefix(&prefix) { - if !rest.contains('/') && !rest.is_empty() { - entries_set.insert(rest.to_string()); + if let Some(first_seg) = rest.split('/').next() { + if !first_seg.is_empty() { + entries_set.insert(first_seg.to_string()); + } + } + } + } + }); + BOA_VFS_DIRS.with(|d| { + for k in d.borrow().iter() { + if let Some(rest) = k.strip_prefix(&prefix) { + if let Some(first_seg) = rest.split('/').next() { + if !first_seg.is_empty() { + entries_set.insert(first_seg.to_string()); + } } } } @@ -669,4 +696,101 @@ pub(crate) fn register_fs_host_functions(ctx: &mut boa_engine::Context) { Ok(BoaVal::from(is_sym)) }), ); + + let _ = ctx.register_global_builtin_callable( + js_string!("__slice_fs_readlink_sync"), + 1, + NativeFunction::from_fn_ptr(|_this, args, context| { + let path = args + .first() + .map(|v| v.to_string(context)) + .transpose()? + .map(|s| s.to_std_string_escaped()) + .unwrap_or_default(); + if !check_boa_fs_read_ocap(&path) { + return Ok(BoaVal::from(js_string!(""))); + } + let norm = norm_vfs_path(&path); + if let Some(target) = BOA_VFS_CACHE.with(|c| { + c.borrow().get(&norm).and_then(|b| { + if b.starts_with(VFS_SYMLINK_PREFIX) { + Some( + String::from_utf8_lossy(&b[VFS_SYMLINK_PREFIX.len()..]).into_owned(), + ) + } else { + None + } + }) + }) { + if !check_boa_fs_read_ocap(&target) { + return Ok(BoaVal::from(js_string!(""))); + } + return Ok(BoaVal::from(js_string!(target))); + } + if let Ok(target_path) = std::fs::read_link(&path) { + let target_str = target_path.to_string_lossy().replace('\\', "/"); + if check_boa_fs_read_ocap(&target_str) { + return Ok(BoaVal::from(js_string!(target_str))); + } + } + Ok(BoaVal::from(js_string!(""))) + }), + ); + + let _ = ctx.register_global_builtin_callable( + js_string!("__slice_fs_truncate_sync"), + 2, + NativeFunction::from_fn_ptr(|_this, args, context| { + let path = args + .first() + .map(|v| v.to_string(context)) + .transpose()? + .map(|s| s.to_std_string_escaped()) + .unwrap_or_default(); + let new_len = args + .get(1) + .and_then(|v| v.as_number()) + .map(|n| n.max(0.0) as usize) + .unwrap_or(0); + if !check_boa_fs_read_ocap(&path) || !check_boa_fs_write_ocap(&path) { + return Ok(BoaVal::undefined()); + } + let norm = resolve_vfs_symlink_norm(&norm_vfs_path(&path)); + if !check_boa_fs_read_ocap(&norm) || !check_boa_fs_write_ocap(&norm) { + return Ok(BoaVal::undefined()); + } + let mut data = BOA_VFS_CACHE + .with(|c| c.borrow().get(&norm).map(|arc| (**arc).clone())) + .unwrap_or_else(|| { + std::fs::read(&norm) + .or_else(|_| std::fs::read(&path)) + .unwrap_or_default() + }); + if new_len > data.len() { + if let Err(msg) = try_consume_isolate_memory(new_len - data.len()) { + return Err(JsNativeError::range().with_message(msg).into()); + } + } + data.resize(new_len, 0u8); + BOA_VFS_CACHE.with(|c| { + c.borrow_mut().insert(norm, std::sync::Arc::new(data)); + }); + Ok(BoaVal::undefined()) + }), + ); + + let _ = ctx.register_global_builtin_callable( + js_string!("__slice_fs_utimes_sync"), + 3, + NativeFunction::from_fn_ptr(|_this, args, context| { + let path = args + .first() + .map(|v| v.to_string(context)) + .transpose()? + .map(|s| s.to_std_string_escaped()) + .unwrap_or_default(); + let _ = check_boa_fs_write_ocap(&path); + Ok(BoaVal::undefined()) + }), + ); } diff --git a/crates/slice-engine/src/bindings/http_and_fetch.rs b/crates/slice-engine/src/bindings/http_and_fetch.rs index 004901e..66758a9 100644 --- a/crates/slice-engine/src/bindings/http_and_fetch.rs +++ b/crates/slice-engine/src/bindings/http_and_fetch.rs @@ -44,6 +44,39 @@ pub(crate) fn register_http_bridge_host_functions(ctx: &mut boa_engine::Context) }), ); + let _ = ctx.register_global_builtin_callable( + js_string!("__slice_http_url"), + 0, + NativeFunction::from_fn_ptr(|_this, _args, _context| { + let url = BOA_HTTP_REQ.with(|r| { + let borrow = r.borrow(); + let mut host = "localhost"; + for (k, v) in &borrow.headers[..borrow.headers_len] { + if k.eq_ignore_ascii_case("host") && !v.is_empty() { + host = v.as_str(); + break; + } + } + let path = if borrow.path.is_empty() { + "/" + } else { + borrow.path.as_str() + }; + let q = borrow.query.as_str(); + let mut s = String::with_capacity(7 + host.len() + path.len() + q.len() + 1); + s.push_str("http://"); + s.push_str(host); + s.push_str(path); + if !q.is_empty() { + s.push('?'); + s.push_str(q); + } + s + }); + Ok(BoaVal::from(js_string!(url))) + }), + ); + let _ = ctx.register_global_builtin_callable( js_string!("__slice_http_path"), 0, diff --git a/crates/slice-engine/src/isolate/exec_boa.rs b/crates/slice-engine/src/isolate/exec_boa.rs index 86de747..6291da4 100644 --- a/crates/slice-engine/src/isolate/exec_boa.rs +++ b/crates/slice-engine/src/isolate/exec_boa.rs @@ -570,7 +570,43 @@ impl SliceIsolate { } } } - Err(err) => Ok(JsValue::str(format!("Uncaught {}", err))), + Err(err) => { + let raw_err = format!("Uncaught {}", err); + let mut mapped = crate::boa_realm::map_error_with_active_source(&raw_err); + if mapped == raw_err { + if let Some(opaque) = err.as_opaque() { + if let Some(obj) = opaque.as_object() { + if let Ok(stack_val) = + obj.get(boa_engine::js_string!("stack"), &mut realm.ctx) + { + if let Some(s) = stack_val.as_string() { + let st = s.to_std_string_escaped(); + for line in st.lines() { + let trimmed = line.trim(); + if trimmed.starts_with("at ") && !trimmed.contains("") { + if let Some(open) = trimmed.rfind('(') { + if let Some(close) = trimmed[open + 1..].find(')') { + let loc = &trimmed[open + 1..open + 1 + close]; + if loc.contains(':') { + mapped = format!("{} ({})", raw_err, loc); + break; + } + } + } else if let Some(loc) = trimmed.strip_prefix("at ") { + if loc.contains(':') && !loc.contains(' ') { + mapped = format!("{} ({})", raw_err, loc); + break; + } + } + } + } + } + } + } + } + } + Ok(JsValue::str(mapped)) + } }; release_warm_boa_realm(realm); diff --git a/crates/slice-engine/src/preludes/00_ultra_core.js b/crates/slice-engine/src/preludes/00_ultra_core.js index 9f565af..7cc27dd 100644 --- a/crates/slice-engine/src/preludes/00_ultra_core.js +++ b/crates/slice-engine/src/preludes/00_ultra_core.js @@ -135,9 +135,7 @@ var __orand = Math.random; var __onow = Date.now; - function __perfNowNative() { - return __onow() - 1700000000000; - } + var __perfNowNative = __slice_perf_now; globalThis.performance = { now: __perfNowNative }; diff --git a/crates/slice-engine/src/preludes/11_fetch_headers_req_res.js b/crates/slice-engine/src/preludes/11_fetch_headers_req_res.js index 9f1f146..34b44ac 100644 --- a/crates/slice-engine/src/preludes/11_fetch_headers_req_res.js +++ b/crates/slice-engine/src/preludes/11_fetch_headers_req_res.js @@ -203,21 +203,23 @@ throwIfAborted: function() {} }; + function __makeLiveReq() { + var r = Object.create(LiveReqProto); + r._m = null; + r._u = null; + r._h = null; + r._b = null; + r._u8 = null; + r._fd = null; + r.redirect = "follow"; + r.signal = __defaultReqSignal; + r.bodyUsed = false; + return r; + } + function Request(input, init) { if (input === "__SLICE_LIVE_REQ__") { - this.method = __slice_http_method() || "GET"; - var h = __slice_http_header("host") || "localhost"; - var p = __slice_http_path() || "/"; - var q = __slice_http_query(); - this.url = "http://" + h + p + (q ? "?" + q : ""); - this.headers = new Headers("__SLICE_LIVE_REQ__"); - this._body = __slice_http_body() || ""; - this._u8 = null; - this._fd = null; - this.redirect = "follow"; - this.signal = __defaultReqSignal; - this.bodyUsed = false; - return; + return __makeLiveReq(); } if (!init && typeof input === "string") { this.url = input; @@ -269,7 +271,46 @@ Request.prototype._isSliceReq = true; function Response(body, init) { - var o = init || {}; + if (!init) { + if (body === undefined || body === null || typeof body === "string") { + var rSimple = Object.create(LazyResProto); + rSimple.status = 200; + rSimple.statusText = "OK"; + rSimple.ok = true; + rSimple._h = null; + rSimple._data = undefined; + rSimple._stream = null; + rSimple._body = typeof body === "string" ? body : ""; + rSimple._u8 = null; + rSimple._fd = null; + rSimple._ct = "text/plain;charset=UTF-8"; + rSimple._isSliceRes = true; + rSimple.bodyUsed = false; + return rSimple; + } + this.status = 200; + this.statusText = "OK"; + this.ok = true; + this.headers = new Headers(); + this._data = undefined; + this._stream = null; + if (typeof body === "object" && typeof body._toText === "function" && (!body._closed || body._startPromise)) { + this._stream = body; + this._body = ""; + this._u8 = null; + this._fd = null; + this.headers._m["content-type"] = "text/plain;charset=UTF-8"; + } else { + var nbFast = __normHttpBody(body, this.headers); + this._body = nbFast.str; + this._u8 = nbFast.u8; + this._fd = nbFast.fd; + } + this._isSliceRes = true; + this.bodyUsed = false; + return; + } + var o = init; var st = o.status !== undefined ? Number(o.status) : 200; this.status = st; this.statusText = o.statusText !== undefined ? String(o.statusText) : (st === 200 ? "OK" : ""); @@ -286,6 +327,9 @@ this._body = body; this._u8 = null; this._fd = null; + if (!this.headers._m["content-type"]) { + this.headers._m["content-type"] = "text/plain;charset=UTF-8"; + } } else if (typeof body === "object" && typeof body._toText === "function" && (!body._closed || body._startPromise)) { this._stream = body; this._body = ""; @@ -297,12 +341,57 @@ this._u8 = nb.u8; this._fd = nb.fd; } - this._ct = (this.headers._m && this.headers._m["content-type"]) || "text/plain;charset=UTF-8"; this._isSliceRes = true; this.bodyUsed = false; } var RP = Request.prototype, SP = Response.prototype; + var LiveReqProto = Object.create(RP); + Object.defineProperties(LiveReqProto, { + method: { + get: function() { return this._m || (this._m = __slice_http_method() || "GET"); }, + set: function(v) { this._m = v; }, + configurable: true, + enumerable: true + }, + url: { + get: function() { return this._u || (this._u = __slice_http_url()); }, + set: function(v) { this._u = v; }, + configurable: true, + enumerable: true + }, + headers: { + get: function() { return this._h || (this._h = new Headers("__SLICE_LIVE_REQ__")); }, + set: function(v) { this._h = v; }, + configurable: true, + enumerable: true + }, + _body: { + get: function() { + if (this._b === null) this._b = __slice_http_body() || ""; + return this._b; + }, + set: function(v) { this._b = v; }, + configurable: true, + enumerable: false + } + }); + var LazyResProto = Object.create(SP); + Object.defineProperty(LazyResProto, "headers", { + get: function() { + if (!this._h) { + var h = new Headers(); + if (this._ct) h._m["content-type"] = this._ct; + this._h = h; + } + return this._h; + }, + set: function(v) { + this._h = v; + }, + configurable: true, + enumerable: true + }); RP.text = SP.text = function() { this.bodyUsed = true; if (this._stream) { @@ -392,18 +481,13 @@ Object.defineProperty(SP, "body", __bodyDesc); Response.json = function(data, init) { if (!init) { - var rFast = Object.create(SP); + var rFast = Object.create(LazyResProto); rFast.status = 200; rFast.statusText = "OK"; rFast.ok = true; - var hFast = Object.create(Headers.prototype); - hFast._live = false; - hFast._sc = null; - var mFast = Object.create(null); - mFast["content-type"] = "application/json"; - hFast._m = mFast; - rFast.headers = hFast; + rFast._h = null; rFast._data = data; + rFast._stream = null; rFast._body = ""; rFast._u8 = null; rFast._fd = null; @@ -415,7 +499,6 @@ var r = new Response(null, typeof init === "number" ? { status: init } : init); if (!r.headers._m["content-type"]) r.headers._m["content-type"] = "application/json"; r._data = data; - r._ct = r.headers._m["content-type"]; return r; }; Response.redirect = function(url, status) { @@ -445,20 +528,23 @@ } function __finishSliceRes(r) { - var ct = (r.headers && r.headers._m && r.headers._m["content-type"]) || r._ct; + var h = r._h !== undefined ? r._h : r.headers; + var ct = (h && h._m && h._m["content-type"]) || r._ct || "text/plain;charset=UTF-8"; + var hdrJson = h ? __resHdrJson(h) : ""; if (r._stream) { var st = r._stream; if (st._startPromise) { st._startPromise.then(function() { - __slice_http_respond(r.status, st._toText(), ct, __resHdrJson(r.headers)); + var hs = r._h !== undefined ? r._h : r.headers; + __slice_http_respond(r.status, st._toText(), ct, hs ? __resHdrJson(hs) : ""); }); return; } - __slice_http_respond(r.status, st._toText(), ct, __resHdrJson(r.headers)); + __slice_http_respond(r.status, st._toText(), ct, hdrJson); return; } var rb = r._body || (r._data !== undefined ? JSON.stringify(r._data) : ""); - __slice_http_respond(r.status, rb, ct, __resHdrJson(r.headers)); + __slice_http_respond(r.status, rb, ct, hdrJson); } globalThis.Headers = Headers; @@ -469,14 +555,12 @@ waitUntil: globalThis.Slice ? globalThis.Slice.waitUntil : function() {}, passThroughOnException: function() {} }; - globalThis.__slice_make_web_request = function() { - return new Request("__SLICE_LIVE_REQ__"); - }; + globalThis.__slice_make_web_request = __makeLiveReq; globalThis.__slice_dispatch_fetch = function(h) { if (!__slice_http_is_active()) return; var fn = typeof h.fetch === "function" ? h.fetch : (typeof h === "function" ? h : null); if (!fn) return; - var res = fn.call(h, new Request("__SLICE_LIVE_REQ__"), globalThis.process.env, __slice_web_ctx); + var res = fn.call(h, __makeLiveReq(), globalThis.process.env, __slice_web_ctx); if (res) { if (res._isSliceRes) { __finishSliceRes(res); diff --git a/crates/slice-engine/src/preludes/js_preludes.rs b/crates/slice-engine/src/preludes/js_preludes.rs index 5ef2485..d51c888 100644 --- a/crates/slice-engine/src/preludes/js_preludes.rs +++ b/crates/slice-engine/src/preludes/js_preludes.rs @@ -151,7 +151,6 @@ pub(crate) fn build_fused_prelude_prefix( ) -> Vec { let mut out = Vec::with_capacity(ULTRA_CORE_PRELUDE.len() + 8192); out.extend_from_slice(ULTRA_CORE_PRELUDE); - out.push(b'\n'); let mut active_mask: u32 = 0; for shard_id in SHARD_LOAD_ORDER { let bit = 1u32 << shard_id; @@ -159,7 +158,6 @@ pub(crate) fn build_fused_prelude_prefix( let shard_bytes = shard_prelude_bytes(shard_id); if !shard_bytes.is_empty() { out.extend_from_slice(shard_bytes); - out.push(b'\n'); active_mask |= bit; } } @@ -171,26 +169,27 @@ pub(crate) fn build_fused_prelude_prefix( let mut mask_buf = itoa::Buffer::new(); out.extend_from_slice(b"globalThis.__shMask|="); out.extend_from_slice(mask_buf.format(active_mask).as_bytes()); - out.extend_from_slice(b";\n"); + out.push(b';'); } for builtin_bit in 19..=28u32 { if (shards_mask & (1u32 << builtin_bit)) != 0 { let b_bytes = crate::node_builtins::builtin_snippet_for_bit(builtin_bit); if !b_bytes.is_empty() { out.extend_from_slice(b_bytes); - out.push(b'\n'); + if !b_bytes.ends_with(b";") { + out.push(b';'); + } } } } if init_lazy_getters { out.extend_from_slice(LAZY_GETTERS_INIT_PRELUDE); - out.push(b'\n'); } if has_next_tick { - out.extend_from_slice(b"__slice_set_next_tick_hook(true);\n"); + out.extend_from_slice(b"__slice_set_next_tick_hook(true);"); } out.extend_from_slice( - b"if(globalThis.__slice_bf){if(globalThis.__slice_bf&1)__slice_sync_process_env(true);if(globalThis.__slice_bf&2)__slice_set_det_mode(true);if(globalThis.__slice_bf&4)globalThis.__slice_init_worker_self_env(true);}\n", + b"if(globalThis.__slice_bf){if(globalThis.__slice_bf&1)__slice_sync_process_env(true);if(globalThis.__slice_bf&2)__slice_set_det_mode(true);if(globalThis.__slice_bf&4)globalThis.__slice_init_worker_self_env(true);}", ); out } diff --git a/crates/slice-engine/src/preludes/node_builtins.rs b/crates/slice-engine/src/preludes/node_builtins.rs index f5a9ddf..768b31b 100644 --- a/crates/slice-engine/src/preludes/node_builtins.rs +++ b/crates/slice-engine/src/preludes/node_builtins.rs @@ -10,7 +10,7 @@ use std::sync::{Arc, OnceLock}; const BUILTIN_CRYPTO_SNIPPET: &[u8] = br#"(function(){var __U8=globalThis.Uint8Array,__ext=false;function __ensExt(){if(!__ext){__ext=true;__slice_init_crypto_ext();}}function __toBytes(d,enc){if(d instanceof __U8)return d;if(d instanceof ArrayBuffer)return new __U8(d);if(d&&d.buffer instanceof ArrayBuffer)return new __U8(d.buffer,d.byteOffset||0,d.byteLength);__slice_ensure_shard(5);return Buffer.from(String(d),enc||"utf8");}function __catBytes(chunks){if(chunks.length===0)return new __U8(0);if(chunks.length===1)return chunks[0];__slice_ensure_shard(5);return Buffer.concat(chunks);}function __encOut(rawBuf,enc){__slice_ensure_shard(5);var b=Buffer.isBuffer(rawBuf)?rawBuf:Buffer.from(rawBuf);return(!enc||enc==="buffer")?b:b.toString(enc);}function KeyObject(type,alg,crv,id,raw,meta){this.type=type;this.asymmetricKeyType=alg;this.asymmetricKeyDetails=crv?{namedCurve:crv}:{};this._id=id||0;this._raw=raw||null;this._meta=meta||null;}KeyObject.prototype.export=function(opts){__ensExt();__slice_ensure_shard(5);var o=opts||{};var fmt=String(o.format||"der").toLowerCase();if(this.type==="secret")return Buffer.from(this._raw);var derB64=(this.type==="private")?(this._meta&&this._meta.pkcs8):(this._meta&&this._meta.spki);var der=derB64?Buffer.from(__slice_base64_decode_bytes(derB64)):Buffer.from(this._raw||[]);if(fmt==="pem"){var label=this.type==="private"?"PRIVATE KEY":"PUBLIC KEY";return"-----BEGIN "+label+"-----\n"+der.toString("base64")+"\n-----END "+label+"-----\n";}if(fmt==="jwk"&&this._meta){if(this.asymmetricKeyType==="ed25519"){var j={kty:"OKP",crv:"Ed25519",x:this._meta.x};if(this.type==="private")j.d=this._meta.d;return j;}var je={kty:"EC",crv:this._meta.crv||"P-256",x:this._meta.x,y:this._meta.y};if(this.type==="private")je.d=this._meta.d;return je;}return der;};function __parseKeyObj(k,isPriv){__ensExt();if(k instanceof KeyObject)return k;if(k&&typeof k==="object"&&k._id!==undefined&&k.algorithm){var kn=String(k.algorithm.name||"").toLowerCase();return new KeyObject(k.type,kn==="ecdsa"?"ec":kn,k.algorithm.namedCurve,k._id,k._raw,k._meta);}if(k&&typeof k==="object"&&k.key!==undefined)return __parseKeyObj(k.key,isPriv);if(typeof k==="string"&&k.indexOf("-----BEGIN")!==-1){var body=k.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s+/g,"");var der=__slice_base64_decode_bytes(body);var fmt=isPriv?"pkcs8":"spki";try{var impEd=JSON.parse(__slice_crypto_asym_import("Ed25519","",fmt,der));return new KeyObject(impEd.type,"ed25519",undefined,impEd.id,der,impEd);}catch(_e1){try{var impEc256=JSON.parse(__slice_crypto_asym_import("ECDSA","P-256",fmt,der));return new KeyObject(impEc256.type,"ec","P-256",impEc256.id,der,impEc256);}catch(_e2){var impEc384=JSON.parse(__slice_crypto_asym_import("ECDSA","P-384",fmt,der));return new KeyObject(impEc384.type,"ec","P-384",impEc384.id,der,impEc384);}}}var raw=__toBytes(k);var fmtD=isPriv?"pkcs8":"spki";try{var iEd=JSON.parse(__slice_crypto_asym_import("Ed25519","",fmtD,raw));return new KeyObject(iEd.type,"ed25519",undefined,iEd.id,raw,iEd);}catch(_e3){try{var iEc256=JSON.parse(__slice_crypto_asym_import("ECDSA","P-256",fmtD,raw));return new KeyObject(iEc256.type,"ec","P-256",iEc256.id,raw,iEc256);}catch(_e4){var iEc384=JSON.parse(__slice_crypto_asym_import("ECDSA","P-384",fmtD,raw));return new KeyObject(iEc384.type,"ec","P-384",iEc384.id,raw,iEc384);}}}var m={KeyObject:KeyObject,createHash:function(alg){var a=String(alg||"sha256").toLowerCase(),isSha256=(a==="sha256"||a==="sha-256"),chunks=[],strFast=isSha256,sBuf="";return{update:function(d,enc){if(strFast&&typeof d==="string"&&(!enc||enc==="utf8"||enc==="utf-8")&&chunks.length===0){sBuf+=d;}else{if(sBuf.length>0){__slice_ensure_shard(5);chunks.push(Buffer.from(sBuf,"utf8"));sBuf="";}strFast=false;chunks.push(__toBytes(d,enc));}return this;},digest:function(enc){if(isSha256&&(enc==="hex"||enc==="base64"||enc==="base64url")){if(strFast&&chunks.length===0){var h=__slice_crypto_sha256(sBuf,enc);sBuf="";return h;}if(sBuf.length===0&&chunks.length===1){var hb=__slice_crypto_sha256(chunks[0],enc);chunks=[];return hb;}}__ensExt();__slice_ensure_shard(5);if(sBuf.length>0){chunks.push(Buffer.from(sBuf,"utf8"));sBuf="";}var raw=Buffer.from(__slice_crypto_digest_bytes(a,__catBytes(chunks)));chunks=[];return(!enc||enc==="buffer")?raw:raw.toString(enc);}};},createHmac:function(alg,key){var a=String(alg||"sha256").toLowerCase(),isSha256=(a==="sha256"||a==="sha-256"),kBytes=null,chunks=[],strFast=isSha256&&typeof key==="string",kStr=typeof key==="string"?key:"",sBuf="";return{update:function(d,enc){if(strFast&&typeof d==="string"&&(!enc||enc==="utf8"||enc==="utf-8")&&chunks.length===0){sBuf+=d;}else{if(sBuf.length>0){__slice_ensure_shard(5);chunks.push(Buffer.from(sBuf,"utf8"));sBuf="";}strFast=false;chunks.push(__toBytes(d,enc));}return this;},digest:function(enc){if(isSha256&&(enc==="hex"||enc==="base64"||enc==="base64url")){if(strFast&&chunks.length===0){var h=__slice_crypto_hmac_sha256(kStr,sBuf,enc);sBuf="";return h;}if(sBuf.length===0&&chunks.length===1){if(!kBytes)kBytes=(typeof key==="string")?key:__toBytes(key);var hb=__slice_crypto_hmac_sha256(kBytes,chunks[0],enc);chunks=[];return hb;}}__ensExt();__slice_ensure_shard(5);if(sBuf.length>0){chunks.push(Buffer.from(sBuf,"utf8"));sBuf="";}if(!kBytes)kBytes=__toBytes(key);var raw=Buffer.from(__slice_crypto_hmac_bytes(a,kBytes,__catBytes(chunks)));chunks=[];return(!enc||enc==="buffer")?raw:raw.toString(enc);}};},randomBytes:function(size,cb){__ensExt();__slice_ensure_shard(5);var b=Buffer.from(__slice_crypto_random_bytes(Number(size)||0));if(typeof cb==="function"){cb(null,b);return;}return b;},randomFillSync:function(buf,offset,size){__ensExt();if(!buf||typeof buf.byteLength!=="number")throw new TypeError("buf must be an ArrayBufferView");var off=offset!==undefined?Number(offset):0;var sz=size!==undefined?Number(size):(buf.byteLength-off);if(off<0||sz<0||off+sz>buf.byteLength)throw new RangeError("offset or size out of bounds");var u8=new __U8(buf.buffer||buf,(buf.byteOffset||0)+off,sz);var rnd=__slice_crypto_random_bytes(sz);u8.set(rnd);return buf;},randomFill:function(buf,offset,size,cb){if(typeof offset==="function"){cb=offset;offset=0;size=buf.byteLength;}else if(typeof size==="function"){cb=size;size=buf.byteLength-Number(offset||0);}try{var r=m.randomFillSync(buf,offset,size);if(typeof cb==="function")queueMicrotask(function(){cb(null,r);});}catch(e){if(typeof cb==="function")queueMicrotask(function(){cb(e);});else throw e;}},randomInt:function(min,max,cb){__ensExt();if(typeof max==="function"||max===undefined){cb=max;max=min;min=0;}var lo=Math.ceil(Number(min)),hi=Math.floor(Number(max));if(!(hi>lo))throw new RangeError("max must be greater than min");var range=hi-lo,rb=__slice_crypto_random_bytes(4),u=((rb[0]<<24)>>>0)+((rb[1]<<16)>>>0)+((rb[2]<<8)>>>0)+(rb[3]>>>0);var val=lo+(u%range);if(typeof cb==="function"){queueMicrotask(function(){cb(null,val);});return;}return val;},randomUUID:function(){__ensExt();return __slice_crypto_random_uuid();},getRandomValues:function(ta){__ensExt();return __slice_crypto_get_random_values(ta);},timingSafeEqual:function(a,b){__ensExt();return __slice_crypto_timing_safe_equal(a,b);},pbkdf2Sync:function(password,salt,iterations,keylen,digest){__ensExt();__slice_ensure_shard(5);var ab=__slice_crypto_kdf("PBKDF2",String(digest||"sha256"),__toBytes(password),__toBytes(salt),null,Number(iterations),Number(keylen));return Buffer.from(ab);},pbkdf2:function(password,salt,iterations,keylen,digest,cb){if(typeof digest==="function"){cb=digest;digest="sha1";}try{var b=m.pbkdf2Sync(password,salt,iterations,keylen,digest);if(typeof cb==="function")queueMicrotask(function(){cb(null,b);});}catch(e){if(typeof cb==="function")queueMicrotask(function(){cb(e);});else throw e;}},hkdfSync:function(digest,ikm,salt,info,keylen){__ensExt();var ab=__slice_crypto_kdf("HKDF",String(digest||"sha256"),__toBytes(ikm),__toBytes(salt),__toBytes(info),1,Number(keylen));return ab;},hkdf:function(digest,ikm,salt,info,keylen,cb){try{var ab=m.hkdfSync(digest,ikm,salt,info,keylen);if(typeof cb==="function")queueMicrotask(function(){cb(null,ab);});}catch(e){if(typeof cb==="function")queueMicrotask(function(){cb(e);});else throw e;}},scryptSync:function(password,salt,keylen,options){__ensExt();__slice_ensure_shard(5);var o=options||{};var N=Number(o.N||o.cost||16384),r=Number(o.r||o.blockSize||8),p=Number(o.p||o.parallelization||1),maxmem=Number(o.maxmem||(32*1024*1024));var ab=__slice_crypto_kdf("SCRYPT","SHA-256",__toBytes(password),__toBytes(salt),null,N,Number(keylen),r,p,maxmem);return Buffer.from(ab);},scrypt:function(password,salt,keylen,options,cb){if(typeof options==="function"){cb=options;options={};}try{var b=m.scryptSync(password,salt,keylen,options);if(typeof cb==="function")queueMicrotask(function(){cb(null,b);});}catch(e){if(typeof cb==="function")queueMicrotask(function(){cb(e);});else throw e;}},createCipheriv:function(algorithm,key,iv,options){__ensExt();__slice_ensure_shard(5);var alg=String(algorithm||"").toLowerCase(),isGcm=alg.indexOf("gcm")!==-1,kB=__toBytes(key),ivB=__toBytes(iv),aadB=null,chunks=[],tagBuf=null,autoPad=true,tagLen=(options&&options.authTagLength)?Number(options.authTagLength)*8:128;var hid=__slice_crypto_key_register(isGcm?"AES-GCM":"AES-CBC","",kB);return{setAAD:function(buf){aadB=__toBytes(buf);return this;},setAutoPadding:function(ap){autoPad=(ap===undefined)?true:Boolean(ap);return this;},update:function(data,inEnc,outEnc){chunks.push(__toBytes(data,inEnc));return __encOut(new __U8(0),outEnc);},final:function(outEnc){var plain=__catBytes(chunks);chunks=[];var ab=__slice_crypto_cipher(isGcm?"AES-GCM":"AES-CBC",true,hid,kB,ivB,aadB,tagLen,plain,autoPad);var full=new __U8(ab);if(isGcm){var tBytes=tagLen/8;var cLen=full.byteLength-tBytes;tagBuf=Buffer.from(full.subarray(cLen));return __encOut(full.subarray(0,cLen),outEnc);}return __encOut(full,outEnc);},getAuthTag:function(){if(!isGcm||!tagBuf)throw new Error("ERR_CRYPTO_INVALID_STATE: getAuthTag requires finalized GCM cipher");return tagBuf;}};},createDecipheriv:function(algorithm,key,iv,options){__ensExt();__slice_ensure_shard(5);var alg=String(algorithm||"").toLowerCase(),isGcm=alg.indexOf("gcm")!==-1,kB=__toBytes(key),ivB=__toBytes(iv),aadB=null,chunks=[],authTag=null,autoPad=true,tagLen=(options&&options.authTagLength)?Number(options.authTagLength)*8:128;var hid=__slice_crypto_key_register(isGcm?"AES-GCM":"AES-CBC","",kB);return{setAAD:function(buf){aadB=__toBytes(buf);return this;},setAuthTag:function(buf,enc){authTag=__toBytes(buf,enc);return this;},setAutoPadding:function(ap){autoPad=(ap===undefined)?true:Boolean(ap);return this;},update:function(data,inEnc,outEnc){chunks.push(__toBytes(data,inEnc));return __encOut(new __U8(0),outEnc);},final:function(outEnc){var ciph=__catBytes(chunks);chunks=[];if(isGcm){if(!authTag)throw new Error("ERR_CRYPTO_INVALID_STATE: Unsupported state or unable to authenticate data (missing authTag)");var combined=new __U8(ciph.byteLength+authTag.byteLength);combined.set(ciph,0);combined.set(authTag,ciph.byteLength);var ab=__slice_crypto_cipher("AES-GCM",false,hid,kB,ivB,aadB,tagLen,combined,true);return __encOut(new __U8(ab),outEnc);}var abC=__slice_crypto_cipher("AES-CBC",false,hid,kB,ivB,null,128,ciph,autoPad);return __encOut(new __U8(abC),outEnc);}};},generateKeyPairSync:function(type,options){__ensExt();__slice_ensure_shard(5);var t=String(type||"").toLowerCase(),o=options||{};var info=t==="ed25519"?JSON.parse(__slice_crypto_asym_keygen("Ed25519","")):JSON.parse(__slice_crypto_asym_keygen("ECDSA",String(o.namedCurve||"P-256")));var crv=info.crv||undefined;var pubKO=new KeyObject("public",t==="ed25519"?"ed25519":"ec",crv,info.pubId,__slice_base64_decode_bytes(info.spki),info);var privKO=new KeyObject("private",t==="ed25519"?"ed25519":"ec",crv,info.privId,__slice_base64_decode_bytes(info.pkcs8),info);var pubOut=o.publicKeyEncoding?pubKO.export(o.publicKeyEncoding):pubKO;var privOut=o.privateKeyEncoding?privKO.export(o.privateKeyEncoding):privKO;return{publicKey:pubOut,privateKey:privOut};},generateKeyPair:function(type,options,cb){if(typeof options==="function"){cb=options;options={};}try{var kp=m.generateKeyPairSync(type,options);if(typeof cb==="function")queueMicrotask(function(){cb(null,kp.publicKey,kp.privateKey);});}catch(e){if(typeof cb==="function")queueMicrotask(function(){cb(e);});else throw e;}},createPrivateKey:function(k){return __parseKeyObj(k,true);},createPublicKey:function(k){return __parseKeyObj(k,false);},createSecretKey:function(k,enc){__slice_ensure_shard(5);var b=__toBytes(k,enc);return new KeyObject("secret","secret",undefined,0,b,null);},sign:function(alg,data,key,cb){__ensExt();__slice_ensure_shard(5);try{var ko=__parseKeyObj(key,true);var dsaEnc=(key&&typeof key==="object"&&key.dsaEncoding)?String(key.dsaEncoding):"der";var ab=__slice_crypto_asym_sign(ko.asymmetricKeyType==="ed25519"?"Ed25519":"ECDSA",ko.asymmetricKeyDetails.namedCurve||"P-256",ko._id,ko._raw,__toBytes(data),dsaEnc!=="ieee-p1363");var b=Buffer.from(ab);if(typeof cb==="function"){queueMicrotask(function(){cb(null,b);});return;}return b;}catch(e){if(typeof cb==="function"){queueMicrotask(function(){cb(e);});return;}throw e;}},verify:function(alg,data,key,sig,cb){__ensExt();try{var ko=__parseKeyObj(key,false);var ok=Boolean(__slice_crypto_asym_verify(ko.asymmetricKeyType==="ed25519"?"Ed25519":"ECDSA",ko.asymmetricKeyDetails.namedCurve||"P-256",ko._id,ko._raw,__toBytes(sig),__toBytes(data)));if(typeof cb==="function"){queueMicrotask(function(){cb(null,ok);});return;}return ok;}catch(e){if(typeof cb==="function"){queueMicrotask(function(){cb(e);});return;}throw e;}},createSign:function(_alg){var chunks=[];return{update:function(d,enc){chunks.push(__toBytes(d,enc));return this;},sign:function(key,outEnc){var sig=m.sign(null,__catBytes(chunks),key);chunks=[];return(!outEnc||outEnc==="buffer")?sig:sig.toString(outEnc);}};},createVerify:function(_alg){var chunks=[];return{update:function(d,enc){chunks.push(__toBytes(d,enc));return this;},verify:function(key,sig,sigEnc){var sB=typeof sig==="string"?__toBytes(sig,sigEnc||"base64"):__toBytes(sig);var ok=m.verify(null,__catBytes(chunks),key,sB);chunks=[];return ok;}};},getHashes:function(){return["sha1","sha256","sha384","sha512","md5"];},getCiphers:function(){return["aes-128-gcm","aes-256-gcm","aes-128-cbc","aes-256-cbc"];},get subtle(){__slice_ensure_shard(4);return globalThis.crypto.subtle;},get webcrypto(){__slice_ensure_shard(4);return globalThis.crypto;}};m.default=m;m.__esModule=true;return __slice_builtins["crypto"]=__slice_builtins["node:crypto"]=m;})();"#; -const BUILTIN_FS_SNIPPET: &[u8] = br#"(function(){function __fsData(d){if(typeof d==="string")return d;if(d instanceof Uint8Array)return d;if(d instanceof ArrayBuffer)return new Uint8Array(d);if(d&&d.buffer instanceof ArrayBuffer)return new Uint8Array(d.buffer,d.byteOffset||0,d.byteLength);return String(d);}function __mkStats(sp,followSym){var isSym=Boolean(__slice_fs_is_symlink_sync(sp)),sz=__slice_fs_stat_sync(sp),mt=__slice_fs_mtime_sync(sp),isDir=Boolean(__slice_fs_is_dir_sync(sp)),d=new Date(mt);return{size:sz,mtimeMs:mt,ctimeMs:mt,atimeMs:mt,birthtimeMs:mt,mtime:d,ctime:d,atime:d,birthtime:d,mode:(!followSym&&isSym)?41471:(isDir?16877:33188),isFile:function(){return(!followSym&&isSym)?false:!isDir;},isDirectory:function(){return(!followSym&&isSym)?false:isDir;},isSymbolicLink:function(){return !followSym&&isSym;},isBlockDevice:function(){return false;},isCharacterDevice:function(){return false;},isFIFO:function(){return false;},isSocket:function(){return false;}};}function __cbWrap(syncFn){return function(){var args=[],cb=null;for(var i=0;i0?np.slice(0,sl):"/",base=sl>=0?np.slice(sl+1):np;for(var i=0;i<__watchers.length;i++){var w=__watchers[i];if(w._closed)continue;var wp=w._path;if(np===wp||dir===wp||(w._rec&&np.indexOf(wp+"/")===0)){var rel=(np===wp)?base:(np.slice(wp.length+1)||base);w._emit(evType,rel);}}}function __fsData(d){if(typeof d==="string")return d;if(d instanceof Uint8Array)return d;if(d instanceof ArrayBuffer)return new Uint8Array(d);if(d&&d.buffer instanceof ArrayBuffer)return new Uint8Array(d.buffer,d.byteOffset||0,d.byteLength);return String(d);}function __mkStats(sp,followSym){var isSym=Boolean(__slice_fs_is_symlink_sync(sp)),sz=__slice_fs_stat_sync(sp),mt=__slice_fs_mtime_sync(sp),isDir=Boolean(__slice_fs_is_dir_sync(sp)),d=new Date(mt);return{size:sz,mtimeMs:mt,ctimeMs:mt,atimeMs:mt,birthtimeMs:mt,mtime:d,ctime:d,atime:d,birthtime:d,mode:(!followSym&&isSym)?41471:(isDir?16877:33188),isFile:function(){return(!followSym&&isSym)?false:!isDir;},isDirectory:function(){return(!followSym&&isSym)?false:isDir;},isSymbolicLink:function(){return !followSym&&isSym;},isBlockDevice:function(){return false;},isCharacterDevice:function(){return false;},isFIFO:function(){return false;},isSocket:function(){return false;}};}function __cbWrap(syncFn){return function(){var args=[],cb=null;for(var i=0;i=0;i--){var w=__watchers[i];if(w._path===np&&(!listener||w._wfListener===listener))w.close();}},createReadStream:function(p,opts){__slice_ensure_shard(5);var st=__slice_builtins["node:stream"]||__slice_load_builtin("node:stream");var o=(typeof opts==="string")?{encoding:opts}:(opts||{});var enc=o.encoding||null,hwm=Number(o.highWaterMark)||65536,start=o.start!==undefined?Number(o.start):0,end=o.end!==undefined?Number(o.end):Infinity;var rs=new st.Readable({highWaterMark:hwm,encoding:enc});rs.path=String(p);rs.bytesRead=0;rs.pending=true;queueMicrotask(function(){try{if(rs.destroyed)return;if(!m.existsSync(rs.path)){rs.emit("error",new Error("ENOENT: no such file or directory, open '"+rs.path+"'"));return;}rs.pending=false;rs.emit("open",3);rs.emit("ready");var raw=Buffer.from(__slice_fs_read_bytes_sync(rs.path));var sliceEnd=Math.min(raw.length,end===Infinity?raw.length:end+1);var view=raw.subarray(start,sliceEnd);for(var off=0;off0)waiters.shift().res({value:ev,done:false});else q.push(ev);});w.on("close",function(){done=true;while(waiters.length>0)waiters.shift().res({value:undefined,done:true});});return{[Symbol.asyncIterator]:function(){return{next:function(){if(q.length>0)return Promise.resolve({value:q.shift(),done:false});if(done||w._closed)return Promise.resolve({value:undefined,done:true});return new Promise(function(res,rej){waiters.push({res:res,rej:rej});});},return:function(){w.close();return Promise.resolve({value:undefined,done:true});}};}};}};fp.default=fp;fp.__esModule=true;m.promises=fp;m.default=m;m.__esModule=true;__slice_builtins["fs/promises"]=__slice_builtins["node:fs/promises"]=fp;return __slice_builtins["fs"]=__slice_builtins["node:fs"]=m;})();"#; const BUILTIN_PATH_SNIPPET: &[u8] = br#"(function(){function __normPath(p){var s=String(p||"").replace(/\\/g,"/");if(s.length===0)return ".";var isAbs=s.charCodeAt(0)===47,trailing=s.length>1&&s.charCodeAt(s.length-1)===47,parts=s.split("/"),out=[];for(var i=0;i0&&out[out.length-1]!=="..")out.pop();else if(!isAbs)out.push("..");}else out.push(seg);}var res=(isAbs?"/":"")+out.join("/");if(!res)res=isAbs?"/":".";if(trailing&&res!=="/")res+="/";return res;}var m={sep:"/",delimiter:":",normalize:__normPath,isAbsolute:function(p){var s=String(p||"");return s.length>0&&(s.charCodeAt(0)===47||s.charCodeAt(0)===92||(s.length>2&&s.charCodeAt(1)===58));},join:function(){var parts=[];for(var i=0;i=-1&&!resolvedAbs;i--){var p=i>=0?String(arguments[i]||""):"/";if(!p)continue;p=p.replace(/\\/g,"/");resolved=p+"/"+resolved;resolvedAbs=p.charCodeAt(0)===47;}var norm=__normPath(resolved);return(norm.length>1&&norm.charCodeAt(norm.length-1)===47)?norm.slice(0,-1):norm;},dirname:function(p){var s=String(p||"").replace(/\\/g,"/").replace(/\/+$/,"");if(!s)return ".";var i=s.lastIndexOf("/");return i>0?s.slice(0,i):(i===0?"/":".");},basename:function(p,ext){var s=String(p||"").replace(/\\/g,"/").replace(/\/+$/,""),i=s.lastIndexOf("/"),b=i>=0?s.slice(i+1):s;return(ext&&b.endsWith(ext))?b.slice(0,b.length-ext.length):b;},extname:function(p){var b=m.basename(p),i=b.lastIndexOf(".");return i>0?b.slice(i):"";},relative:function(from,to){var f=m.resolve(from),t=m.resolve(to);if(f===t)return "";var fs=f.split("/").filter(Boolean),ts=t.split("/").filter(Boolean),len=Math.min(fs.length,ts.length),same=len;for(var i=0;i { - br#"(function(){var __BM=["assert","assert/strict","async_hooks","buffer","child_process","console","crypto","dgram","diagnostics_channel","dns","dns/promises","events","fs","fs/promises","http","https","module","net","os","path","path/posix","path/win32","perf_hooks","process","querystring","stream","stream/promises","stream/web","string_decoder","test","timers","timers/promises","tls","tty","url","util","util/types","vm","worker_threads","zlib"];function isBuiltin(id){var s=String(id||"");if(s.slice(0,5)==="node:")return __BM.indexOf(s.slice(5))!==-1;if(s.slice(0,6)==="slice:"||s.slice(0,11)==="cloudflare:")return true;return __BM.indexOf(s)!==-1;}function createRequire(filename){var req=function(id){return globalThis.__slice_cjs_require(id);};req.resolve=function(id){return String(id);};req.resolve.paths=function(){return["/node_modules"];};req.cache=Object.create(null);req.main={id:String(filename||"/index.js"),filename:String(filename||"/index.js"),exports:{}};return req;}function Module(id,parent){this.id=id||"";this.filename=id||"";this.exports={};this.parent=parent||null;this.loaded=false;this.children=[];}Module.builtinModules=__BM;Module.isBuiltin=isBuiltin;Module.createRequire=createRequire;Module._load=function(id){return globalThis.__slice_cjs_require(id);};Module.default=Module;Module.__esModule=true;return __slice_builtins["module"]=__slice_builtins["node:module"]=Module;})()"# + br#"(function(){var __BM=["assert","assert/strict","async_hooks","buffer","child_process","cluster","console","crypto","dgram","diagnostics_channel","dns","dns/promises","events","fs","fs/promises","http","http2","https","inspector","inspector/promises","module","net","os","path","path/posix","path/win32","perf_hooks","process","querystring","readline","readline/promises","stream","stream/promises","stream/web","string_decoder","test","timers","timers/promises","tls","tty","url","util","util/types","v8","vm","wasi","worker_threads","zlib"];function isBuiltin(id){var s=String(id||"");if(s.slice(0,5)==="node:")return __BM.indexOf(s.slice(5))!==-1;if(s.slice(0,6)==="slice:"||s.slice(0,11)==="cloudflare:")return true;return __BM.indexOf(s)!==-1;}function createRequire(filename){var req=function(id){return globalThis.__slice_cjs_require(id);};req.resolve=function(id){return String(id);};req.resolve.paths=function(){return["/node_modules"];};req.cache=Object.create(null);req.main={id:String(filename||"/index.js"),filename:String(filename||"/index.js"),exports:{}};return req;}function Module(id,parent){this.id=id||"";this.filename=id||"";this.exports={};this.parent=parent||null;this.loaded=false;this.children=[];}Module.builtinModules=__BM;Module.isBuiltin=isBuiltin;Module.createRequire=createRequire;Module._load=function(id){return globalThis.__slice_cjs_require(id);};Module.default=Module;Module.__esModule=true;return __slice_builtins["module"]=__slice_builtins["node:module"]=Module;})()"# + } + "readline" | "node:readline" => { + br#"(function(){var EE=__slice_builtins["node:events"]||__slice_load_builtin("node:events");function __mkRl(inputOrOpts,output,completer,terminal,isPromises){var o=(inputOrOpts&&typeof inputOrOpts==="object"&&!inputOrOpts.on&&typeof inputOrOpts.pipe!=="function")?inputOrOpts:{input:inputOrOpts,output:output,completer:completer,terminal:terminal};var rl=new EE();rl.input=o.input||null;rl.output=o.output||null;rl.terminal=Boolean(o.terminal);rl.line="";rl.cursor=0;rl.history=[];rl._prompt=String(o.prompt!==undefined?o.prompt:"> ");rl._closed=false;rl._paused=false;rl._q=[];rl._waiters=[];function __pushLine(ln){if(rl._closed)return;if(rl.history&&ln.length>0)rl.history.unshift(ln);rl.emit("line",ln);if(rl._waiters.length>0)rl._waiters.shift().res({value:ln,done:false});else rl._q.push(ln);}var __buf="";function __onData(chunk){if(rl._closed)return;__buf+=typeof chunk==="string"?chunk:(chunk&&chunk.toString?chunk.toString("utf8"):String(chunk));var parts=__buf.split(/\r?\n/);__buf=parts.pop();for(var i=0;i0){var rem=__buf;__buf="";__pushLine(rem);}rl.close();}if(rl.input&&typeof rl.input.on==="function"){rl.input.on("data",__onData);rl.input.on("end",__onEnd);rl.input.on("close",__onEnd);}rl.setPrompt=function(p){rl._prompt=String(p||"");};rl.getPrompt=function(){return rl._prompt;};rl.prompt=function(){if(!rl._closed&&rl.output&&typeof rl.output.write==="function")rl.output.write(rl._prompt);};rl.write=function(d){if(rl._closed||d===null||d===undefined)return;__onData(d);};rl.pause=function(){rl._paused=true;rl.emit("pause");return rl;};rl.resume=function(){rl._paused=false;rl.emit("resume");return rl;};rl.close=function(){if(rl._closed)return;rl._closed=true;if(rl.input&&typeof rl.input.removeListener==="function"){rl.input.removeListener("data",__onData);rl.input.removeListener("end",__onEnd);rl.input.removeListener("close",__onEnd);}rl.emit("close");while(rl._waiters.length>0)rl._waiters.shift().res({value:undefined,done:true});};rl.question=function(query,optsOrCb,maybeCb){var cb=typeof optsOrCb==="function"?optsOrCb:maybeCb,qOpts=(optsOrCb&&typeof optsOrCb==="object")?optsOrCb:{};if(rl.output&&typeof rl.output.write==="function")rl.output.write(String(query||""));if(isPromises&&typeof cb!=="function"){return new Promise(function(res,rej){if(rl._closed){rej(new Error("readline was closed"));return;}if(qOpts.signal&&qOpts.signal.aborted){rej(qOpts.signal.reason||new Error("AbortError"));return;}function onLine(ans){res(ans);}rl.once("line",onLine);if(qOpts.signal&&typeof qOpts.signal.addEventListener==="function"){qOpts.signal.addEventListener("abort",function(){rl.removeListener("line",onLine);rej(qOpts.signal.reason||new Error("AbortError"));},{once:true});}});}if(typeof cb==="function"){if(qOpts.signal&&qOpts.signal.aborted)return;function onCb(ans){cb(ans);}rl.once("line",onCb);if(qOpts.signal&&typeof qOpts.signal.addEventListener==="function"){qOpts.signal.addEventListener("abort",function(){rl.removeListener("line",onCb);},{once:true});}}};rl[Symbol.asyncIterator]=function(){return{next:function(){if(rl._q.length>0)return Promise.resolve({value:rl._q.shift(),done:false});if(rl._closed)return Promise.resolve({value:undefined,done:true});return new Promise(function(res,rej){rl._waiters.push({res:res,rej:rej});});},return:function(){rl.close();return Promise.resolve({value:undefined,done:true});}};};if(o.signal){if(o.signal.aborted)rl.close();else if(typeof o.signal.addEventListener==="function")o.signal.addEventListener("abort",function(){rl.close();},{once:true});}return rl;}function Interface(input,output,completer,terminal){return __mkRl(input,output,completer,terminal,false);}Interface.prototype=Object.create(EE.prototype);function __ttyOp(stream,cb){if(typeof cb==="function")queueMicrotask(function(){cb(null);});return true;}var rlp={Interface:Interface,createInterface:function(a,b,c,d){return __mkRl(a,b,c,d,true);},Readline:function(s){this.stream=s;this.commit=function(){return Promise.resolve();};this.clearLine=function(){return this;};this.clearScreenDown=function(){return this;};this.cursorTo=function(){return this;};this.moveCursor=function(){return this;};this.rollback=function(){return this;};}};rlp.default=rlp;rlp.__esModule=true;var m={Interface:Interface,createInterface:function(a,b,c,d){return __mkRl(a,b,c,d,false);},clearLine:function(s,dir,cb){return __ttyOp(s,cb);},clearScreenDown:function(s,cb){return __ttyOp(s,cb);},cursorTo:function(s,x,y,cb){return __ttyOp(s,typeof y==="function"?y:cb);},moveCursor:function(s,dx,dy,cb){return __ttyOp(s,cb);},emitKeypressEvents:function(){},promises:rlp};m.default=m;m.__esModule=true;__slice_builtins["readline/promises"]=__slice_builtins["node:readline/promises"]=rlp;return __slice_builtins["readline"]=__slice_builtins["node:readline"]=m;})()"# + } + "readline/promises" | "node:readline/promises" => { + br#"(__slice_builtins["node:readline"]||__slice_load_builtin("node:readline")).promises"# + } + "v8" | "node:v8" => { + br#"(function(){__slice_ensure_shard(5);var m={cachedDataVersionTag:function(){return 20260401;},getHeapStatistics:function(){return{total_heap_size:4194304,total_heap_size_executable:0,total_physical_size:4194304,total_available_size:62914560,used_heap_size:1048576,heap_size_limit:67108864,malloced_memory:65536,peak_malloced_memory:131072,does_zap_garbage:0,number_of_native_contexts:1,number_of_detached_contexts:0};},getHeapSpaceStatistics:function(){return[];},setFlagsFromString:function(){},serialize:function(v){return Buffer.from(JSON.stringify(v),"utf8");},deserialize:function(b){return JSON.parse(Buffer.from(b).toString("utf8"));}};m.default=m;m.__esModule=true;return __slice_builtins["v8"]=__slice_builtins["node:v8"]=m;})()"# + } + "inspector" | "node:inspector" | "inspector/promises" | "node:inspector/promises" => { + br#"(function(){var EE=__slice_builtins["node:events"]||__slice_load_builtin("node:events");function Session(){EE.call(this);}Session.prototype=Object.create(EE.prototype);Session.prototype.connect=function(){};Session.prototype.connectToMainThread=function(){};Session.prototype.disconnect=function(){};Session.prototype.post=function(_m,p,cb){var fn=typeof p==="function"?p:cb;if(typeof fn==="function")queueMicrotask(function(){fn(null,{});});return Promise.resolve({});};var m={Session:Session,open:function(){},close:function(){},url:function(){return undefined;},waitForDebugger:function(){},console:globalThis.console};m.default=m;m.__esModule=true;return __slice_builtins["inspector"]=__slice_builtins["node:inspector"]=__slice_builtins["inspector/promises"]=__slice_builtins["node:inspector/promises"]=m;})()"# + } + "cluster" | "node:cluster" => { + br#"(function(){var EE=__slice_builtins["node:events"]||__slice_load_builtin("node:events"),m=new EE();m.isPrimary=true;m.isMaster=true;m.isWorker=false;m.workers={};m.settings={};m.SCHED_NONE=1;m.SCHED_RR=2;m.schedulingPolicy=2;m.setupPrimary=m.setupMaster=function(s){Object.assign(m.settings,s||{});};m.fork=function(){throw new Error("ERR_CLUSTER_FORK_UNSUPPORTED: Slice isolates use Web Workers / worker_threads instead of OS process fork");};m.disconnect=function(cb){if(typeof cb==="function")queueMicrotask(cb);};m.default=m;m.__esModule=true;return __slice_builtins["cluster"]=__slice_builtins["node:cluster"]=m;})()"# + } + "http2" | "node:http2" => { + br#"(function(){var http=__slice_builtins["node:http"]||__slice_load_builtin("node:http"),constants={NGHTTP2_SESSION_SERVER:0,NGHTTP2_SESSION_CLIENT:1,HTTP2_HEADER_STATUS:":status",HTTP2_HEADER_METHOD:":method",HTTP2_HEADER_AUTHORITY:":authority",HTTP2_HEADER_SCHEME:":scheme",HTTP2_HEADER_PATH:":path",HTTP2_HEADER_CONTENT_TYPE:"content-type",HTTP2_HEADER_CONTENT_LENGTH:"content-length",HTTP2_METHOD_GET:"GET",HTTP2_METHOD_POST:"POST",HTTP_STATUS_OK:200,HTTP_STATUS_CREATED:201,HTTP_STATUS_NO_CONTENT:204,HTTP_STATUS_BAD_REQUEST:400,HTTP_STATUS_UNAUTHORIZED:401,HTTP_STATUS_FORBIDDEN:403,HTTP_STATUS_NOT_FOUND:404,HTTP_STATUS_INTERNAL_SERVER_ERROR:500};function getDefaultSettings(){return{headerTableSize:4096,enablePush:true,initialWindowSize:65535,maxFrameSize:16384,maxConcurrentStreams:4294967295,maxHeaderListSize:65535,enableConnectProtocol:false};}var m={constants:constants,getDefaultSettings:getDefaultSettings,getPackedSettings:function(){__slice_ensure_shard(5);return Buffer.alloc(0);},getUnpackedSettings:function(){return getDefaultSettings();},createServer:http.createServer,createSecureServer:function(opts,cb){return http.createServer(typeof opts==="function"?opts:cb);},connect:function(authority){var EE=__slice_builtins["node:events"]||__slice_load_builtin("node:events"),s=new EE();s.authority=String(authority||"");s.closed=false;s.destroyed=false;s.close=function(cb){s.closed=true;if(typeof cb==="function")queueMicrotask(cb);s.emit("close");};s.destroy=function(){s.destroyed=true;s.close();};return s;}};m.default=m;m.__esModule=true;return __slice_builtins["http2"]=__slice_builtins["node:http2"]=m;})()"# + } + "wasi" | "node:wasi" => { + br#"(function(){function WASI(opts){var o=opts||{};this.args=Array.isArray(o.args)?o.args:[];this.env=o.env||{};this.preopens=o.preopens||{};this.wasiImport={args_get:function(){return 0;},args_sizes_get:function(){return 0;},environ_get:function(){return 0;},environ_sizes_get:function(){return 0;},clock_res_get:function(){return 0;},clock_time_get:function(){return 0;},fd_close:function(){return 0;},fd_fdstat_get:function(){return 0;},fd_seek:function(){return 0;},fd_write:function(){return 0;},fd_read:function(){return 0;},proc_exit:function(c){throw new Error("WASI proc_exit("+c+")");},random_get:function(){return 0;}};}WASI.prototype.getImportObject=function(){return{wasi_snapshot_preview1:this.wasiImport,wasi_unstable:this.wasiImport};};WASI.prototype.start=function(instance){if(instance&&instance.exports&&typeof instance.exports._start==="function")return instance.exports._start();return 0;};WASI.prototype.initialize=function(instance){if(instance&&instance.exports&&typeof instance.exports._initialize==="function")instance.exports._initialize();};var m={WASI:WASI};m.default=m;m.__esModule=true;return __slice_builtins["wasi"]=__slice_builtins["node:wasi"]=m;})()"# } "console" | "node:console" => { br#"(function(){__slice_ensure_shard(6);var c=Object.assign({},globalThis.console);function Console(){return c;}c.Console=Console;c.default=c;c.__esModule=true;return __slice_builtins["console"]=__slice_builtins["node:console"]=c;})()"# diff --git a/crates/slice-engine/src/runtime/boa_realm.rs b/crates/slice-engine/src/runtime/boa_realm.rs index e6c06b1..5851e30 100644 --- a/crates/slice-engine/src/runtime/boa_realm.rs +++ b/crates/slice-engine/src/runtime/boa_realm.rs @@ -190,6 +190,20 @@ pub(crate) fn map_stack_with_active_source(raw_stack: &str) -> String { slice_cas::map_bundled_stack_trace(active_src, raw_stack) } +pub(crate) fn map_error_with_active_source(raw_error: &str) -> String { + let (ptr, len) = BOA_ACTIVE_SOURCE_PTR_LEN.with(|c| c.get()); + if ptr == 0 || len == 0 { + return raw_error.to_string(); + } + // SAFETY: `ActiveSourceSliceGuard` guarantees `(ptr, len)` points to a valid live `&str` + // on the current thread's call stack and restores `prev` before the `&str` lifetime ends. + let active_src = unsafe { + let bytes = std::slice::from_raw_parts(ptr as *const u8, len); + std::str::from_utf8_unchecked(bytes) + }; + slice_cas::map_bundled_error_location(active_src, raw_error) +} + pub(crate) struct SliceJobExecutor { promise_jobs: std::cell::RefCell< std::collections::VecDeque<(boa_engine::job::PromiseJob, Option)>, diff --git a/crates/slice-engine/tests/wasm_vfs_and_module_resolution_tests.rs b/crates/slice-engine/tests/wasm_vfs_and_module_resolution_tests.rs index 117ef6e..93ec652 100644 --- a/crates/slice-engine/tests/wasm_vfs_and_module_resolution_tests.rs +++ b/crates/slice-engine/tests/wasm_vfs_and_module_resolution_tests.rs @@ -718,3 +718,179 @@ runWaveJ().catch((e) => console.log(JSON.stringify({ __err: String(e && e.stack assert_eq!(out["urlPattern"]["p3AlphaReject"], true); assert_eq!(out["urlPattern"]["p3HasRegExp"], true); } + +#[test] +fn test_issues_28_31_33_37_fs_readline_json_fastpath_and_uncaught_source_map() { + use slice_sandbox::CapabilityToken; + + let script = r#" +import fs from "node:fs"; +import fsp from "node:fs/promises"; +import readline from "node:readline"; +import readlinePromises from "node:readline/promises"; +import { PassThrough } from "node:stream"; +import v8 from "node:v8"; +import cluster from "node:cluster"; +import http2 from "node:http2"; +import { WASI } from "node:wasi"; + +async function runAuditSuite() { + // 1. Issue #28: node:fs cpSync, truncateSync, utimesSync, readlinkSync, watch + fs.mkdirSync("/app/src_dir/nested", { recursive: true }); + fs.writeFileSync("/app/src_dir/nested/hello.txt", "hello-world-12345"); + fs.cpSync("/app/src_dir", "/app/dst_dir", { recursive: true }); + const copiedText = fs.readFileSync("/app/dst_dir/nested/hello.txt", "utf8"); + fs.truncateSync("/app/dst_dir/nested/hello.txt", 5); + const truncatedText = fs.readFileSync("/app/dst_dir/nested/hello.txt", "utf8"); + fs.utimesSync("/app/dst_dir/nested/hello.txt", 1700000000, 1700000000); + fs.symlinkSync("/app/dst_dir/nested/hello.txt", "/app/dst_dir/link.txt"); + const linkTarget = fs.readlinkSync("/app/dst_dir/link.txt"); + + let watchEvents: string[] = []; + const watcher = fs.watch("/app/dst_dir/nested/hello.txt", (evt, filename) => { + watchEvents.push(evt + ":" + filename); + }); + fs.writeFileSync("/app/dst_dir/nested/hello.txt", "updated!"); + watcher.close(); + + await fsp.cp("/app/dst_dir/nested/hello.txt", "/app/dst_dir/async_copy.txt"); + await fsp.truncate("/app/dst_dir/async_copy.txt", 4); + const asyncTrunc = await fsp.readFile("/app/dst_dir/async_copy.txt", "utf8"); + + // 2. Issue #31: node:readline & node:readline/promises + core shims + const input1 = new PassThrough(); + const rl1 = readline.createInterface({ input: input1 }); + const lines1: string[] = []; + rl1.on("line", (l: string) => lines1.push(l)); + input1.end("alpha\nbeta\ngamma\n"); + await new Promise((r) => setTimeout(r, 5)); + + const input2 = new PassThrough(); + const rl2 = readlinePromises.createInterface({ input: input2 }); + const qPromise = rl2.question("Prompt> "); + input2.write("answer-42\n"); + const qAnswer = await qPromise; + rl2.close(); + + const heapStats = v8.getHeapStatistics(); + const wasiInst = new WASI({ args: ["app"] }); + + // 3. Issue #37: JSON.stringify fast path & sub-ms performance.now() + const t0 = performance.now(); + const complexObj = { + id: 101, + active: true, + nil: null, + undef: undefined, + fnVal: () => 1, + symVal: Symbol("skip"), + text: "quote\"backslash\\newline\ntab\tctrl\x01", + ints: [1, 2, -3, 0, 42], + floats: [1.5, -0.25, 3.125], + mixed: ["a", undefined, () => {}, null, { k: "v" }], + customToJson: { + toJSON() { + return "custom-to-json-ok"; + }, + }, + }; + const jsonFast = JSON.stringify(complexObj); + const jsonPretty = JSON.stringify({ a: 1 }, null, 2); + let cyclicThrew = false; + const cyc: any = { a: 1 }; + cyc.self = cyc; + try { + JSON.stringify(cyc); + } catch (e: any) { + cyclicThrew = e instanceof TypeError; + } + const t1 = performance.now(); + + console.log(JSON.stringify({ + fs: { + copiedText, + truncatedText, + linkTarget, + watchEvents, + asyncTrunc, + }, + readline: { + lines1, + qAnswer, + v8Ok: typeof heapStats.total_heap_size === "number", + clusterPrimary: cluster.isPrimary, + http2StatusOk: http2.constants.HTTP_STATUS_OK === 200, + wasiOk: typeof wasiInst.wasiImport.proc_exit === "function", + }, + json: { + parsedFast: JSON.parse(jsonFast), + prettyHasNewline: jsonPretty.includes("\n \"a\": 1"), + cyclicThrew, + perfDeltaValid: t1 >= t0, + }, + })); +} +runAuditSuite().catch((e) => console.log(JSON.stringify({ __err: String(e && e.stack || e) }))); +"#; + + let test_dir = + std::env::temp_dir().join(format!("slice_issues_audit_test_{}", std::process::id())); + let _ = std::fs::remove_dir_all(&test_dir); + std::fs::create_dir_all(&test_dir).unwrap(); + let entry_path = test_dir.join("index.ts"); + std::fs::write(&entry_path, script).unwrap(); + let bundled = + slice_cas::bundle_entrypoint_with_deps(&entry_path).expect("bundle audit suite script"); + let _ = std::fs::remove_dir_all(&test_dir); + + let caps = CapabilityToken::pure_compute() + .with_read_prefix("/app") + .with_write_prefix("/app"); + let m = run_source_isolated("issues-audit-tenant", &bundled, caps, 2_000_000, 16 * 1024 * 1024) + .expect("issues-audit execution"); + let out: serde_json::Value = serde_json::from_str(&m.stdout[0]).expect("parse audit json"); + assert!(out.get("__err").is_none(), "audit suite error: {}", out); + + assert_eq!(out["fs"]["copiedText"], "hello-world-12345"); + assert_eq!(out["fs"]["truncatedText"], "hello"); + assert_eq!(out["fs"]["linkTarget"], "/app/dst_dir/nested/hello.txt"); + assert_eq!(out["fs"]["watchEvents"][0], "change:hello.txt"); + assert_eq!(out["fs"]["asyncTrunc"], "upda"); + + assert_eq!( + out["readline"]["lines1"], + serde_json::json!(["alpha", "beta", "gamma"]) + ); + assert_eq!(out["readline"]["qAnswer"], "answer-42"); + assert_eq!(out["readline"]["v8Ok"], true); + assert_eq!(out["readline"]["clusterPrimary"], true); + assert_eq!(out["readline"]["http2StatusOk"], true); + assert_eq!(out["readline"]["wasiOk"], true); + + assert_eq!(out["json"]["parsedFast"]["id"], 101); + assert_eq!( + out["json"]["parsedFast"]["text"], + "quote\"backslash\\newline\ntab\tctrl\x01" + ); + assert_eq!( + out["json"]["parsedFast"]["ints"], + serde_json::json!([1, 2, -3, 0, 42]) + ); + assert_eq!( + out["json"]["parsedFast"]["floats"], + serde_json::json!([1.5, -0.25, 3.125]) + ); + assert_eq!( + out["json"]["parsedFast"]["mixed"], + serde_json::json!(["a", null, null, null, {"k": "v"}]) + ); + assert_eq!( + out["json"]["parsedFast"]["customToJson"], + "custom-to-json-ok" + ); + assert!(out["json"]["parsedFast"].get("undef").is_none()); + assert!(out["json"]["parsedFast"].get("fnVal").is_none()); + assert_eq!(out["json"]["prettyHasNewline"], true); + assert_eq!(out["json"]["cyclicThrew"], true); + assert_eq!(out["json"]["perfDeltaValid"], true); +} diff --git a/docs/system/08_benchmarks_and_comparisons.md b/docs/system/08_benchmarks_and_comparisons.md index d7a17d2..60af6c9 100644 --- a/docs/system/08_benchmarks_and_comparisons.md +++ b/docs/system/08_benchmarks_and_comparisons.md @@ -130,7 +130,7 @@ Using `slice microvm-bench --tenants=1000` and `slice verify-security`, we spawn ## 5. Folder-Based Real-Life Production Applications, External NPM Libraries & Disk I/O Benchmarks (`tests/apps/`) -To validate Slice on modern folder-based production TypeScript applications using multi-file ESM/CommonJS module trees, real third-party `node_modules/` libraries (`semver@7.6.3`, `ms@2.1.3`, `ini@4.1.3`, `fast-querystring@1.1.2`, `cookie@0.6.0`/`1.0.2`, `bytes@3.1.2`, `flatted@3.3.1`, `dlv@1.1.3`, `dset@3.1.3`, `mitt@3.0.1`), FIPS-180-4 SHA-256/SHA-512 & RFC-2104 HMAC cryptography (`node:crypto` & WebCrypto `crypto.subtle`), WhatWG Streams, `Buffer` binary wire framing, and real disk I/O (`node:fs`, `node:path`, `node:os`), we built [`tests/`](../../tests/README.md) comparing Slice against the **absolute latest official releases** of **Bun (`v1.4.4`)**, **Deno (`v2.9.8`)**, and **Node.js (`v26.12.1`)** across **20 production folder applications**: +To validate Slice on modern folder-based production TypeScript applications using multi-file ESM/CommonJS module trees, real third-party `node_modules/` libraries (`semver@7.6.3`, `ms@2.1.3`, `ini@4.1.3`, `fast-querystring@1.1.2`, `cookie@0.6.0`/`1.0.2`, `bytes@3.1.2`, `flatted@3.3.1`, `dlv@1.1.3`, `dset@3.1.3`, `mitt@3.0.1`), FIPS-180-4 SHA-256/SHA-512 & RFC-2104 HMAC cryptography (`node:crypto` & WebCrypto `crypto.subtle`), WhatWG Streams, `Buffer` binary wire framing, and real disk I/O (`node:fs`, `node:path`, `node:os`), we built [`tests/`](../../tests/README.md) comparing Slice against **Bun (`v1.3.10` / `v1.3.14`)**, **Deno (`v2.7.5` / `v2.8.3`)**, and **Node.js (`v25.8.1` / `v22.22.3`)** across **32 production folder applications, framework suites (Hono v4, itty-router + UnJS Nitro, SvelteKit 2 + Svelte 5 SSR), and multi-tenant case studies** (see [`tests/BENCHMARKS.md`](../../tests/BENCHMARKS.md) for the latest full 32-workload matrix): 1. **App 1 ([`apps/01-fintech-checkout/`](../../tests/apps/01-fintech-checkout/src/index.ts)):** Multi-file TypeScript E-Commerce & Fintech Checkout Engine (`types.ts`, `audit_crypto.ts`, `pricing_engine.ts`, `index.ts`) with `node:crypto` SHA-256 receipt signing over 50 checkout orders. 2. **App 2 ([`apps/02-npm-ecosystem-suite/`](../../tests/apps/02-npm-ecosystem-suite/src/index.ts)):** External NPM Ecosystem Suite (`release_planner.ts`, `config_loader.ts`, `index.ts`) bundling and executing `semver@7.6.3`, `ms@2.1.3`, and `ini@4.1.3` from `node_modules/` across 20 service release manifests and cluster SLA configs. diff --git a/vendor/boa_engine/SLICE_PATCH.md b/vendor/boa_engine/SLICE_PATCH.md index 84e901e..6906005 100644 --- a/vendor/boa_engine/SLICE_PATCH.md +++ b/vendor/boa_engine/SLICE_PATCH.md @@ -21,13 +21,16 @@ By serializing the compiled `Gc` tree and global `Scope` bindings int ## 2. Modified Files -Five files in `vendor/boa_engine` differ from upstream `boa_engine v0.22.0`: -- [`vendor/boa_engine/src/script.rs`](./src/script.rs): +Nine files in `vendor/boa_engine` differ from upstream `boa_engine v0.22.0`: +- [`vendor/boa_engine/src/script.rs`](./src/script.rs) & [`vendor/boa_engine/src/slice_precompile.rs`](./src/slice_precompile.rs): - `Script::compile_to_slicebc(&self, context: &mut Context) -> JsResult>` - `Script::from_slicebc_bytes(bytes: &[u8], context: &mut Context) -> Option` - - Internal recursive helpers `encode_codeblock` / `decode_codeblock` (including bytecode-to-line `SourceMap` entries) and `write_js_string` / `read_js_string`. + - Internal recursive helpers `encode_codeblock` / `decode_codeblock` (including bytecode-to-line `SourceMap` entries and deferred `0x11` function source spans) and `write_js_string` / `read_js_string`. - [`vendor/boa_engine/src/builtins/json/mod.rs`](./src/builtins/json/mod.rs): - - `Json::try_fast_parse_json_str` (`JsonSeed` streaming `serde::de::DeserializeSeed`): Direct zero-intermediate-tree `serde_json::Deserializer::from_str -> JsValue` materialization fast-path in `JSON.parse` when no `reviver` callback is supplied, preserving exact ECMAScript source key insertion order while avoiding `boa_parser` + `ByteCompiler` + VM execution on every JSON payload. + - `Json::try_fast_parse_json_str` (`JsonSeed` streaming `serde::de::DeserializeSeed`): Direct zero-intermediate-tree `serde_json::Deserializer::from_str -> JsValue` materialization fast-path in `JSON.parse` when no `reviver` callback is supplied (with zero-copy ASCII `JsStrVariant::Latin1` input borrowing and Latin1 `JsString` output), preserving exact ECMAScript source key insertion order while avoiding `boa_parser` + `ByteCompiler` + VM execution on every JSON payload. + - `Json::try_fast_stringify`: Direct single-buffer `Vec` serializer fast-path in `JSON.stringify` when no `replacer` or `space` argument is supplied, traversing ordinary `JsObject`s (via `Shape::with_property_keys` + direct storage slots) and dense `Array`s (`DenseI32`, `DenseF64`, `DenseElement`) with `ryu_js` number formatting and automatic fallback for `toJSON`, getters, exotic objects, or unpaired surrogates. +- [`vendor/boa_engine/src/object/shape/mod.rs`](./src/object/shape/mod.rs), [`vendor/boa_engine/src/object/shape/shared_shape/mod.rs`](./src/object/shape/shared_shape/mod.rs), & [`vendor/boa_engine/src/object/shape/unique_shape.rs`](./src/object/shape/unique_shape.rs): + - `Shape::with_property_keys`: Zero-allocation slice/iterator callback over ordinary object property keys for `Json::try_fast_stringify`. - [`vendor/boa_engine/src/vm/inline_cache/mod.rs`](./src/vm/inline_cache/mod.rs): - `InlineCache::mono_shape_addr`, `InlineCache::mono_slot`, and `InlineCache::get_fast(&self, shape: &Shape) -> Option<(Option, Slot)>`: Zero-borrow monomorphic fast-path for own-property `Shape -> Slot` hits without locking `GcRefCell` or upgrading `WeakGc` pointers, with automatic polymorphic (`PIC_CAPACITY = 4`) and megamorphic fallback. - [`vendor/boa_engine/src/vm/opcode/get/property.rs`](./src/vm/opcode/get/property.rs) & [`vendor/boa_engine/src/vm/opcode/set/property.rs`](./src/vm/opcode/set/property.rs): diff --git a/vendor/boa_engine/src/builtins/json/mod.rs b/vendor/boa_engine/src/builtins/json/mod.rs index fd83ac7..a2684ce 100644 --- a/vendor/boa_engine/src/builtins/json/mod.rs +++ b/vendor/boa_engine/src/builtins/json/mod.rs @@ -237,13 +237,11 @@ impl Json { /// [mdn]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse pub(crate) fn parse(_: &JsValue, args: &[JsValue], context: &mut Context) -> JsResult { // 1. Let jsonString be ? ToString(text). - let json_string = args + let js_str = args .first() .cloned() .unwrap_or_default() - .to_string(context)? - .to_std_string() - .map_err(|e| JsNativeError::syntax().with_message(e.to_string()))?; + .to_string(context)?; // Check if a reviver is provided, to determine if we need source text tracking let has_reviver = args.get_or_undefined(1).is_callable(); @@ -252,11 +250,25 @@ impl Json { // when no `reviver` callback is supplied, preserving exact ECMAScript property insertion // order and bypassing both intermediate `serde_json::Value` allocations and JS compilation. if !has_reviver { + if let boa_string::JsStrVariant::Latin1(bytes) = js_str.as_str().variant() { + if let Ok(ascii_str) = std::str::from_utf8(bytes) { + if let Some(js_val) = Self::try_fast_parse_json_str(ascii_str, context)? { + return Ok(js_val); + } + } + } + let json_string = js_str + .to_std_string() + .map_err(|e| JsNativeError::syntax().with_message(e.to_string()))?; if let Some(js_val) = Self::try_fast_parse_json_str(&json_string, context)? { return Ok(js_val); } } + let json_string = js_str + .to_std_string() + .map_err(|e| JsNativeError::syntax().with_message(e.to_string()))?; + // 2. Parse ! StringToCodePoints(jsonString) as a JSON text as specified in ECMA-404. // Throw a SyntaxError exception if it is not a valid JSON text as defined in that specification. serde_json::from_str::(&json_string) @@ -849,6 +861,13 @@ impl Json { js_string!() }; + // SLICE PATCH (P03): Single-buffer `try_fast_stringify` when no `replacer` or `gap` is supplied. + if replacer_function.is_none() && property_list.is_none() && gap.is_empty() { + if let Some(fast_val) = Self::try_fast_stringify(args.get_or_undefined(0), context)? { + return Ok(fast_val); + } + } + // 9. Let wrapper be ! OrdinaryObjectCreate(%Object.prototype%). let wrapper = JsObject::with_object_proto(context.intrinsics()); @@ -874,6 +893,406 @@ impl Json { ) } + /// SLICE PATCH (P03): Direct single-buffer JSON serializer for ordinary objects, dense arrays, + /// strings, numbers, booleans, and `null` when no `replacer` or `space` is provided. + /// + /// Eliminates wrapper object creation, per-property `get_v("toJSON")` prototype walks, + /// `enumerable_own_property_names` `Vec` + `Vec` allocations, and per-string + /// `Vec` allocations. Falls back (`Ok(None)`) whenever any object has `toJSON`, accessors, + /// non-standard prototypes, indexed properties on non-arrays, sparse arrays, or exotic slots. + fn try_fast_stringify(value: &JsValue, context: &mut Context) -> JsResult> { + use crate::object::{IndexedProperties, shape::slot::SlotAttributes}; + use crate::property::PropertyKey; + use crate::value::JsVariant; + + enum FastStatus { + Written, + UndefinedOrSkipped, + Fallback, + } + + #[inline] + fn write_i32(v: i32, buf: &mut Vec) { + if v == 0 { + buf.push(b'0'); + return; + } + let mut n = i64::from(v); + if n < 0 { + buf.push(b'-'); + n = -n; + } + let mut tmp = [0u8; 12]; + let mut pos = tmp.len(); + while n > 0 { + pos -= 1; + tmp[pos] = b'0' + (n % 10) as u8; + n /= 10; + } + buf.extend_from_slice(&tmp[pos..]); + } + + #[inline] + fn write_f64(n: f64, buf: &mut Vec) { + if n.is_finite() { + let mut ryu_buf = ryu_js::Buffer::new(); + buf.extend_from_slice(ryu_buf.format_finite(n).as_bytes()); + } else { + buf.extend_from_slice(b"null"); + } + } + + #[inline] + fn write_js_str(s: &JsString, buf: &mut Vec, all_ascii: &mut bool) -> bool { + const HEX: &[u8; 16] = b"0123456789abcdef"; + match s.as_str().variant() { + boa_string::JsStrVariant::Latin1(bytes) => { + buf.push(b'"'); + let mut start = 0usize; + for (i, &b) in bytes.iter().enumerate() { + if b < 0x20 || b == b'"' || b == b'\\' || b >= 0x80 { + if i > start { + buf.extend_from_slice(&bytes[start..i]); + } + match b { + b'"' => buf.extend_from_slice(b"\\\""), + b'\\' => buf.extend_from_slice(b"\\\\"), + 0x08 => buf.extend_from_slice(b"\\b"), + 0x09 => buf.extend_from_slice(b"\\t"), + 0x0A => buf.extend_from_slice(b"\\n"), + 0x0C => buf.extend_from_slice(b"\\f"), + 0x0D => buf.extend_from_slice(b"\\r"), + b if b < 0x20 => { + buf.extend_from_slice(&[ + b'\\', + b'u', + b'0', + b'0', + HEX[(b >> 4) as usize], + HEX[(b & 0xF) as usize], + ]); + } + b => { + *all_ascii = false; + buf.push(0xC0 | (b >> 6)); + buf.push(0x80 | (b & 0x3F)); + } + } + start = i + 1; + } + } + if start < bytes.len() { + buf.extend_from_slice(&bytes[start..]); + } + buf.push(b'"'); + true + } + boa_string::JsStrVariant::Utf16(units) => { + buf.push(b'"'); + let mut utf8_tmp = [0u8; 4]; + for decoded in char::decode_utf16(units.iter().copied()) { + let Ok(c) = decoded else { + return false; + }; + match c { + '"' => buf.extend_from_slice(b"\\\""), + '\\' => buf.extend_from_slice(b"\\\\"), + '\u{0008}' => buf.extend_from_slice(b"\\b"), + '\u{0009}' => buf.extend_from_slice(b"\\t"), + '\u{000A}' => buf.extend_from_slice(b"\\n"), + '\u{000C}' => buf.extend_from_slice(b"\\f"), + '\u{000D}' => buf.extend_from_slice(b"\\r"), + c if c < '\u{0020}' => { + let b = c as u8; + buf.extend_from_slice(&[ + b'\\', + b'u', + b'0', + b'0', + HEX[(b >> 4) as usize], + HEX[(b & 0xF) as usize], + ]); + } + c if c.is_ascii() => { + buf.push(c as u8); + } + c => { + *all_ascii = false; + let enc = c.encode_utf8(&mut utf8_tmp); + buf.extend_from_slice(enc.as_bytes()); + } + } + } + buf.push(b'"'); + true + } + } + } + + #[allow(clippy::too_many_arguments)] + fn write_val( + val: &JsValue, + buf: &mut Vec, + all_ascii: &mut bool, + stack: &mut Vec, + obj_proto: &JsObject, + arr_proto: &JsObject, + arr_template_shape_addr: usize, + to_json_key: &PropertyKey, + ) -> JsResult { + match val.variant() { + JsVariant::Null => { + buf.extend_from_slice(b"null"); + Ok(FastStatus::Written) + } + JsVariant::Boolean(b) => { + buf.extend_from_slice(if b { b"true" } else { b"false" }); + Ok(FastStatus::Written) + } + JsVariant::Integer32(i) => { + write_i32(i, buf); + Ok(FastStatus::Written) + } + JsVariant::Float64(f) => { + write_f64(f, buf); + Ok(FastStatus::Written) + } + JsVariant::String(s) => { + if write_js_str(&s, buf, all_ascii) { + Ok(FastStatus::Written) + } else { + Ok(FastStatus::Fallback) + } + } + JsVariant::Undefined | JsVariant::Symbol(_) => Ok(FastStatus::UndefinedOrSkipped), + JsVariant::BigInt(_) => Ok(FastStatus::Fallback), + JsVariant::Object(obj) => { + let borrow = obj.borrow(); + let props = borrow.properties(); + if props.shape.lookup(to_json_key).is_some() { + return Ok(FastStatus::Fallback); + } + if obj.is_callable() { + return Ok(FastStatus::UndefinedOrSkipped); + } + let addr = std::ptr::from_ref(obj.as_ref()).addr(); + if stack.contains(&addr) { + return Err(JsNativeError::typ() + .with_message("cyclic object value") + .into()); + } + + if obj.is_array() { + if props.shape.to_addr_usize() != arr_template_shape_addr { + if let Some(ref p) = props.shape.prototype() { + if p != arr_proto { + return Ok(FastStatus::Fallback); + } + } else { + return Ok(FastStatus::Fallback); + } + } + let Some(len_val) = props.storage.first() else { + return Ok(FastStatus::Fallback); + }; + let arr_len = match len_val.variant() { + JsVariant::Integer32(i) if i >= 0 => i as usize, + JsVariant::Float64(f) if f >= 0.0 && f <= (u32::MAX as f64) => { + f as usize + } + _ => return Ok(FastStatus::Fallback), + }; + match &props.indexed_properties { + IndexedProperties::DenseI32(vec) if vec.len() == arr_len => { + buf.push(b'['); + for (idx, &v) in vec.iter().enumerate() { + if idx > 0 { + buf.push(b','); + } + write_i32(v, buf); + } + buf.push(b']'); + return Ok(FastStatus::Written); + } + IndexedProperties::DenseF64(vec) if vec.len() == arr_len => { + buf.push(b'['); + for (idx, &v) in vec.iter().enumerate() { + if idx > 0 { + buf.push(b','); + } + write_f64(v, buf); + } + buf.push(b']'); + return Ok(FastStatus::Written); + } + IndexedProperties::DenseElement(vec) if vec.len() == arr_len => { + stack.push(addr); + buf.push(b'['); + for (idx, elem) in vec.iter().enumerate() { + if idx > 0 { + buf.push(b','); + } + match write_val( + elem, + buf, + all_ascii, + stack, + obj_proto, + arr_proto, + arr_template_shape_addr, + to_json_key, + ) { + Ok(FastStatus::Written) => {} + Ok(FastStatus::UndefinedOrSkipped) => { + buf.extend_from_slice(b"null"); + } + Ok(FastStatus::Fallback) => { + stack.pop(); + return Ok(FastStatus::Fallback); + } + Err(e) => { + stack.pop(); + return Err(e); + } + } + } + buf.push(b']'); + stack.pop(); + return Ok(FastStatus::Written); + } + _ if arr_len == 0 => { + buf.extend_from_slice(b"[]"); + return Ok(FastStatus::Written); + } + _ => return Ok(FastStatus::Fallback), + } + } + + let indexed_empty = match &props.indexed_properties { + IndexedProperties::DenseI32(v) => v.is_empty(), + IndexedProperties::DenseF64(v) => v.is_empty(), + IndexedProperties::DenseElement(v) => v.is_empty(), + IndexedProperties::SparseElement(m) => m.is_empty(), + IndexedProperties::SparseProperty(m) => m.is_empty(), + }; + if !obj.is_ordinary() || !indexed_empty { + return Ok(FastStatus::Fallback); + } + if let Some(ref p) = props.shape.prototype() { + if p != obj_proto { + return Ok(FastStatus::Fallback); + } + } + + stack.push(addr); + let res = props.shape.with_property_keys(|keys| -> JsResult { + buf.push(b'{'); + let mut first = true; + for (key, slot) in keys { + if slot.attributes.is_accessor_descriptor() { + return Ok(FastStatus::Fallback); + } + if !slot.attributes.contains(SlotAttributes::ENUMERABLE) { + continue; + } + let PropertyKey::String(key_str) = key else { + continue; + }; + let prop_val = &props.storage[slot.index as usize]; + match prop_val.variant() { + JsVariant::Undefined | JsVariant::Symbol(_) => continue, + JsVariant::Object(ref child_obj) if child_obj.is_callable() => { + if child_obj + .borrow() + .properties() + .shape + .lookup(to_json_key) + .is_some() + { + return Ok(FastStatus::Fallback); + } + continue; + } + _ => {} + } + if !first { + buf.push(b','); + } + if !write_js_str(key_str, buf, all_ascii) { + return Ok(FastStatus::Fallback); + } + buf.push(b':'); + match write_val( + prop_val, + buf, + all_ascii, + stack, + obj_proto, + arr_proto, + arr_template_shape_addr, + to_json_key, + )? { + FastStatus::Written => { + first = false; + } + FastStatus::UndefinedOrSkipped | FastStatus::Fallback => { + return Ok(FastStatus::Fallback); + } + } + } + buf.push(b'}'); + Ok(FastStatus::Written) + }); + stack.pop(); + res + } + } + } + + let to_json_key = PropertyKey::from(js_string!("toJSON")); + let obj_proto = context.intrinsics().constructors().object().prototype(); + let arr_proto = context.intrinsics().constructors().array().prototype(); + if obj_proto.borrow().properties().shape.lookup(&to_json_key).is_some() + || arr_proto.borrow().properties().shape.lookup(&to_json_key).is_some() + { + return Ok(None); + } + let arr_template_shape_addr = context + .intrinsics() + .templates() + .array() + .shape() + .to_addr_usize(); + + let mut buf = Vec::with_capacity(128); + let mut all_ascii = true; + let mut stack = Vec::with_capacity(8); + + match write_val( + value, + &mut buf, + &mut all_ascii, + &mut stack, + &obj_proto, + &arr_proto, + arr_template_shape_addr, + &to_json_key, + )? { + FastStatus::Written => { + if all_ascii { + Ok(Some(JsValue::new(JsString::from( + boa_string::JsStr::latin1(&buf), + )))) + } else { + let s = std::str::from_utf8(&buf).unwrap_or(""); + Ok(Some(JsValue::new(js_string!(s)))) + } + } + FastStatus::UndefinedOrSkipped => Ok(Some(JsValue::undefined())), + FastStatus::Fallback => Ok(None), + } + } + /// `25.5.2.1 SerializeJSONProperty ( state, key, holder )` /// /// More information: diff --git a/vendor/boa_engine/src/object/shape/mod.rs b/vendor/boa_engine/src/object/shape/mod.rs index bfb7b51..ea27ece 100644 --- a/vendor/boa_engine/src/object/shape/mod.rs +++ b/vendor/boa_engine/src/object/shape/mod.rs @@ -203,6 +203,15 @@ impl Shape { } } + /// Invokes `f` with a zero-allocation slice of `(PropertyKey, Slot)` in insertion order. + #[inline] + pub(crate) fn with_property_keys(&self, f: impl FnOnce(&[(PropertyKey, Slot)]) -> R) -> R { + match &self.inner { + Inner::Shared(shape) => shape.with_property_keys(f), + Inner::Unique(shape) => shape.with_property_keys(f), + } + } + /// Return location in memory of the [`Shape`]. #[inline] #[must_use] diff --git a/vendor/boa_engine/src/object/shape/shared_shape/mod.rs b/vendor/boa_engine/src/object/shape/shared_shape/mod.rs index 13ed5de..2cca315 100644 --- a/vendor/boa_engine/src/object/shape/shared_shape/mod.rs +++ b/vendor/boa_engine/src/object/shape/shared_shape/mod.rs @@ -455,6 +455,14 @@ impl SharedShape { property_table.keys_cloned_n(self.property_count()) } + /// Invokes `f` with a zero-allocation slice of `(PropertyKey, Slot)` in creation order. + #[inline] + pub(crate) fn with_property_keys(&self, f: impl FnOnce(&[(PropertyKey, Slot)]) -> R) -> R { + let property_table = self.property_table().inner().borrow(); + let n = (self.property_count() as usize).min(property_table.keys.len()); + f(&property_table.keys[..n]) + } + /// Returns a new [`UniqueShape`] with the properties of the [`SharedShape`]. pub(crate) fn to_unique(&self) -> UniqueShape { UniqueShape::new( diff --git a/vendor/boa_engine/src/object/shape/unique_shape.rs b/vendor/boa_engine/src/object/shape/unique_shape.rs index 915f278..34c1fd4 100644 --- a/vendor/boa_engine/src/object/shape/unique_shape.rs +++ b/vendor/boa_engine/src/object/shape/unique_shape.rs @@ -233,6 +233,13 @@ impl UniqueShape { self.property_table().borrow().keys() } + /// Invokes `f` with a zero-allocation slice of `(PropertyKey, Slot)` in creation order. + #[inline] + pub(crate) fn with_property_keys(&self, f: impl FnOnce(&[(PropertyKey, Slot)]) -> R) -> R { + let property_table = self.property_table().borrow(); + f(&property_table.keys) + } + /// Return location in memory of the [`UniqueShape`]. pub(crate) fn to_addr_usize(&self) -> usize { let ptr: *const _ = self.inner.as_ref(); From 97980c03a574d65b2821064701f54ca3a5aa63c9 Mon Sep 17 00:00:00 2001 From: SIKTEC Date: Mon, 9 Nov 2026 17:58:52 -0500 Subject: [PATCH 2/3] docs,bench: update 33-workload benchmark report and tables --- README.md | 42 +- .../09_benchmarks_testing_and_docker_suite.md | 42 +- tests/README.md | 42 +- ...ench_v0.10.5_20261109_225249Z_47bfa6b.json | 789 +++++++++++++++++ .../bench_v0.10.5_20261109_225249Z_47bfa6b.md | 113 +++ tests/reports/latest.json | 826 +++++++++--------- tests/reports/latest.md | 122 +-- 7 files changed, 1439 insertions(+), 537 deletions(-) create mode 100644 tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.json create mode 100644 tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md diff --git a/README.md b/README.md index 65fab5b..14a7fcc 100644 --- a/README.md +++ b/README.md @@ -12,45 +12,45 @@ ## Verified Benchmark Overview (Linux `x86_64` Docker & Windows `x86_64`) -> **Latest Verified Benchmark Report:** **[`tests/reports/latest.md`](./tests/reports/latest.md)** (Archive: [`bench_v0.10.5_20261109_202907Z_a0c723e.md`](./tests/reports/bench_v0.10.5_20261109_202907Z_a0c723e.md)) -> **Provenance:** Slice `v0.10.5` (`a0c723e`) · Generated `2026-11-09T20:29:07Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` +> **Latest Verified Benchmark Report:** **[`tests/reports/latest.md`](./tests/reports/latest.md)** (Archive: [`bench_v0.10.5_20261109_225249Z_47bfa6b.md`](./tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md)) +> **Provenance:** Slice `v0.10.5` (`47bfa6b`) · Generated `2026-11-09T22:52:49Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` > **Scorecard Across All 33 Production Workloads:** Beats **Deno (`v2.9.8`)** on **33/33**, **Node.js (`v27.0.0-alpha.0.0.0`)** on **33/33**, **Bun (`v1.4.4`)** on **30/33** cold one-shot, and **all 3 runtimes on 33/33 workloads in `--warm` pooled execution**. #### 1. Core Architecture, HTTP Throughput & 1,000-Tenant MicroVM Density | Metric | Slice (`v0.10.5` `SLICEBC\x01`) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Advantage | | :--- | :---: | :---: | :---: | :---: | :--- | -| **In-Process Isolate Cold Start (`P50` / `P99`)** | **`1.24 us` / `1.61 us`** | N/A (Process/VM) | N/A (Process/VM) | N/A (Process/VM) | **~120,000x faster than 125ms Firecracker VM** | -| **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.51 ms` (`10.07 MB` RSS)** | > 5,000 ms | > 15,000 ms | > 30,000 ms | **> 3,900x faster / ~32,000x denser** | +| **In-Process Isolate Cold Start (`P50` / `P99`)** | **`1.05 us` / `1.80 us`** | N/A (Process/VM) | N/A (Process/VM) | N/A (Process/VM) | **~120,000x faster than 125ms Firecracker VM** | +| **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.37 ms` (`9.70 MB` RSS)** | > 5,000 ms | > 15,000 ms | > 30,000 ms | **> 3,900x faster / ~32,000x denser** | | **500-Module Monorepo Cold Boot (`stat()` Calls)** | **`3.41 ms` (`0 stat()`)** | `12.72 ms` (`500+ stat`) | `41.80 ms` (`500+ stat`) | `70.38 ms` (`1,500+ stat`) | **`3.7x` faster than Bun / `20.6x` Node.js** | -| **HTTP/1.1 Keep-Alive Throughput (`16k` Reqs)** | **`148,407 req/s`** (Tier-0)
**`145,839 req/s`** (Tier-1) | `97,987 req/s` | `100,099 req/s` | `55,977 req/s` | **`1.51x` (`Tier-0`) / `1.49x` (`Tier-1`) vs `Bun.serve`** | -| **Peak Process Memory (`Max RSS` Across Suite)** | **`13.38 – 21.50 MB`** | `27.25 – 41.00 MB` | `45.47 – 61.39 MB` | `69.90 – 92.50 MB` | **`2.0x–2.3x` less than Bun / `4.3x–6.8x` less than Node** | +| **HTTP/1.1 Keep-Alive Throughput (`16k` Reqs)** | **`137,020 req/s`** (Tier-0)
**`125,831 req/s`** (Tier-1) | `72,924 req/s` | `87,455 req/s` | `45,868 req/s` | **`1.88x` (`Tier-0`) / `1.73x` (`Tier-1`) vs `Bun.serve`** | +| **Peak Process Memory (`Max RSS` Across Suite)** | **`13.25 – 21.75 MB`** | `25.88 – 40.83 MB` | `45.47 – 62.24 MB` | `70.03 – 92.88 MB` | **`2.0x–2.3x` less than Bun / `4.3x–6.8x` less than Node** | | **Multi-Tenant Security Containment** | **`5 / 5 PASS`** (OCap+SES+Fuel+DLP) | `0 / 5` (Ambient) | `2 / 5` (Coarse CLI) | `0 / 5` (Ambient) | **Hardware & Language Zero-Trust Isolation** | #### 2. Real-Life Workload Summary by Domain (All 33 Workloads Aggregated) | Workload Domain & Stack Coverage | Suites | Slice Cold `.cas` Avg (Range) | Slice Warm (`--warm`) Avg | Bun `v1.4.4` Avg | Deno `v2.9.8` Avg | Node.js `v27.0.0-alpha.0.0.0` Avg | Category Speedup vs Bun / Node.js | | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :--- | -| **Core Edge, Auth & Crypto (`Apps 01, 04, 05, 16`)**
Multi-file TS, SHA-256/HMAC, JWT/OAuth2, `.env` Auto-DLP | `4` | **`8.11 ms`** (`6.21–10.65 ms`) | **`2.68 ms`** | `15.18 ms` | `44.73 ms` | `64.32 ms` | **`1.87x Bun` (`5.66x` Warm) / `7.93x Node`** | -| **NPM Ecosystem, AST & Disk I/O (`Apps 02, 03, 06, 07, 08, 20`)**
`semver`, `flatted`, `dlv`/`dset`, `mitt`, 10-Shard JSONL I/O, `Buffer` | `6` | **`11.85 ms`** (`8.04–14.66 ms`) | **`3.87 ms`** | `17.63 ms` | `51.32 ms` | `67.38 ms` | **`1.49x Bun` (`4.55x` Warm) / `5.69x Node`** | -| **WinterTC Web Standards, Fetch Mesh & DLP (`Apps 09–14, 17–19`)**
`Request`/`Response`, Static CDN `304`, SSE, Live `fetch`, WebCrypto | `9` | **`15.73 ms`** (`8.35–30.83 ms`) | **`8.25 ms`** | `19.22 ms` | `55.05 ms` | `97.59 ms` | **`1.22x Bun` (`2.33x` Warm) / `6.20x Node`** | -| **Realtime WebSockets, Workers & Wasm/TSX (`Apps 15, 21–24`)**
RFC 6455 WS, `worker_threads` + TCP/UDP, Pure-Rust `wasmi` Wasm, TSX SSR | `5` | **`14.43 ms`** (`8.93–21.16 ms`) | **`2.79 ms`** | `28.88 ms` | `64.18 ms` | `87.52 ms` | **`2.00x Bun` (`10.35x` Warm) / `6.07x Node`** | -| **Full-Stack Edge & Node Frameworks (`FW 01–04`)**
`Hono v4.6.20`, `itty-router + UnJS Nitro`, `Express/Polka node:http`, `SvelteKit 3.1.1 + Svelte 5.57.3` | `4` | **`21.84 ms`** (`15.86–36.16 ms`) | **`8.39 ms`** | `33.81 ms` | `60.33 ms` | `101.48 ms` | **`1.55x Bun` (`4.03x` Warm) / `4.65x Node`** | -| **AI Agent, Multi-Tenant SaaS & Chaos Case Studies (`CS 01–05`)**
Depth-4 ToT Agent, MCP Code Mode, 12-Tenant Mesh, Wasm CDR, 48 Payment Sagas | `5` | **`19.29 ms`** (`13.98–26.48 ms`) | **`7.87 ms`** | `20.04 ms` | `54.98 ms` | `78.81 ms` | **`1.04x Bun` (`2.55x` Warm) / `4.08x Node`** | +| **Core Edge, Auth & Crypto (`Apps 01, 04, 05, 16`)**
Multi-file TS, SHA-256/HMAC, JWT/OAuth2, `.env` Auto-DLP | `4` | **`8.47 ms`** (`6.55–11.14 ms`) | **`3.30 ms`** | `15.91 ms` | `49.42 ms` | `74.55 ms` | **`1.88x Bun` (`4.82x` Warm) / `8.80x Node`** | +| **NPM Ecosystem, AST & Disk I/O (`Apps 02, 03, 06, 07, 08, 20`)**
`semver`, `flatted`, `dlv`/`dset`, `mitt`, 10-Shard JSONL I/O, `Buffer` | `6` | **`12.62 ms`** (`7.94–16.55 ms`) | **`3.89 ms`** | `20.07 ms` | `55.22 ms` | `75.47 ms` | **`1.59x Bun` (`5.16x` Warm) / `5.98x Node`** | +| **WinterTC Web Standards, Fetch Mesh & DLP (`Apps 09–14, 17–19`)**
`Request`/`Response`, Static CDN `304`, SSE, Live `fetch`, WebCrypto | `9` | **`16.64 ms`** (`9.45–30.99 ms`) | **`8.73 ms`** | `21.55 ms` | `61.92 ms` | `110.65 ms` | **`1.29x Bun` (`2.47x` Warm) / `6.65x Node`** | +| **Realtime WebSockets, Workers & Wasm/TSX (`Apps 15, 21–24`)**
RFC 6455 WS, `worker_threads` + TCP/UDP, Pure-Rust `wasmi` Wasm, TSX SSR | `5` | **`15.94 ms`** (`9.44–23.82 ms`) | **`3.00 ms`** | `33.42 ms` | `74.66 ms` | `100.88 ms` | **`2.10x Bun` (`11.14x` Warm) / `6.33x Node`** | +| **Full-Stack Edge & Node Frameworks (`FW 01–04`)**
`Hono v4.6.20`, `itty-router + UnJS Nitro`, `Express/Polka node:http`, `SvelteKit 3.1.1 + Svelte 5.57.3` | `4` | **`23.77 ms`** (`16.90–39.32 ms`) | **`9.79 ms`** | `34.46 ms` | `64.80 ms` | `111.20 ms` | **`1.45x Bun` (`3.52x` Warm) / `4.68x Node`** | +| **AI Agent, Multi-Tenant SaaS & Chaos Case Studies (`CS 01–05`)**
Depth-4 ToT Agent, MCP Code Mode, 12-Tenant Mesh, Wasm CDR, 48 Payment Sagas | `5` | **`21.56 ms`** (`15.33–31.11 ms`) | **`7.29 ms`** | `23.51 ms` | `63.56 ms` | `91.60 ms` | **`1.09x Bun` (`3.22x` Warm) / `4.25x Node`** | #### 3. Flagship Real-World Representative Workloads (9 of 33 Highlights) | # | Flagship Workload | Slice Cold `.cas` | Slice Warm (`--warm`) | Bun `v1.4.4` | Deno `v2.9.8` | Node.js `v27.0.0-alpha.0.0.0` | Speedup vs Bun / Node.js | | :- | :--- | :---: | :---: | :---: | :---: | :---: | :--- | -| **01** | `01-fintech-checkout` (Multi-File TS + SHA-256) | **`6.21 ms`** | **`1.17 ms`** | `14.40 ms` | `38.72 ms` | `59.17 ms` | **`2.32x Bun` (`12.33x` Warm) / `9.53x Node`** | -| **03** | `03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O) | **`8.04 ms`** | **`2.17 ms`** | `14.43 ms` | `45.77 ms` | `63.28 ms` | **`1.80x Bun` (`6.63x` Warm) / `7.87x Node`** | -| **14** | `14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`) | **`15.52 ms`** | **`7.87 ms`** | `22.38 ms` | `56.66 ms` | `112.02 ms` | **`1.44x Bun` (`2.84x` Warm) / `7.22x Node`** | -| **20** | `20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler) | **`11.50 ms`** | **`0.55 ms`** | `22.56 ms` | `55.77 ms` | `71.86 ms` | **`1.96x Bun` (`41.39x` Warm) / `6.25x Node`** | -| **22** | `22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec) | **`21.52 ms`** | **`2.22 ms`** | `57.85 ms` | `113.39 ms` | `103.24 ms` | **`2.73x Bun` (`26.09x` Warm) / `4.88x Node`** | -| **FW-01** | `FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`) | **`16.07 ms`** | **`5.72 ms`** | `19.91 ms` | `53.97 ms` | `99.71 ms` | **`1.26x Bun` (`3.48x` Warm) / `6.29x Node`** | -| **FW-04** | `FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`) | **`36.16 ms`** | **`17.02 ms`** | `46.58 ms` | `71.05 ms` | `119.71 ms` | **`1.29x Bun` (`2.74x` Warm) / `3.31x Node`** | -| **CS-01** | `CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes) | **`26.48 ms`** | **`13.12 ms`** | `28.26 ms` | `72.65 ms` | `89.71 ms` | **`1.07x Bun` (`2.15x` Warm) / `3.39x Node`** | -| **CS-05** | `CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas) | **`18.13 ms`** | **`10.31 ms`** | `19.62 ms` | `62.94 ms` | `83.70 ms` | **`1.08x Bun` (`1.90x` Warm) / `4.62x Node`** | +| **01** | `01-fintech-checkout` (Multi-File TS + SHA-256) | **`6.55 ms`** | **`1.93 ms`** | `15.17 ms` | `42.61 ms` | `74.22 ms` | **`2.32x Bun` (`7.84x` Warm) / `11.33x Node`** | +| **03** | `03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O) | **`7.94 ms`** | **`1.61 ms`** | `17.73 ms` | `50.10 ms` | `70.81 ms` | **`2.23x Bun` (`11.00x` Warm) / `8.92x Node`** | +| **14** | `14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`) | **`15.93 ms`** | **`7.80 ms`** | `24.46 ms` | `61.59 ms` | `122.58 ms` | **`1.54x Bun` (`3.14x` Warm) / `7.70x Node`** | +| **20** | `20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler) | **`12.30 ms`** | **`0.89 ms`** | `25.97 ms` | `64.07 ms` | `88.27 ms` | **`2.11x Bun` (`29.24x` Warm) / `7.17x Node`** | +| **22** | `22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec) | **`24.54 ms`** | **`2.38 ms`** | `68.04 ms` | `134.58 ms` | `116.66 ms` | **`2.86x Bun` (`28.63x` Warm) / `4.90x Node`** | +| **FW-01** | `FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`) | **`16.90 ms`** | **`7.54 ms`** | `22.25 ms` | `61.18 ms` | `110.86 ms` | **`1.32x Bun` (`2.95x` Warm) / `6.56x Node`** | +| **FW-04** | `FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`) | **`39.32 ms`** | **`19.71 ms`** | `52.50 ms` | `84.30 ms` | `133.01 ms` | **`1.34x Bun` (`2.66x` Warm) / `3.38x Node`** | +| **CS-01** | `CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes) | **`31.11 ms`** | **`13.13 ms`** | `32.78 ms` | `86.41 ms` | `105.35 ms` | **`1.05x Bun` (`2.50x` Warm) / `3.39x Node`** | +| **CS-05** | `CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas) | **`20.77 ms`** | **`9.38 ms`** | `23.26 ms` | `71.21 ms` | `96.48 ms` | **`1.12x Bun` (`2.48x` Warm) / `4.65x Node`** | *Full 33-workload latency breakdown, standalone binary metrics, peak RSS per app, and historical reports: **[`tests/reports/latest.md`](./tests/reports/latest.md)**.* diff --git a/docs/general/09_benchmarks_testing_and_docker_suite.md b/docs/general/09_benchmarks_testing_and_docker_suite.md index edbfc79..ff36ddf 100644 --- a/docs/general/09_benchmarks_testing_and_docker_suite.md +++ b/docs/general/09_benchmarks_testing_and_docker_suite.md @@ -147,45 +147,45 @@ Slice includes a comprehensive Linux `x86_64` Docker benchmark suite ([`tests/`] ### 4.1 Verified Results Across All 33 Production Applications, Frameworks & Case Studies ([`tests/reports/latest.md`](../../tests/reports/latest.md)) -> **Latest Verified Benchmark Report:** **[`tests/reports/latest.md`](../../tests/reports/latest.md)** (Archive: [`bench_v0.10.5_20261109_202907Z_a0c723e.md`](../../tests/reports/bench_v0.10.5_20261109_202907Z_a0c723e.md)) -> **Provenance:** Slice `v0.10.5` (`a0c723e`) · Generated `2026-11-09T20:29:07Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` +> **Latest Verified Benchmark Report:** **[`tests/reports/latest.md`](../../tests/reports/latest.md)** (Archive: [`bench_v0.10.5_20261109_225249Z_47bfa6b.md`](../../tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md)) +> **Provenance:** Slice `v0.10.5` (`47bfa6b`) · Generated `2026-11-09T22:52:49Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` > **Scorecard Across All 33 Production Workloads:** Beats **Deno (`v2.9.8`)** on **33/33**, **Node.js (`v27.0.0-alpha.0.0.0`)** on **33/33**, **Bun (`v1.4.4`)** on **30/33** cold one-shot, and **all 3 runtimes on 33/33 workloads in `--warm` pooled execution**. #### 1. Core Architecture, HTTP Throughput & 1,000-Tenant MicroVM Density | Metric | Slice (`v0.10.5` `SLICEBC\x01`) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Advantage | | :--- | :---: | :---: | :---: | :---: | :--- | -| **In-Process Isolate Cold Start (`P50` / `P99`)** | **`1.24 us` / `1.61 us`** | N/A (Process/VM) | N/A (Process/VM) | N/A (Process/VM) | **~120,000x faster than 125ms Firecracker VM** | -| **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.51 ms` (`10.07 MB` RSS)** | > 5,000 ms | > 15,000 ms | > 30,000 ms | **> 3,900x faster / ~32,000x denser** | +| **In-Process Isolate Cold Start (`P50` / `P99`)** | **`1.05 us` / `1.80 us`** | N/A (Process/VM) | N/A (Process/VM) | N/A (Process/VM) | **~120,000x faster than 125ms Firecracker VM** | +| **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.37 ms` (`9.70 MB` RSS)** | > 5,000 ms | > 15,000 ms | > 30,000 ms | **> 3,900x faster / ~32,000x denser** | | **500-Module Monorepo Cold Boot (`stat()` Calls)** | **`3.41 ms` (`0 stat()`)** | `12.72 ms` (`500+ stat`) | `41.80 ms` (`500+ stat`) | `70.38 ms` (`1,500+ stat`) | **`3.7x` faster than Bun / `20.6x` Node.js** | -| **HTTP/1.1 Keep-Alive Throughput (`16k` Reqs)** | **`148,407 req/s`** (Tier-0)
**`145,839 req/s`** (Tier-1) | `97,987 req/s` | `100,099 req/s` | `55,977 req/s` | **`1.51x` (`Tier-0`) / `1.49x` (`Tier-1`) vs `Bun.serve`** | -| **Peak Process Memory (`Max RSS` Across Suite)** | **`13.38 – 21.50 MB`** | `27.25 – 41.00 MB` | `45.47 – 61.39 MB` | `69.90 – 92.50 MB` | **`2.0x–2.3x` less than Bun / `4.3x–6.8x` less than Node** | +| **HTTP/1.1 Keep-Alive Throughput (`16k` Reqs)** | **`137,020 req/s`** (Tier-0)
**`125,831 req/s`** (Tier-1) | `72,924 req/s` | `87,455 req/s` | `45,868 req/s` | **`1.88x` (`Tier-0`) / `1.73x` (`Tier-1`) vs `Bun.serve`** | +| **Peak Process Memory (`Max RSS` Across Suite)** | **`13.25 – 21.75 MB`** | `25.88 – 40.83 MB` | `45.47 – 62.24 MB` | `70.03 – 92.88 MB` | **`2.0x–2.3x` less than Bun / `4.3x–6.8x` less than Node** | | **Multi-Tenant Security Containment** | **`5 / 5 PASS`** (OCap+SES+Fuel+DLP) | `0 / 5` (Ambient) | `2 / 5` (Coarse CLI) | `0 / 5` (Ambient) | **Hardware & Language Zero-Trust Isolation** | #### 2. Real-Life Workload Summary by Domain (All 33 Workloads Aggregated) | Workload Domain & Stack Coverage | Suites | Slice Cold `.cas` Avg (Range) | Slice Warm (`--warm`) Avg | Bun `v1.4.4` Avg | Deno `v2.9.8` Avg | Node.js `v27.0.0-alpha.0.0.0` Avg | Category Speedup vs Bun / Node.js | | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :--- | -| **Core Edge, Auth & Crypto (`Apps 01, 04, 05, 16`)**
Multi-file TS, SHA-256/HMAC, JWT/OAuth2, `.env` Auto-DLP | `4` | **`8.11 ms`** (`6.21–10.65 ms`) | **`2.68 ms`** | `15.18 ms` | `44.73 ms` | `64.32 ms` | **`1.87x Bun` (`5.66x` Warm) / `7.93x Node`** | -| **NPM Ecosystem, AST & Disk I/O (`Apps 02, 03, 06, 07, 08, 20`)**
`semver`, `flatted`, `dlv`/`dset`, `mitt`, 10-Shard JSONL I/O, `Buffer` | `6` | **`11.85 ms`** (`8.04–14.66 ms`) | **`3.87 ms`** | `17.63 ms` | `51.32 ms` | `67.38 ms` | **`1.49x Bun` (`4.55x` Warm) / `5.69x Node`** | -| **WinterTC Web Standards, Fetch Mesh & DLP (`Apps 09–14, 17–19`)**
`Request`/`Response`, Static CDN `304`, SSE, Live `fetch`, WebCrypto | `9` | **`15.73 ms`** (`8.35–30.83 ms`) | **`8.25 ms`** | `19.22 ms` | `55.05 ms` | `97.59 ms` | **`1.22x Bun` (`2.33x` Warm) / `6.20x Node`** | -| **Realtime WebSockets, Workers & Wasm/TSX (`Apps 15, 21–24`)**
RFC 6455 WS, `worker_threads` + TCP/UDP, Pure-Rust `wasmi` Wasm, TSX SSR | `5` | **`14.43 ms`** (`8.93–21.16 ms`) | **`2.79 ms`** | `28.88 ms` | `64.18 ms` | `87.52 ms` | **`2.00x Bun` (`10.35x` Warm) / `6.07x Node`** | -| **Full-Stack Edge & Node Frameworks (`FW 01–04`)**
`Hono v4.6.20`, `itty-router + UnJS Nitro`, `Express/Polka node:http`, `SvelteKit 3.1.1 + Svelte 5.57.3` | `4` | **`21.84 ms`** (`15.86–36.16 ms`) | **`8.39 ms`** | `33.81 ms` | `60.33 ms` | `101.48 ms` | **`1.55x Bun` (`4.03x` Warm) / `4.65x Node`** | -| **AI Agent, Multi-Tenant SaaS & Chaos Case Studies (`CS 01–05`)**
Depth-4 ToT Agent, MCP Code Mode, 12-Tenant Mesh, Wasm CDR, 48 Payment Sagas | `5` | **`19.29 ms`** (`13.98–26.48 ms`) | **`7.87 ms`** | `20.04 ms` | `54.98 ms` | `78.81 ms` | **`1.04x Bun` (`2.55x` Warm) / `4.08x Node`** | +| **Core Edge, Auth & Crypto (`Apps 01, 04, 05, 16`)**
Multi-file TS, SHA-256/HMAC, JWT/OAuth2, `.env` Auto-DLP | `4` | **`8.47 ms`** (`6.55–11.14 ms`) | **`3.30 ms`** | `15.91 ms` | `49.42 ms` | `74.55 ms` | **`1.88x Bun` (`4.82x` Warm) / `8.80x Node`** | +| **NPM Ecosystem, AST & Disk I/O (`Apps 02, 03, 06, 07, 08, 20`)**
`semver`, `flatted`, `dlv`/`dset`, `mitt`, 10-Shard JSONL I/O, `Buffer` | `6` | **`12.62 ms`** (`7.94–16.55 ms`) | **`3.89 ms`** | `20.07 ms` | `55.22 ms` | `75.47 ms` | **`1.59x Bun` (`5.16x` Warm) / `5.98x Node`** | +| **WinterTC Web Standards, Fetch Mesh & DLP (`Apps 09–14, 17–19`)**
`Request`/`Response`, Static CDN `304`, SSE, Live `fetch`, WebCrypto | `9` | **`16.64 ms`** (`9.45–30.99 ms`) | **`8.73 ms`** | `21.55 ms` | `61.92 ms` | `110.65 ms` | **`1.29x Bun` (`2.47x` Warm) / `6.65x Node`** | +| **Realtime WebSockets, Workers & Wasm/TSX (`Apps 15, 21–24`)**
RFC 6455 WS, `worker_threads` + TCP/UDP, Pure-Rust `wasmi` Wasm, TSX SSR | `5` | **`15.94 ms`** (`9.44–23.82 ms`) | **`3.00 ms`** | `33.42 ms` | `74.66 ms` | `100.88 ms` | **`2.10x Bun` (`11.14x` Warm) / `6.33x Node`** | +| **Full-Stack Edge & Node Frameworks (`FW 01–04`)**
`Hono v4.6.20`, `itty-router + UnJS Nitro`, `Express/Polka node:http`, `SvelteKit 3.1.1 + Svelte 5.57.3` | `4` | **`23.77 ms`** (`16.90–39.32 ms`) | **`9.79 ms`** | `34.46 ms` | `64.80 ms` | `111.20 ms` | **`1.45x Bun` (`3.52x` Warm) / `4.68x Node`** | +| **AI Agent, Multi-Tenant SaaS & Chaos Case Studies (`CS 01–05`)**
Depth-4 ToT Agent, MCP Code Mode, 12-Tenant Mesh, Wasm CDR, 48 Payment Sagas | `5` | **`21.56 ms`** (`15.33–31.11 ms`) | **`7.29 ms`** | `23.51 ms` | `63.56 ms` | `91.60 ms` | **`1.09x Bun` (`3.22x` Warm) / `4.25x Node`** | #### 3. Flagship Real-World Representative Workloads (9 of 33 Highlights) | # | Flagship Workload | Slice Cold `.cas` | Slice Warm (`--warm`) | Bun `v1.4.4` | Deno `v2.9.8` | Node.js `v27.0.0-alpha.0.0.0` | Speedup vs Bun / Node.js | | :- | :--- | :---: | :---: | :---: | :---: | :---: | :--- | -| **01** | `01-fintech-checkout` (Multi-File TS + SHA-256) | **`6.21 ms`** | **`1.17 ms`** | `14.40 ms` | `38.72 ms` | `59.17 ms` | **`2.32x Bun` (`12.33x` Warm) / `9.53x Node`** | -| **03** | `03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O) | **`8.04 ms`** | **`2.17 ms`** | `14.43 ms` | `45.77 ms` | `63.28 ms` | **`1.80x Bun` (`6.63x` Warm) / `7.87x Node`** | -| **14** | `14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`) | **`15.52 ms`** | **`7.87 ms`** | `22.38 ms` | `56.66 ms` | `112.02 ms` | **`1.44x Bun` (`2.84x` Warm) / `7.22x Node`** | -| **20** | `20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler) | **`11.50 ms`** | **`0.55 ms`** | `22.56 ms` | `55.77 ms` | `71.86 ms` | **`1.96x Bun` (`41.39x` Warm) / `6.25x Node`** | -| **22** | `22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec) | **`21.52 ms`** | **`2.22 ms`** | `57.85 ms` | `113.39 ms` | `103.24 ms` | **`2.73x Bun` (`26.09x` Warm) / `4.88x Node`** | -| **FW-01** | `FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`) | **`16.07 ms`** | **`5.72 ms`** | `19.91 ms` | `53.97 ms` | `99.71 ms` | **`1.26x Bun` (`3.48x` Warm) / `6.29x Node`** | -| **FW-04** | `FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`) | **`36.16 ms`** | **`17.02 ms`** | `46.58 ms` | `71.05 ms` | `119.71 ms` | **`1.29x Bun` (`2.74x` Warm) / `3.31x Node`** | -| **CS-01** | `CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes) | **`26.48 ms`** | **`13.12 ms`** | `28.26 ms` | `72.65 ms` | `89.71 ms` | **`1.07x Bun` (`2.15x` Warm) / `3.39x Node`** | -| **CS-05** | `CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas) | **`18.13 ms`** | **`10.31 ms`** | `19.62 ms` | `62.94 ms` | `83.70 ms` | **`1.08x Bun` (`1.90x` Warm) / `4.62x Node`** | +| **01** | `01-fintech-checkout` (Multi-File TS + SHA-256) | **`6.55 ms`** | **`1.93 ms`** | `15.17 ms` | `42.61 ms` | `74.22 ms` | **`2.32x Bun` (`7.84x` Warm) / `11.33x Node`** | +| **03** | `03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O) | **`7.94 ms`** | **`1.61 ms`** | `17.73 ms` | `50.10 ms` | `70.81 ms` | **`2.23x Bun` (`11.00x` Warm) / `8.92x Node`** | +| **14** | `14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`) | **`15.93 ms`** | **`7.80 ms`** | `24.46 ms` | `61.59 ms` | `122.58 ms` | **`1.54x Bun` (`3.14x` Warm) / `7.70x Node`** | +| **20** | `20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler) | **`12.30 ms`** | **`0.89 ms`** | `25.97 ms` | `64.07 ms` | `88.27 ms` | **`2.11x Bun` (`29.24x` Warm) / `7.17x Node`** | +| **22** | `22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec) | **`24.54 ms`** | **`2.38 ms`** | `68.04 ms` | `134.58 ms` | `116.66 ms` | **`2.86x Bun` (`28.63x` Warm) / `4.90x Node`** | +| **FW-01** | `FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`) | **`16.90 ms`** | **`7.54 ms`** | `22.25 ms` | `61.18 ms` | `110.86 ms` | **`1.32x Bun` (`2.95x` Warm) / `6.56x Node`** | +| **FW-04** | `FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`) | **`39.32 ms`** | **`19.71 ms`** | `52.50 ms` | `84.30 ms` | `133.01 ms` | **`1.34x Bun` (`2.66x` Warm) / `3.38x Node`** | +| **CS-01** | `CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes) | **`31.11 ms`** | **`13.13 ms`** | `32.78 ms` | `86.41 ms` | `105.35 ms` | **`1.05x Bun` (`2.50x` Warm) / `3.39x Node`** | +| **CS-05** | `CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas) | **`20.77 ms`** | **`9.38 ms`** | `23.26 ms` | `71.21 ms` | `96.48 ms` | **`1.12x Bun` (`2.48x` Warm) / `4.65x Node`** | *Full 33-workload latency breakdown, standalone binary metrics, peak RSS per app, and historical reports: **[`tests/reports/latest.md`](../../tests/reports/latest.md)**.* diff --git a/tests/README.md b/tests/README.md index a63a8f5..98b6949 100644 --- a/tests/README.md +++ b/tests/README.md @@ -212,45 +212,45 @@ This directory (`tests/`) contains a reproducible Linux `x86_64` Docker benchmar ## Verified Linux Docker (`x86_64`) Benchmark Results Across All 33 Workloads ([`reports/latest.md`](./reports/latest.md)) -> **Latest Verified Benchmark Report:** **[`tests/reports/latest.md`](./reports/latest.md)** (Archive: [`bench_v0.10.5_20261109_202907Z_a0c723e.md`](./reports/bench_v0.10.5_20261109_202907Z_a0c723e.md)) -> **Provenance:** Slice `v0.10.5` (`a0c723e`) · Generated `2026-11-09T20:29:07Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` +> **Latest Verified Benchmark Report:** **[`tests/reports/latest.md`](./reports/latest.md)** (Archive: [`bench_v0.10.5_20261109_225249Z_47bfa6b.md`](./reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md)) +> **Provenance:** Slice `v0.10.5` (`47bfa6b`) · Generated `2026-11-09T22:52:49Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` > **Scorecard Across All 33 Production Workloads:** Beats **Deno (`v2.9.8`)** on **33/33**, **Node.js (`v27.0.0-alpha.0.0.0`)** on **33/33**, **Bun (`v1.4.4`)** on **30/33** cold one-shot, and **all 3 runtimes on 33/33 workloads in `--warm` pooled execution**. #### 1. Core Architecture, HTTP Throughput & 1,000-Tenant MicroVM Density | Metric | Slice (`v0.10.5` `SLICEBC\x01`) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Advantage | | :--- | :---: | :---: | :---: | :---: | :--- | -| **In-Process Isolate Cold Start (`P50` / `P99`)** | **`1.24 us` / `1.61 us`** | N/A (Process/VM) | N/A (Process/VM) | N/A (Process/VM) | **~120,000x faster than 125ms Firecracker VM** | -| **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.51 ms` (`10.07 MB` RSS)** | > 5,000 ms | > 15,000 ms | > 30,000 ms | **> 3,900x faster / ~32,000x denser** | +| **In-Process Isolate Cold Start (`P50` / `P99`)** | **`1.05 us` / `1.80 us`** | N/A (Process/VM) | N/A (Process/VM) | N/A (Process/VM) | **~120,000x faster than 125ms Firecracker VM** | +| **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.37 ms` (`9.70 MB` RSS)** | > 5,000 ms | > 15,000 ms | > 30,000 ms | **> 3,900x faster / ~32,000x denser** | | **500-Module Monorepo Cold Boot (`stat()` Calls)** | **`3.41 ms` (`0 stat()`)** | `12.72 ms` (`500+ stat`) | `41.80 ms` (`500+ stat`) | `70.38 ms` (`1,500+ stat`) | **`3.7x` faster than Bun / `20.6x` Node.js** | -| **HTTP/1.1 Keep-Alive Throughput (`16k` Reqs)** | **`148,407 req/s`** (Tier-0)
**`145,839 req/s`** (Tier-1) | `97,987 req/s` | `100,099 req/s` | `55,977 req/s` | **`1.51x` (`Tier-0`) / `1.49x` (`Tier-1`) vs `Bun.serve`** | -| **Peak Process Memory (`Max RSS` Across Suite)** | **`13.38 – 21.50 MB`** | `27.25 – 41.00 MB` | `45.47 – 61.39 MB` | `69.90 – 92.50 MB` | **`2.0x–2.3x` less than Bun / `4.3x–6.8x` less than Node** | +| **HTTP/1.1 Keep-Alive Throughput (`16k` Reqs)** | **`137,020 req/s`** (Tier-0)
**`125,831 req/s`** (Tier-1) | `72,924 req/s` | `87,455 req/s` | `45,868 req/s` | **`1.88x` (`Tier-0`) / `1.73x` (`Tier-1`) vs `Bun.serve`** | +| **Peak Process Memory (`Max RSS` Across Suite)** | **`13.25 – 21.75 MB`** | `25.88 – 40.83 MB` | `45.47 – 62.24 MB` | `70.03 – 92.88 MB` | **`2.0x–2.3x` less than Bun / `4.3x–6.8x` less than Node** | | **Multi-Tenant Security Containment** | **`5 / 5 PASS`** (OCap+SES+Fuel+DLP) | `0 / 5` (Ambient) | `2 / 5` (Coarse CLI) | `0 / 5` (Ambient) | **Hardware & Language Zero-Trust Isolation** | #### 2. Real-Life Workload Summary by Domain (All 33 Workloads Aggregated) | Workload Domain & Stack Coverage | Suites | Slice Cold `.cas` Avg (Range) | Slice Warm (`--warm`) Avg | Bun `v1.4.4` Avg | Deno `v2.9.8` Avg | Node.js `v27.0.0-alpha.0.0.0` Avg | Category Speedup vs Bun / Node.js | | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :--- | -| **Core Edge, Auth & Crypto (`Apps 01, 04, 05, 16`)**
Multi-file TS, SHA-256/HMAC, JWT/OAuth2, `.env` Auto-DLP | `4` | **`8.11 ms`** (`6.21–10.65 ms`) | **`2.68 ms`** | `15.18 ms` | `44.73 ms` | `64.32 ms` | **`1.87x Bun` (`5.66x` Warm) / `7.93x Node`** | -| **NPM Ecosystem, AST & Disk I/O (`Apps 02, 03, 06, 07, 08, 20`)**
`semver`, `flatted`, `dlv`/`dset`, `mitt`, 10-Shard JSONL I/O, `Buffer` | `6` | **`11.85 ms`** (`8.04–14.66 ms`) | **`3.87 ms`** | `17.63 ms` | `51.32 ms` | `67.38 ms` | **`1.49x Bun` (`4.55x` Warm) / `5.69x Node`** | -| **WinterTC Web Standards, Fetch Mesh & DLP (`Apps 09–14, 17–19`)**
`Request`/`Response`, Static CDN `304`, SSE, Live `fetch`, WebCrypto | `9` | **`15.73 ms`** (`8.35–30.83 ms`) | **`8.25 ms`** | `19.22 ms` | `55.05 ms` | `97.59 ms` | **`1.22x Bun` (`2.33x` Warm) / `6.20x Node`** | -| **Realtime WebSockets, Workers & Wasm/TSX (`Apps 15, 21–24`)**
RFC 6455 WS, `worker_threads` + TCP/UDP, Pure-Rust `wasmi` Wasm, TSX SSR | `5` | **`14.43 ms`** (`8.93–21.16 ms`) | **`2.79 ms`** | `28.88 ms` | `64.18 ms` | `87.52 ms` | **`2.00x Bun` (`10.35x` Warm) / `6.07x Node`** | -| **Full-Stack Edge & Node Frameworks (`FW 01–04`)**
`Hono v4.6.20`, `itty-router + UnJS Nitro`, `Express/Polka node:http`, `SvelteKit 3.1.1 + Svelte 5.57.3` | `4` | **`21.84 ms`** (`15.86–36.16 ms`) | **`8.39 ms`** | `33.81 ms` | `60.33 ms` | `101.48 ms` | **`1.55x Bun` (`4.03x` Warm) / `4.65x Node`** | -| **AI Agent, Multi-Tenant SaaS & Chaos Case Studies (`CS 01–05`)**
Depth-4 ToT Agent, MCP Code Mode, 12-Tenant Mesh, Wasm CDR, 48 Payment Sagas | `5` | **`19.29 ms`** (`13.98–26.48 ms`) | **`7.87 ms`** | `20.04 ms` | `54.98 ms` | `78.81 ms` | **`1.04x Bun` (`2.55x` Warm) / `4.08x Node`** | +| **Core Edge, Auth & Crypto (`Apps 01, 04, 05, 16`)**
Multi-file TS, SHA-256/HMAC, JWT/OAuth2, `.env` Auto-DLP | `4` | **`8.47 ms`** (`6.55–11.14 ms`) | **`3.30 ms`** | `15.91 ms` | `49.42 ms` | `74.55 ms` | **`1.88x Bun` (`4.82x` Warm) / `8.80x Node`** | +| **NPM Ecosystem, AST & Disk I/O (`Apps 02, 03, 06, 07, 08, 20`)**
`semver`, `flatted`, `dlv`/`dset`, `mitt`, 10-Shard JSONL I/O, `Buffer` | `6` | **`12.62 ms`** (`7.94–16.55 ms`) | **`3.89 ms`** | `20.07 ms` | `55.22 ms` | `75.47 ms` | **`1.59x Bun` (`5.16x` Warm) / `5.98x Node`** | +| **WinterTC Web Standards, Fetch Mesh & DLP (`Apps 09–14, 17–19`)**
`Request`/`Response`, Static CDN `304`, SSE, Live `fetch`, WebCrypto | `9` | **`16.64 ms`** (`9.45–30.99 ms`) | **`8.73 ms`** | `21.55 ms` | `61.92 ms` | `110.65 ms` | **`1.29x Bun` (`2.47x` Warm) / `6.65x Node`** | +| **Realtime WebSockets, Workers & Wasm/TSX (`Apps 15, 21–24`)**
RFC 6455 WS, `worker_threads` + TCP/UDP, Pure-Rust `wasmi` Wasm, TSX SSR | `5` | **`15.94 ms`** (`9.44–23.82 ms`) | **`3.00 ms`** | `33.42 ms` | `74.66 ms` | `100.88 ms` | **`2.10x Bun` (`11.14x` Warm) / `6.33x Node`** | +| **Full-Stack Edge & Node Frameworks (`FW 01–04`)**
`Hono v4.6.20`, `itty-router + UnJS Nitro`, `Express/Polka node:http`, `SvelteKit 3.1.1 + Svelte 5.57.3` | `4` | **`23.77 ms`** (`16.90–39.32 ms`) | **`9.79 ms`** | `34.46 ms` | `64.80 ms` | `111.20 ms` | **`1.45x Bun` (`3.52x` Warm) / `4.68x Node`** | +| **AI Agent, Multi-Tenant SaaS & Chaos Case Studies (`CS 01–05`)**
Depth-4 ToT Agent, MCP Code Mode, 12-Tenant Mesh, Wasm CDR, 48 Payment Sagas | `5` | **`21.56 ms`** (`15.33–31.11 ms`) | **`7.29 ms`** | `23.51 ms` | `63.56 ms` | `91.60 ms` | **`1.09x Bun` (`3.22x` Warm) / `4.25x Node`** | #### 3. Flagship Real-World Representative Workloads (9 of 33 Highlights) | # | Flagship Workload | Slice Cold `.cas` | Slice Warm (`--warm`) | Bun `v1.4.4` | Deno `v2.9.8` | Node.js `v27.0.0-alpha.0.0.0` | Speedup vs Bun / Node.js | | :- | :--- | :---: | :---: | :---: | :---: | :---: | :--- | -| **01** | `01-fintech-checkout` (Multi-File TS + SHA-256) | **`6.21 ms`** | **`1.17 ms`** | `14.40 ms` | `38.72 ms` | `59.17 ms` | **`2.32x Bun` (`12.33x` Warm) / `9.53x Node`** | -| **03** | `03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O) | **`8.04 ms`** | **`2.17 ms`** | `14.43 ms` | `45.77 ms` | `63.28 ms` | **`1.80x Bun` (`6.63x` Warm) / `7.87x Node`** | -| **14** | `14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`) | **`15.52 ms`** | **`7.87 ms`** | `22.38 ms` | `56.66 ms` | `112.02 ms` | **`1.44x Bun` (`2.84x` Warm) / `7.22x Node`** | -| **20** | `20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler) | **`11.50 ms`** | **`0.55 ms`** | `22.56 ms` | `55.77 ms` | `71.86 ms` | **`1.96x Bun` (`41.39x` Warm) / `6.25x Node`** | -| **22** | `22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec) | **`21.52 ms`** | **`2.22 ms`** | `57.85 ms` | `113.39 ms` | `103.24 ms` | **`2.73x Bun` (`26.09x` Warm) / `4.88x Node`** | -| **FW-01** | `FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`) | **`16.07 ms`** | **`5.72 ms`** | `19.91 ms` | `53.97 ms` | `99.71 ms` | **`1.26x Bun` (`3.48x` Warm) / `6.29x Node`** | -| **FW-04** | `FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`) | **`36.16 ms`** | **`17.02 ms`** | `46.58 ms` | `71.05 ms` | `119.71 ms` | **`1.29x Bun` (`2.74x` Warm) / `3.31x Node`** | -| **CS-01** | `CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes) | **`26.48 ms`** | **`13.12 ms`** | `28.26 ms` | `72.65 ms` | `89.71 ms` | **`1.07x Bun` (`2.15x` Warm) / `3.39x Node`** | -| **CS-05** | `CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas) | **`18.13 ms`** | **`10.31 ms`** | `19.62 ms` | `62.94 ms` | `83.70 ms` | **`1.08x Bun` (`1.90x` Warm) / `4.62x Node`** | +| **01** | `01-fintech-checkout` (Multi-File TS + SHA-256) | **`6.55 ms`** | **`1.93 ms`** | `15.17 ms` | `42.61 ms` | `74.22 ms` | **`2.32x Bun` (`7.84x` Warm) / `11.33x Node`** | +| **03** | `03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O) | **`7.94 ms`** | **`1.61 ms`** | `17.73 ms` | `50.10 ms` | `70.81 ms` | **`2.23x Bun` (`11.00x` Warm) / `8.92x Node`** | +| **14** | `14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`) | **`15.93 ms`** | **`7.80 ms`** | `24.46 ms` | `61.59 ms` | `122.58 ms` | **`1.54x Bun` (`3.14x` Warm) / `7.70x Node`** | +| **20** | `20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler) | **`12.30 ms`** | **`0.89 ms`** | `25.97 ms` | `64.07 ms` | `88.27 ms` | **`2.11x Bun` (`29.24x` Warm) / `7.17x Node`** | +| **22** | `22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec) | **`24.54 ms`** | **`2.38 ms`** | `68.04 ms` | `134.58 ms` | `116.66 ms` | **`2.86x Bun` (`28.63x` Warm) / `4.90x Node`** | +| **FW-01** | `FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`) | **`16.90 ms`** | **`7.54 ms`** | `22.25 ms` | `61.18 ms` | `110.86 ms` | **`1.32x Bun` (`2.95x` Warm) / `6.56x Node`** | +| **FW-04** | `FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`) | **`39.32 ms`** | **`19.71 ms`** | `52.50 ms` | `84.30 ms` | `133.01 ms` | **`1.34x Bun` (`2.66x` Warm) / `3.38x Node`** | +| **CS-01** | `CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes) | **`31.11 ms`** | **`13.13 ms`** | `32.78 ms` | `86.41 ms` | `105.35 ms` | **`1.05x Bun` (`2.50x` Warm) / `3.39x Node`** | +| **CS-05** | `CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas) | **`20.77 ms`** | **`9.38 ms`** | `23.26 ms` | `71.21 ms` | `96.48 ms` | **`1.12x Bun` (`2.48x` Warm) / `4.65x Node`** | *Full 33-workload latency breakdown, standalone binary metrics, peak RSS per app, and historical reports: **[`tests/reports/latest.md`](./reports/latest.md)**.* diff --git a/tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.json b/tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.json new file mode 100644 index 0000000..3b33285 --- /dev/null +++ b/tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.json @@ -0,0 +1,789 @@ +{ + "metadata": { + "version": "0.10.5", + "commit": "47bfa6b", + "timestampUtc": "2026-11-09T22:52:49Z", + "environment": "Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)", + "runtimes": { + "slice": "v0.10.5", + "bun": "v1.4.4", + "deno": "v2.9.8", + "node": "v27.0.0-alpha.0.0.0" + }, + "archiveFile": "tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md", + "latestFile": "tests/reports/latest.md" + }, + "microvm": { + "linux": { + "coldMinUs": 0.96, + "coldP50Us": 1.05, + "coldP99Us": 1.8, + "swarm1000Ms": 1.37, + "swarm1000RssMb": 9.7, + "cas500ColdMs": 3.408, + "cas500MemUs": 542.85, + "ringIo10kMs": 0.02 + }, + "windows": { + "coldMinUs": 1.4, + "coldP50Us": 1.6, + "coldP99Us": 2.3, + "swarm1000Ms": 2.24, + "swarm1000RssMb": 11.82, + "cas500ColdMs": 5.637, + "cas500MemUs": 640, + "ringIo10kMs": 5.11 + } + }, + "httpKeepAlive": { + "sliceTier0": { + "rps": 137020, + "avgUs": 7.3, + "totalMs": 116.8 + }, + "sliceTier1": { + "rps": 125831, + "avgUs": 7.95, + "totalMs": 127.2 + }, + "deno": { + "rps": 87455, + "avgUs": 11.43, + "totalMs": 183 + }, + "bun": { + "rps": 72924, + "avgUs": 13.71, + "totalMs": 219.4 + }, + "node": { + "rps": 45868, + "avgUs": 21.8, + "totalMs": 348.8 + } + }, + "primitives": { + "kv1001Us": 500.3, + "kvMemBytes": 8431, + "tot3SandboxesUs": 50.17, + "totSingleSandboxUs": 1.873 + }, + "workloads": [ + { + "num": 1, + "code": "01", + "id": "01-fintech-checkout", + "label": "`01-fintech-checkout` (Multi-File TS + SHA-256)", + "category": "core_edge_crypto", + "flagship": true, + "sliceCasMinMs": 5.965, + "sliceCasAvgMs": 6.549, + "sliceBinMinMs": 6.64, + "sliceBinAvgMs": 8.093, + "sliceSrcAvgMs": 21.635, + "sliceWarmMs": 1.934, + "prevSliceCasAvgMs": 6.206, + "bunAvgMs": 15.167, + "denoAvgMs": 42.607, + "nodeAvgMs": 74.22 + }, + { + "num": 2, + "code": "02", + "id": "02-npm-ecosystem-suite", + "label": "`02-npm-ecosystem-suite` (`semver` + `ms` + `ini`)", + "category": "npm_ast_disk", + "flagship": false, + "sliceCasMinMs": 14.494, + "sliceCasAvgMs": 16.553, + "sliceBinMinMs": 14.803, + "sliceBinAvgMs": 16.721, + "sliceSrcAvgMs": 44.654, + "sliceWarmMs": 4.79, + "prevSliceCasAvgMs": 14.659, + "bunAvgMs": 24.251, + "denoAvgMs": 59.826, + "nodeAvgMs": 81.827 + }, + { + "num": 3, + "code": "03", + "id": "03-disk-io-log-pipeline", + "label": "`03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O)", + "category": "npm_ast_disk", + "flagship": true, + "sliceCasMinMs": 7.023, + "sliceCasAvgMs": 7.941, + "sliceBinMinMs": 7.174, + "sliceBinAvgMs": 8.422, + "sliceSrcAvgMs": 28.92, + "sliceWarmMs": 1.613, + "prevSliceCasAvgMs": 8.036, + "bunAvgMs": 17.735, + "denoAvgMs": 50.096, + "nodeAvgMs": 70.811 + }, + { + "num": 4, + "code": "04", + "id": "04-edge-api-gateway", + "label": "`04-edge-api-gateway` (`fast-querystring` + `ms`)", + "category": "core_edge_crypto", + "flagship": false, + "sliceCasMinMs": 7.149, + "sliceCasAvgMs": 7.827, + "sliceBinMinMs": 7.561, + "sliceBinAvgMs": 8.669, + "sliceSrcAvgMs": 26.354, + "sliceWarmMs": 1.769, + "prevSliceCasAvgMs": 7.85, + "bunAvgMs": 16.48, + "denoAvgMs": 49.015, + "nodeAvgMs": 72.202 + }, + { + "num": 5, + "code": "05", + "id": "05-jwt-oauth-session-guard", + "label": "`05-jwt-oauth-session-guard` (`cookie` + `ms` + HMAC)", + "category": "core_edge_crypto", + "flagship": false, + "sliceCasMinMs": 10.114, + "sliceCasAvgMs": 11.143, + "sliceBinMinMs": 10.987, + "sliceBinAvgMs": 11.926, + "sliceSrcAvgMs": 26.499, + "sliceWarmMs": 8.203, + "prevSliceCasAvgMs": 10.654, + "bunAvgMs": 15.814, + "denoAvgMs": 51.773, + "nodeAvgMs": 76.002 + }, + { + "num": 6, + "code": "06", + "id": "06-telemetry-metrics-pipeline", + "label": "`06-telemetry-metrics-pipeline` (`bytes` + `flatted` + WAL)", + "category": "npm_ast_disk", + "flagship": false, + "sliceCasMinMs": 14.79, + "sliceCasAvgMs": 16.076, + "sliceBinMinMs": 15.409, + "sliceBinAvgMs": 17.028, + "sliceSrcAvgMs": 37.703, + "sliceWarmMs": 6.338, + "prevSliceCasAvgMs": 14.519, + "bunAvgMs": 19.737, + "denoAvgMs": 56.963, + "nodeAvgMs": 71.608 + }, + { + "num": 7, + "code": "07", + "id": "07-graphql-ast-validator", + "label": "`07-graphql-ast-validator` (`dlv` + `dset` + AST Cost)", + "category": "npm_ast_disk", + "flagship": false, + "sliceCasMinMs": 8.787, + "sliceCasAvgMs": 11.115, + "sliceBinMinMs": 9.491, + "sliceBinAvgMs": 10.37, + "sliceSrcAvgMs": 24.844, + "sliceWarmMs": 4.102, + "prevSliceCasAvgMs": 9.992, + "bunAvgMs": 15.024, + "denoAvgMs": 46.462, + "nodeAvgMs": 68.656 + }, + { + "num": 8, + "code": "08", + "id": "08-event-driven-state-journal", + "label": "`08-event-driven-state-journal` (`mitt` + `ms` + JSONL Replay)", + "category": "npm_ast_disk", + "flagship": false, + "sliceCasMinMs": 10.997, + "sliceCasAvgMs": 12.471, + "sliceBinMinMs": 11.503, + "sliceBinAvgMs": 12.646, + "sliceSrcAvgMs": 35.987, + "sliceWarmMs": 5.602, + "prevSliceCasAvgMs": 13.568, + "bunAvgMs": 17.725, + "denoAvgMs": 53.924, + "nodeAvgMs": 71.64 + }, + { + "num": 9, + "code": "09", + "id": "09-wintertc-web-router", + "label": "`09-wintertc-web-router` (`Request` + `Response` + `URL`, 80 reqs)", + "category": "wintertc_fetch_dlp", + "flagship": false, + "sliceCasMinMs": 15.006, + "sliceCasAvgMs": 16.9, + "sliceBinMinMs": 15.631, + "sliceBinAvgMs": 17.946, + "sliceSrcAvgMs": 38.74, + "sliceWarmMs": 11.562, + "prevSliceCasAvgMs": 15.476, + "bunAvgMs": 14.796, + "denoAvgMs": 57.896, + "nodeAvgMs": 96.743 + }, + { + "num": 10, + "code": "10", + "id": "10-fullstack-bff-microservice", + "label": "`10-fullstack-bff-microservice` (`cookie` + `dlv` + `ms` + `ETag`, 60 reqs)", + "category": "wintertc_fetch_dlp", + "flagship": false, + "sliceCasMinMs": 12.895, + "sliceCasAvgMs": 14.257, + "sliceBinMinMs": 13.832, + "sliceBinAvgMs": 16.402, + "sliceSrcAvgMs": 39.87, + "sliceWarmMs": 11.179, + "prevSliceCasAvgMs": 13.998, + "bunAvgMs": 18.103, + "denoAvgMs": 64.257, + "nodeAvgMs": 101.196 + }, + { + "num": 11, + "code": "11", + "id": "11-static-asset-cdn-edge", + "label": "`11-static-asset-cdn-edge` (`bytes` + `ms` + `ETag` `304`, 80 reqs)", + "category": "wintertc_fetch_dlp", + "flagship": false, + "sliceCasMinMs": 10.522, + "sliceCasAvgMs": 11.158, + "sliceBinMinMs": 10.352, + "sliceBinAvgMs": 12.072, + "sliceSrcAvgMs": 33.918, + "sliceWarmMs": 4.154, + "prevSliceCasAvgMs": 10.268, + "bunAvgMs": 15.225, + "denoAvgMs": 56.518, + "nodeAvgMs": 101.741 + }, + { + "num": 12, + "code": "12", + "id": "12-ai-sse-token-streamer", + "label": "`12-ai-sse-token-streamer` (`mitt` + `ms` + SSE + DLP, 320 frames)", + "category": "wintertc_fetch_dlp", + "flagship": false, + "sliceCasMinMs": 15.373, + "sliceCasAvgMs": 18.478, + "sliceBinMinMs": 16.82, + "sliceBinAvgMs": 19.011, + "sliceSrcAvgMs": 39.287, + "sliceWarmMs": 8.424, + "prevSliceCasAvgMs": 16.665, + "bunAvgMs": 17.424, + "denoAvgMs": 56.409, + "nodeAvgMs": 111.849 + }, + { + "num": 13, + "code": "13", + "id": "13-webhook-orchestrator-ssrf", + "label": "`13-webhook-orchestrator-ssrf` (`fast-querystring` + `ms` + Live `fetch`)", + "category": "wintertc_fetch_dlp", + "flagship": false, + "sliceCasMinMs": 13.935, + "sliceCasAvgMs": 15.312, + "sliceBinMinMs": 14.75, + "sliceBinAvgMs": 15.857, + "sliceSrcAvgMs": 44.061, + "sliceWarmMs": 7.041, + "prevSliceCasAvgMs": 14.135, + "bunAvgMs": 25.142, + "denoAvgMs": 60.842, + "nodeAvgMs": 132.603 + }, + { + "num": 14, + "code": "14", + "id": "14-federated-api-mesh-dlp", + "label": "`14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`)", + "category": "wintertc_fetch_dlp", + "flagship": true, + "sliceCasMinMs": 14.684, + "sliceCasAvgMs": 15.929, + "sliceBinMinMs": 14.28, + "sliceBinAvgMs": 16.196, + "sliceSrcAvgMs": 37.649, + "sliceWarmMs": 7.802, + "prevSliceCasAvgMs": 15.515, + "bunAvgMs": 24.46, + "denoAvgMs": 61.587, + "nodeAvgMs": 122.583 + }, + { + "num": 15, + "code": "15", + "id": "15-time-travel-test-suite", + "label": "`15-time-travel-test-suite` (`semver` + `ms` + `dlv` + `dset` + 24 Rollbacks)", + "category": "realtime_workers_wasm", + "flagship": false, + "sliceCasMinMs": 15.097, + "sliceCasAvgMs": 16.968, + "sliceBinMinMs": 15.668, + "sliceBinAvgMs": 17.549, + "sliceSrcAvgMs": 50.828, + "sliceWarmMs": 5.987, + "prevSliceCasAvgMs": 15.345, + "bunAvgMs": 28.355, + "denoAvgMs": 77.46, + "nodeAvgMs": 95.857 + }, + { + "num": 16, + "code": "16", + "id": "16-dotenv-dlp-config-vault", + "label": "`16-dotenv-dlp-config-vault` (`ini` + `cookie` + `bytes` + `.env` Auto-DLP)", + "category": "core_edge_crypto", + "flagship": false, + "sliceCasMinMs": 7.372, + "sliceCasAvgMs": 8.364, + "sliceBinMinMs": 7.863, + "sliceBinAvgMs": 9.346, + "sliceSrcAvgMs": 32.219, + "sliceWarmMs": 1.28, + "prevSliceCasAvgMs": 7.716, + "bunAvgMs": 16.161, + "denoAvgMs": 54.266, + "nodeAvgMs": 75.761 + }, + { + "num": 17, + "code": "17", + "id": "17-zero-trust-redirect-keepalive-mesh", + "label": "`17-zero-trust-redirect-keepalive-mesh` (Keep-Alive/307/SSRF/DLP)", + "category": "wintertc_fetch_dlp", + "flagship": false, + "sliceCasMinMs": 16.275, + "sliceCasAvgMs": 17.319, + "sliceBinMinMs": 16.816, + "sliceBinAvgMs": 18.538, + "sliceSrcAvgMs": 47.714, + "sliceWarmMs": 9.241, + "prevSliceCasAvgMs": 16.359, + "bunAvgMs": 25.921, + "denoAvgMs": 65.348, + "nodeAvgMs": 132.34 + }, + { + "num": 18, + "code": "18", + "id": "18-async-event-loop-fanout-scheduler", + "label": "`18-async-event-loop-fanout-scheduler` (Timer Wheel/`Promise.all`/`AbortSignal`)", + "category": "wintertc_fetch_dlp", + "flagship": false, + "sliceCasMinMs": 28.487, + "sliceCasAvgMs": 30.986, + "sliceBinMinMs": 31.707, + "sliceBinAvgMs": 33.993, + "sliceSrcAvgMs": 52.49, + "sliceWarmMs": 17.717, + "prevSliceCasAvgMs": 31.543, + "bunAvgMs": 37.518, + "denoAvgMs": 81.154, + "nodeAvgMs": 94.107 + }, + { + "num": 19, + "code": "19", + "id": "19-wintertc-webcrypto-streams-edge", + "label": "`19-wintertc-webcrypto-streams-edge` (WebCrypto/Streams/FormData/Clone)", + "category": "wintertc_fetch_dlp", + "flagship": false, + "sliceCasMinMs": 8.341, + "sliceCasAvgMs": 9.453, + "sliceBinMinMs": 8.631, + "sliceBinAvgMs": 9.903, + "sliceSrcAvgMs": 37.429, + "sliceWarmMs": 1.477, + "prevSliceCasAvgMs": 8.353, + "bunAvgMs": 15.328, + "denoAvgMs": 53.271, + "nodeAvgMs": 102.717 + }, + { + "num": 20, + "code": "20", + "id": "20-node-compat-and-edge-router", + "label": "`20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler)", + "category": "npm_ast_disk", + "flagship": true, + "sliceCasMinMs": 10.574, + "sliceCasAvgMs": 12.304, + "sliceBinMinMs": 11.021, + "sliceBinAvgMs": 12.468, + "sliceSrcAvgMs": 53.659, + "sliceWarmMs": 0.888, + "prevSliceCasAvgMs": 11.502, + "bunAvgMs": 25.969, + "denoAvgMs": 64.068, + "nodeAvgMs": 88.273 + }, + { + "num": 21, + "code": "21", + "id": "21-websocket-realtime-and-security-guard", + "label": "`21-websocket-realtime-and-security-guard` (RFC 6455 `WebSocket` + 5-Ring Guard)", + "category": "realtime_workers_wasm", + "flagship": false, + "sliceCasMinMs": 10.388, + "sliceCasAvgMs": 11.666, + "sliceBinMinMs": 11.096, + "sliceBinAvgMs": 12.224, + "sliceSrcAvgMs": 48.96, + "sliceWarmMs": 2.803, + "prevSliceCasAvgMs": 10.803, + "bunAvgMs": 24.293, + "denoAvgMs": 60.684, + "nodeAvgMs": 135.299 + }, + { + "num": 22, + "code": "22", + "id": "22-worker-threads-and-raw-sockets", + "label": "`22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec)", + "category": "realtime_workers_wasm", + "flagship": true, + "sliceCasMinMs": 21.213, + "sliceCasAvgMs": 24.541, + "sliceBinMinMs": 20.697, + "sliceBinAvgMs": 23.822, + "sliceSrcAvgMs": 44.508, + "sliceWarmMs": 2.377, + "prevSliceCasAvgMs": 21.52, + "bunAvgMs": 68.043, + "denoAvgMs": 134.578, + "nodeAvgMs": 116.66 + }, + { + "num": 23, + "code": "23", + "id": "23-wasm-crypto-and-simd-kernel", + "label": "`23-wasm-crypto-and-simd-kernel` (Pure-Rust `WebAssembly` + 5-Ring WASM Sec)", + "category": "realtime_workers_wasm", + "flagship": false, + "sliceCasMinMs": 15.158, + "sliceCasAvgMs": 17.83, + "sliceBinMinMs": 15.886, + "sliceBinAvgMs": 18.181, + "sliceSrcAvgMs": 31.114, + "sliceWarmMs": 2.088, + "prevSliceCasAvgMs": 15.912, + "bunAvgMs": 24.671, + "denoAvgMs": 49.186, + "nodeAvgMs": 78.258 + }, + { + "num": 24, + "code": "24", + "id": "24-tsx-ssr-and-wasm-edge-pipeline", + "label": "`24-tsx-ssr-and-wasm-edge-pipeline` (`WebAssembly` SLA Scorer + SSR Pipeline)", + "category": "realtime_workers_wasm", + "flagship": false, + "sliceCasMinMs": 8.205, + "sliceCasAvgMs": 9.438, + "sliceBinMinMs": 8.649, + "sliceBinAvgMs": 9.628, + "sliceSrcAvgMs": 33.98, + "sliceWarmMs": 1.751, + "prevSliceCasAvgMs": 8.927, + "bunAvgMs": 21.746, + "denoAvgMs": 51.375, + "nodeAvgMs": 78.308 + }, + { + "num": 25, + "code": "FW-01", + "id": "frameworks/01-hono-edge-microservice", + "label": "`FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`)", + "category": "frameworks", + "flagship": true, + "sliceCasMinMs": 14.968, + "sliceCasAvgMs": 16.903, + "sliceBinMinMs": 15.466, + "sliceBinAvgMs": 17.879, + "sliceSrcAvgMs": 61.054, + "sliceWarmMs": 7.535, + "prevSliceCasAvgMs": 16.071, + "bunAvgMs": 22.254, + "denoAvgMs": 61.183, + "nodeAvgMs": 110.858 + }, + { + "num": 26, + "code": "FW-02", + "id": "frameworks/02-itty-router-unjs-nitro-stack", + "label": "`FW-02: frameworks/02-itty-router-unjs-nitro-stack` (`itty-router` + UnJS)", + "category": "frameworks", + "flagship": false, + "sliceCasMinMs": 17.744, + "sliceCasAvgMs": 19.999, + "sliceBinMinMs": 17.828, + "sliceBinAvgMs": 20.653, + "sliceSrcAvgMs": 57.474, + "sliceWarmMs": 10.506, + "prevSliceCasAvgMs": 19.468, + "bunAvgMs": 21.391, + "denoAvgMs": 53.565, + "nodeAvgMs": 100.97 + }, + { + "num": 32, + "code": "FW-03", + "id": "frameworks/03-node-http-express-compat", + "label": "`FW-03: frameworks/03-node-http-express-compat` (`node:http` + `node:stream` Express/Polka)", + "category": "frameworks", + "flagship": false, + "sliceCasMinMs": 16.776, + "sliceCasAvgMs": 18.85, + "sliceBinMinMs": 16.441, + "sliceBinAvgMs": 19.326, + "sliceSrcAvgMs": 26.726, + "sliceWarmMs": 1.399, + "prevSliceCasAvgMs": 16.83, + "bunAvgMs": 41.711, + "denoAvgMs": 60.165, + "nodeAvgMs": 99.962 + }, + { + "num": 33, + "code": "FW-04", + "id": "frameworks/04-sveltekit-edge-ssr", + "label": "`FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`)", + "category": "frameworks", + "flagship": true, + "sliceCasMinMs": 34.463, + "sliceCasAvgMs": 39.319, + "sliceBinMinMs": 34.304, + "sliceBinAvgMs": 40.783, + "sliceSrcAvgMs": 180.822, + "sliceWarmMs": 19.712, + "prevSliceCasAvgMs": 36.16, + "bunAvgMs": 52.502, + "denoAvgMs": 84.299, + "nodeAvgMs": 133.012 + }, + { + "num": 27, + "code": "CS-01", + "id": "case_studies/01-tot-autonomous-sre-agent", + "label": "`CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes)", + "category": "case_studies", + "flagship": true, + "sliceCasMinMs": 26.75, + "sliceCasAvgMs": 31.107, + "sliceBinMinMs": 26.945, + "sliceBinAvgMs": 31.878, + "sliceSrcAvgMs": 84.553, + "sliceWarmMs": 13.126, + "prevSliceCasAvgMs": 26.485, + "bunAvgMs": 32.776, + "denoAvgMs": 86.411, + "nodeAvgMs": 105.353 + }, + { + "num": 28, + "code": "CS-02", + "id": "case_studies/02-mcp-code-mode-orchestrator", + "label": "`CS-02: case_studies/02-mcp-code-mode-orchestrator` (`-98.4%` Tokens)", + "category": "case_studies", + "flagship": false, + "sliceCasMinMs": 18.425, + "sliceCasAvgMs": 20.659, + "sliceBinMinMs": 18.837, + "sliceBinAvgMs": 21.371, + "sliceSrcAvgMs": 41.344, + "sliceWarmMs": 6.569, + "prevSliceCasAvgMs": 20.362, + "bunAvgMs": 18.019, + "denoAvgMs": 52.128, + "nodeAvgMs": 79.359 + }, + { + "num": 29, + "code": "CS-03", + "id": "case_studies/03-multi-tenant-saas-plugin-mesh", + "label": "`CS-03: case_studies/03-multi-tenant-saas-plugin-mesh` (12 Tenants + Hot-Swap)", + "category": "case_studies", + "flagship": false, + "sliceCasMinMs": 13.56, + "sliceCasAvgMs": 15.332, + "sliceBinMinMs": 13.832, + "sliceBinAvgMs": 15.796, + "sliceSrcAvgMs": 52.384, + "sliceWarmMs": 5.721, + "prevSliceCasAvgMs": 13.984, + "bunAvgMs": 18.869, + "denoAvgMs": 57.047, + "nodeAvgMs": 98.424 + }, + { + "num": 30, + "code": "CS-04", + "id": "case_studies/04-wasm-zero-trust-cdr-pipeline", + "label": "`CS-04: case_studies/04-wasm-zero-trust-cdr-pipeline` (Wasm SimHash CDR)", + "category": "case_studies", + "flagship": false, + "sliceCasMinMs": 17.489, + "sliceCasAvgMs": 19.955, + "sliceBinMinMs": 18.426, + "sliceBinAvgMs": 21.163, + "sliceSrcAvgMs": 45.664, + "sliceWarmMs": 1.656, + "prevSliceCasAvgMs": 17.514, + "bunAvgMs": 24.621, + "denoAvgMs": 50.99, + "nodeAvgMs": 78.359 + }, + { + "num": 31, + "code": "CS-05", + "id": "case_studies/05-time-travel-chaos-fuzzer-payments", + "label": "`CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas)", + "category": "case_studies", + "flagship": true, + "sliceCasMinMs": 17.119, + "sliceCasAvgMs": 20.765, + "sliceBinMinMs": 17.498, + "sliceBinAvgMs": 21.73, + "sliceSrcAvgMs": 58.081, + "sliceWarmMs": 9.381, + "prevSliceCasAvgMs": 18.127, + "bunAvgMs": 23.262, + "denoAvgMs": 71.208, + "nodeAvgMs": 96.481 + } + ], + "rss": [ + { + "id": "App 2: NPM semver+ms+ini", + "label": "App 2: NPM semver+ms+ini", + "sliceKb": 13568, + "bunKb": 29948, + "denoKb": 46560, + "nodeKb": 71708 + }, + { + "id": "App 6: Telemetry + Flatted", + "label": "App 6: Telemetry + Flatted", + "sliceKb": 14612, + "bunKb": 30080, + "denoKb": 50548, + "nodeKb": 73240 + }, + { + "id": "App 21: RFC 6455 WS + Sec", + "label": "App 21: RFC 6455 WS + Sec", + "sliceKb": 13952, + "bunKb": 31844, + "denoKb": 50936, + "nodeKb": 95104 + }, + { + "id": "App 22: Workers + Sockets", + "label": "App 22: Workers + Sockets", + "sliceKb": 22272, + "bunKb": 41808, + "denoKb": 63732, + "nodeKb": 93304 + }, + { + "id": "App 23: Pure-Rust WASM", + "label": "App 23: Pure-Rust WASM", + "sliceKb": 19072, + "bunKb": 30848, + "denoKb": 49160, + "nodeKb": 80528 + }, + { + "id": "FW 1: Hono v4 Microservice", + "label": "FW 1: Hono v4 Microservice", + "sliceKb": 14976, + "bunKb": 31176, + "denoKb": 48724, + "nodeKb": 89112 + }, + { + "id": "FW 2: itty-router + UnJS", + "label": "FW 2: itty-router + UnJS", + "sliceKb": 14336, + "bunKb": 31872, + "denoKb": 49084, + "nodeKb": 87300 + }, + { + "id": "App 24: WASM + SSR", + "label": "App 24: WASM + SSR", + "sliceKb": 13864, + "bunKb": 30464, + "denoKb": 49016, + "nodeKb": 81024 + }, + { + "id": "FW 3: Express node:http", + "label": "FW 3: Express node:http", + "sliceKb": 15360, + "bunKb": 33024, + "denoKb": 47032, + "nodeKb": 80400 + }, + { + "id": "01-tot-autonomous-sre-agent", + "label": "01-tot-autonomous-sre-agent", + "sliceKb": 18944, + "bunKb": 31744, + "denoKb": 53352, + "nodeKb": 82952 + }, + { + "id": "02-mcp-code-mode-orchestrator", + "label": "02-mcp-code-mode-orchestrator", + "sliceKb": 18028, + "bunKb": 28416, + "denoKb": 46656, + "nodeKb": 82820 + }, + { + "id": "03-multi-tenant-saas-plugin-mesh", + "label": "03-multi-tenant-saas-plugin-mesh", + "sliceKb": 15744, + "bunKb": 26496, + "denoKb": 49800, + "nodeKb": 88580 + }, + { + "id": "04-wasm-zero-trust-cdr-pipeline", + "label": "04-wasm-zero-trust-cdr-pipeline", + "sliceKb": 19712, + "bunKb": 31616, + "denoKb": 49748, + "nodeKb": 80392 + }, + { + "id": "05-time-travel-chaos-fuzzer-payments", + "label": "05-time-travel-chaos-fuzzer-payments", + "sliceKb": 15616, + "bunKb": 29056, + "denoKb": 49524, + "nodeKb": 80928 + }, + { + "id": "FW 4: SvelteKit 3 + Svelte 5", + "label": "FW 4: SvelteKit 3 + Svelte 5", + "sliceKb": 21120, + "bunKb": 41728, + "denoKb": 56476, + "nodeKb": 85664 + } + ] +} diff --git a/tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md b/tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md new file mode 100644 index 0000000..60b4873 --- /dev/null +++ b/tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md @@ -0,0 +1,113 @@ +# Slice (Nexus-JS) — Full 33-Workload & MicroVM Benchmark Report + +* **Slice Version:** `v0.10.5` (Commit `47bfa6b`) +* **Generated Timestamp (UTC):** `2026-11-09T22:52:49Z` +* **Archive File:** [`tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md`](./bench_v0.10.5_20261109_225249Z_47bfa6b.md) +* **Canonical Latest Report:** [`tests/reports/latest.md`](./latest.md) +* **Environment:** `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` +* **Compared Runtimes:** + * **Slice:** `v0.10.5` (Default `SLICEBC\x01` Precompiled Boa `CodeBlock` CAS + Monomorphic Inline Caching `get_fast` + Streaming `JsonSeed` `JSON.parse`) + * **Bun:** `v1.4.4` (JavaScriptCore) + * **Deno:** `v2.9.8` (V8) + * **Node.js:** `v27.0.0-alpha.0.0.0` (V8 native TypeScript execution) + +--- + +## 1. Executive Summary + +Across all **33 real-world multi-file TypeScript applications, framework suites, and case studies**, Slice beats **Deno (`v2.9.8`)** on **33/33** workloads, beats **Node.js (`v27.0.0-alpha.0.0.0`)** on **33/33** workloads, beats **Bun (`v1.4.4`)** on **30/33** workloads in cold one-shot execution, and beats **all 3 runtimes on 33/33 workloads in `--warm` pooled isolate execution**. + +| Metric | Linux (`x86_64` Docker) | Windows (`x86_64` Host) | Comparison vs Runtimes & MicroVMs | +| :--- | :---: | :---: | :--- | +| **Single Isolate Cold-Start (Min / P50 / P99)** | **`0.96 us` / `1.05 us` / `1.80 us`** | **`1.40 us` / `1.60 us` / `2.30 us`** | **~120,000x faster than 125ms Firecracker VM** | +| **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.37 ms`** (`9.70 MB` RSS) | **`2.24 ms`** (`11.82 MB` RSS) | **> 10,000x faster than container/VM swarms** | +| **500-Module Monorepo Cold Boot (`0 stat()`)** | **`3.408 ms`** (`542.85 us` in-mem) | **`5.637 ms`** (`640.00 us` in-mem) | **20.6x faster than Node.js (`1,500+ stat()`)** | +| **10,000 Direct Kernel Ring I/O Completions** | **`0.02 ms`** | **`5.11 ms`** | **Zero worker-thread lock contention** | +| **5-Ring Security Containment Verification** | **`5 / 5 PASS`** | **`5 / 5 PASS`** | **OCap + SES + Fuel + SSRF/DLP + MPK** | + +--- + +## 2. `slice serve` Multi-Tenant HTTP/1.1 Keep-Alive Throughput (`16,000` Reqs, 8 Sockets x 8 Pipeline) + +| Server / Runtime | Throughput (`req/s`) | Avg Latency / Req | Total Time (`16k` Reqs) | Relative Speedup vs Runtimes | +| :--- | :---: | :---: | :---: | :--- | +| **`slice serve` (Tier-0 CAS, `--workers=8`)** | **`137,020 req/s`** | **`7.30 us/req`** | **`116.8 ms`** | **`1.88x` faster than `Bun.serve` / `2.99x` Node.js** | +| **`slice serve` (Tier-1 WinterTC, `--workers=8`)** | **`125,831 req/s`** | **`7.95 us/req`** | **`127.2 ms`** | **`1.73x` faster than `Bun.serve` / `2.74x` Node.js** | +| **`Deno.serve` (`v2.9.8`, V8, No Per-Req Sandbox)** | `87,455 req/s` | `11.43 us/req` | `183.0 ms` | `1.20x` vs Bun | +| **`Bun.serve` (`v1.4.4`, JSC, No Per-Req Sandbox)** | `72,924 req/s` | `13.71 us/req` | `219.4 ms` | `1.00x` (Baseline) | +| **`Node.js http.createServer` (`v27.0.0-alpha.0.0.0`, V8)** | `45,868 req/s` | `21.80 us/req` | `348.8 ms` | `0.63x` vs Bun | + +--- + +## 3. Full 33-Workload Latency Comparison (20 Runs Each, Linux `x86_64` Docker) + +| # | Workload (`tests/apps/`, `tests/frameworks/`, `tests/case_studies/`) | Slice Cold `.cas` (`SLICEBC\x01`) | Slice Standalone Bin (`SLICEBC\x01`) | Slice Warm (`--warm`) | Previous `.cas` (`Delta`) | Bun `v1.4.4` | Deno `v2.9.8` | Node.js `v27.0.0-alpha.0.0.0` | Slice Speedup vs Bun / Node.js | +| :- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :--- | +| **01** | `01-fintech-checkout` (Multi-File TS + SHA-256) | **`6.549 ms`** (`5.96 ms` Min) | **`8.093 ms`** | **`1.934 ms`** | `6.206 ms` (`5.5%`) | `15.167 ms` | `42.607 ms` | `74.220 ms` | **`2.32x Bun` (`7.84x` Warm) / `11.33x Node`** | +| **02** | `02-npm-ecosystem-suite` (`semver` + `ms` + `ini`) | **`16.553 ms`** (`14.49 ms` Min) | **`16.721 ms`** | **`4.790 ms`** | `14.659 ms` (`12.9%`) | `24.251 ms` | `59.826 ms` | `81.827 ms` | **`1.47x Bun` (`5.06x` Warm) / `4.94x Node`** | +| **03** | `03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O) | **`7.941 ms`** (`7.02 ms` Min) | **`8.422 ms`** | **`1.613 ms`** | `8.036 ms` (`-1.2%`) | `17.735 ms` | `50.096 ms` | `70.811 ms` | **`2.23x Bun` (`11.00x` Warm) / `8.92x Node`** | +| **04** | `04-edge-api-gateway` (`fast-querystring` + `ms`) | **`7.827 ms`** (`7.15 ms` Min) | **`8.669 ms`** | **`1.769 ms`** | `7.850 ms` (`-0.3%`) | `16.480 ms` | `49.015 ms` | `72.202 ms` | **`2.11x Bun` (`9.32x` Warm) / `9.22x Node`** | +| **05** | `05-jwt-oauth-session-guard` (`cookie` + `ms` + HMAC) | **`11.143 ms`** (`10.11 ms` Min) | **`11.926 ms`** | **`8.203 ms`** | `10.654 ms` (`4.6%`) | `15.814 ms` | `51.773 ms` | `76.002 ms` | **`1.42x Bun` (`1.93x` Warm) / `6.82x Node`** | +| **06** | `06-telemetry-metrics-pipeline` (`bytes` + `flatted` + WAL) | **`16.076 ms`** (`14.79 ms` Min) | **`17.028 ms`** | **`6.338 ms`** | `14.519 ms` (`10.7%`) | `19.737 ms` | `56.963 ms` | `71.608 ms` | **`1.23x Bun` (`3.11x` Warm) / `4.45x Node`** | +| **07** | `07-graphql-ast-validator` (`dlv` + `dset` + AST Cost) | **`11.115 ms`** (`8.79 ms` Min) | **`10.370 ms`** | **`4.102 ms`** | `9.992 ms` (`11.2%`) | `15.024 ms` | `46.462 ms` | `68.656 ms` | **`1.45x Bun` (`3.66x` Warm) / `6.62x Node`** | +| **08** | `08-event-driven-state-journal` (`mitt` + `ms` + JSONL Replay) | **`12.471 ms`** (`11.00 ms` Min) | **`12.646 ms`** | **`5.602 ms`** | `13.568 ms` (`-8.1%`) | `17.725 ms` | `53.924 ms` | `71.640 ms` | **`1.42x Bun` (`3.16x` Warm) / `5.74x Node`** | +| **09** | `09-wintertc-web-router` (`Request` + `Response` + `URL`, 80 reqs) | **`16.900 ms`** (`15.01 ms` Min) | **`17.946 ms`** | **`11.562 ms`** | `15.476 ms` (`9.2%`) | `14.796 ms` | `57.896 ms` | `96.743 ms` | **`1.28x Bun Warm` / `5.72x Node`** | +| **10** | `10-fullstack-bff-microservice` (`cookie` + `dlv` + `ms` + `ETag`, 60 reqs) | **`14.257 ms`** (`12.89 ms` Min) | **`16.402 ms`** | **`11.179 ms`** | `13.998 ms` (`1.9%`) | `18.103 ms` | `64.257 ms` | `101.196 ms` | **`1.27x Bun` (`1.62x` Warm) / `7.10x Node`** | +| **11** | `11-static-asset-cdn-edge` (`bytes` + `ms` + `ETag` `304`, 80 reqs) | **`11.158 ms`** (`10.52 ms` Min) | **`12.072 ms`** | **`4.154 ms`** | `10.268 ms` (`8.7%`) | `15.225 ms` | `56.518 ms` | `101.741 ms` | **`1.36x Bun` (`3.67x` Warm) / `9.12x Node`** | +| **12** | `12-ai-sse-token-streamer` (`mitt` + `ms` + SSE + DLP, 320 frames) | **`18.478 ms`** (`15.37 ms` Min) | **`19.011 ms`** | **`8.424 ms`** | `16.665 ms` (`10.9%`) | `17.424 ms` | `56.409 ms` | `111.849 ms` | **`2.07x Bun Warm` / `6.05x Node`** | +| **13** | `13-webhook-orchestrator-ssrf` (`fast-querystring` + `ms` + Live `fetch`) | **`15.312 ms`** (`13.94 ms` Min) | **`15.857 ms`** | **`7.041 ms`** | `14.135 ms` (`8.3%`) | `25.142 ms` | `60.842 ms` | `132.603 ms` | **`1.64x Bun` (`3.57x` Warm) / `8.66x Node`** | +| **14** | `14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`) | **`15.929 ms`** (`14.68 ms` Min) | **`16.196 ms`** | **`7.802 ms`** | `15.515 ms` (`2.7%`) | `24.460 ms` | `61.587 ms` | `122.583 ms` | **`1.54x Bun` (`3.14x` Warm) / `7.70x Node`** | +| **15** | `15-time-travel-test-suite` (`semver` + `ms` + `dlv` + `dset` + 24 Rollbacks) | **`16.968 ms`** (`15.10 ms` Min) | **`17.549 ms`** | **`5.987 ms`** | `15.345 ms` (`10.6%`) | `28.355 ms` | `77.460 ms` | `95.857 ms` | **`1.67x Bun` (`4.74x` Warm) / `5.65x Node`** | +| **16** | `16-dotenv-dlp-config-vault` (`ini` + `cookie` + `bytes` + `.env` Auto-DLP) | **`8.364 ms`** (`7.37 ms` Min) | **`9.346 ms`** | **`1.280 ms`** | `7.716 ms` (`8.4%`) | `16.161 ms` | `54.266 ms` | `75.761 ms` | **`1.93x Bun` (`12.63x` Warm) / `9.06x Node`** | +| **17** | `17-zero-trust-redirect-keepalive-mesh` (Keep-Alive/307/SSRF/DLP) | **`17.319 ms`** (`16.27 ms` Min) | **`18.538 ms`** | **`9.241 ms`** | `16.359 ms` (`5.9%`) | `25.921 ms` | `65.348 ms` | `132.340 ms` | **`1.50x Bun` (`2.80x` Warm) / `7.64x Node`** | +| **18** | `18-async-event-loop-fanout-scheduler` (Timer Wheel/`Promise.all`/`AbortSignal`) | **`30.986 ms`** (`28.49 ms` Min) | **`33.993 ms`** | **`17.717 ms`** | `31.543 ms` (`-1.8%`) | `37.518 ms` | `81.154 ms` | `94.107 ms` | **`1.21x Bun` (`2.12x` Warm) / `3.04x Node`** | +| **19** | `19-wintertc-webcrypto-streams-edge` (WebCrypto/Streams/FormData/Clone) | **`9.453 ms`** (`8.34 ms` Min) | **`9.903 ms`** | **`1.477 ms`** | `8.353 ms` (`13.2%`) | `15.328 ms` | `53.271 ms` | `102.717 ms` | **`1.62x Bun` (`10.38x` Warm) / `10.87x Node`** | +| **20** | `20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler) | **`12.304 ms`** (`10.57 ms` Min) | **`12.468 ms`** | **`0.888 ms`** | `11.502 ms` (`7.0%`) | `25.969 ms` | `64.068 ms` | `88.273 ms` | **`2.11x Bun` (`29.24x` Warm) / `7.17x Node`** | +| **21** | `21-websocket-realtime-and-security-guard` (RFC 6455 `WebSocket` + 5-Ring Guard) | **`11.666 ms`** (`10.39 ms` Min) | **`12.224 ms`** | **`2.803 ms`** | `10.803 ms` (`8.0%`) | `24.293 ms` | `60.684 ms` | `135.299 ms` | **`2.08x Bun` (`8.67x` Warm) / `11.60x Node`** | +| **22** | `22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec) | **`24.541 ms`** (`21.21 ms` Min) | **`23.822 ms`** | **`2.377 ms`** | `21.520 ms` (`14.0%`) | `68.043 ms` | `134.578 ms` | `116.660 ms` | **`2.86x Bun` (`28.63x` Warm) / `4.90x Node`** | +| **23** | `23-wasm-crypto-and-simd-kernel` (Pure-Rust `WebAssembly` + 5-Ring WASM Sec) | **`17.830 ms`** (`15.16 ms` Min) | **`18.181 ms`** | **`2.088 ms`** | `15.912 ms` (`12.1%`) | `24.671 ms` | `49.186 ms` | `78.258 ms` | **`1.38x Bun` (`11.82x` Warm) / `4.39x Node`** | +| **24** | `24-tsx-ssr-and-wasm-edge-pipeline` (`WebAssembly` SLA Scorer + SSR Pipeline) | **`9.438 ms`** (`8.21 ms` Min) | **`9.628 ms`** | **`1.751 ms`** | `8.927 ms` (`5.7%`) | `21.746 ms` | `51.375 ms` | `78.308 ms` | **`2.30x Bun` (`12.42x` Warm) / `8.30x Node`** | +| **FW-01** | `FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`) | **`16.903 ms`** (`14.97 ms` Min) | **`17.879 ms`** | **`7.535 ms`** | `16.071 ms` (`5.2%`) | `22.254 ms` | `61.183 ms` | `110.858 ms` | **`1.32x Bun` (`2.95x` Warm) / `6.56x Node`** | +| **FW-02** | `FW-02: frameworks/02-itty-router-unjs-nitro-stack` (`itty-router` + UnJS) | **`19.999 ms`** (`17.74 ms` Min) | **`20.653 ms`** | **`10.506 ms`** | `19.468 ms` (`2.7%`) | `21.391 ms` | `53.565 ms` | `100.970 ms` | **`1.07x Bun` (`2.04x` Warm) / `5.05x Node`** | +| **FW-03** | `FW-03: frameworks/03-node-http-express-compat` (`node:http` + `node:stream` Express/Polka) | **`18.850 ms`** (`16.78 ms` Min) | **`19.326 ms`** | **`1.399 ms`** | `16.830 ms` (`12.0%`) | `41.711 ms` | `60.165 ms` | `99.962 ms` | **`2.21x Bun` (`29.81x` Warm) / `5.30x Node`** | +| **FW-04** | `FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`) | **`39.319 ms`** (`34.46 ms` Min) | **`40.783 ms`** | **`19.712 ms`** | `36.160 ms` (`8.7%`) | `52.502 ms` | `84.299 ms` | `133.012 ms` | **`1.34x Bun` (`2.66x` Warm) / `3.38x Node`** | +| **CS-01** | `CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes) | **`31.107 ms`** (`26.75 ms` Min) | **`31.878 ms`** | **`13.126 ms`** | `26.485 ms` (`17.5%`) | `32.776 ms` | `86.411 ms` | `105.353 ms` | **`1.05x Bun` (`2.50x` Warm) / `3.39x Node`** | +| **CS-02** | `CS-02: case_studies/02-mcp-code-mode-orchestrator` (`-98.4%` Tokens) | **`20.659 ms`** (`18.43 ms` Min) | **`21.371 ms`** | **`6.569 ms`** | `20.362 ms` (`1.5%`) | `18.019 ms` | `52.128 ms` | `79.359 ms` | **`2.74x Bun Warm` / `3.84x Node`** | +| **CS-03** | `CS-03: case_studies/03-multi-tenant-saas-plugin-mesh` (12 Tenants + Hot-Swap) | **`15.332 ms`** (`13.56 ms` Min) | **`15.796 ms`** | **`5.721 ms`** | `13.984 ms` (`9.6%`) | `18.869 ms` | `57.047 ms` | `98.424 ms` | **`1.23x Bun` (`3.30x` Warm) / `6.42x Node`** | +| **CS-04** | `CS-04: case_studies/04-wasm-zero-trust-cdr-pipeline` (Wasm SimHash CDR) | **`19.955 ms`** (`17.49 ms` Min) | **`21.163 ms`** | **`1.656 ms`** | `17.514 ms` (`13.9%`) | `24.621 ms` | `50.990 ms` | `78.359 ms` | **`1.23x Bun` (`14.87x` Warm) / `3.93x Node`** | +| **CS-05** | `CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas) | **`20.765 ms`** (`17.12 ms` Min) | **`21.730 ms`** | **`9.381 ms`** | `18.127 ms` (`14.6%`) | `23.262 ms` | `71.208 ms` | `96.481 ms` | **`1.12x Bun` (`2.48x` Warm) / `4.65x Node`** | + +--- + +## 4. Peak Process Memory Footprint (`Max RSS` via `/usr/bin/time -v`) + +| Workload | Slice (`SLICEBC\x01` Default) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Memory Advantage | +| :--- | :---: | :---: | :---: | :---: | :--- | +| **App 2: NPM semver+ms+ini** | **13,568 KB (13.25 MB)** | 29,948 KB (29.25 MB) | 46,560 KB (45.47 MB) | 71,708 KB (70.03 MB) | **5.29x less than Node / 2.21x less than Bun** | +| **App 6: Telemetry + Flatted** | **14,612 KB (14.27 MB)** | 30,080 KB (29.38 MB) | 50,548 KB (49.36 MB) | 73,240 KB (71.52 MB) | **5.01x less than Node / 2.06x less than Bun** | +| **App 21: RFC 6455 WS + Sec** | **13,952 KB (13.63 MB)** | 31,844 KB (31.10 MB) | 50,936 KB (49.74 MB) | 95,104 KB (92.88 MB) | **6.82x less than Node / 2.28x less than Bun** | +| **App 22: Workers + Sockets** | **22,272 KB (21.75 MB)** | 41,808 KB (40.83 MB) | 63,732 KB (62.24 MB) | 93,304 KB (91.12 MB) | **4.19x less than Node / 1.88x less than Bun** | +| **App 23: Pure-Rust WASM** | **19,072 KB (18.63 MB)** | 30,848 KB (30.13 MB) | 49,160 KB (48.01 MB) | 80,528 KB (78.64 MB) | **4.22x less than Node / 1.62x less than Bun** | +| **FW 1: Hono v4 Microservice** | **14,976 KB (14.63 MB)** | 31,176 KB (30.45 MB) | 48,724 KB (47.58 MB) | 89,112 KB (87.02 MB) | **5.95x less than Node / 2.08x less than Bun** | +| **FW 2: itty-router + UnJS** | **14,336 KB (14.00 MB)** | 31,872 KB (31.13 MB) | 49,084 KB (47.93 MB) | 87,300 KB (85.25 MB) | **6.09x less than Node / 2.22x less than Bun** | +| **App 24: WASM + SSR** | **13,864 KB (13.54 MB)** | 30,464 KB (29.75 MB) | 49,016 KB (47.87 MB) | 81,024 KB (79.13 MB) | **5.84x less than Node / 2.20x less than Bun** | +| **FW 3: Express node:http** | **15,360 KB (15.00 MB)** | 33,024 KB (32.25 MB) | 47,032 KB (45.93 MB) | 80,400 KB (78.52 MB) | **5.23x less than Node / 2.15x less than Bun** | +| **01-tot-autonomous-sre-agent** | **18,944 KB (18.50 MB)** | 31,744 KB (31.00 MB) | 53,352 KB (52.10 MB) | 82,952 KB (81.01 MB) | **4.38x less than Node / 1.68x less than Bun** | +| **02-mcp-code-mode-orchestrator** | **18,028 KB (17.61 MB)** | 28,416 KB (27.75 MB) | 46,656 KB (45.56 MB) | 82,820 KB (80.88 MB) | **4.59x less than Node / 1.58x less than Bun** | +| **03-multi-tenant-saas-plugin-mesh** | **15,744 KB (15.38 MB)** | 26,496 KB (25.88 MB) | 49,800 KB (48.63 MB) | 88,580 KB (86.50 MB) | **5.63x less than Node / 1.68x less than Bun** | +| **04-wasm-zero-trust-cdr-pipeline** | **19,712 KB (19.25 MB)** | 31,616 KB (30.88 MB) | 49,748 KB (48.58 MB) | 80,392 KB (78.51 MB) | **4.08x less than Node / 1.60x less than Bun** | +| **05-time-travel-chaos-fuzzer-payments** | **15,616 KB (15.25 MB)** | 29,056 KB (28.38 MB) | 49,524 KB (48.36 MB) | 80,928 KB (79.03 MB) | **5.18x less than Node / 1.86x less than Bun** | +| **FW 4: SvelteKit 3 + Svelte 5** | **21,120 KB (20.63 MB)** | 41,728 KB (40.75 MB) | 56,476 KB (55.15 MB) | 85,664 KB (83.66 MB) | **4.06x less than Node / 1.98x less than Bun** | + +--- + +## 5. Multi-Tenant Edge KV, AI Agent Checkpoints & 5-Ring Security Telemetry + +| Subsystem / Benchmark | Measured Telemetry | Status | +| :--- | :--- | :---: | +| **Sharded `Slice.kv` (`1,001` Get/Set/Incr Ops in Isolate)** | **`500.30 us`** total (`--warm`, `8,431 B` memory cage) | `PASS` | +| **Multi-Tenant `--tenant-dir` Zero-Downtime Hot-Swap** | Live atomic replacement of `tenant-alpha.cas` (`v1 -> v2-hot-swapped`) with isolated `Slice.kv` state | `PASS` | +| **Deterministic Time-Travel Replay (`--deterministic=20261019`)** | 100% bit-for-bit identical PRNG (`Math.random`) & virtual clock (`Date.now`, `performance.now`) | `PASS` | +| **Tree-of-Thought AI Agent (`Slice.checkpoint` + 3 `evalSandbox` + `restore`)** | **`50.17 us`** total (`1.87 us` child sandbox) | `PASS` | +| **Cloud Metadata SSRF (`169.254.169.254`) & Base64 Egress DLP Guard** | `SSRF_METADATA_BLOCKED` & `EGRESS_SECRET_LEAK_BLOCKED` deterministically trapped | `PASS` | +| **Built-In Model Context Protocol Server (`slice mcp --smoke-test`)** | JSON-RPC 2.0 `initialize`, `tools/list`, `tools/call` verified over `stdio` | `PASS` | diff --git a/tests/reports/latest.json b/tests/reports/latest.json index 6a6c648..3b33285 100644 --- a/tests/reports/latest.json +++ b/tests/reports/latest.json @@ -1,8 +1,8 @@ { "metadata": { "version": "0.10.5", - "commit": "a0c723e", - "timestampUtc": "2026-11-09T20:29:07Z", + "commit": "47bfa6b", + "timestampUtc": "2026-11-09T22:52:49Z", "environment": "Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)", "runtimes": { "slice": "v0.10.5", @@ -10,18 +10,18 @@ "deno": "v2.9.8", "node": "v27.0.0-alpha.0.0.0" }, - "archiveFile": "tests/reports/bench_v0.10.5_20261109_202907Z_a0c723e.md", + "archiveFile": "tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md", "latestFile": "tests/reports/latest.md" }, "microvm": { "linux": { - "coldMinUs": 1.17, - "coldP50Us": 1.24, - "coldP99Us": 1.61, - "swarm1000Ms": 1.51, - "swarm1000RssMb": 10.07, + "coldMinUs": 0.96, + "coldP50Us": 1.05, + "coldP99Us": 1.8, + "swarm1000Ms": 1.37, + "swarm1000RssMb": 9.7, "cas500ColdMs": 3.408, - "cas500MemUs": 394.9, + "cas500MemUs": 542.85, "ringIo10kMs": 0.02 }, "windows": { @@ -37,36 +37,36 @@ }, "httpKeepAlive": { "sliceTier0": { - "rps": 148407, - "avgUs": 6.74, - "totalMs": 107.8 + "rps": 137020, + "avgUs": 7.3, + "totalMs": 116.8 }, "sliceTier1": { - "rps": 145839, - "avgUs": 6.86, - "totalMs": 109.7 + "rps": 125831, + "avgUs": 7.95, + "totalMs": 127.2 }, "deno": { - "rps": 100099, - "avgUs": 9.99, - "totalMs": 159.8 + "rps": 87455, + "avgUs": 11.43, + "totalMs": 183 }, "bun": { - "rps": 97987, - "avgUs": 10.21, - "totalMs": 163.3 + "rps": 72924, + "avgUs": 13.71, + "totalMs": 219.4 }, "node": { - "rps": 55977, - "avgUs": 17.86, - "totalMs": 285.8 + "rps": 45868, + "avgUs": 21.8, + "totalMs": 348.8 } }, "primitives": { - "kv1001Us": 644.66, + "kv1001Us": 500.3, "kvMemBytes": 8431, - "tot3SandboxesUs": 55.02, - "totSingleSandboxUs": 1.775 + "tot3SandboxesUs": 50.17, + "totSingleSandboxUs": 1.873 }, "workloads": [ { @@ -76,16 +76,16 @@ "label": "`01-fintech-checkout` (Multi-File TS + SHA-256)", "category": "core_edge_crypto", "flagship": true, - "sliceCasMinMs": 5.737, - "sliceCasAvgMs": 6.206, - "sliceBinMinMs": 6.109, - "sliceBinAvgMs": 6.836, - "sliceSrcAvgMs": 18.574, - "sliceWarmMs": 1.168, - "prevSliceCasAvgMs": 6.209, - "bunAvgMs": 14.399, - "denoAvgMs": 38.716, - "nodeAvgMs": 59.167 + "sliceCasMinMs": 5.965, + "sliceCasAvgMs": 6.549, + "sliceBinMinMs": 6.64, + "sliceBinAvgMs": 8.093, + "sliceSrcAvgMs": 21.635, + "sliceWarmMs": 1.934, + "prevSliceCasAvgMs": 6.206, + "bunAvgMs": 15.167, + "denoAvgMs": 42.607, + "nodeAvgMs": 74.22 }, { "num": 2, @@ -94,16 +94,16 @@ "label": "`02-npm-ecosystem-suite` (`semver` + `ms` + `ini`)", "category": "npm_ast_disk", "flagship": false, - "sliceCasMinMs": 13.667, - "sliceCasAvgMs": 14.659, - "sliceBinMinMs": 13.978, - "sliceBinAvgMs": 15.257, - "sliceSrcAvgMs": 38.947, - "sliceWarmMs": 3.989, - "prevSliceCasAvgMs": 14.111, - "bunAvgMs": 21.031, - "denoAvgMs": 54.896, - "nodeAvgMs": 72.423 + "sliceCasMinMs": 14.494, + "sliceCasAvgMs": 16.553, + "sliceBinMinMs": 14.803, + "sliceBinAvgMs": 16.721, + "sliceSrcAvgMs": 44.654, + "sliceWarmMs": 4.79, + "prevSliceCasAvgMs": 14.659, + "bunAvgMs": 24.251, + "denoAvgMs": 59.826, + "nodeAvgMs": 81.827 }, { "num": 3, @@ -112,16 +112,16 @@ "label": "`03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O)", "category": "npm_ast_disk", "flagship": true, - "sliceCasMinMs": 7.418, - "sliceCasAvgMs": 8.036, - "sliceBinMinMs": 7.703, - "sliceBinAvgMs": 8.745, - "sliceSrcAvgMs": 26.546, - "sliceWarmMs": 2.175, - "prevSliceCasAvgMs": 7.819, - "bunAvgMs": 14.427, - "denoAvgMs": 45.774, - "nodeAvgMs": 63.282 + "sliceCasMinMs": 7.023, + "sliceCasAvgMs": 7.941, + "sliceBinMinMs": 7.174, + "sliceBinAvgMs": 8.422, + "sliceSrcAvgMs": 28.92, + "sliceWarmMs": 1.613, + "prevSliceCasAvgMs": 8.036, + "bunAvgMs": 17.735, + "denoAvgMs": 50.096, + "nodeAvgMs": 70.811 }, { "num": 4, @@ -130,16 +130,16 @@ "label": "`04-edge-api-gateway` (`fast-querystring` + `ms`)", "category": "core_edge_crypto", "flagship": false, - "sliceCasMinMs": 7.222, - "sliceCasAvgMs": 7.85, - "sliceBinMinMs": 7.727, - "sliceBinAvgMs": 8.498, - "sliceSrcAvgMs": 23.332, - "sliceWarmMs": 2.193, - "prevSliceCasAvgMs": 7.94, - "bunAvgMs": 15.712, - "denoAvgMs": 45.705, - "nodeAvgMs": 65.196 + "sliceCasMinMs": 7.149, + "sliceCasAvgMs": 7.827, + "sliceBinMinMs": 7.561, + "sliceBinAvgMs": 8.669, + "sliceSrcAvgMs": 26.354, + "sliceWarmMs": 1.769, + "prevSliceCasAvgMs": 7.85, + "bunAvgMs": 16.48, + "denoAvgMs": 49.015, + "nodeAvgMs": 72.202 }, { "num": 5, @@ -148,16 +148,16 @@ "label": "`05-jwt-oauth-session-guard` (`cookie` + `ms` + HMAC)", "category": "core_edge_crypto", "flagship": false, - "sliceCasMinMs": 10.028, - "sliceCasAvgMs": 10.654, - "sliceBinMinMs": 10.884, - "sliceBinAvgMs": 11.471, - "sliceSrcAvgMs": 24.029, - "sliceWarmMs": 5.686, - "prevSliceCasAvgMs": 10.82, - "bunAvgMs": 15.477, - "denoAvgMs": 45.984, - "nodeAvgMs": 65.979 + "sliceCasMinMs": 10.114, + "sliceCasAvgMs": 11.143, + "sliceBinMinMs": 10.987, + "sliceBinAvgMs": 11.926, + "sliceSrcAvgMs": 26.499, + "sliceWarmMs": 8.203, + "prevSliceCasAvgMs": 10.654, + "bunAvgMs": 15.814, + "denoAvgMs": 51.773, + "nodeAvgMs": 76.002 }, { "num": 6, @@ -166,16 +166,16 @@ "label": "`06-telemetry-metrics-pipeline` (`bytes` + `flatted` + WAL)", "category": "npm_ast_disk", "flagship": false, - "sliceCasMinMs": 13.697, - "sliceCasAvgMs": 14.519, - "sliceBinMinMs": 14.188, - "sliceBinAvgMs": 15.347, - "sliceSrcAvgMs": 31.034, - "sliceWarmMs": 5.943, - "prevSliceCasAvgMs": 14.531, - "bunAvgMs": 17.76, - "denoAvgMs": 48.005, - "nodeAvgMs": 66.981 + "sliceCasMinMs": 14.79, + "sliceCasAvgMs": 16.076, + "sliceBinMinMs": 15.409, + "sliceBinAvgMs": 17.028, + "sliceSrcAvgMs": 37.703, + "sliceWarmMs": 6.338, + "prevSliceCasAvgMs": 14.519, + "bunAvgMs": 19.737, + "denoAvgMs": 56.963, + "nodeAvgMs": 71.608 }, { "num": 7, @@ -184,16 +184,16 @@ "label": "`07-graphql-ast-validator` (`dlv` + `dset` + AST Cost)", "category": "npm_ast_disk", "flagship": false, - "sliceCasMinMs": 8.978, - "sliceCasAvgMs": 9.992, - "sliceBinMinMs": 9.486, - "sliceBinAvgMs": 10.286, - "sliceSrcAvgMs": 21.947, - "sliceWarmMs": 4.429, - "prevSliceCasAvgMs": 9.236, - "bunAvgMs": 13.532, - "denoAvgMs": 53.519, - "nodeAvgMs": 62.876 + "sliceCasMinMs": 8.787, + "sliceCasAvgMs": 11.115, + "sliceBinMinMs": 9.491, + "sliceBinAvgMs": 10.37, + "sliceSrcAvgMs": 24.844, + "sliceWarmMs": 4.102, + "prevSliceCasAvgMs": 9.992, + "bunAvgMs": 15.024, + "denoAvgMs": 46.462, + "nodeAvgMs": 68.656 }, { "num": 8, @@ -202,16 +202,16 @@ "label": "`08-event-driven-state-journal` (`mitt` + `ms` + JSONL Replay)", "category": "npm_ast_disk", "flagship": false, - "sliceCasMinMs": 11.393, - "sliceCasAvgMs": 13.568, - "sliceBinMinMs": 11.001, - "sliceBinAvgMs": 12.399, - "sliceSrcAvgMs": 29.079, - "sliceWarmMs": 6.14, - "prevSliceCasAvgMs": 11.756, - "bunAvgMs": 16.462, - "denoAvgMs": 49.933, - "nodeAvgMs": 66.841 + "sliceCasMinMs": 10.997, + "sliceCasAvgMs": 12.471, + "sliceBinMinMs": 11.503, + "sliceBinAvgMs": 12.646, + "sliceSrcAvgMs": 35.987, + "sliceWarmMs": 5.602, + "prevSliceCasAvgMs": 13.568, + "bunAvgMs": 17.725, + "denoAvgMs": 53.924, + "nodeAvgMs": 71.64 }, { "num": 9, @@ -220,16 +220,16 @@ "label": "`09-wintertc-web-router` (`Request` + `Response` + `URL`, 80 reqs)", "category": "wintertc_fetch_dlp", "flagship": false, - "sliceCasMinMs": 14.255, - "sliceCasAvgMs": 15.476, - "sliceBinMinMs": 14.801, - "sliceBinAvgMs": 15.679, - "sliceSrcAvgMs": 34.744, - "sliceWarmMs": 10.881, - "prevSliceCasAvgMs": 14.792, - "bunAvgMs": 14.242, - "denoAvgMs": 49.197, - "nodeAvgMs": 88.955 + "sliceCasMinMs": 15.006, + "sliceCasAvgMs": 16.9, + "sliceBinMinMs": 15.631, + "sliceBinAvgMs": 17.946, + "sliceSrcAvgMs": 38.74, + "sliceWarmMs": 11.562, + "prevSliceCasAvgMs": 15.476, + "bunAvgMs": 14.796, + "denoAvgMs": 57.896, + "nodeAvgMs": 96.743 }, { "num": 10, @@ -238,16 +238,16 @@ "label": "`10-fullstack-bff-microservice` (`cookie` + `dlv` + `ms` + `ETag`, 60 reqs)", "category": "wintertc_fetch_dlp", "flagship": false, - "sliceCasMinMs": 13.025, - "sliceCasAvgMs": 13.998, - "sliceBinMinMs": 13.177, - "sliceBinAvgMs": 13.96, - "sliceSrcAvgMs": 34.911, - "sliceWarmMs": 7.199, - "prevSliceCasAvgMs": 14.266, - "bunAvgMs": 14.723, - "denoAvgMs": 50.512, - "nodeAvgMs": 87.655 + "sliceCasMinMs": 12.895, + "sliceCasAvgMs": 14.257, + "sliceBinMinMs": 13.832, + "sliceBinAvgMs": 16.402, + "sliceSrcAvgMs": 39.87, + "sliceWarmMs": 11.179, + "prevSliceCasAvgMs": 13.998, + "bunAvgMs": 18.103, + "denoAvgMs": 64.257, + "nodeAvgMs": 101.196 }, { "num": 11, @@ -256,16 +256,16 @@ "label": "`11-static-asset-cdn-edge` (`bytes` + `ms` + `ETag` `304`, 80 reqs)", "category": "wintertc_fetch_dlp", "flagship": false, - "sliceCasMinMs": 9.543, - "sliceCasAvgMs": 10.268, - "sliceBinMinMs": 9.919, - "sliceBinAvgMs": 10.693, - "sliceSrcAvgMs": 28.604, - "sliceWarmMs": 4.43, - "prevSliceCasAvgMs": 9.957, - "bunAvgMs": 14.581, - "denoAvgMs": 54.186, - "nodeAvgMs": 88.489 + "sliceCasMinMs": 10.522, + "sliceCasAvgMs": 11.158, + "sliceBinMinMs": 10.352, + "sliceBinAvgMs": 12.072, + "sliceSrcAvgMs": 33.918, + "sliceWarmMs": 4.154, + "prevSliceCasAvgMs": 10.268, + "bunAvgMs": 15.225, + "denoAvgMs": 56.518, + "nodeAvgMs": 101.741 }, { "num": 12, @@ -274,16 +274,16 @@ "label": "`12-ai-sse-token-streamer` (`mitt` + `ms` + SSE + DLP, 320 frames)", "category": "wintertc_fetch_dlp", "flagship": false, - "sliceCasMinMs": 15.514, - "sliceCasAvgMs": 16.665, - "sliceBinMinMs": 16.117, - "sliceBinAvgMs": 17.562, - "sliceSrcAvgMs": 33.871, - "sliceWarmMs": 9.427, - "prevSliceCasAvgMs": 16.313, - "bunAvgMs": 15.962, - "denoAvgMs": 52.085, - "nodeAvgMs": 92.752 + "sliceCasMinMs": 15.373, + "sliceCasAvgMs": 18.478, + "sliceBinMinMs": 16.82, + "sliceBinAvgMs": 19.011, + "sliceSrcAvgMs": 39.287, + "sliceWarmMs": 8.424, + "prevSliceCasAvgMs": 16.665, + "bunAvgMs": 17.424, + "denoAvgMs": 56.409, + "nodeAvgMs": 111.849 }, { "num": 13, @@ -292,16 +292,16 @@ "label": "`13-webhook-orchestrator-ssrf` (`fast-querystring` + `ms` + Live `fetch`)", "category": "wintertc_fetch_dlp", "flagship": false, - "sliceCasMinMs": 13.593, - "sliceCasAvgMs": 14.135, - "sliceBinMinMs": 13.975, - "sliceBinAvgMs": 15.028, - "sliceSrcAvgMs": 36.839, - "sliceWarmMs": 6.475, - "prevSliceCasAvgMs": 13.841, - "bunAvgMs": 21.1, - "denoAvgMs": 53.692, - "nodeAvgMs": 115.809 + "sliceCasMinMs": 13.935, + "sliceCasAvgMs": 15.312, + "sliceBinMinMs": 14.75, + "sliceBinAvgMs": 15.857, + "sliceSrcAvgMs": 44.061, + "sliceWarmMs": 7.041, + "prevSliceCasAvgMs": 14.135, + "bunAvgMs": 25.142, + "denoAvgMs": 60.842, + "nodeAvgMs": 132.603 }, { "num": 14, @@ -310,16 +310,16 @@ "label": "`14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`)", "category": "wintertc_fetch_dlp", "flagship": true, - "sliceCasMinMs": 14.691, - "sliceCasAvgMs": 15.515, - "sliceBinMinMs": 15.085, - "sliceBinAvgMs": 16.745, - "sliceSrcAvgMs": 34.069, - "sliceWarmMs": 7.867, - "prevSliceCasAvgMs": 14.809, - "bunAvgMs": 22.376, - "denoAvgMs": 56.663, - "nodeAvgMs": 112.022 + "sliceCasMinMs": 14.684, + "sliceCasAvgMs": 15.929, + "sliceBinMinMs": 14.28, + "sliceBinAvgMs": 16.196, + "sliceSrcAvgMs": 37.649, + "sliceWarmMs": 7.802, + "prevSliceCasAvgMs": 15.515, + "bunAvgMs": 24.46, + "denoAvgMs": 61.587, + "nodeAvgMs": 122.583 }, { "num": 15, @@ -328,16 +328,16 @@ "label": "`15-time-travel-test-suite` (`semver` + `ms` + `dlv` + `dset` + 24 Rollbacks)", "category": "realtime_workers_wasm", "flagship": false, - "sliceCasMinMs": 14.574, - "sliceCasAvgMs": 15.345, - "sliceBinMinMs": 15.367, - "sliceBinAvgMs": 16.621, - "sliceSrcAvgMs": 43.801, - "sliceWarmMs": 5.088, - "prevSliceCasAvgMs": 15.122, - "bunAvgMs": 25.308, - "denoAvgMs": 68.122, - "nodeAvgMs": 84.543 + "sliceCasMinMs": 15.097, + "sliceCasAvgMs": 16.968, + "sliceBinMinMs": 15.668, + "sliceBinAvgMs": 17.549, + "sliceSrcAvgMs": 50.828, + "sliceWarmMs": 5.987, + "prevSliceCasAvgMs": 15.345, + "bunAvgMs": 28.355, + "denoAvgMs": 77.46, + "nodeAvgMs": 95.857 }, { "num": 16, @@ -346,16 +346,16 @@ "label": "`16-dotenv-dlp-config-vault` (`ini` + `cookie` + `bytes` + `.env` Auto-DLP)", "category": "core_edge_crypto", "flagship": false, - "sliceCasMinMs": 7.214, - "sliceCasAvgMs": 7.716, - "sliceBinMinMs": 7.584, - "sliceBinAvgMs": 8.187, - "sliceSrcAvgMs": 27.94, - "sliceWarmMs": 1.686, - "prevSliceCasAvgMs": 7.469, - "bunAvgMs": 15.118, - "denoAvgMs": 48.508, - "nodeAvgMs": 66.922 + "sliceCasMinMs": 7.372, + "sliceCasAvgMs": 8.364, + "sliceBinMinMs": 7.863, + "sliceBinAvgMs": 9.346, + "sliceSrcAvgMs": 32.219, + "sliceWarmMs": 1.28, + "prevSliceCasAvgMs": 7.716, + "bunAvgMs": 16.161, + "denoAvgMs": 54.266, + "nodeAvgMs": 75.761 }, { "num": 17, @@ -364,16 +364,16 @@ "label": "`17-zero-trust-redirect-keepalive-mesh` (Keep-Alive/307/SSRF/DLP)", "category": "wintertc_fetch_dlp", "flagship": false, - "sliceCasMinMs": 15.515, - "sliceCasAvgMs": 16.359, - "sliceBinMinMs": 15.541, - "sliceBinAvgMs": 16.874, - "sliceSrcAvgMs": 42.347, - "sliceWarmMs": 8.301, - "prevSliceCasAvgMs": 16.2, - "bunAvgMs": 22.977, - "denoAvgMs": 60.584, - "nodeAvgMs": 118.344 + "sliceCasMinMs": 16.275, + "sliceCasAvgMs": 17.319, + "sliceBinMinMs": 16.816, + "sliceBinAvgMs": 18.538, + "sliceSrcAvgMs": 47.714, + "sliceWarmMs": 9.241, + "prevSliceCasAvgMs": 16.359, + "bunAvgMs": 25.921, + "denoAvgMs": 65.348, + "nodeAvgMs": 132.34 }, { "num": 18, @@ -382,16 +382,16 @@ "label": "`18-async-event-loop-fanout-scheduler` (Timer Wheel/`Promise.all`/`AbortSignal`)", "category": "wintertc_fetch_dlp", "flagship": false, - "sliceCasMinMs": 29.505, - "sliceCasAvgMs": 31.543, - "sliceBinMinMs": 29.017, - "sliceBinAvgMs": 30.834, - "sliceSrcAvgMs": 47.953, - "sliceWarmMs": 17.928, - "prevSliceCasAvgMs": 29.421, - "bunAvgMs": 32.957, - "denoAvgMs": 72.222, - "nodeAvgMs": 84.99 + "sliceCasMinMs": 28.487, + "sliceCasAvgMs": 30.986, + "sliceBinMinMs": 31.707, + "sliceBinAvgMs": 33.993, + "sliceSrcAvgMs": 52.49, + "sliceWarmMs": 17.717, + "prevSliceCasAvgMs": 31.543, + "bunAvgMs": 37.518, + "denoAvgMs": 81.154, + "nodeAvgMs": 94.107 }, { "num": 19, @@ -400,16 +400,16 @@ "label": "`19-wintertc-webcrypto-streams-edge` (WebCrypto/Streams/FormData/Clone)", "category": "wintertc_fetch_dlp", "flagship": false, - "sliceCasMinMs": 7.808, - "sliceCasAvgMs": 8.353, - "sliceBinMinMs": 8.415, - "sliceBinAvgMs": 9.008, - "sliceSrcAvgMs": 32.179, - "sliceWarmMs": 1.744, - "prevSliceCasAvgMs": 8.191, - "bunAvgMs": 14.072, - "denoAvgMs": 46.331, - "nodeAvgMs": 89.299 + "sliceCasMinMs": 8.341, + "sliceCasAvgMs": 9.453, + "sliceBinMinMs": 8.631, + "sliceBinAvgMs": 9.903, + "sliceSrcAvgMs": 37.429, + "sliceWarmMs": 1.477, + "prevSliceCasAvgMs": 8.353, + "bunAvgMs": 15.328, + "denoAvgMs": 53.271, + "nodeAvgMs": 102.717 }, { "num": 20, @@ -418,16 +418,16 @@ "label": "`20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler)", "category": "npm_ast_disk", "flagship": true, - "sliceCasMinMs": 10.734, - "sliceCasAvgMs": 11.502, - "sliceBinMinMs": 11.121, - "sliceBinAvgMs": 11.919, - "sliceSrcAvgMs": 45.687, - "sliceWarmMs": 0.545, - "prevSliceCasAvgMs": 11.296, - "bunAvgMs": 22.558, - "denoAvgMs": 55.771, - "nodeAvgMs": 71.858 + "sliceCasMinMs": 10.574, + "sliceCasAvgMs": 12.304, + "sliceBinMinMs": 11.021, + "sliceBinAvgMs": 12.468, + "sliceSrcAvgMs": 53.659, + "sliceWarmMs": 0.888, + "prevSliceCasAvgMs": 11.502, + "bunAvgMs": 25.969, + "denoAvgMs": 64.068, + "nodeAvgMs": 88.273 }, { "num": 21, @@ -436,16 +436,16 @@ "label": "`21-websocket-realtime-and-security-guard` (RFC 6455 `WebSocket` + 5-Ring Guard)", "category": "realtime_workers_wasm", "flagship": false, - "sliceCasMinMs": 10.148, - "sliceCasAvgMs": 10.803, - "sliceBinMinMs": 10.7, - "sliceBinAvgMs": 11.98, - "sliceSrcAvgMs": 41.123, - "sliceWarmMs": 2.872, - "prevSliceCasAvgMs": 10.553, - "bunAvgMs": 20.404, - "denoAvgMs": 53.926, - "nodeAvgMs": 119.323 + "sliceCasMinMs": 10.388, + "sliceCasAvgMs": 11.666, + "sliceBinMinMs": 11.096, + "sliceBinAvgMs": 12.224, + "sliceSrcAvgMs": 48.96, + "sliceWarmMs": 2.803, + "prevSliceCasAvgMs": 10.803, + "bunAvgMs": 24.293, + "denoAvgMs": 60.684, + "nodeAvgMs": 135.299 }, { "num": 22, @@ -454,16 +454,16 @@ "label": "`22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec)", "category": "realtime_workers_wasm", "flagship": true, - "sliceCasMinMs": 19.882, - "sliceCasAvgMs": 21.52, - "sliceBinMinMs": 19.974, - "sliceBinAvgMs": 21.161, - "sliceSrcAvgMs": 37.732, - "sliceWarmMs": 2.217, - "prevSliceCasAvgMs": 20.938, - "bunAvgMs": 57.852, - "denoAvgMs": 113.393, - "nodeAvgMs": 103.236 + "sliceCasMinMs": 21.213, + "sliceCasAvgMs": 24.541, + "sliceBinMinMs": 20.697, + "sliceBinAvgMs": 23.822, + "sliceSrcAvgMs": 44.508, + "sliceWarmMs": 2.377, + "prevSliceCasAvgMs": 21.52, + "bunAvgMs": 68.043, + "denoAvgMs": 134.578, + "nodeAvgMs": 116.66 }, { "num": 23, @@ -472,16 +472,16 @@ "label": "`23-wasm-crypto-and-simd-kernel` (Pure-Rust `WebAssembly` + 5-Ring WASM Sec)", "category": "realtime_workers_wasm", "flagship": false, - "sliceCasMinMs": 14.824, - "sliceCasAvgMs": 15.912, - "sliceBinMinMs": 15.038, - "sliceBinAvgMs": 15.965, - "sliceSrcAvgMs": 26.006, - "sliceWarmMs": 1.955, - "prevSliceCasAvgMs": 15.069, - "bunAvgMs": 21.598, - "denoAvgMs": 42.081, - "nodeAvgMs": 61.413 + "sliceCasMinMs": 15.158, + "sliceCasAvgMs": 17.83, + "sliceBinMinMs": 15.886, + "sliceBinAvgMs": 18.181, + "sliceSrcAvgMs": 31.114, + "sliceWarmMs": 2.088, + "prevSliceCasAvgMs": 15.912, + "bunAvgMs": 24.671, + "denoAvgMs": 49.186, + "nodeAvgMs": 78.258 }, { "num": 24, @@ -490,16 +490,16 @@ "label": "`24-tsx-ssr-and-wasm-edge-pipeline` (`WebAssembly` SLA Scorer + SSR Pipeline)", "category": "realtime_workers_wasm", "flagship": false, - "sliceCasMinMs": 8.477, - "sliceCasAvgMs": 8.927, - "sliceBinMinMs": 8.624, - "sliceBinAvgMs": 9.257, - "sliceSrcAvgMs": 29.458, - "sliceWarmMs": 1.824, - "prevSliceCasAvgMs": 8.419, - "bunAvgMs": 19.246, - "denoAvgMs": 43.391, - "nodeAvgMs": 69.066 + "sliceCasMinMs": 8.205, + "sliceCasAvgMs": 9.438, + "sliceBinMinMs": 8.649, + "sliceBinAvgMs": 9.628, + "sliceSrcAvgMs": 33.98, + "sliceWarmMs": 1.751, + "prevSliceCasAvgMs": 8.927, + "bunAvgMs": 21.746, + "denoAvgMs": 51.375, + "nodeAvgMs": 78.308 }, { "num": 25, @@ -508,16 +508,16 @@ "label": "`FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`)", "category": "frameworks", "flagship": true, - "sliceCasMinMs": 14.922, - "sliceCasAvgMs": 16.071, - "sliceBinMinMs": 14.861, - "sliceBinAvgMs": 15.859, - "sliceSrcAvgMs": 54.768, - "sliceWarmMs": 5.721, - "prevSliceCasAvgMs": 15.318, - "bunAvgMs": 19.913, - "denoAvgMs": 53.967, - "nodeAvgMs": 99.71 + "sliceCasMinMs": 14.968, + "sliceCasAvgMs": 16.903, + "sliceBinMinMs": 15.466, + "sliceBinAvgMs": 17.879, + "sliceSrcAvgMs": 61.054, + "sliceWarmMs": 7.535, + "prevSliceCasAvgMs": 16.071, + "bunAvgMs": 22.254, + "denoAvgMs": 61.183, + "nodeAvgMs": 110.858 }, { "num": 26, @@ -526,16 +526,16 @@ "label": "`FW-02: frameworks/02-itty-router-unjs-nitro-stack` (`itty-router` + UnJS)", "category": "frameworks", "flagship": false, - "sliceCasMinMs": 18.246, - "sliceCasAvgMs": 19.468, - "sliceBinMinMs": 17.449, - "sliceBinAvgMs": 18.506, - "sliceSrcAvgMs": 49.744, - "sliceWarmMs": 9.528, - "prevSliceCasAvgMs": 18.321, - "bunAvgMs": 19.441, - "denoAvgMs": 47.715, - "nodeAvgMs": 91.467 + "sliceCasMinMs": 17.744, + "sliceCasAvgMs": 19.999, + "sliceBinMinMs": 17.828, + "sliceBinAvgMs": 20.653, + "sliceSrcAvgMs": 57.474, + "sliceWarmMs": 10.506, + "prevSliceCasAvgMs": 19.468, + "bunAvgMs": 21.391, + "denoAvgMs": 53.565, + "nodeAvgMs": 100.97 }, { "num": 32, @@ -544,16 +544,16 @@ "label": "`FW-03: frameworks/03-node-http-express-compat` (`node:http` + `node:stream` Express/Polka)", "category": "frameworks", "flagship": false, - "sliceCasMinMs": 16.234, - "sliceCasAvgMs": 16.83, - "sliceBinMinMs": 16.08, - "sliceBinAvgMs": 17.159, - "sliceSrcAvgMs": 25.395, - "sliceWarmMs": 1.3, - "prevSliceCasAvgMs": 16.913, - "bunAvgMs": 49.313, - "denoAvgMs": 68.567, - "nodeAvgMs": 95.033 + "sliceCasMinMs": 16.776, + "sliceCasAvgMs": 18.85, + "sliceBinMinMs": 16.441, + "sliceBinAvgMs": 19.326, + "sliceSrcAvgMs": 26.726, + "sliceWarmMs": 1.399, + "prevSliceCasAvgMs": 16.83, + "bunAvgMs": 41.711, + "denoAvgMs": 60.165, + "nodeAvgMs": 99.962 }, { "num": 33, @@ -562,16 +562,16 @@ "label": "`FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`)", "category": "frameworks", "flagship": true, - "sliceCasMinMs": 33.804, - "sliceCasAvgMs": 36.16, - "sliceBinMinMs": 33.983, - "sliceBinAvgMs": 37.795, - "sliceSrcAvgMs": 160.588, - "sliceWarmMs": 17.019, - "prevSliceCasAvgMs": null, - "bunAvgMs": 46.579, - "denoAvgMs": 71.052, - "nodeAvgMs": 119.71 + "sliceCasMinMs": 34.463, + "sliceCasAvgMs": 39.319, + "sliceBinMinMs": 34.304, + "sliceBinAvgMs": 40.783, + "sliceSrcAvgMs": 180.822, + "sliceWarmMs": 19.712, + "prevSliceCasAvgMs": 36.16, + "bunAvgMs": 52.502, + "denoAvgMs": 84.299, + "nodeAvgMs": 133.012 }, { "num": 27, @@ -580,16 +580,16 @@ "label": "`CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes)", "category": "case_studies", "flagship": true, - "sliceCasMinMs": 25.515, - "sliceCasAvgMs": 26.485, - "sliceBinMinMs": 26.245, - "sliceBinAvgMs": 28.096, - "sliceSrcAvgMs": 69.091, - "sliceWarmMs": 13.12, - "prevSliceCasAvgMs": 26.69, - "bunAvgMs": 28.256, - "denoAvgMs": 72.647, - "nodeAvgMs": 89.711 + "sliceCasMinMs": 26.75, + "sliceCasAvgMs": 31.107, + "sliceBinMinMs": 26.945, + "sliceBinAvgMs": 31.878, + "sliceSrcAvgMs": 84.553, + "sliceWarmMs": 13.126, + "prevSliceCasAvgMs": 26.485, + "bunAvgMs": 32.776, + "denoAvgMs": 86.411, + "nodeAvgMs": 105.353 }, { "num": 28, @@ -598,16 +598,16 @@ "label": "`CS-02: case_studies/02-mcp-code-mode-orchestrator` (`-98.4%` Tokens)", "category": "case_studies", "flagship": false, - "sliceCasMinMs": 19.286, - "sliceCasAvgMs": 20.362, - "sliceBinMinMs": 19.884, - "sliceBinAvgMs": 21.082, - "sliceSrcAvgMs": 37.633, - "sliceWarmMs": 7.854, - "prevSliceCasAvgMs": 19.966, - "bunAvgMs": 16.23, - "denoAvgMs": 44.344, - "nodeAvgMs": 66.894 + "sliceCasMinMs": 18.425, + "sliceCasAvgMs": 20.659, + "sliceBinMinMs": 18.837, + "sliceBinAvgMs": 21.371, + "sliceSrcAvgMs": 41.344, + "sliceWarmMs": 6.569, + "prevSliceCasAvgMs": 20.362, + "bunAvgMs": 18.019, + "denoAvgMs": 52.128, + "nodeAvgMs": 79.359 }, { "num": 29, @@ -616,16 +616,16 @@ "label": "`CS-03: case_studies/03-multi-tenant-saas-plugin-mesh` (12 Tenants + Hot-Swap)", "category": "case_studies", "flagship": false, - "sliceCasMinMs": 12.948, - "sliceCasAvgMs": 13.984, - "sliceBinMinMs": 13.17, - "sliceBinAvgMs": 14, - "sliceSrcAvgMs": 41.307, - "sliceWarmMs": 6.27, - "prevSliceCasAvgMs": 13.726, - "bunAvgMs": 16.305, - "denoAvgMs": 49.236, - "nodeAvgMs": 84.935 + "sliceCasMinMs": 13.56, + "sliceCasAvgMs": 15.332, + "sliceBinMinMs": 13.832, + "sliceBinAvgMs": 15.796, + "sliceSrcAvgMs": 52.384, + "sliceWarmMs": 5.721, + "prevSliceCasAvgMs": 13.984, + "bunAvgMs": 18.869, + "denoAvgMs": 57.047, + "nodeAvgMs": 98.424 }, { "num": 30, @@ -634,16 +634,16 @@ "label": "`CS-04: case_studies/04-wasm-zero-trust-cdr-pipeline` (Wasm SimHash CDR)", "category": "case_studies", "flagship": false, - "sliceCasMinMs": 16.966, - "sliceCasAvgMs": 17.514, - "sliceBinMinMs": 17.276, - "sliceBinAvgMs": 18.387, - "sliceSrcAvgMs": 38.48, - "sliceWarmMs": 1.807, - "prevSliceCasAvgMs": 17.723, - "bunAvgMs": 19.807, - "denoAvgMs": 45.755, - "nodeAvgMs": 68.82 + "sliceCasMinMs": 17.489, + "sliceCasAvgMs": 19.955, + "sliceBinMinMs": 18.426, + "sliceBinAvgMs": 21.163, + "sliceSrcAvgMs": 45.664, + "sliceWarmMs": 1.656, + "prevSliceCasAvgMs": 17.514, + "bunAvgMs": 24.621, + "denoAvgMs": 50.99, + "nodeAvgMs": 78.359 }, { "num": 31, @@ -652,138 +652,138 @@ "label": "`CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas)", "category": "case_studies", "flagship": true, - "sliceCasMinMs": 17.305, - "sliceCasAvgMs": 18.127, - "sliceBinMinMs": 17.551, - "sliceBinAvgMs": 18.959, - "sliceSrcAvgMs": 44.147, - "sliceWarmMs": 10.313, - "prevSliceCasAvgMs": 18.002, - "bunAvgMs": 19.616, - "denoAvgMs": 62.942, - "nodeAvgMs": 83.703 + "sliceCasMinMs": 17.119, + "sliceCasAvgMs": 20.765, + "sliceBinMinMs": 17.498, + "sliceBinAvgMs": 21.73, + "sliceSrcAvgMs": 58.081, + "sliceWarmMs": 9.381, + "prevSliceCasAvgMs": 18.127, + "bunAvgMs": 23.262, + "denoAvgMs": 71.208, + "nodeAvgMs": 96.481 } ], "rss": [ { "id": "App 2: NPM semver+ms+ini", "label": "App 2: NPM semver+ms+ini", - "sliceKb": 14208, - "bunKb": 30080, - "denoKb": 47100, - "nodeKb": 71576 + "sliceKb": 13568, + "bunKb": 29948, + "denoKb": 46560, + "nodeKb": 71708 }, { "id": "App 6: Telemetry + Flatted", "label": "App 6: Telemetry + Flatted", - "sliceKb": 14592, - "bunKb": 30592, - "denoKb": 50780, - "nodeKb": 72988 + "sliceKb": 14612, + "bunKb": 30080, + "denoKb": 50548, + "nodeKb": 73240 }, { "id": "App 21: RFC 6455 WS + Sec", "label": "App 21: RFC 6455 WS + Sec", "sliceKb": 13952, - "bunKb": 32088, - "denoKb": 50848, - "nodeKb": 94724 + "bunKb": 31844, + "denoKb": 50936, + "nodeKb": 95104 }, { "id": "App 22: Workers + Sockets", "label": "App 22: Workers + Sockets", - "sliceKb": 22016, - "bunKb": 41568, - "denoKb": 62868, - "nodeKb": 94028 + "sliceKb": 22272, + "bunKb": 41808, + "denoKb": 63732, + "nodeKb": 93304 }, { "id": "App 23: Pure-Rust WASM", "label": "App 23: Pure-Rust WASM", - "sliceKb": 18944, - "bunKb": 30976, - "denoKb": 48924, - "nodeKb": 80660 + "sliceKb": 19072, + "bunKb": 30848, + "denoKb": 49160, + "nodeKb": 80528 }, { "id": "FW 1: Hono v4 Microservice", "label": "FW 1: Hono v4 Microservice", - "sliceKb": 15104, - "bunKb": 30624, - "denoKb": 49008, - "nodeKb": 88988 + "sliceKb": 14976, + "bunKb": 31176, + "denoKb": 48724, + "nodeKb": 89112 }, { "id": "FW 2: itty-router + UnJS", "label": "FW 2: itty-router + UnJS", - "sliceKb": 14720, - "bunKb": 31616, - "denoKb": 48628, - "nodeKb": 86796 + "sliceKb": 14336, + "bunKb": 31872, + "denoKb": 49084, + "nodeKb": 87300 }, { "id": "App 24: WASM + SSR", "label": "App 24: WASM + SSR", - "sliceKb": 13696, - "bunKb": 32256, - "denoKb": 48544, - "nodeKb": 81152 + "sliceKb": 13864, + "bunKb": 30464, + "denoKb": 49016, + "nodeKb": 81024 }, { "id": "FW 3: Express node:http", "label": "FW 3: Express node:http", - "sliceKb": 14976, + "sliceKb": 15360, "bunKb": 33024, - "denoKb": 46564, - "nodeKb": 79884 + "denoKb": 47032, + "nodeKb": 80400 }, { "id": "01-tot-autonomous-sre-agent", "label": "01-tot-autonomous-sre-agent", - "sliceKb": 18560, + "sliceKb": 18944, "bunKb": 31744, - "denoKb": 52980, - "nodeKb": 86016 + "denoKb": 53352, + "nodeKb": 82952 }, { "id": "02-mcp-code-mode-orchestrator", "label": "02-mcp-code-mode-orchestrator", - "sliceKb": 18112, - "bunKb": 27904, - "denoKb": 47068, - "nodeKb": 80648 + "sliceKb": 18028, + "bunKb": 28416, + "denoKb": 46656, + "nodeKb": 82820 }, { "id": "03-multi-tenant-saas-plugin-mesh", "label": "03-multi-tenant-saas-plugin-mesh", "sliceKb": 15744, - "bunKb": 28672, - "denoKb": 49480, - "nodeKb": 87940 + "bunKb": 26496, + "denoKb": 49800, + "nodeKb": 88580 }, { "id": "04-wasm-zero-trust-cdr-pipeline", "label": "04-wasm-zero-trust-cdr-pipeline", - "sliceKb": 19968, - "bunKb": 31104, - "denoKb": 49692, - "nodeKb": 80136 + "sliceKb": 19712, + "bunKb": 31616, + "denoKb": 49748, + "nodeKb": 80392 }, { "id": "05-time-travel-chaos-fuzzer-payments", "label": "05-time-travel-chaos-fuzzer-payments", - "sliceKb": 15744, - "bunKb": 29184, - "denoKb": 49780, - "nodeKb": 81440 + "sliceKb": 15616, + "bunKb": 29056, + "denoKb": 49524, + "nodeKb": 80928 }, { "id": "FW 4: SvelteKit 3 + Svelte 5", "label": "FW 4: SvelteKit 3 + Svelte 5", - "sliceKb": 20992, - "bunKb": 41984, - "denoKb": 56580, - "nodeKb": 85412 + "sliceKb": 21120, + "bunKb": 41728, + "denoKb": 56476, + "nodeKb": 85664 } ] } diff --git a/tests/reports/latest.md b/tests/reports/latest.md index 409ab12..60b4873 100644 --- a/tests/reports/latest.md +++ b/tests/reports/latest.md @@ -1,8 +1,8 @@ # Slice (Nexus-JS) — Full 33-Workload & MicroVM Benchmark Report -* **Slice Version:** `v0.10.5` (Commit `a0c723e`) -* **Generated Timestamp (UTC):** `2026-11-09T20:29:07Z` -* **Archive File:** [`tests/reports/bench_v0.10.5_20261109_202907Z_a0c723e.md`](./bench_v0.10.5_20261109_202907Z_a0c723e.md) +* **Slice Version:** `v0.10.5` (Commit `47bfa6b`) +* **Generated Timestamp (UTC):** `2026-11-09T22:52:49Z` +* **Archive File:** [`tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md`](./bench_v0.10.5_20261109_225249Z_47bfa6b.md) * **Canonical Latest Report:** [`tests/reports/latest.md`](./latest.md) * **Environment:** `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` * **Compared Runtimes:** @@ -19,9 +19,9 @@ Across all **33 real-world multi-file TypeScript applications, framework suites, | Metric | Linux (`x86_64` Docker) | Windows (`x86_64` Host) | Comparison vs Runtimes & MicroVMs | | :--- | :---: | :---: | :--- | -| **Single Isolate Cold-Start (Min / P50 / P99)** | **`1.17 us` / `1.24 us` / `1.61 us`** | **`1.40 us` / `1.60 us` / `2.30 us`** | **~120,000x faster than 125ms Firecracker VM** | -| **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.51 ms`** (`10.07 MB` RSS) | **`2.24 ms`** (`11.82 MB` RSS) | **> 10,000x faster than container/VM swarms** | -| **500-Module Monorepo Cold Boot (`0 stat()`)** | **`3.408 ms`** (`394.90 us` in-mem) | **`5.637 ms`** (`640.00 us` in-mem) | **20.6x faster than Node.js (`1,500+ stat()`)** | +| **Single Isolate Cold-Start (Min / P50 / P99)** | **`0.96 us` / `1.05 us` / `1.80 us`** | **`1.40 us` / `1.60 us` / `2.30 us`** | **~120,000x faster than 125ms Firecracker VM** | +| **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.37 ms`** (`9.70 MB` RSS) | **`2.24 ms`** (`11.82 MB` RSS) | **> 10,000x faster than container/VM swarms** | +| **500-Module Monorepo Cold Boot (`0 stat()`)** | **`3.408 ms`** (`542.85 us` in-mem) | **`5.637 ms`** (`640.00 us` in-mem) | **20.6x faster than Node.js (`1,500+ stat()`)** | | **10,000 Direct Kernel Ring I/O Completions** | **`0.02 ms`** | **`5.11 ms`** | **Zero worker-thread lock contention** | | **5-Ring Security Containment Verification** | **`5 / 5 PASS`** | **`5 / 5 PASS`** | **OCap + SES + Fuel + SSRF/DLP + MPK** | @@ -31,11 +31,11 @@ Across all **33 real-world multi-file TypeScript applications, framework suites, | Server / Runtime | Throughput (`req/s`) | Avg Latency / Req | Total Time (`16k` Reqs) | Relative Speedup vs Runtimes | | :--- | :---: | :---: | :---: | :--- | -| **`slice serve` (Tier-0 CAS, `--workers=8`)** | **`148,407 req/s`** | **`6.74 us/req`** | **`107.8 ms`** | **`1.51x` faster than `Bun.serve` / `2.65x` Node.js** | -| **`slice serve` (Tier-1 WinterTC, `--workers=8`)** | **`145,839 req/s`** | **`6.86 us/req`** | **`109.7 ms`** | **`1.49x` faster than `Bun.serve` / `2.61x` Node.js** | -| **`Deno.serve` (`v2.9.8`, V8, No Per-Req Sandbox)** | `100,099 req/s` | `9.99 us/req` | `159.8 ms` | `1.02x` vs Bun | -| **`Bun.serve` (`v1.4.4`, JSC, No Per-Req Sandbox)** | `97,987 req/s` | `10.21 us/req` | `163.3 ms` | `1.00x` (Baseline) | -| **`Node.js http.createServer` (`v27.0.0-alpha.0.0.0`, V8)** | `55,977 req/s` | `17.86 us/req` | `285.8 ms` | `0.57x` vs Bun | +| **`slice serve` (Tier-0 CAS, `--workers=8`)** | **`137,020 req/s`** | **`7.30 us/req`** | **`116.8 ms`** | **`1.88x` faster than `Bun.serve` / `2.99x` Node.js** | +| **`slice serve` (Tier-1 WinterTC, `--workers=8`)** | **`125,831 req/s`** | **`7.95 us/req`** | **`127.2 ms`** | **`1.73x` faster than `Bun.serve` / `2.74x` Node.js** | +| **`Deno.serve` (`v2.9.8`, V8, No Per-Req Sandbox)** | `87,455 req/s` | `11.43 us/req` | `183.0 ms` | `1.20x` vs Bun | +| **`Bun.serve` (`v1.4.4`, JSC, No Per-Req Sandbox)** | `72,924 req/s` | `13.71 us/req` | `219.4 ms` | `1.00x` (Baseline) | +| **`Node.js http.createServer` (`v27.0.0-alpha.0.0.0`, V8)** | `45,868 req/s` | `21.80 us/req` | `348.8 ms` | `0.63x` vs Bun | --- @@ -43,39 +43,39 @@ Across all **33 real-world multi-file TypeScript applications, framework suites, | # | Workload (`tests/apps/`, `tests/frameworks/`, `tests/case_studies/`) | Slice Cold `.cas` (`SLICEBC\x01`) | Slice Standalone Bin (`SLICEBC\x01`) | Slice Warm (`--warm`) | Previous `.cas` (`Delta`) | Bun `v1.4.4` | Deno `v2.9.8` | Node.js `v27.0.0-alpha.0.0.0` | Slice Speedup vs Bun / Node.js | | :- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :--- | -| **01** | `01-fintech-checkout` (Multi-File TS + SHA-256) | **`6.206 ms`** (`5.74 ms` Min) | **`6.836 ms`** | **`1.168 ms`** | `6.209 ms` (`-0.0%`) | `14.399 ms` | `38.716 ms` | `59.167 ms` | **`2.32x Bun` (`12.33x` Warm) / `9.53x Node`** | -| **02** | `02-npm-ecosystem-suite` (`semver` + `ms` + `ini`) | **`14.659 ms`** (`13.67 ms` Min) | **`15.257 ms`** | **`3.989 ms`** | `14.111 ms` (`3.9%`) | `21.031 ms` | `54.896 ms` | `72.423 ms` | **`1.43x Bun` (`5.27x` Warm) / `4.94x Node`** | -| **03** | `03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O) | **`8.036 ms`** (`7.42 ms` Min) | **`8.745 ms`** | **`2.175 ms`** | `7.819 ms` (`2.8%`) | `14.427 ms` | `45.774 ms` | `63.282 ms` | **`1.80x Bun` (`6.63x` Warm) / `7.87x Node`** | -| **04** | `04-edge-api-gateway` (`fast-querystring` + `ms`) | **`7.850 ms`** (`7.22 ms` Min) | **`8.498 ms`** | **`2.193 ms`** | `7.940 ms` (`-1.1%`) | `15.712 ms` | `45.705 ms` | `65.196 ms` | **`2.00x Bun` (`7.16x` Warm) / `8.31x Node`** | -| **05** | `05-jwt-oauth-session-guard` (`cookie` + `ms` + HMAC) | **`10.654 ms`** (`10.03 ms` Min) | **`11.471 ms`** | **`5.686 ms`** | `10.820 ms` (`-1.5%`) | `15.477 ms` | `45.984 ms` | `65.979 ms` | **`1.45x Bun` (`2.72x` Warm) / `6.19x Node`** | -| **06** | `06-telemetry-metrics-pipeline` (`bytes` + `flatted` + WAL) | **`14.519 ms`** (`13.70 ms` Min) | **`15.347 ms`** | **`5.943 ms`** | `14.531 ms` (`-0.1%`) | `17.760 ms` | `48.005 ms` | `66.981 ms` | **`1.22x Bun` (`2.99x` Warm) / `4.61x Node`** | -| **07** | `07-graphql-ast-validator` (`dlv` + `dset` + AST Cost) | **`9.992 ms`** (`8.98 ms` Min) | **`10.286 ms`** | **`4.429 ms`** | `9.236 ms` (`8.2%`) | `13.532 ms` | `53.519 ms` | `62.876 ms` | **`1.35x Bun` (`3.06x` Warm) / `6.29x Node`** | -| **08** | `08-event-driven-state-journal` (`mitt` + `ms` + JSONL Replay) | **`13.568 ms`** (`11.39 ms` Min) | **`12.399 ms`** | **`6.140 ms`** | `11.756 ms` (`15.4%`) | `16.462 ms` | `49.933 ms` | `66.841 ms` | **`1.33x Bun` (`2.68x` Warm) / `5.39x Node`** | -| **09** | `09-wintertc-web-router` (`Request` + `Response` + `URL`, 80 reqs) | **`15.476 ms`** (`14.26 ms` Min) | **`15.679 ms`** | **`10.881 ms`** | `14.792 ms` (`4.6%`) | `14.242 ms` | `49.197 ms` | `88.955 ms` | **`1.31x Bun Warm` / `5.75x Node`** | -| **10** | `10-fullstack-bff-microservice` (`cookie` + `dlv` + `ms` + `ETag`, 60 reqs) | **`13.998 ms`** (`13.03 ms` Min) | **`13.960 ms`** | **`7.199 ms`** | `14.266 ms` (`-1.9%`) | `14.723 ms` | `50.512 ms` | `87.655 ms` | **`1.05x Bun` (`2.05x` Warm) / `6.28x Node`** | -| **11** | `11-static-asset-cdn-edge` (`bytes` + `ms` + `ETag` `304`, 80 reqs) | **`10.268 ms`** (`9.54 ms` Min) | **`10.693 ms`** | **`4.430 ms`** | `9.957 ms` (`3.1%`) | `14.581 ms` | `54.186 ms` | `88.489 ms` | **`1.42x Bun` (`3.29x` Warm) / `8.62x Node`** | -| **12** | `12-ai-sse-token-streamer` (`mitt` + `ms` + SSE + DLP, 320 frames) | **`16.665 ms`** (`15.51 ms` Min) | **`17.562 ms`** | **`9.427 ms`** | `16.313 ms` (`2.2%`) | `15.962 ms` | `52.085 ms` | `92.752 ms` | **`1.69x Bun Warm` / `5.57x Node`** | -| **13** | `13-webhook-orchestrator-ssrf` (`fast-querystring` + `ms` + Live `fetch`) | **`14.135 ms`** (`13.59 ms` Min) | **`15.028 ms`** | **`6.475 ms`** | `13.841 ms` (`2.1%`) | `21.100 ms` | `53.692 ms` | `115.809 ms` | **`1.49x Bun` (`3.26x` Warm) / `8.19x Node`** | -| **14** | `14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`) | **`15.515 ms`** (`14.69 ms` Min) | **`16.745 ms`** | **`7.867 ms`** | `14.809 ms` (`4.8%`) | `22.376 ms` | `56.663 ms` | `112.022 ms` | **`1.44x Bun` (`2.84x` Warm) / `7.22x Node`** | -| **15** | `15-time-travel-test-suite` (`semver` + `ms` + `dlv` + `dset` + 24 Rollbacks) | **`15.345 ms`** (`14.57 ms` Min) | **`16.621 ms`** | **`5.088 ms`** | `15.122 ms` (`1.5%`) | `25.308 ms` | `68.122 ms` | `84.543 ms` | **`1.65x Bun` (`4.97x` Warm) / `5.51x Node`** | -| **16** | `16-dotenv-dlp-config-vault` (`ini` + `cookie` + `bytes` + `.env` Auto-DLP) | **`7.716 ms`** (`7.21 ms` Min) | **`8.187 ms`** | **`1.686 ms`** | `7.469 ms` (`3.3%`) | `15.118 ms` | `48.508 ms` | `66.922 ms` | **`1.96x Bun` (`8.97x` Warm) / `8.67x Node`** | -| **17** | `17-zero-trust-redirect-keepalive-mesh` (Keep-Alive/307/SSRF/DLP) | **`16.359 ms`** (`15.52 ms` Min) | **`16.874 ms`** | **`8.301 ms`** | `16.200 ms` (`1.0%`) | `22.977 ms` | `60.584 ms` | `118.344 ms` | **`1.40x Bun` (`2.77x` Warm) / `7.23x Node`** | -| **18** | `18-async-event-loop-fanout-scheduler` (Timer Wheel/`Promise.all`/`AbortSignal`) | **`31.543 ms`** (`29.50 ms` Min) | **`30.834 ms`** | **`17.928 ms`** | `29.421 ms` (`7.2%`) | `32.957 ms` | `72.222 ms` | `84.990 ms` | **`1.07x Bun` (`1.84x` Warm) / `2.76x Node`** | -| **19** | `19-wintertc-webcrypto-streams-edge` (WebCrypto/Streams/FormData/Clone) | **`8.353 ms`** (`7.81 ms` Min) | **`9.008 ms`** | **`1.744 ms`** | `8.191 ms` (`2.0%`) | `14.072 ms` | `46.331 ms` | `89.299 ms` | **`1.68x Bun` (`8.07x` Warm) / `10.69x Node`** | -| **20** | `20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler) | **`11.502 ms`** (`10.73 ms` Min) | **`11.919 ms`** | **`0.545 ms`** | `11.296 ms` (`1.8%`) | `22.558 ms` | `55.771 ms` | `71.858 ms` | **`1.96x Bun` (`41.39x` Warm) / `6.25x Node`** | -| **21** | `21-websocket-realtime-and-security-guard` (RFC 6455 `WebSocket` + 5-Ring Guard) | **`10.803 ms`** (`10.15 ms` Min) | **`11.980 ms`** | **`2.872 ms`** | `10.553 ms` (`2.4%`) | `20.404 ms` | `53.926 ms` | `119.323 ms` | **`1.89x Bun` (`7.10x` Warm) / `11.05x Node`** | -| **22** | `22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec) | **`21.520 ms`** (`19.88 ms` Min) | **`21.161 ms`** | **`2.217 ms`** | `20.938 ms` (`2.8%`) | `57.852 ms` | `113.393 ms` | `103.236 ms` | **`2.73x Bun` (`26.09x` Warm) / `4.88x Node`** | -| **23** | `23-wasm-crypto-and-simd-kernel` (Pure-Rust `WebAssembly` + 5-Ring WASM Sec) | **`15.912 ms`** (`14.82 ms` Min) | **`15.965 ms`** | **`1.955 ms`** | `15.069 ms` (`5.6%`) | `21.598 ms` | `42.081 ms` | `61.413 ms` | **`1.36x Bun` (`11.05x` Warm) / `3.86x Node`** | -| **24** | `24-tsx-ssr-and-wasm-edge-pipeline` (`WebAssembly` SLA Scorer + SSR Pipeline) | **`8.927 ms`** (`8.48 ms` Min) | **`9.257 ms`** | **`1.824 ms`** | `8.419 ms` (`6.0%`) | `19.246 ms` | `43.391 ms` | `69.066 ms` | **`2.16x Bun` (`10.55x` Warm) / `7.74x Node`** | -| **FW-01** | `FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`) | **`16.071 ms`** (`14.92 ms` Min) | **`15.859 ms`** | **`5.721 ms`** | `15.318 ms` (`4.9%`) | `19.913 ms` | `53.967 ms` | `99.710 ms` | **`1.26x Bun` (`3.48x` Warm) / `6.29x Node`** | -| **FW-02** | `FW-02: frameworks/02-itty-router-unjs-nitro-stack` (`itty-router` + UnJS) | **`19.468 ms`** (`18.25 ms` Min) | **`18.506 ms`** | **`9.528 ms`** | `18.321 ms` (`6.3%`) | `19.441 ms` | `47.715 ms` | `91.467 ms` | **`1.05x Bun` (`2.04x` Warm) / `4.94x Node`** | -| **FW-03** | `FW-03: frameworks/03-node-http-express-compat` (`node:http` + `node:stream` Express/Polka) | **`16.830 ms`** (`16.23 ms` Min) | **`17.159 ms`** | **`1.300 ms`** | `16.913 ms` (`-0.5%`) | `49.313 ms` | `68.567 ms` | `95.033 ms` | **`2.93x Bun` (`37.93x` Warm) / `5.65x Node`** | -| **FW-04** | `FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`) | **`36.160 ms`** (`33.80 ms` Min) | **`37.795 ms`** | **`17.019 ms`** | — | `46.579 ms` | `71.052 ms` | `119.710 ms` | **`1.29x Bun` (`2.74x` Warm) / `3.31x Node`** | -| **CS-01** | `CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes) | **`26.485 ms`** (`25.52 ms` Min) | **`28.096 ms`** | **`13.120 ms`** | `26.690 ms` (`-0.8%`) | `28.256 ms` | `72.647 ms` | `89.711 ms` | **`1.07x Bun` (`2.15x` Warm) / `3.39x Node`** | -| **CS-02** | `CS-02: case_studies/02-mcp-code-mode-orchestrator` (`-98.4%` Tokens) | **`20.362 ms`** (`19.29 ms` Min) | **`21.082 ms`** | **`7.854 ms`** | `19.966 ms` (`2.0%`) | `16.230 ms` | `44.344 ms` | `66.894 ms` | **`2.07x Bun Warm` / `3.29x Node`** | -| **CS-03** | `CS-03: case_studies/03-multi-tenant-saas-plugin-mesh` (12 Tenants + Hot-Swap) | **`13.984 ms`** (`12.95 ms` Min) | **`14.000 ms`** | **`6.270 ms`** | `13.726 ms` (`1.9%`) | `16.305 ms` | `49.236 ms` | `84.935 ms` | **`1.17x Bun` (`2.60x` Warm) / `6.07x Node`** | -| **CS-04** | `CS-04: case_studies/04-wasm-zero-trust-cdr-pipeline` (Wasm SimHash CDR) | **`17.514 ms`** (`16.97 ms` Min) | **`18.387 ms`** | **`1.807 ms`** | `17.723 ms` (`-1.2%`) | `19.807 ms` | `45.755 ms` | `68.820 ms` | **`1.13x Bun` (`10.96x` Warm) / `3.93x Node`** | -| **CS-05** | `CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas) | **`18.127 ms`** (`17.30 ms` Min) | **`18.959 ms`** | **`10.313 ms`** | `18.002 ms` (`0.7%`) | `19.616 ms` | `62.942 ms` | `83.703 ms` | **`1.08x Bun` (`1.90x` Warm) / `4.62x Node`** | +| **01** | `01-fintech-checkout` (Multi-File TS + SHA-256) | **`6.549 ms`** (`5.96 ms` Min) | **`8.093 ms`** | **`1.934 ms`** | `6.206 ms` (`5.5%`) | `15.167 ms` | `42.607 ms` | `74.220 ms` | **`2.32x Bun` (`7.84x` Warm) / `11.33x Node`** | +| **02** | `02-npm-ecosystem-suite` (`semver` + `ms` + `ini`) | **`16.553 ms`** (`14.49 ms` Min) | **`16.721 ms`** | **`4.790 ms`** | `14.659 ms` (`12.9%`) | `24.251 ms` | `59.826 ms` | `81.827 ms` | **`1.47x Bun` (`5.06x` Warm) / `4.94x Node`** | +| **03** | `03-disk-io-log-pipeline` (10 JSONL Shards Disk I/O) | **`7.941 ms`** (`7.02 ms` Min) | **`8.422 ms`** | **`1.613 ms`** | `8.036 ms` (`-1.2%`) | `17.735 ms` | `50.096 ms` | `70.811 ms` | **`2.23x Bun` (`11.00x` Warm) / `8.92x Node`** | +| **04** | `04-edge-api-gateway` (`fast-querystring` + `ms`) | **`7.827 ms`** (`7.15 ms` Min) | **`8.669 ms`** | **`1.769 ms`** | `7.850 ms` (`-0.3%`) | `16.480 ms` | `49.015 ms` | `72.202 ms` | **`2.11x Bun` (`9.32x` Warm) / `9.22x Node`** | +| **05** | `05-jwt-oauth-session-guard` (`cookie` + `ms` + HMAC) | **`11.143 ms`** (`10.11 ms` Min) | **`11.926 ms`** | **`8.203 ms`** | `10.654 ms` (`4.6%`) | `15.814 ms` | `51.773 ms` | `76.002 ms` | **`1.42x Bun` (`1.93x` Warm) / `6.82x Node`** | +| **06** | `06-telemetry-metrics-pipeline` (`bytes` + `flatted` + WAL) | **`16.076 ms`** (`14.79 ms` Min) | **`17.028 ms`** | **`6.338 ms`** | `14.519 ms` (`10.7%`) | `19.737 ms` | `56.963 ms` | `71.608 ms` | **`1.23x Bun` (`3.11x` Warm) / `4.45x Node`** | +| **07** | `07-graphql-ast-validator` (`dlv` + `dset` + AST Cost) | **`11.115 ms`** (`8.79 ms` Min) | **`10.370 ms`** | **`4.102 ms`** | `9.992 ms` (`11.2%`) | `15.024 ms` | `46.462 ms` | `68.656 ms` | **`1.45x Bun` (`3.66x` Warm) / `6.62x Node`** | +| **08** | `08-event-driven-state-journal` (`mitt` + `ms` + JSONL Replay) | **`12.471 ms`** (`11.00 ms` Min) | **`12.646 ms`** | **`5.602 ms`** | `13.568 ms` (`-8.1%`) | `17.725 ms` | `53.924 ms` | `71.640 ms` | **`1.42x Bun` (`3.16x` Warm) / `5.74x Node`** | +| **09** | `09-wintertc-web-router` (`Request` + `Response` + `URL`, 80 reqs) | **`16.900 ms`** (`15.01 ms` Min) | **`17.946 ms`** | **`11.562 ms`** | `15.476 ms` (`9.2%`) | `14.796 ms` | `57.896 ms` | `96.743 ms` | **`1.28x Bun Warm` / `5.72x Node`** | +| **10** | `10-fullstack-bff-microservice` (`cookie` + `dlv` + `ms` + `ETag`, 60 reqs) | **`14.257 ms`** (`12.89 ms` Min) | **`16.402 ms`** | **`11.179 ms`** | `13.998 ms` (`1.9%`) | `18.103 ms` | `64.257 ms` | `101.196 ms` | **`1.27x Bun` (`1.62x` Warm) / `7.10x Node`** | +| **11** | `11-static-asset-cdn-edge` (`bytes` + `ms` + `ETag` `304`, 80 reqs) | **`11.158 ms`** (`10.52 ms` Min) | **`12.072 ms`** | **`4.154 ms`** | `10.268 ms` (`8.7%`) | `15.225 ms` | `56.518 ms` | `101.741 ms` | **`1.36x Bun` (`3.67x` Warm) / `9.12x Node`** | +| **12** | `12-ai-sse-token-streamer` (`mitt` + `ms` + SSE + DLP, 320 frames) | **`18.478 ms`** (`15.37 ms` Min) | **`19.011 ms`** | **`8.424 ms`** | `16.665 ms` (`10.9%`) | `17.424 ms` | `56.409 ms` | `111.849 ms` | **`2.07x Bun Warm` / `6.05x Node`** | +| **13** | `13-webhook-orchestrator-ssrf` (`fast-querystring` + `ms` + Live `fetch`) | **`15.312 ms`** (`13.94 ms` Min) | **`15.857 ms`** | **`7.041 ms`** | `14.135 ms` (`8.3%`) | `25.142 ms` | `60.842 ms` | `132.603 ms` | **`1.64x Bun` (`3.57x` Warm) / `8.66x Node`** | +| **14** | `14-federated-api-mesh-dlp` (`bytes` + `dlv` + `dset` + Live `fetch`) | **`15.929 ms`** (`14.68 ms` Min) | **`16.196 ms`** | **`7.802 ms`** | `15.515 ms` (`2.7%`) | `24.460 ms` | `61.587 ms` | `122.583 ms` | **`1.54x Bun` (`3.14x` Warm) / `7.70x Node`** | +| **15** | `15-time-travel-test-suite` (`semver` + `ms` + `dlv` + `dset` + 24 Rollbacks) | **`16.968 ms`** (`15.10 ms` Min) | **`17.549 ms`** | **`5.987 ms`** | `15.345 ms` (`10.6%`) | `28.355 ms` | `77.460 ms` | `95.857 ms` | **`1.67x Bun` (`4.74x` Warm) / `5.65x Node`** | +| **16** | `16-dotenv-dlp-config-vault` (`ini` + `cookie` + `bytes` + `.env` Auto-DLP) | **`8.364 ms`** (`7.37 ms` Min) | **`9.346 ms`** | **`1.280 ms`** | `7.716 ms` (`8.4%`) | `16.161 ms` | `54.266 ms` | `75.761 ms` | **`1.93x Bun` (`12.63x` Warm) / `9.06x Node`** | +| **17** | `17-zero-trust-redirect-keepalive-mesh` (Keep-Alive/307/SSRF/DLP) | **`17.319 ms`** (`16.27 ms` Min) | **`18.538 ms`** | **`9.241 ms`** | `16.359 ms` (`5.9%`) | `25.921 ms` | `65.348 ms` | `132.340 ms` | **`1.50x Bun` (`2.80x` Warm) / `7.64x Node`** | +| **18** | `18-async-event-loop-fanout-scheduler` (Timer Wheel/`Promise.all`/`AbortSignal`) | **`30.986 ms`** (`28.49 ms` Min) | **`33.993 ms`** | **`17.717 ms`** | `31.543 ms` (`-1.8%`) | `37.518 ms` | `81.154 ms` | `94.107 ms` | **`1.21x Bun` (`2.12x` Warm) / `3.04x Node`** | +| **19** | `19-wintertc-webcrypto-streams-edge` (WebCrypto/Streams/FormData/Clone) | **`9.453 ms`** (`8.34 ms` Min) | **`9.903 ms`** | **`1.477 ms`** | `8.353 ms` (`13.2%`) | `15.328 ms` | `53.271 ms` | `102.717 ms` | **`1.62x Bun` (`10.38x` Warm) / `10.87x Node`** | +| **20** | `20-node-compat-and-edge-router` (`Uint8Array` `Buffer`/Node Core/AST Bundler) | **`12.304 ms`** (`10.57 ms` Min) | **`12.468 ms`** | **`0.888 ms`** | `11.502 ms` (`7.0%`) | `25.969 ms` | `64.068 ms` | `88.273 ms` | **`2.11x Bun` (`29.24x` Warm) / `7.17x Node`** | +| **21** | `21-websocket-realtime-and-security-guard` (RFC 6455 `WebSocket` + 5-Ring Guard) | **`11.666 ms`** (`10.39 ms` Min) | **`12.224 ms`** | **`2.803 ms`** | `10.803 ms` (`8.0%`) | `24.293 ms` | `60.684 ms` | `135.299 ms` | **`2.08x Bun` (`8.67x` Warm) / `11.60x Node`** | +| **22** | `22-worker-threads-and-raw-sockets` (3 Worker Threads + TCP/UDP + 5-Ring Sec) | **`24.541 ms`** (`21.21 ms` Min) | **`23.822 ms`** | **`2.377 ms`** | `21.520 ms` (`14.0%`) | `68.043 ms` | `134.578 ms` | `116.660 ms` | **`2.86x Bun` (`28.63x` Warm) / `4.90x Node`** | +| **23** | `23-wasm-crypto-and-simd-kernel` (Pure-Rust `WebAssembly` + 5-Ring WASM Sec) | **`17.830 ms`** (`15.16 ms` Min) | **`18.181 ms`** | **`2.088 ms`** | `15.912 ms` (`12.1%`) | `24.671 ms` | `49.186 ms` | `78.258 ms` | **`1.38x Bun` (`11.82x` Warm) / `4.39x Node`** | +| **24** | `24-tsx-ssr-and-wasm-edge-pipeline` (`WebAssembly` SLA Scorer + SSR Pipeline) | **`9.438 ms`** (`8.21 ms` Min) | **`9.628 ms`** | **`1.751 ms`** | `8.927 ms` (`5.7%`) | `21.746 ms` | `51.375 ms` | `78.308 ms` | **`2.30x Bun` (`12.42x` Warm) / `8.30x Node`** | +| **FW-01** | `FW-01: frameworks/01-hono-edge-microservice` (`hono@4.6.20` + `hono/cookie` + `ms`) | **`16.903 ms`** (`14.97 ms` Min) | **`17.879 ms`** | **`7.535 ms`** | `16.071 ms` (`5.2%`) | `22.254 ms` | `61.183 ms` | `110.858 ms` | **`1.32x Bun` (`2.95x` Warm) / `6.56x Node`** | +| **FW-02** | `FW-02: frameworks/02-itty-router-unjs-nitro-stack` (`itty-router` + UnJS) | **`19.999 ms`** (`17.74 ms` Min) | **`20.653 ms`** | **`10.506 ms`** | `19.468 ms` (`2.7%`) | `21.391 ms` | `53.565 ms` | `100.970 ms` | **`1.07x Bun` (`2.04x` Warm) / `5.05x Node`** | +| **FW-03** | `FW-03: frameworks/03-node-http-express-compat` (`node:http` + `node:stream` Express/Polka) | **`18.850 ms`** (`16.78 ms` Min) | **`19.326 ms`** | **`1.399 ms`** | `16.830 ms` (`12.0%`) | `41.711 ms` | `60.165 ms` | `99.962 ms` | **`2.21x Bun` (`29.81x` Warm) / `5.30x Node`** | +| **FW-04** | `FW-04: frameworks/04-sveltekit-edge-ssr` (`@sveltejs/kit@3.1.1` + `svelte@5.57.3` + `devalue@6.0.3`) | **`39.319 ms`** (`34.46 ms` Min) | **`40.783 ms`** | **`19.712 ms`** | `36.160 ms` (`8.7%`) | `52.502 ms` | `84.299 ms` | `133.012 ms` | **`1.34x Bun` (`2.66x` Warm) / `3.38x Node`** | +| **CS-01** | `CS-01: case_studies/01-tot-autonomous-sre-agent` (20 ToT Sandboxes) | **`31.107 ms`** (`26.75 ms` Min) | **`31.878 ms`** | **`13.126 ms`** | `26.485 ms` (`17.5%`) | `32.776 ms` | `86.411 ms` | `105.353 ms` | **`1.05x Bun` (`2.50x` Warm) / `3.39x Node`** | +| **CS-02** | `CS-02: case_studies/02-mcp-code-mode-orchestrator` (`-98.4%` Tokens) | **`20.659 ms`** (`18.43 ms` Min) | **`21.371 ms`** | **`6.569 ms`** | `20.362 ms` (`1.5%`) | `18.019 ms` | `52.128 ms` | `79.359 ms` | **`2.74x Bun Warm` / `3.84x Node`** | +| **CS-03** | `CS-03: case_studies/03-multi-tenant-saas-plugin-mesh` (12 Tenants + Hot-Swap) | **`15.332 ms`** (`13.56 ms` Min) | **`15.796 ms`** | **`5.721 ms`** | `13.984 ms` (`9.6%`) | `18.869 ms` | `57.047 ms` | `98.424 ms` | **`1.23x Bun` (`3.30x` Warm) / `6.42x Node`** | +| **CS-04** | `CS-04: case_studies/04-wasm-zero-trust-cdr-pipeline` (Wasm SimHash CDR) | **`19.955 ms`** (`17.49 ms` Min) | **`21.163 ms`** | **`1.656 ms`** | `17.514 ms` (`13.9%`) | `24.621 ms` | `50.990 ms` | `78.359 ms` | **`1.23x Bun` (`14.87x` Warm) / `3.93x Node`** | +| **CS-05** | `CS-05: case_studies/05-time-travel-chaos-fuzzer-payments` (48 Payment Sagas) | **`20.765 ms`** (`17.12 ms` Min) | **`21.730 ms`** | **`9.381 ms`** | `18.127 ms` (`14.6%`) | `23.262 ms` | `71.208 ms` | `96.481 ms` | **`1.12x Bun` (`2.48x` Warm) / `4.65x Node`** | --- @@ -83,21 +83,21 @@ Across all **33 real-world multi-file TypeScript applications, framework suites, | Workload | Slice (`SLICEBC\x01` Default) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Memory Advantage | | :--- | :---: | :---: | :---: | :---: | :--- | -| **App 2: NPM semver+ms+ini** | **14,208 KB (13.88 MB)** | 30,080 KB (29.38 MB) | 47,100 KB (46.00 MB) | 71,576 KB (69.90 MB) | **5.04x less than Node / 2.12x less than Bun** | -| **App 6: Telemetry + Flatted** | **14,592 KB (14.25 MB)** | 30,592 KB (29.88 MB) | 50,780 KB (49.59 MB) | 72,988 KB (71.28 MB) | **5.00x less than Node / 2.10x less than Bun** | -| **App 21: RFC 6455 WS + Sec** | **13,952 KB (13.63 MB)** | 32,088 KB (31.34 MB) | 50,848 KB (49.66 MB) | 94,724 KB (92.50 MB) | **6.79x less than Node / 2.30x less than Bun** | -| **App 22: Workers + Sockets** | **22,016 KB (21.50 MB)** | 41,568 KB (40.59 MB) | 62,868 KB (61.39 MB) | 94,028 KB (91.82 MB) | **4.27x less than Node / 1.89x less than Bun** | -| **App 23: Pure-Rust WASM** | **18,944 KB (18.50 MB)** | 30,976 KB (30.25 MB) | 48,924 KB (47.78 MB) | 80,660 KB (78.77 MB) | **4.26x less than Node / 1.64x less than Bun** | -| **FW 1: Hono v4 Microservice** | **15,104 KB (14.75 MB)** | 30,624 KB (29.91 MB) | 49,008 KB (47.86 MB) | 88,988 KB (86.90 MB) | **5.89x less than Node / 2.03x less than Bun** | -| **FW 2: itty-router + UnJS** | **14,720 KB (14.38 MB)** | 31,616 KB (30.88 MB) | 48,628 KB (47.49 MB) | 86,796 KB (84.76 MB) | **5.90x less than Node / 2.15x less than Bun** | -| **App 24: WASM + SSR** | **13,696 KB (13.38 MB)** | 32,256 KB (31.50 MB) | 48,544 KB (47.41 MB) | 81,152 KB (79.25 MB) | **5.93x less than Node / 2.36x less than Bun** | -| **FW 3: Express node:http** | **14,976 KB (14.63 MB)** | 33,024 KB (32.25 MB) | 46,564 KB (45.47 MB) | 79,884 KB (78.01 MB) | **5.33x less than Node / 2.21x less than Bun** | -| **01-tot-autonomous-sre-agent** | **18,560 KB (18.13 MB)** | 31,744 KB (31.00 MB) | 52,980 KB (51.74 MB) | 86,016 KB (84.00 MB) | **4.63x less than Node / 1.71x less than Bun** | -| **02-mcp-code-mode-orchestrator** | **18,112 KB (17.69 MB)** | 27,904 KB (27.25 MB) | 47,068 KB (45.96 MB) | 80,648 KB (78.76 MB) | **4.45x less than Node / 1.54x less than Bun** | -| **03-multi-tenant-saas-plugin-mesh** | **15,744 KB (15.38 MB)** | 28,672 KB (28.00 MB) | 49,480 KB (48.32 MB) | 87,940 KB (85.88 MB) | **5.59x less than Node / 1.82x less than Bun** | -| **04-wasm-zero-trust-cdr-pipeline** | **19,968 KB (19.50 MB)** | 31,104 KB (30.38 MB) | 49,692 KB (48.53 MB) | 80,136 KB (78.26 MB) | **4.01x less than Node / 1.56x less than Bun** | -| **05-time-travel-chaos-fuzzer-payments** | **15,744 KB (15.38 MB)** | 29,184 KB (28.50 MB) | 49,780 KB (48.61 MB) | 81,440 KB (79.53 MB) | **5.17x less than Node / 1.85x less than Bun** | -| **FW 4: SvelteKit 3 + Svelte 5** | **20,992 KB (20.50 MB)** | 41,984 KB (41.00 MB) | 56,580 KB (55.25 MB) | 85,412 KB (83.41 MB) | **4.07x less than Node / 2.00x less than Bun** | +| **App 2: NPM semver+ms+ini** | **13,568 KB (13.25 MB)** | 29,948 KB (29.25 MB) | 46,560 KB (45.47 MB) | 71,708 KB (70.03 MB) | **5.29x less than Node / 2.21x less than Bun** | +| **App 6: Telemetry + Flatted** | **14,612 KB (14.27 MB)** | 30,080 KB (29.38 MB) | 50,548 KB (49.36 MB) | 73,240 KB (71.52 MB) | **5.01x less than Node / 2.06x less than Bun** | +| **App 21: RFC 6455 WS + Sec** | **13,952 KB (13.63 MB)** | 31,844 KB (31.10 MB) | 50,936 KB (49.74 MB) | 95,104 KB (92.88 MB) | **6.82x less than Node / 2.28x less than Bun** | +| **App 22: Workers + Sockets** | **22,272 KB (21.75 MB)** | 41,808 KB (40.83 MB) | 63,732 KB (62.24 MB) | 93,304 KB (91.12 MB) | **4.19x less than Node / 1.88x less than Bun** | +| **App 23: Pure-Rust WASM** | **19,072 KB (18.63 MB)** | 30,848 KB (30.13 MB) | 49,160 KB (48.01 MB) | 80,528 KB (78.64 MB) | **4.22x less than Node / 1.62x less than Bun** | +| **FW 1: Hono v4 Microservice** | **14,976 KB (14.63 MB)** | 31,176 KB (30.45 MB) | 48,724 KB (47.58 MB) | 89,112 KB (87.02 MB) | **5.95x less than Node / 2.08x less than Bun** | +| **FW 2: itty-router + UnJS** | **14,336 KB (14.00 MB)** | 31,872 KB (31.13 MB) | 49,084 KB (47.93 MB) | 87,300 KB (85.25 MB) | **6.09x less than Node / 2.22x less than Bun** | +| **App 24: WASM + SSR** | **13,864 KB (13.54 MB)** | 30,464 KB (29.75 MB) | 49,016 KB (47.87 MB) | 81,024 KB (79.13 MB) | **5.84x less than Node / 2.20x less than Bun** | +| **FW 3: Express node:http** | **15,360 KB (15.00 MB)** | 33,024 KB (32.25 MB) | 47,032 KB (45.93 MB) | 80,400 KB (78.52 MB) | **5.23x less than Node / 2.15x less than Bun** | +| **01-tot-autonomous-sre-agent** | **18,944 KB (18.50 MB)** | 31,744 KB (31.00 MB) | 53,352 KB (52.10 MB) | 82,952 KB (81.01 MB) | **4.38x less than Node / 1.68x less than Bun** | +| **02-mcp-code-mode-orchestrator** | **18,028 KB (17.61 MB)** | 28,416 KB (27.75 MB) | 46,656 KB (45.56 MB) | 82,820 KB (80.88 MB) | **4.59x less than Node / 1.58x less than Bun** | +| **03-multi-tenant-saas-plugin-mesh** | **15,744 KB (15.38 MB)** | 26,496 KB (25.88 MB) | 49,800 KB (48.63 MB) | 88,580 KB (86.50 MB) | **5.63x less than Node / 1.68x less than Bun** | +| **04-wasm-zero-trust-cdr-pipeline** | **19,712 KB (19.25 MB)** | 31,616 KB (30.88 MB) | 49,748 KB (48.58 MB) | 80,392 KB (78.51 MB) | **4.08x less than Node / 1.60x less than Bun** | +| **05-time-travel-chaos-fuzzer-payments** | **15,616 KB (15.25 MB)** | 29,056 KB (28.38 MB) | 49,524 KB (48.36 MB) | 80,928 KB (79.03 MB) | **5.18x less than Node / 1.86x less than Bun** | +| **FW 4: SvelteKit 3 + Svelte 5** | **21,120 KB (20.63 MB)** | 41,728 KB (40.75 MB) | 56,476 KB (55.15 MB) | 85,664 KB (83.66 MB) | **4.06x less than Node / 1.98x less than Bun** | --- @@ -105,9 +105,9 @@ Across all **33 real-world multi-file TypeScript applications, framework suites, | Subsystem / Benchmark | Measured Telemetry | Status | | :--- | :--- | :---: | -| **Sharded `Slice.kv` (`1,001` Get/Set/Incr Ops in Isolate)** | **`644.66 us`** total (`--warm`, `8,431 B` memory cage) | `PASS` | +| **Sharded `Slice.kv` (`1,001` Get/Set/Incr Ops in Isolate)** | **`500.30 us`** total (`--warm`, `8,431 B` memory cage) | `PASS` | | **Multi-Tenant `--tenant-dir` Zero-Downtime Hot-Swap** | Live atomic replacement of `tenant-alpha.cas` (`v1 -> v2-hot-swapped`) with isolated `Slice.kv` state | `PASS` | | **Deterministic Time-Travel Replay (`--deterministic=20261019`)** | 100% bit-for-bit identical PRNG (`Math.random`) & virtual clock (`Date.now`, `performance.now`) | `PASS` | -| **Tree-of-Thought AI Agent (`Slice.checkpoint` + 3 `evalSandbox` + `restore`)** | **`55.02 us`** total (`1.77 us` child sandbox) | `PASS` | +| **Tree-of-Thought AI Agent (`Slice.checkpoint` + 3 `evalSandbox` + `restore`)** | **`50.17 us`** total (`1.87 us` child sandbox) | `PASS` | | **Cloud Metadata SSRF (`169.254.169.254`) & Base64 Egress DLP Guard** | `SSRF_METADATA_BLOCKED` & `EGRESS_SECRET_LEAK_BLOCKED` deterministically trapped | `PASS` | | **Built-In Model Context Protocol Server (`slice mcp --smoke-test`)** | JSON-RPC 2.0 `initialize`, `tools/list`, `tools/call` verified over `stdio` | `PASS` | From f3f679da982a34c65e241d89e10c9bc08b9e3b23 Mon Sep 17 00:00:00 2001 From: SIKTEC Date: Mon, 9 Nov 2026 17:59:24 -0500 Subject: [PATCH 3/3] chore(release): bump version to v0.10.6 --- Cargo.lock | 10 +++++----- Cargo.toml | 2 +- README.md | 4 ++-- docs/general/00_index.md | 4 ++-- docs/general/01_getting_started_and_cli.md | 4 ++-- docs/general/09_benchmarks_testing_and_docker_suite.md | 4 ++-- docs/general/COMPATIBILITY.md | 2 +- docs/guides/README.md | 2 +- docs/system/00_index.md | 6 +++--- docs/system/07_production_tooling_guide.md | 2 +- scripts/install.ps1 | 2 +- scripts/install.sh | 4 ++-- scripts/package_release.ps1 | 2 +- scripts/run_benchmarks.ps1 | 2 +- tests/README.md | 6 +++--- tests/reports/latest.json | 4 ++-- tests/reports/latest.md | 4 ++-- tests/run_real_stack_benchmarks.sh | 4 ++-- tests/scripts/generate_bench_report.mjs | 4 ++-- 19 files changed, 36 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 024692d..dbda587 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2005,7 +2005,7 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "slice-cas" -version = "0.10.5" +version = "0.10.6" dependencies = [ "aho-corasick", "anyhow", @@ -2026,7 +2026,7 @@ dependencies = [ [[package]] name = "slice-cli" -version = "0.10.5" +version = "0.10.6" dependencies = [ "anyhow", "criterion", @@ -2047,7 +2047,7 @@ dependencies = [ [[package]] name = "slice-engine" -version = "0.10.5" +version = "0.10.6" dependencies = [ "aho-corasick", "anyhow", @@ -2077,7 +2077,7 @@ dependencies = [ [[package]] name = "slice-io" -version = "0.10.5" +version = "0.10.6" dependencies = [ "anyhow", "criterion", @@ -2088,7 +2088,7 @@ dependencies = [ [[package]] name = "slice-sandbox" -version = "0.10.5" +version = "0.10.6" dependencies = [ "anyhow", "blake3", diff --git a/Cargo.toml b/Cargo.toml index 5ed4ba2..b8a8e5a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ members = [ ] [workspace.package] -version = "0.10.5" +version = "0.10.6" edition = "2021" authors = ["Slice Runtime Team"] license = "MIT OR Apache-2.0" diff --git a/README.md b/README.md index 14a7fcc..ac39861 100644 --- a/README.md +++ b/README.md @@ -13,12 +13,12 @@ > **Latest Verified Benchmark Report:** **[`tests/reports/latest.md`](./tests/reports/latest.md)** (Archive: [`bench_v0.10.5_20261109_225249Z_47bfa6b.md`](./tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md)) -> **Provenance:** Slice `v0.10.5` (`47bfa6b`) · Generated `2026-11-09T22:52:49Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` +> **Provenance:** Slice `v0.10.6` (`47bfa6b`) · Generated `2026-11-09T22:52:49Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` > **Scorecard Across All 33 Production Workloads:** Beats **Deno (`v2.9.8`)** on **33/33**, **Node.js (`v27.0.0-alpha.0.0.0`)** on **33/33**, **Bun (`v1.4.4`)** on **30/33** cold one-shot, and **all 3 runtimes on 33/33 workloads in `--warm` pooled execution**. #### 1. Core Architecture, HTTP Throughput & 1,000-Tenant MicroVM Density -| Metric | Slice (`v0.10.5` `SLICEBC\x01`) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Advantage | +| Metric | Slice (`v0.10.6` `SLICEBC\x01`) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Advantage | | :--- | :---: | :---: | :---: | :---: | :--- | | **In-Process Isolate Cold Start (`P50` / `P99`)** | **`1.05 us` / `1.80 us`** | N/A (Process/VM) | N/A (Process/VM) | N/A (Process/VM) | **~120,000x faster than 125ms Firecracker VM** | | **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.37 ms` (`9.70 MB` RSS)** | > 5,000 ms | > 15,000 ms | > 30,000 ms | **> 3,900x faster / ~32,000x denser** | diff --git a/docs/general/00_index.md b/docs/general/00_index.md index c16eed0..e3ba498 100644 --- a/docs/general/00_index.md +++ b/docs/general/00_index.md @@ -1,6 +1,6 @@ -# The Slice (Nexus-JS) Developer Handbook (`v0.10.5`) +# The Slice (Nexus-JS) Developer Handbook (`v0.10.6`) -Welcome to the complete developer handbook for **Slice (Nexus-JS)** (`v0.10.5`) — a microVM-grade JavaScript and TypeScript runtime, compiler, HTTP server, and AI sandbox engineered in Rust. +Welcome to the complete developer handbook for **Slice (Nexus-JS)** (`v0.10.6`) — a microVM-grade JavaScript and TypeScript runtime, compiler, HTTP server, and AI sandbox engineered in Rust. Whether you are building a high-throughput full-stack web service, packaging a CLI tool into a single zero-dependency executable, running 1,000 untrusted customer plugins on a single machine, or executing LLM-generated TypeScript inside an AI coding agent, this handbook walks you through every feature, CLI command, API, security capability, and migration pattern from the perspective of an application developer. diff --git a/docs/general/01_getting_started_and_cli.md b/docs/general/01_getting_started_and_cli.md index 11c7980..15f669b 100644 --- a/docs/general/01_getting_started_and_cli.md +++ b/docs/general/01_getting_started_and_cli.md @@ -1,6 +1,6 @@ # Chapter 01: Installation, Upgrading, Quickstart, `slice.toml` & Complete CLI Reference -This chapter is your complete day-one guide to installing, upgrading, configuring, and operating **Slice (Nexus-JS)** (`v0.10.5`). By the end of this chapter, you will know how to install and update Slice on any operating system, scaffold a new TypeScript project, configure your `slice.toml` manifest and `.env` vault, run live development with `< 3 ms` `--watch` reloads, use the interactive `slice repl` shell, and master all 13 CLI commands. +This chapter is your complete day-one guide to installing, upgrading, configuring, and operating **Slice (Nexus-JS)** (`v0.10.6`). By the end of this chapter, you will know how to install and update Slice on any operating system, scaffold a new TypeScript project, configure your `slice.toml` manifest and `.env` vault, run live development with `< 3 ms` `--watch` reloads, use the interactive `slice repl` shell, and master all 13 CLI commands. --- @@ -545,7 +545,7 @@ Launches an interactive **SES-Locked TypeScript/JavaScript Compartment Shell** w **Example REPL Session:** ```text $ slice repl -Slice (Nexus-JS) v0.10.5 Interactive SES-Locked Compartment Shell +Slice (Nexus-JS) v0.10.6 Interactive SES-Locked Compartment Shell Commands: :help, :metrics, :caps, :vars, :reset, :quit slice(ses)> const price: number = 250 * 4; => 1000 diff --git a/docs/general/09_benchmarks_testing_and_docker_suite.md b/docs/general/09_benchmarks_testing_and_docker_suite.md index ff36ddf..b3595eb 100644 --- a/docs/general/09_benchmarks_testing_and_docker_suite.md +++ b/docs/general/09_benchmarks_testing_and_docker_suite.md @@ -148,12 +148,12 @@ Slice includes a comprehensive Linux `x86_64` Docker benchmark suite ([`tests/`] > **Latest Verified Benchmark Report:** **[`tests/reports/latest.md`](../../tests/reports/latest.md)** (Archive: [`bench_v0.10.5_20261109_225249Z_47bfa6b.md`](../../tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md)) -> **Provenance:** Slice `v0.10.5` (`47bfa6b`) · Generated `2026-11-09T22:52:49Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` +> **Provenance:** Slice `v0.10.6` (`47bfa6b`) · Generated `2026-11-09T22:52:49Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` > **Scorecard Across All 33 Production Workloads:** Beats **Deno (`v2.9.8`)** on **33/33**, **Node.js (`v27.0.0-alpha.0.0.0`)** on **33/33**, **Bun (`v1.4.4`)** on **30/33** cold one-shot, and **all 3 runtimes on 33/33 workloads in `--warm` pooled execution**. #### 1. Core Architecture, HTTP Throughput & 1,000-Tenant MicroVM Density -| Metric | Slice (`v0.10.5` `SLICEBC\x01`) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Advantage | +| Metric | Slice (`v0.10.6` `SLICEBC\x01`) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Advantage | | :--- | :---: | :---: | :---: | :---: | :--- | | **In-Process Isolate Cold Start (`P50` / `P99`)** | **`1.05 us` / `1.80 us`** | N/A (Process/VM) | N/A (Process/VM) | N/A (Process/VM) | **~120,000x faster than 125ms Firecracker VM** | | **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.37 ms` (`9.70 MB` RSS)** | > 5,000 ms | > 15,000 ms | > 30,000 ms | **> 3,900x faster / ~32,000x denser** | diff --git a/docs/general/COMPATIBILITY.md b/docs/general/COMPATIBILITY.md index 4fb2721..ba1127c 100644 --- a/docs/general/COMPATIBILITY.md +++ b/docs/general/COMPATIBILITY.md @@ -26,7 +26,7 @@ All WinterTC globals are available in every isolate out of the box. Under the ho | **Events & Signals** | `Event`, `CustomEvent`, `EventTarget`, `AbortController`, `AbortSignal` | **100% Supported** | Listener registration (`once`, `passive`, `signal`), `AbortSignal.abort()`, `AbortSignal.timeout(ms)`, `AbortSignal.any(signals)`, and `DOMException`. | | **Timers & Microtasks** | `setTimeout`, `clearTimeout`, `setInterval`, `clearInterval`, `setImmediate`, `clearImmediate`, `queueMicrotask`, `process.nextTick` | **100% Supported** | $O(1)$ Slab-Allocated Hierarchical Timer Wheel with strict priority ordering (`sync -> process.nextTick -> Promise.then / queueMicrotask -> setImmediate -> setTimeout(0)`), deterministic virtual time-warp (`0 ns` wall-clock wait during cassette tests), and real non-blocking concurrency on live sockets. | | **Cloning & Diagnostics** | `structuredClone`, `performance.now()`, `console.*` (`log`, `info`, `warn`, `error`, `debug`, `table`, `time`, `timeLog`, `timeEnd`, `group`, `groupCollapsed`, `groupEnd`, `dir`, `dirxml`, `count`, `countReset`, `assert`, `trace`, `clear`) | **100% Supported** | Graph-preserving cyclic `structuredClone` (`Map`, `Set`, `Date`, `RegExp`, `ArrayBuffer`, `Uint8Array`, `Error`, `transfer` list) and full WHATWG `console.*` specification routed through the Outbound Egress Secret DLP Firewall (with deterministic elapsed timing under `--deterministic`). | -| **Internationalization & WinterTC Globals** | `Intl` (`DateTimeFormat`, `NumberFormat`, `Collator`, `PluralRules`, `Segmenter`, `getCanonicalLocales`, `supportedValuesOf`), `navigator`, `location` | **100% Supported** | Zero-ICU-bloat deterministic `Intl` fast-path shard (`18_intl.js`) supporting `Date.prototype.toLocale*`, `Number.prototype.toLocaleString` (`decimal`, `currency`, `percent`, `unit`, `formatToParts`), `String.prototype.localeCompare`, `PluralRules` (`cardinal`, `ordinal`), `Segmenter` (`grapheme`, `word`, `sentence`), plus WinterTC `navigator` (`userAgent: "Slice-NexusJS/0.10.5"`, `hardwareConcurrency`, `language`, `languages`) and `location`. | +| **Internationalization & WinterTC Globals** | `Intl` (`DateTimeFormat`, `NumberFormat`, `Collator`, `PluralRules`, `Segmenter`, `getCanonicalLocales`, `supportedValuesOf`), `navigator`, `location` | **100% Supported** | Zero-ICU-bloat deterministic `Intl` fast-path shard (`18_intl.js`) supporting `Date.prototype.toLocale*`, `Number.prototype.toLocaleString` (`decimal`, `currency`, `percent`, `unit`, `formatToParts`), `String.prototype.localeCompare`, `PluralRules` (`cardinal`, `ordinal`), `Segmenter` (`grapheme`, `word`, `sentence`), plus WinterTC `navigator` (`userAgent: "Slice-NexusJS/0.10.6"`, `hardwareConcurrency`, `language`, `languages`) and `location`. | | **JSX / TSX & Edge SSR** | Native `.tsx` / `.jsx` compilation + `slice:jsx` (`react/jsx-runtime`, `preact/jsx-runtime`, `hono/jsx`) | **100% Supported** | Native Rust Oxc JSX/TSX compiler (`runtime: automatic`) paired with a built-in zero-dependency SSR engine (`renderToString`, `jsx`, `jsxs`, `jsxDEV`, `Fragment`, `createElement`/`h`, `raw`) featuring automatic HTML & attribute XSS escaping, void tag handling, and camelCase `style` object serialization. | --- diff --git a/docs/guides/README.md b/docs/guides/README.md index a0d4421..18b3701 100644 --- a/docs/guides/README.md +++ b/docs/guides/README.md @@ -1,6 +1,6 @@ # Slice (Nexus-JS) — Developer How-To Guides (`docs/guides/`) -This directory contains practical step-by-step developer guides, production deployment how-tos, and ecosystem integration recipes for Slice (`v0.10.5`): +This directory contains practical step-by-step developer guides, production deployment how-tos, and ecosystem integration recipes for Slice (`v0.10.6`): ## Available Guides diff --git a/docs/system/00_index.md b/docs/system/00_index.md index d673adc..44c5ee4 100644 --- a/docs/system/00_index.md +++ b/docs/system/00_index.md @@ -1,4 +1,4 @@ -# Slice (Nexus-JS): System Architecture & Internal Specification Index (`v0.10.5`) +# Slice (Nexus-JS): System Architecture & Internal Specification Index (`v0.10.6`) Welcome to the **Slice (Nexus-JS)** System Architecture and Internal Specification (`docs/system/`). Engineered in pure Rust (`edition = 2021`, `opt-level = 3`, `lto = "fat"`, `codegen-units = 1`, `panic = "abort"`), Slice replaces the legacy POSIX + monolithic V8/JSC assumptions of Node.js, Deno, and Bun with four orthogonal, tightly integrated Rust crates: @@ -21,7 +21,7 @@ Welcome to the **Slice (Nexus-JS)** System Architecture and Internal Specificati | **[`05_wasm_workers_and_kernel_io.md`](./05_wasm_workers_and_kernel_io.md)** | Pure-Rust WebAssembly (`wasmi` `v2.0.0`, `GLOBAL_WASM_MODULE_CACHE`, 5-Ring WASM Cage), Capability-Attenuated MicroVM Web Workers & `node:worker_threads` (`IDLE_WORKER_POOL`), Direct Kernel Completion Rings (`io_uring` & `IOCP`), & OS-Native `notify` File Watcher | `crates/slice-engine/src/{wasm,workers}.rs`, `crates/slice-io/src/lib.rs`, `crates/slice-cli/src/config_and_watch.rs` | | **[`06_edge_kv_ai_sandbox_and_mcp.md`](./06_edge_kv_ai_sandbox_and_mcp.md)** | 16-Way Sharded `Slice.kv` (`EDGE_KV_SLAB`), Multi-Tenant `--tenant-dir` Atomic Hot-Swap, SplitMix64 `--deterministic` Replay, AI Agent "Code Mode" (`Slice.evalSandbox`, `< 5 us` `Slice.checkpoint`/`restore`), Time-Travel `slice test`, & Built-In MCP Server (`slice mcp`) | `crates/slice-engine/src/state_and_kv.rs`, `crates/slice-cli/src/{test_runner,mcp_and_repl}.rs` | | **[`07_production_tooling_guide.md`](./07_production_tooling_guide.md)** | Production CLI Reference, Unified 4-Layer Configuration System (`slice.toml`, Inline `// @slice-...`, `SLICE_*` Env Vars, CLI Flags), Docker & Kubernetes Deployment Patterns, and Multi-Tenant Operations | `crates/slice-cli/src/{main,config_and_watch}.rs`, `crates/slice-sandbox/src/lib.rs` | -| **[`08_benchmarks_and_comparisons.md`](./08_benchmarks_and_comparisons.md)** | Complete 4-Runtime Empirical Benchmark Suite (Slice `v0.10.5` vs Node.js `v25.8.1`, Deno `v2.7.5`, and Bun `v1.3.10`) Across All 31 Applications, Framework Suites & Case Studies | `benches/`, `tests/apps/`, `tests/frameworks/`, `tests/case_studies/` | +| **[`08_benchmarks_and_comparisons.md`](./08_benchmarks_and_comparisons.md)** | Complete 4-Runtime Empirical Benchmark Suite (Slice `v0.10.6` vs Node.js `v25.8.1`, Deno `v2.7.5`, and Bun `v1.3.10`) Across All 31 Applications, Framework Suites & Case Studies | `benches/`, `tests/apps/`, `tests/frameworks/`, `tests/case_studies/` | | **[`09_research_deep_dive.md`](./09_research_deep_dive.md)** | Foundational Systems Research Paper: Breaking the JS/TS Cold-Start, Memory Density, and Multi-Tenant Security Wall | Architectural Research Blueprint | | **[`vendor/boa_engine/SLICE_PATCH.md`](../../vendor/boa_engine/SLICE_PATCH.md)** | `SLICEBC1` Precompiled `CodeBlock` Binary Serializer/Deserializer & Deferred Function Span Architecture | `vendor/boa_engine/src/{slice_precompile.rs,lib.rs,vm/opcode/call/mod.rs}` | @@ -31,7 +31,7 @@ Welcome to the **Slice (Nexus-JS)** System Architecture and Internal Specificati ``` +---------------------------------------------------------------------------------------------------+ -| Slice (Nexus-JS) v0.10.5 Host | +| Slice (Nexus-JS) v0.10.6 Host | | | | +---------------------------------------------------------------------------------------------+ | | | slice-sandbox: Zero-Trust OCap, SES & Hardware Boundary | | diff --git a/docs/system/07_production_tooling_guide.md b/docs/system/07_production_tooling_guide.md index b49bca5..132aff1 100644 --- a/docs/system/07_production_tooling_guide.md +++ b/docs/system/07_production_tooling_guide.md @@ -2,7 +2,7 @@ ## 1. Overview of the Production Toolchain -Slice `v0.10.5` provides a complete developer and production deployment workflow packaged inside a single self-contained native Rust executable (`slice`, embedding the **Oxc** TypeScript compiler, transitive `node_modules` bundler, **Boa** ES2024+ VM, and **Slice** Zero-Stat CAS + Tier-0/Tier-2 engine): +Slice `v0.10.6` provides a complete developer and production deployment workflow packaged inside a single self-contained native Rust executable (`slice`, embedding the **Oxc** TypeScript compiler, transitive `node_modules` bundler, **Boa** ES2024+ VM, and **Slice** Zero-Stat CAS + Tier-0/Tier-2 engine): 1. **Project Initialization & Policy Configuration (`slice init` & `slice.toml`)** 2. **Zero-Stat Content-Addressed Packaging (`slice pack` for single files or full `package.json` + `node_modules` folders)** diff --git a/scripts/install.ps1 b/scripts/install.ps1 index e796569..a89231f 100644 --- a/scripts/install.ps1 +++ b/scripts/install.ps1 @@ -16,6 +16,6 @@ if (-not (Test-Path $ReleaseExe)) { $DestExe = Join-Path $InstallDir "slice.exe" Copy-Item -Force $ReleaseExe $DestExe -Write-Host "Installed Slice v0.10.5 to $DestExe" +Write-Host "Installed Slice v0.10.6 to $DestExe" & $DestExe info diff --git a/scripts/install.sh b/scripts/install.sh index 4058b32..ad549d0 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -9,13 +9,13 @@ INSTALL_DIR="${HOME}/.slice/bin" mkdir -p "$INSTALL_DIR" if [ ! -f "$ROOT_DIR/target/release/slice" ]; then - echo "Compiling Slice v0.10.5 release binary..." + echo "Compiling Slice v0.10.6 release binary..." cargo build --release fi cp -f "$ROOT_DIR/target/release/slice" "$INSTALL_DIR/slice" chmod +x "$INSTALL_DIR/slice" -echo "Installed Slice v0.10.5 to $INSTALL_DIR/slice" +echo "Installed Slice v0.10.6 to $INSTALL_DIR/slice" "$INSTALL_DIR/slice" info diff --git a/scripts/package_release.ps1 b/scripts/package_release.ps1 index 79eb5c2..2c760ad 100644 --- a/scripts/package_release.ps1 +++ b/scripts/package_release.ps1 @@ -6,7 +6,7 @@ $ErrorActionPreference = "Stop" $RootDir = Split-Path -Parent $PSScriptRoot Set-Location $RootDir -Write-Host "[1/4] Building Slice v0.10.5 Release Binary (LTO=fat, opt-level=3)..." +Write-Host "[1/4] Building Slice v0.10.6 Release Binary (LTO=fat, opt-level=3)..." cargo build --release $DistDir = Join-Path $RootDir "dist" diff --git a/scripts/run_benchmarks.ps1 b/scripts/run_benchmarks.ps1 index 6d6a524..b3a0975 100644 --- a/scripts/run_benchmarks.ps1 +++ b/scripts/run_benchmarks.ps1 @@ -15,7 +15,7 @@ $CargoToml = Get-Content (Join-Path $RootDir "Cargo.toml") -Raw if ($CargoToml -match '(?m)^\[workspace\.package\]\s*\r?\nversion\s*=\s*"([^"]+)"') { $Version = $Matches[1] } else { - $Version = "0.10.5" + $Version = "0.10.6" } try { diff --git a/tests/README.md b/tests/README.md index 98b6949..1da30fb 100644 --- a/tests/README.md +++ b/tests/README.md @@ -6,7 +6,7 @@ This directory (`tests/`) contains a reproducible Linux `x86_64` Docker benchmar ## Latest Runtimes Installed in Docker ([`tests/Dockerfile`](./Dockerfile)) -- **Slice (`v0.10.5` — `SLICEBC\x01` Precompiled `CodeBlock` CAS Default):** Hybrid architecture combining **Oxc** (`v0.154.0` production Rust TypeScript compiler + AST ESM-to-CJS module bundler with deferred function module spans (`0x11` tag) + `.wasm` zero-stat module bundler + full `package.json` `"exports"` resolver + static barrel tree-shaker), **Boa (`boa_engine` v0.22 + [`vendor/boa_engine/SLICE_PATCH.md`](../vendor/boa_engine/SLICE_PATCH.md))** full ECMAScript VM with default `SLICEBC\x01` precompiled `Gc` + global `Scope` binary payloads (zero runtime `boa_parser` / `ByteCompiler` overhead) and pre-fused `node:*` built-in shards, thread-local pre-warmed context pool (`BOA_CONTEXT_POOL`), pure-Rust **WebAssembly (`wasmi` v2.0.0)** engine with `GLOBAL_WASM_MODULE_CACHE` and 5-Ring CPU fuel & linear memory cages, native Rust fast-path intrinsics (`SemVer`, `SHA-256`/`SHA-384`/`SHA-512`, `HMAC-SHA256`/`HMAC-SHA512`, `Base64URL`, in-memory `VFS` slab cache, WinterTC `URL`/`URLPattern`/`URLSearchParams`/`Headers`/`Request`/`Response`/`ReadableStream`/`TransformStream`/`CompressionStream`/`DecompressionStream`/`TextEncoder`/`TextDecoder`/`crypto.subtle`/`Blob`/`File`/`FormData`/`structuredClone`/`EventTarget`/`AbortSignal`/`WebAssembly`, real `Uint8Array`-backed `Buffer`, `node:*` Core Tier-1 modules including `node:async_hooks` and `node:zlib`, `Slice.streamSSE` / `Response.sse`, OCap-guarded outbound HTTP/1.1 & HTTPS TLS 1.3 `fetch()` with Keep-Alive pooling, hop-by-hop redirect guard, Cloud Metadata SSRF Shield, and Egress DLP, built-in Time-Travel `slice test` runner, OS-native `notify` (`v8.2`) `< 5 ms` `--watch`, and Auto-DLP `.env`), and **Slice Zero-Stat CAS + `--static` BLAKE3 `ETag` Static Server + Tier-0/Tier-2 fast paths**. +- **Slice (`v0.10.6` — `SLICEBC\x01` Precompiled `CodeBlock` CAS Default):** Hybrid architecture combining **Oxc** (`v0.154.0` production Rust TypeScript compiler + AST ESM-to-CJS module bundler with deferred function module spans (`0x11` tag) + `.wasm` zero-stat module bundler + full `package.json` `"exports"` resolver + static barrel tree-shaker), **Boa (`boa_engine` v0.22 + [`vendor/boa_engine/SLICE_PATCH.md`](../vendor/boa_engine/SLICE_PATCH.md))** full ECMAScript VM with default `SLICEBC\x01` precompiled `Gc` + global `Scope` binary payloads (zero runtime `boa_parser` / `ByteCompiler` overhead) and pre-fused `node:*` built-in shards, thread-local pre-warmed context pool (`BOA_CONTEXT_POOL`), pure-Rust **WebAssembly (`wasmi` v2.0.0)** engine with `GLOBAL_WASM_MODULE_CACHE` and 5-Ring CPU fuel & linear memory cages, native Rust fast-path intrinsics (`SemVer`, `SHA-256`/`SHA-384`/`SHA-512`, `HMAC-SHA256`/`HMAC-SHA512`, `Base64URL`, in-memory `VFS` slab cache, WinterTC `URL`/`URLPattern`/`URLSearchParams`/`Headers`/`Request`/`Response`/`ReadableStream`/`TransformStream`/`CompressionStream`/`DecompressionStream`/`TextEncoder`/`TextDecoder`/`crypto.subtle`/`Blob`/`File`/`FormData`/`structuredClone`/`EventTarget`/`AbortSignal`/`WebAssembly`, real `Uint8Array`-backed `Buffer`, `node:*` Core Tier-1 modules including `node:async_hooks` and `node:zlib`, `Slice.streamSSE` / `Response.sse`, OCap-guarded outbound HTTP/1.1 & HTTPS TLS 1.3 `fetch()` with Keep-Alive pooling, hop-by-hop redirect guard, Cloud Metadata SSRF Shield, and Egress DLP, built-in Time-Travel `slice test` runner, OS-native `notify` (`v8.2`) `< 5 ms` `--watch`, and Auto-DLP `.env`), and **Slice Zero-Stat CAS + `--static` BLAKE3 `ETag` Static Server + Tier-0/Tier-2 fast paths**. - **Node.js (`v27.0.0-alpha` — Absolute Latest Release):** Dynamically resolved at container build time from `https://nodejs.org/dist/index.json` (`.[0].version`). - **Bun (`v1.4.4` — Absolute Latest Release):** Installed via official `https://bun.sh/install`. - **Deno (`v2.9.8` — Absolute Latest Release):** Installed via official `https://deno.land/install.sh`. @@ -213,12 +213,12 @@ This directory (`tests/`) contains a reproducible Linux `x86_64` Docker benchmar > **Latest Verified Benchmark Report:** **[`tests/reports/latest.md`](./reports/latest.md)** (Archive: [`bench_v0.10.5_20261109_225249Z_47bfa6b.md`](./reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md)) -> **Provenance:** Slice `v0.10.5` (`47bfa6b`) · Generated `2026-11-09T22:52:49Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` +> **Provenance:** Slice `v0.10.6` (`47bfa6b`) · Generated `2026-11-09T22:52:49Z` · Environment: `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` > **Scorecard Across All 33 Production Workloads:** Beats **Deno (`v2.9.8`)** on **33/33**, **Node.js (`v27.0.0-alpha.0.0.0`)** on **33/33**, **Bun (`v1.4.4`)** on **30/33** cold one-shot, and **all 3 runtimes on 33/33 workloads in `--warm` pooled execution**. #### 1. Core Architecture, HTTP Throughput & 1,000-Tenant MicroVM Density -| Metric | Slice (`v0.10.5` `SLICEBC\x01`) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Advantage | +| Metric | Slice (`v0.10.6` `SLICEBC\x01`) | Bun (`v1.4.4`) | Deno (`v2.9.8`) | Node.js (`v27.0.0-alpha.0.0.0`) | Slice Advantage | | :--- | :---: | :---: | :---: | :---: | :--- | | **In-Process Isolate Cold Start (`P50` / `P99`)** | **`1.05 us` / `1.80 us`** | N/A (Process/VM) | N/A (Process/VM) | N/A (Process/VM) | **~120,000x faster than 125ms Firecracker VM** | | **1,000-Tenant MicroVM Swarm (Boot + Exec)** | **`1.37 ms` (`9.70 MB` RSS)** | > 5,000 ms | > 15,000 ms | > 30,000 ms | **> 3,900x faster / ~32,000x denser** | diff --git a/tests/reports/latest.json b/tests/reports/latest.json index 3b33285..9759098 100644 --- a/tests/reports/latest.json +++ b/tests/reports/latest.json @@ -1,11 +1,11 @@ { "metadata": { - "version": "0.10.5", + "version": "0.10.6", "commit": "47bfa6b", "timestampUtc": "2026-11-09T22:52:49Z", "environment": "Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)", "runtimes": { - "slice": "v0.10.5", + "slice": "v0.10.6", "bun": "v1.4.4", "deno": "v2.9.8", "node": "v27.0.0-alpha.0.0.0" diff --git a/tests/reports/latest.md b/tests/reports/latest.md index 60b4873..e319550 100644 --- a/tests/reports/latest.md +++ b/tests/reports/latest.md @@ -1,12 +1,12 @@ # Slice (Nexus-JS) — Full 33-Workload & MicroVM Benchmark Report -* **Slice Version:** `v0.10.5` (Commit `47bfa6b`) +* **Slice Version:** `v0.10.6` (Commit `47bfa6b`) * **Generated Timestamp (UTC):** `2026-11-09T22:52:49Z` * **Archive File:** [`tests/reports/bench_v0.10.5_20261109_225249Z_47bfa6b.md`](./bench_v0.10.5_20261109_225249Z_47bfa6b.md) * **Canonical Latest Report:** [`tests/reports/latest.md`](./latest.md) * **Environment:** `Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)` * **Compared Runtimes:** - * **Slice:** `v0.10.5` (Default `SLICEBC\x01` Precompiled Boa `CodeBlock` CAS + Monomorphic Inline Caching `get_fast` + Streaming `JsonSeed` `JSON.parse`) + * **Slice:** `v0.10.6` (Default `SLICEBC\x01` Precompiled Boa `CodeBlock` CAS + Monomorphic Inline Caching `get_fast` + Streaming `JsonSeed` `JSON.parse`) * **Bun:** `v1.4.4` (JavaScriptCore) * **Deno:** `v2.9.8` (V8) * **Node.js:** `v27.0.0-alpha.0.0.0` (V8 native TypeScript execution) diff --git a/tests/run_real_stack_benchmarks.sh b/tests/run_real_stack_benchmarks.sh index f52e684..dc4a283 100644 --- a/tests/run_real_stack_benchmarks.sh +++ b/tests/run_real_stack_benchmarks.sh @@ -44,7 +44,7 @@ BENCH_TAGS="${1:-${SLICE_BENCH_TAGS:-all}}" METRICS_JSONL="${SLICE_BENCH_JSONL:-/tmp/slice_bench_metrics.jsonl}" rm -f "$METRICS_JSONL" -SLICE_VERSION="${SLICE_VERSION:-0.10.5}" +SLICE_VERSION="${SLICE_VERSION:-0.10.6}" SLICE_GIT_COMMIT="${SLICE_GIT_COMMIT:-$(git -C "$ROOT_DIR" rev-parse --short HEAD 2>/dev/null || echo "abdbf89")}" SLICE_BENCH_TS_UTC="${SLICE_BENCH_TS_UTC:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")}" CURRENT_APP_IDX="" @@ -207,7 +207,7 @@ echo "=========================================================================" echo " RUNTIME VERSIONS (LINUX DOCKER x86_64 - LATEST RELEASES)" echo " Active Benchmark Tags: $BENCH_TAGS" echo "=========================================================================" -echo " Slice : v0.10.5 (Oxc TS Compiler + Boa ES2024 VM + Zero-Stat CAS)" +echo " Slice : v0.10.6 (Oxc TS Compiler + Boa ES2024 VM + Zero-Stat CAS)" echo " Node.js : $(node -v)" echo " Bun : v$(bun -v)" echo " Deno : $(deno -V)" diff --git a/tests/scripts/generate_bench_report.mjs b/tests/scripts/generate_bench_report.mjs index fb5ccfb..8a63df1 100644 --- a/tests/scripts/generate_bench_report.mjs +++ b/tests/scripts/generate_bench_report.mjs @@ -330,12 +330,12 @@ function parseJsonlMetrics(jsonlPath, previousReport) { return { metadata: { - version: metaRec.version || previousReport?.metadata?.version || "0.10.5", + version: metaRec.version || previousReport?.metadata?.version || "0.10.6", commit: metaRec.commit || previousReport?.metadata?.commit || "abdbf89", timestampUtc: metaRec.timestampUtc || new Date().toISOString(), environment: metaRec.environment || previousReport?.metadata?.environment || "Linux x86_64 Docker (io_uring SQPOLL + WRPKRU)", runtimes: { - slice: `v${metaRec.version || "0.10.5"}`, + slice: `v${metaRec.version || "0.10.6"}`, bun: metaRec.bunVersion || previousReport?.metadata?.runtimes?.bun || "v1.4.4", deno: metaRec.denoVersion || previousReport?.metadata?.runtimes?.deno || "v2.9.8", node: metaRec.nodeVersion || previousReport?.metadata?.runtimes?.node || "v27.0.0-alpha"