Dashboard › opencode-lore › Distillation
9116884f-89d2-4594-b629-1e78ce59be98["lore_tm_v1_zpisu8IJgwZbYIIyLlhNLmWnasfHO3mlbeJLOo-Qqhw","lore_tm_v1__kKe9HclaCxO5Va2CLbGitk4Qs6I10hDC7KjPKRUbUI","lore_tm_v1_w2t6n2bL9a4_nzKLWES3IkOGLkzUK7P2Lk_bkfAeyRo","lore_tm_v1_vnEN_qDc-0n1sOsNoKg-hSfPA_Xq93NsXnyMbz9ymLQ","lore_tm_v1_6cG4hN-wMFc7-JVjL6oVVCW3GDmRlDHKmjy3DJkVKz4","lore_tm_v1_-WC0sLHx3UcA7ZT3jg5Tzhj2w9pTJXP1JU8X8aEYaR4","lore_tm_v1_tYmM5lvJbXrth2XabqxA_5W_Ck3i0ji0KKga9tYI5tY","lore_tm_v1_rYa-DK6Ot_RmPXBR_3OMzl5YyIcK_xdl5dBt27JPOPs","lore_tm_v1_zYoKAlu7szGcGIttrHO3aOCR22g0xFuQsVqHkollIzs","lore_tm_v1_NifyaVv42JNzYHZIz-aQ1gOmhkHUiZ-wd686zp3K9mg"]
Date: Sep 16, 2026
createRecallDiagnostics(enabled = true) keeps SHA-256 fingerprints only in closure-local Sets for inputs, results, pairs, and delivered coverage (packages/gateway/src/recall-diagnostics.ts, lines 7-20).createRecallDiagnostics() is bounded by MAX_RECALL_DIAGNOSTIC_ROUNDS = 64; record() stops when disabled, finished, or at the limit and tracks rounds, detailCalls, emptyBodies, resultBytes, repeated inputs/results/pairs, and novel coverage (packages/gateway/src/recall-diagnostics.ts, lines 4-60).scope ?? "all", id || ids || null, and the trimmed query only when no ID lookup is present. Coverage fingerprints combine identity, revision, kind ?? "detail", offset, and length with \u0000; zero-length coverage does not count as progress (packages/gateway/src/recall-diagnostics.ts, lines 34-58).recall-round through log.info() with round, kind (detail or search), repetition flags, coverageProgress, and per-result byte count. finish("completed" | "failed" | "aborted") is idempotent, emits recall-chain with aggregate counts and elapsed time clamped to 0..300_000 ms, then clears all four sets (packages/gateway/src/recall-diagnostics.ts, lines 59-75).d385b39653b0085833e281b6347b15071cee6801 / prpmozzzqvkt — fix(responses): sanitize provider failures; 2. 29dee093d7ceed38b0ed823c9d5b26f8c1ba3d7c / qnlnmzlxyynv — fix(responses): bind sanitized failures to trusted state; 3. b1bc7cd46c4eb09f23a7a5c6db257c380401ca02 / xqmskzvmnqkr — fix(responses): complete provider failure sanitization; 4. 01a6e06b08ba1b54f42c5b4c757ec449eb8e8490 / skwrwnvkvulp — fix(responses): make provider failure settlement atomic; 5. a1020a45be1382893a183e2ff39506e78a08fb76 / plzxzousrzuv — fix(responses): preserve trusted failure metadata; 6. 24880457763b6f10831856d01c41bd72d62ddc28 / wswlsmrnuzlq — fix(responses): reject non-monotonic provider failures; 7. 0dd569b520bad37adbaea230f32100c7f83f463c / lpmvqrurxwlm — fix(responses): unify provider failure handling.0dd569b520bad37adbaea230f32100c7f83f463c carries bookmarks fix/responses-provider-failures and fix/responses-provider-failures@git; it changed packages/gateway/src/pipeline.ts, packages/gateway/src/stream/openai-responses.ts, packages/gateway/test/openai-responses-recall-aware-stream.test.ts, and packages/gateway/test/openai-responses-stream.test.ts with 364 insertions and 27 deletions.validateResponsesProviderFailureTerminal() in packages/gateway/src/stream/openai-responses.ts. It requires parsed.type === event and trusted state.created; validates the sanitized response.failed projection using validatePublicResponsesEvent() or validateCodexResponsesEvent(); and additionally calls validateFailureTerminal(parsed) for events other than diagnostic error and response.error.packages/gateway/src/pipeline.ts now call validateResponsesProviderFailureTerminal() before lifecycle validation and settlement, using validation mode opts.validation ?? "public" and sparse bound Math.min(maxSSEFrames, DEFAULT_MAX_SSE_FRAMES).RESPONSES_PROVIDER_FAILURE_LOG = "openai-responses provider failure" via always-visible log.error(), including accumulator, main pipeline, and continuation paths.projectResponsesInProgressEvent(parsed, state) constructs externally visible response.in_progress frames from trusted response.created state: trusted id, model, optional created_at, fixed status: "in_progress", fixed output: [], object normalized to "response", and optional source sequence_number. Both plain accumulation callbacks and recall-aware forwarding use this projection instead of forwarding provider lifecycle metadata verbatim.response.in_progress source metadata because that frame is projected from trusted created state before exposure; other events still reject a model differing from state.model.validateFailureTerminal() now also validates parsed.response.usage through validateResponsesUsage(parsed.response.usage, "malformed Responses usage"), preserving validated failure usage while rejecting malformed usage.packages/gateway/test/openai-responses-stream.test.ts includes “uses created metadata and failure usage in the plain streaming route” (line 618) and “binds a sanitized failure to created state and clears failed terminal output” (line 4722); packages/gateway/test/openai-responses-recall-aware-stream.test.ts includes “uses created metadata and clears failed output from completion state” (line 646) and “keeps created metadata authoritative through a hidden recall and provider failure” (line 829).accountUnsuccessfulResponse() in packages/gateway/src/pipeline.ts records validated usage without publishing successful-turn state. It defaults missing usage to ZERO_USAGE, only accounts when at least one token value is numeric and greater than 0, invokes optional markDirty(), calls accountConversationUsage(), adds GenAI usage attributes when a span exists, then always sets span status { code: 2, message: "upstream response did not complete" } and calls endSpan() (lines 13479-13512).conversationTTLForAccounting() first reads the live session’s resolvedConversationTTL, then persisted loadSessionTracking(sessionID)?.resolvedConversationTTL, accepting only "5m" or "1h" and otherwise returning undefined (packages/gateway/src/pipeline.ts, lines 13514-13523).vitest.config.ts keeps resolve.alias at the top level because placing aliases under test.resolve.alias silently resolved stale dist builds and masked real failures. Aliases are @loreai/core → packages/core/src and @loreai/gateway → packages/gateway/src.packages/core/test/**/*.test.ts, packages/core/eval/**/*.test.ts, packages/gateway/test/**/*.test.ts, packages/opencode/test/**/*.test.ts, and packages/pi/test/**/*.test.ts; uses setup file ./packages/core/test/setup.ts, Node environment, forks pool, testTimeout: 300_000, and hookTimeout: 300_000.NODE_ENV: "test", SENTRY_ENABLED: "0", and LORE_DEBUG: "0". V8 coverage reporters are text, json, html, and lcov; exclusions include tests, setup/helpers, scripts, distributions, website, Pi, eval files, config files, and scripts/**.packages/core/test/setup.ts creates one run-local temporary directory using mkdtempSync(join(tmpdir(), "lore-test-")), sets LORE_DB_PATH to <tmp>/test.db, and after all tests calls close() then recursively removes the directory.https://models.dev/api.json, returning canned HTTP 200 JSON, while delegating all other requests to captured realFetch. This prevents gateway pre-warming from making live calls, avoids third-party 500/timeout flakes, and prevents cross-file pollution of worker-model.test.ts fetch mocks.claude-opus-4-6 with costs { input: 5, output: 25, cache_read: 0.5 } and limits { context: 1_000_000, output: 128_000 }; claude-sonnet-4-20250514 with { input: 3, output: 15, cache_read: 0.3 } and { context: 1_000_000, output: 64_000 }; claude-haiku-4-5 with { input: 1, output: 5, cache_read: 0.1 } and { context: 200_000, output: 64_000 }; OpenAI gpt-5.4-mini with { input: 0.75, output: 4.5, cache_read: 0.19 } and { context: 400_000, output: 100_000 }.afterEach() calls silenceStderr(false) so force-active Pi/OpenCode plugin tests cannot hide logs or vacuously satisfy unrelated “no output” assertions in the same fork (packages/core/test/setup.ts, lines 83-90).afterEach() calls invalidateProjectIdCache() because the whole run shares one temporary DB and one db() connection (packages/core/test/setup.ts, lines 90-95).A && B expressions, so a reported :col → "true" mutation can target only a sub-operand rather than the entire condition; supporting guidance is in quality/MUTATION_TESTING.md.#832 baseline; thresholds are { high: 80, low: 60, break: null }, and runs are nightly/on-demand rather than per-PR.#828) plus decay/evict edge cases (#816). Current mutate allowlist, in order, is 1. packages/core/src/sync-data.ts, 2. packages/gateway/src/sync.ts, 3. packages/gateway/src/translate/bedrock.ts; ltm.ts and gradient.ts are deferred because their coverage spans many test files.stryker.config.mjs explicitly loads @stryker-mutator/vitest-runner because plugin auto-discovery fails under pnpm’s non-hoisted symlink layout; it uses testRunner: "vitest", vitest.configFile: "vitest.mutation.config.ts", coverageAnalysis: "perTest", concurrency: 2, timeoutMS: 60_000, and timeoutFactor: 2.5.html, clear-text, progress, and json; HTML output is reports/mutation/index.html, with JSON at reports/mutation/mutation.json. Commands documented are pnpm mutation for the whole allowlist and pnpm mutation -- --mutate "packages/core/src/sync-data.ts" for one module.dist, **/dist/**, dist-bin, dist-tarballs, dist-vendor, reports, coverage, .stryker-tmp, and **/*.tsbuildinfo.