Dashboard › opencode-lore › Distillation
3f406055-5075-41ec-988f-c4eb0991f233["lore_tm_v1_C5dguImHOGhu9pGgNbLDe7apdiiphaAio9ipXjyoPc0","lore_tm_v1_CO4aNABrfgqZ--tOykY_TRjuEDRWrqnql7MGh-Jv0fs","lore_tm_v1_YtucBe7qr91m6scGGGLpjxRMBQcnYnIEs2QMcPcMQb0","lore_tm_v1_UMMbrWj5Xt3mKW8XK6Zufa1Rhi8spzwyzrP2NUdTkc8","lore_tm_v1_fA7qe2KP5FFJllO146kT3TtjZaqRc9mxVPRt988-Eak","lore_tm_v1_sNahsu3MGzwEtBKPd86-paQd1kB3yrl1riDQGswaQDY","lore_tm_v1_yLFUATWqJmCvmz5LcscGvqvt0ZFZL9nIG56HXg4u3zE","lore_tm_v1_bfUG9m05C3CoVk-OmZg8sla1bg4On-3nU83F90Tk-Oo","lore_tm_v1_zb6fIV9XKLQgjoJ5nW9YZRrXjP-MF9QdNtlxccze3qE"]
Date: Sep 16, 2026
SIGKILL, so the ×0.7 backoff never fires and the only defense is never over-allocating in the first place.packages/core/test/embedding-pool-memory.test.ts contains 4 OOM regressions: 1. with ceiling 2 and free memory 6 * GB, each worker’s maxTokens must equal memoryModelEmbedCap((6 * GB) / 2) and be below memoryModelEmbedCap(6 * GB); 2. with ceiling 1, constrained memory 12 * GB, host/container free 64 * GB, and available headroom Number.NaN, the primary worker must use MIN_EMBED_TOKENS; 3. with ceiling 1, a worker created at 6 * GB must re-clamp the next request after free memory drops to 2 * GB, using memoryModelEmbedCap(2 * GB); 4. after a request at 16 * GB, an EMBED_OOM_EXIT_CODE exit following a drop to 2 * GB must respawn and resubmit the same request ID with memoryModelEmbedCap(2 * GB), below backoffEmbedCap(first.maxTokens).1; both requests therefore post to the same worker.packages/core/test/embedding-pool-memory.test.ts documents that per-request re-clamping is required because sibling workers and live sessions can consume memory after provider construction; retaining the construction-time cap can trigger an uncatchable native OOM.packages/core/test/embedding-pool-memory.test.ts documents that the OOM-respawn payload is posted directly without a later effectiveMaxTokens pass, making the resubmit clamp the only cap on the native-SIGKILL retry path.jj operations never fail on merge conflict; rebase, new, or squash records the conflict in the resulting commit, after which jj st must be checked and files resolved manually rather than with interactive jj resolve.in_progress, high; 2. “Prove critical regressions fail on the parent and under guard-removal mutations” — pending, high; 3. “Run focused and complete repository validation on final bytes” — pending, high; 4. “Freeze exact candidate and obtain independent correctness/security reviews” — pending, high; 5. “Finalize the Jujutsu change and report root causes and runtime guidance” — pending, medium.packages/core/src/embedding/pool.ts admits exactly one recovery probe after localEmbeddingState.initRetryAt cooldown; existing failure debt prevents growth until that slot succeeds.packages/core/src/embedding/pool.ts routes new work only to healthy slots while transient initialization failure debt exists; unproven slots may finish existing requests but cannot receive more work or amplify replacement spawning.packages/core/src/embedding/pool.ts permits lazy growth only after at least one slot has completed a real embed, preventing simultaneous cold workers from reading or purging one another’s partial HuggingFace cache download.packages/core/test/embedding-pool.test.ts pins LORE_EMBED_POOL_SIZE behavior: "2" sets a 2-worker ceiling; "not-a-number", "2x", "0", and "-4" resolve to undefined rather than NaN; "3.9" floors to 3; an unset value remains undefined for the memory-gated default.packages/core/test/embedding-pool.test.ts production-path regressions require: 64 * GB free memory allows the default ceiling of 2; 0 headroom limits the pool to one worker; a pool constructed under 0 headroom can later grow to 2 workers after headroom rises to 64 * GB.packages/core/test/embedding-pool.test.ts verifies resetProvider() shuts down every worker in a 2-worker pool.packages/core/src/ort-native.ts supports native targets linux-x64, linux-arm64, darwin-arm64, win32-x64, and win32-arm64; platform package names use the exact shape @loreai/onnxruntime-<os>-<arch>, and the binding filename is onnxruntime_binding.node.packages/core/src/ort-native.ts requires Linux glibc >= 2.27; absent, malformed, or inaccessible process.report.header.glibcVersionRuntime fails closed to WASM.packages/core/src/ort-native.ts canonicalizes the package directory and binding with realpathSync(), requires the binding to remain within the package and be a regular file, then checks the first 4 bytes for ELF on Linux, Mach-O on Darwin, or MZ on Windows.closeSync() errors must never interrupt WASM fallback.@loreai/gateway, package name matches the computed platform package, gateway version, declared optional-dependency version, and platform-package version all match, loreOrtNodeVersion matches the expected ONNX Runtime version, and manifest os/cpu exactly match the runtime.onnxruntime-node version matching the expected version, requires the resolved manifest name/version to match, requires bin to remain inside the package, and requires exactly one napi-v\d+ directory; it never selects an arbitrary ancestor runtime.resolveNativeOrtBindingPath() never throws: unsupported targets, incompatible libc, unresolved packages, malformed manifests, ambiguous N-API layouts, unsafe paths, invalid binaries, and dist-only installs return null and fall back to WASM.packages/core/src/ort-native.ts documents native ONNX thread oversubscription: ORT uses host std::thread::hardware_concurrency() rather than cgroup CPU quota, so a 1-vCPU container on a 32-core host may spawn about 32 intra-op threads, increasing RSS through per-thread arenas and causing context-switch thrash.packages/core/src/embedding-worker-types.ts defines InitNeedsWasm for structurally intact models that native ONNX cannot deserialize, notably Bun’s onnxruntime-node worker-thread incompatibility producing “protobuf parsing failed”; because backend choice is cached at the first require("onnxruntime-node"), recovery requires one fresh worker with WorkerInitData.forceWasm=true, not an in-process retry or destructive model purge.packages/core/src/embedding-worker-types.ts sets EMBED_OOM_EXIT_CODE = 75 for input-size-driven ONNX OOM; the main thread distinguishes it from fatal exit code 1 and respawns with a reduced token cap.isOomError() classification treats numeric-only messages of at least 6 digits and messages matching out.of.memory|alloc.*fail|oom case-insensitively as OOMs; centralizing this logic prevents drift that previously caused an 11k-event storm.