Skip to content

Release v0.18.0: release notes, sync v6 and embedding help docs, READMEs - #123

Merged
rozx merged 16 commits into
mainfrom
release/v0.18.0
Oct 10, 2026
Merged

rozx merged 16 commits into
mainfrom
release/v0.18.0

Conversation

@rozx

@rozx rozx commented Oct 9, 2026 •

Copy link
Copy Markdown
Owner

Summary

Release prep for v0.18.0. It bumps the version and adds the release notes, help doc fixes and README updates for the 17 commits on main since v0.17.0. The main changes are sync protocol v6 with chapter-group incremental sync, large-library sync and leftover Gist file cleanup, plus the switch to Bekko local embeddings running in a Web Worker with a redesigned 向量索引 panel.

  • package.json goes to 0.18.0; the pre-commit hook set src/constants/version.ts to 0.18.0.16 (one bump per commit, including review fixes)

  • New public/releaseNotes/RELEASE_NOTES_v0.18.0.md (Chinese), covering:

    • sync protocol v6: chapters in 16 fixed groups so editing one chapter uploads only its group, catalog (if changed) and manifest; manifest-based reads past GitHub's 300-file listing limit; a local-only checkpoint that skips full library scans when nothing changed; memory access times kept local; whole-round abort on any download / apply / local read failure; mid-upload concurrent-write stop; the new 整体进度 sync progress
    • 清理远端遗留文件 (scan / preview / clean unreferenced Gist files) and revision history grouped by book with 历史遗留文件
    • per-key sync for Tavily / Firecrawl API keys and per-task sync for task default models (no longer cleared mid-sync)
    • Bekko embeddings (hotchpotch/bekko-embedding-v1-a25m, 384-d, ~190 MiB for both backends), source-only chapter vectors with re-ranking, WebGPU probing and the Transformers.js recovery patch
    • embedding inference in a Web Worker with throttled background batches, crash / timeout recovery and accurate download progress
    • the redesigned 向量索引 panel (now on tablet and narrow layouts), strict memory-injection char budget, keyword-only fallback when the master switch is off
    • bug fixes: covers and local / LAN requests bypass the CORS proxy, lower memory use when restoring large libraries
    • upgrade notes: v4 → v6 migration (v5 was never released), back up and upgrade every syncing device first, don't force-push from old clients; re-download the model and rebuild vectors; old GTE cache is kept; new @noble/hashes dependency and patches/ for transformers
  • public/help/{zh-CN,zh-TW,en-US}/index.json: v0.18.0 entry added above v0.17.0; zh-CN / zh-TW local-embedding descriptions updated from GTE / 批量嵌入面板 to Bekko / 向量索引面板

  • Help docs, all three languages (heading IDs unchanged except one new #settings-guide-sync-progress):

    • local-embedding.md: largely rewritten against the current UI. It wrongly said memory vectors sync via Gist (they're stripped on upload), used the old 批量嵌入 entry name and nonexistent buttons, described a sync-pause banner that doesn't exist, and lacked the new download progress
    • settings-guide.md: task default model sync / fallback rules, v6 upload granularity, abort-on-failure and mid-upload stop, new 同步进度 section, revision history grouping, cleanup panel details, embedding load progress and Worker
    • toolbar-guide.md: 向量索引 entry on desktop / tablet / narrow layouts, local embedding gated by device UA (not window width), 整体进度 in the sync panel, plus other layout corrections
    • ai-models-guide.md: task default model sync rules; explicit local / LAN address ranges that bypass the CORS proxy
    • book-details-memory.md: access time and vectors stay on the device; sync merges on content modification time
  • README.md / README.zh-TW.md / README.en-US.md: the "v0.17" highlight replaced with "v0.18" (latest release only); the Firecrawl fallback moved to quick start; a sync bullet for chapter-group sync and cleanup; release-notes links point to v0.18.0

  • Small i18n fix (src/i18n/*/embedding-ui.ts, settings-ui.ts): embeddingUi.mobileHint said to generate vectors on desktop and read them on mobile, but vectors never sync; settingsUi.embedding.chapterAuto* pointed to a "popup at the top of the book details page", which is now a panel in the side rail / top system bar

  • Embedding sync gate fix (from review): the queue now tracks syncGateActive (set / cleared only by applySyncGate) separately from userPaused, so no manual or settings-driven pause() / resume() can release the gate mid-sync, and a user pause survives gate release. Progress exposes syncGated, and the 恢复 buttons in the 向量索引 panel and the memory panel are disabled while it is set. Memory batches now write one item at a time, stop when the gate closes, and updateMemoryEmbeddingInDB compares the memory's content / summary with the text the vectors were computed from inside the same IDB write transaction (and the in-memory caches are only updated for entries whose text still matches); items not written are discarded and requeued instead of writing pre-sync vectors onto synced records (chapters already re-check before writing). Six regression tests in embedding-queue.test.ts; the bug predates this release and is listed under 问题修复.

  • Legacy apply fixes (from review): writeImportedMemory, the stale-memory delete in applyBookMemories, and the stale model / book deletes in applyDownloadedAiModels / applyDownloadedNovels no longer swallow errors, matching the v6 paths, so a failed write or delete during the v1–5 → v6 migration aborts the round instead of uploading a manifest that drops or republishes data; while stale model deletes run, the model store lists both the newly saved and the stale models, so a failed delete lets the rollback remove the new ones and a retry still finds the stale ones. Because remote records may have an empty summary, createMemoryWithId gained a { allowEmptyText: true } sync-import option (used only by writeImportedMemory) so such records import instead of failing the whole migration / restore; normal creation still rejects empty summaries, and content / summary must still be strings — also enforced in upsertMemoryForSync for v6 entries. Regression tests in sync-data-service.test.ts and memory-sync-access.test.ts (real service).

  • Per-item fallback for unembedded memories (from review): once the model is ready, memories without a usable vector (stale after the GTE → Bekko switch, or new and not yet embedded) used to be scored with semantic-mode weights and could never pass the 0.3 injection threshold. memory-scoring.ts now switches such an item alone to the fallback weights (keyword 0.75 / recency 0.25) when its raw keyword confidence is ≥ UNEMBEDDED_FALLBACK_MIN_KEYWORD (0.8); partial matches keep the semantic-mode weights, and items with a valid vector are unchanged, so the semantic-first rule from 1b1c07bc still holds for embedded memories. scoringMode is now per item. Tests updated / added in memory-scoring.test.ts; release notes, local-embedding.md, book-details-memory.md and embeddingUi.staleHint describe the new behavior.

  • Review follow-ups to the docs: fallback model display on tablet / mobile, 待处理 counts being global, Worker crash / timeout needing a manual 重试, and the embedding-off fallback being keyword + time decay (release notes and both mobileHint strings)

Notes for reviewers

  • Code changes are limited to the i18n text fixes, the embedding sync gate fix, the legacy apply fixes and the unembedded-memory scoring change above; everything else is the version bump, docs and READMEs.
  • settings-guide.md now says the pre-upload concurrency check makes at most 3 attempts in total (MAX_CONCURRENT_WRITE_RETRIES = 3), correcting the earlier "retries 3 times".
  • In ai-models-guide.md, a task whose model hasn't synced yet shows 自动选择 in the desktop dropdown and 未设置 in the tablet / mobile picker; the doc describes that actual behavior.
  • Release notes are Simplified Chinese only, per convention; all three help indexes point to the same file.

Test plan

  • bun run type-check passed
  • bun run lint passed
  • bun run quality-check passed (i18n check + fallow, no CI-level issues)
  • bunx vitest run passed (4222 passed, 5 skipped), including help three-language parity and the new regression tests
  • Prettier check passed on all changed docs, READMEs and index.json
  • Open the Help page in each UI language and check that the v0.18.0 entry and the updated guides render

🤖 Generated with Claude Code

@rozx rozx added the release Create a electron relase label Oct 9, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-10T02:37:01.008126Z 5b48240 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f64f585d1d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread public/help/zh-CN/ai-models-guide.md Outdated
Comment thread public/help/zh-CN/local-embedding.md Outdated
Comment thread public/releaseNotes/RELEASE_NOTES_v0.18.0.md Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8701f80b5b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread public/releaseNotes/RELEASE_NOTES_v0.18.0.md Outdated
Comment thread src/i18n/zh-CN/embedding-ui.ts Outdated
@kilo-code-bot

kilo-code-bot Bot commented Oct 10, 2026 •

Copy link
Copy Markdown

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Incremental review of f2f0993..5b48240 (two follow-ups from the prior round). Verified in this pass:

  • src/services/sync-data-service.ts — applyDownloadedAiModels now pre-commits aiModelsStore.models to「final models + stale models」before running the stale deletes, narrowing to the final list only after all deletes succeed. This closes the rollback gap from the last round: newly saved remote models (written by saveModel before the loop) are now visible to restoreFromBackup, which enumerates the store to delete anything not in the backup, so a failed stale delete no longer strands partial remote data in IndexedDB. The rollback semantics are consistent on all paths I traced: the failed stale model stays in the store and in the backup (retried on next sync), earlier-successfully-deleted stale models are re-saved by the backup put loop, and the final store assignment restores the pre-sync snapshot. The transient「both lists visible」window during deletes is intentional and only observable mid-sync. The pre-existing gap where a saveModel failure mid-loop happens before any store commit is unchanged code and out of scope.
  • src/__tests__/sync-data-service.test.ts — the retry test's updated assertions match the new call trace (m1 fail → rollback deletes m2 → retry deletes m1), and the new rollback test asserts the newly saved model is cleaned from both the store and IDB-side enumeration; traced both against the implementation.
  • src/__tests__/memory-cache-embedding-sync.test.ts — adds the missing import './setup' (addresses the prior P1).
  • src/constants/version.ts — automatic pre-commit build bump (0.18.0.15 → 0.18.0.16).

All previously active inline findings now have addressed replies from the author; the fixes verified in earlier rounds remain in place at HEAD.

Files Reviewed (4 files, incremental)
  • src/__tests__/memory-cache-embedding-sync.test.ts
  • src/__tests__/sync-data-service.test.ts
  • src/constants/version.ts
  • src/services/sync-data-service.ts
Previous Review Summaries (10 snapshots, latest commit f2f0993)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit f2f0993)

Status: No Issues Found | Recommendation: Merge

Incremental review of d0fa44ae..f2f0993 (one commit: cache-level content guard for memory embedding writeback). Verified in this pass:

  • src/services/memory-cache.ts — syncMemoryEmbeddingCaches now takes an optional expectedText and only attaches embeddings to cache entries whose content and summary still match the text the vectors were computed from. This closes the remaining race the PR's IDB-level guard left open: updateMemoryEmbeddingInDB compares text inside its transaction, but between that write and the in-process cache refresh a sync / edit could have replaced the cached memory with newer text — previously the stale vectors would be attached to the new text in memoryCache / bookMemoryCache. The comparison set (content + summary) matches buildMemorySegments (summary + content segments) and the IDB guard. Skipping instead of writing on mismatch is the safe direction; entries that don't match simply stay embedding-less until re-embedded. Omitting expectedText preserves the old behavior for other callers.
  • src/services/embedding-queue.ts — processMemoryBatch now passes entry.text ({ content, summary }, captured at IDB read time) through to the cache sync; type matches the new parameter exactly.
  • Tests — memory-cache-embedding-sync.test.ts covers both branches (mismatch → no embeddings/model on either cache tier; match → both updated), exercising the module directly without IO; direct vitest imports are an existing pattern across the test suite.
  • src/constants/version.ts — automatic pre-commit build bump (0.18.0.14 → 0.18.0.15).

No active findings remain against current code.

Files Reviewed (4 files, incremental)
  • src/__tests__/memory-cache-embedding-sync.test.ts
  • src/constants/version.ts
  • src/services/embedding-queue.ts
  • src/services/memory-cache.ts

Previous review (commit d0fa44a)

Status: No Issues Found | Recommendation: Merge

Incremental review of c81f21cc..d0fa44ae (one commit: keep stale models in the store until deleted, and validate v6 memory text types). Verified in this pass:

  • src/services/sync-data-service.ts — in applyDownloadedAiModels, the aiModelsStore.models commit now runs only after all stale-model deletes succeed. staleModelIds is computed from the pre-mutation store, so a failed delete leaves the stale model in the store and the next sync round recomputes and re-deletes it (the prior order replaced the store first, so a retry would silently skip the IDB delete and the record would resurface after restart). aiModelService.deleteModel wraps db.delete, a no-op success on missing keys, so re-deleting already-removed ids on retry is harmless; the novels path mutates store + IDB per deleteBook call and never had this ordering shape. The new regression test in sync-data-service.test.ts genuinely discriminates the fix: the mock store persists property assignment across both applyDownloadedData calls, so the old order would leave deleteModel called only once.
  • src/services/memory-service.ts — upsertMemoryForSync now rejects non-string content / summary with the existing LocalizedError codes before entering withMemoryWrite, so corrupt v6 memories:<bookId> entries abort the round without a partial write; empty strings remain accepted per the sync contract. The checks are not duplicative — this function does not call assertMemoryFields (used by createMemoryWithId / updateMemory), and all v6 memory entries route through it (line 3208) while legacy / snapshot paths go through the already-validated writeImportedMemory → createMemoryWithId.
  • Tests — memory-sync-access.test.ts adds real-IDB coverage for rejecting non-string content (no record written) and accepting an empty-string summary, matching the file's conventions and distinct book ids; sync-data-service.test.ts covers delete-retry after a transient failure (deleteModel called twice, last with the stale id).
  • src/constants/version.ts — automatic pre-commit build bump (0.18.0.13 → 0.18.0.14).

Both defects addressed by this commit were previously reported in inline comments (sync-data-service.ts:1381, memory-service.ts:233) and are now resolved; no active findings remain against current code.

Files Reviewed (5 files, incremental)
  • src/__tests__/memory-sync-access.test.ts
  • src/__tests__/sync-data-service.test.ts
  • src/constants/version.ts
  • src/services/memory-service.ts
  • src/services/sync-data-service.ts

Previous review (commit c81f21c)

Status: No Issues Found | Recommendation: Merge

Incremental review of 20f83d79..c81f21cc (one commit: verify memory text inside the embedding write transaction and keep sync import type checks). Verified in this pass:

  • src/utils/memory-embedding-lookup.ts — updateMemoryEmbeddingInDB now returns Promise<boolean> and compares existing.content / existing.summary against expectedText inside the same withMemoryWrite transaction; the boolean propagates correctly through withMemoryWrite → completeIdbTransaction, missing or content-changed memories return false without writing, legacy single-vector stripping is preserved, and the other caller (MemoryService.updateMemoryEmbeddingOnly, no expectedText) is unaffected by the signature change.
  • src/services/embedding-queue.ts — processMemoryBatch captures content/summary at read time and passes them to the write; items whose write returns false join the gate-blocked unpersisted set and are requeued with their original queue items via requeueFront, cache sync and embedding-updated dispatch happen only after a confirmed write, and completed.memory += ids.length - unpersisted.length stays consistent with totalEnqueued across requeue/retry. Since applySyncGate(true) sets paused = userPaused || syncGateActive, requeued gate-blocked items are not re-inferred until the gate releases; a requeued deleted memory is dropped on the next round (getMemoryByIdFromDB → null), so there is no loop.
  • src/services/memory-service.ts — the new typeof content/summary !== 'string' checks in the shared assertMemoryFields sit before the allowEmptyText early return: sync/snapshot imports still accept empty strings but reject undefined / object fields (the LocalizedError codes and i18n keys already exist from the adjacent non-empty checks). All existing callers pass strings, so their behavior is unchanged; the comment's parity claim with upsertMemoryForSync (empty-text allowance only) matches that function's contract.
  • Tests — embedding-queue.test.ts mocks updated to the new boolean return plus a regression test covering requeue-on-content-change (mockResolvedValueOnce(false) → second attempt writes, with expectedText asserted against makeMemory defaults); memory-sync-access.test.ts adds real-IDB tests for type rejection and for the in-transaction stale-text check (no write on mismatch, write + embeddingModel on match).
  • READMEs (3 languages) + src/constants/version.ts — the rewritten chapter-group bullet (editing one chapter uploads its group, the book metadata/catalog, and the manifest; other groups are not re-uploaded) is accurate — chapter edits bump lastEdited, which changes the novel:<bookId> catalog hash — and the three languages are consistent with each other; the version bump is the automatic pre-commit increment.

No previously reported findings remain against current code.

Files Reviewed (9 files, incremental)
  • README.md
  • README.en-US.md
  • README.zh-TW.md
  • src/__tests__/embedding-queue.test.ts
  • src/__tests__/memory-sync-access.test.ts
  • src/constants/version.ts
  • src/services/embedding-queue.ts
  • src/services/memory-service.ts
  • src/utils/memory-embedding-lookup.ts

Previous review (commit 20f83d7)

Status: No Issues Found | Recommendation: Merge

Incremental review of d58f39a4..20f83d79 (one commit). Verified in this pass:

  • src/services/embedding-queue.ts — the per-item sync-gate recheck in processMemoryBatch is correct: unpersisted ids are requeued with their original queue items (preserving bookId), completed.memory accounting (ids.length - remaining.length) stays consistent with totalEnqueued across requeue/retry, deleted or empty-segment memories are dropped instead of requeued, entries without vectors are skipped exactly as before, and a write that started before gate activation is allowed to finish — the tolerance the new regression test codifies. The gate path in runNextBatch mirrors the previous early-return behavior; the catch path is unchanged.
  • src/__tests__/embedding-queue.test.ts — new test follows the existing helpers and asserts write-stop, requeue (pending === 1), and post-gate-retry completion.
  • Docs (three settings-guide.md languages + RELEASE_NOTES_v0.18.0.md) — the rewritten sentence is accurate: editing chapter content always bumps the chapter's lastEdited (chapter-service.ts:1261), which survives stripNovelLocalFields and changes the novel:<bookId> catalog hash, so the catalog is normally uploaded together with the edited chapter's group and manifest; the old "content-only edits skip the catalog" wording was wrong. The three languages and the release notes are consistent with each other.
  • src/constants/version.ts — automatic pre-commit build bump.

No previously reported findings remain against current code.

Files Reviewed (7 files, incremental)
  • public/help/en-US/settings-guide.md
  • public/help/zh-CN/settings-guide.md
  • public/help/zh-TW/settings-guide.md
  • public/releaseNotes/RELEASE_NOTES_v0.18.0.md
  • src/__tests__/embedding-queue.test.ts
  • src/constants/version.ts
  • src/services/embedding-queue.ts

Previous review (commit d58f39a)

Status: No Issues Found | Recommendation: Merge

Incremental review of 10a4fa6f..d58f39a4 (commits abf86453, 1dce2dd5, d58f39a4). All previously reported findings are verified fixed in current HEAD, including the three-language stale-fallback wording in local-embedding.md (the batch-switch sentence was rewritten to the per-item ≥ 0.8 rule). Verified in this pass: shouldUseFallbackWeights agrees between scoreMemory and scoreMemoriesBatch (rawSemantics[i] !== null ⟺ version-ok with vectors); doc-claimed weights (0.10/0.05 semantic-mode, 0.75/0.25 fallback, threshold 0.3) match the constants; the new queryHint/staleHint strings match the actual search/injection paths, which score all memories without pre-filtering stale ones; the memory-batch sync-gate discard requeues and recomputes, chapters already requeue via shouldContinue(); allowEmptyText only skips content/summary checks (ids still enforced) and matches upsertMemoryForSync semantics; the stale model/book delete failures now propagate, matching v6 abort behavior; release-notes catalog-assembly claim matches sync-chapter-layout.ts; zh-CN/zh-TW index.json Bekko rewrite has no en-US parity gap (its description names no model); version bump is the automatic pre-commit increment.

Files Reviewed (21 files, incremental)
  • public/help/zh-CN/local-embedding.md
  • public/help/zh-TW/local-embedding.md
  • public/help/en-US/local-embedding.md
  • public/help/zh-CN/book-details-memory.md
  • public/help/zh-TW/book-details-memory.md
  • public/help/en-US/book-details-memory.md
  • public/help/zh-CN/index.json
  • public/help/zh-TW/index.json
  • public/releaseNotes/RELEASE_NOTES_v0.18.0.md
  • src/services/memory-scoring.ts
  • src/services/embedding-queue.ts
  • src/services/memory-service.ts
  • src/services/sync-data-service.ts
  • src/i18n/zh-CN/embedding-ui.ts
  • src/i18n/zh-TW/embedding-ui.ts
  • src/i18n/en-US/embedding-ui.ts
  • src/__tests__/memory-scoring.test.ts
  • src/__tests__/embedding-queue.test.ts
  • src/__tests__/memory-sync-access.test.ts
  • src/__tests__/sync-data-service.test.ts
  • src/constants/version.ts

Previous review (commit 10a4fa6)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
public/help/zh-CN/local-embedding.md(同句见 en-US / zh-TW 第 136 行) 136 「全部条目都无法使用语义时,才整体切换为关键词 + 时间衰减」与实现不符:评分模式只由查询向量可用性决定(memory-scoring.ts 的 semanticMode = chunkEmbeddings.length > 0,两个调用方均只在查询向量可得时传入),条目状态不参与切换;模型就绪且全部记忆未重建时仍是语义模式,每条上限约 0.15 < 阈值 0.3,检索整体不可用而非切换回退,且与第 138 行「基本不参与检索与注入」矛盾
Files Reviewed (10 files, incremental d6b9b72..10a4fa6)
  • public/help/zh-CN/local-embedding.md - 1 issue
  • public/help/en-US/local-embedding.md
  • public/help/zh-TW/local-embedding.md
  • public/releaseNotes/RELEASE_NOTES_v0.18.0.md
  • src/services/sync-data-service.ts
  • src/__tests__/sync-data-service.test.ts
  • src/i18n/zh-CN/embedding-ui.ts
  • src/i18n/en-US/embedding-ui.ts
  • src/i18n/zh-TW/embedding-ui.ts
  • src/constants/version.ts

Incremental scope: reviewed d6b9b720..10a4fa6f. Verified: writeImportedMemory / applyBookMemories 过期删除错误上抛与 v6 persistMergedMemories 一致,快照路径的新抛错落在 overwriteFromSnapshot 的回滚 try/catch 内,安全;两条回归测试确实覆盖「写入失败」与「过期删除失败」两条真实路径;升级说明 / 发布说明 / staleHint 的「基本不会被注入或检索到」表述与评分上限(0.15 < 0.3,用户调低阈值时仍有保留 hedge)一致;版本号为 pre-commit 自动递增。唯一新问题是三语 stale 条目说明中关于整体切换条件的错误表述(见上表)。

Fix these issues in Kilo Cloud

Previous review (commit d6b9b72)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (3 files)
  • src/services/embedding-queue.ts
  • src/__tests__/embedding-queue.test.ts
  • src/constants/version.ts

Incremental scope: reviewed a3713365..d6b9b720 (sync-gate state split). The prior WARNING (pause() clearing syncGatePaused during the gate, re-enabling the resume bypass) is verified fixed: gate effectiveness (syncGateActive) and user pause (userPaused) are now tracked separately with paused = userPaused || syncGateActive; resume() cannot release an active gate, a user pause set during the gate survives gate release, applySyncGate(true) records the gate even when already paused, and syncGated continues to drive the disabled 恢复 buttons in both panels. Run-loop/gate interleavings and the paused→running transition in updatePaused() check out with no stranded or double-run states; the two new regression tests match the implementation, and the version bump is auto-generated.

Previous review (commit a371336)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
src/services/embedding-queue.ts 342 pause() 在闸门期间清空 syncGatePaused 会解除闸门防护:同步期间关闭「语义记忆注入」(settings.ts:268)触发本分支后,resume() 守卫放行、面板「恢复」按钮重新可用,可在同步进行中写 IndexedDB,重新引入与 overwriteFromSnapshot 的竞态。建议单独维护「闸门生效中」标志供 resume() 与 UI 禁用使用。
Files Reviewed (10 files)
  • src/services/embedding-queue.ts - 1 issue
  • src/components/novel/BatchEmbeddingsBackendStatus.vue
  • src/components/novel/BatchEmbeddingsPanel.vue
  • src/components/novel/MemoryQueueProgressBanner.vue
  • src/__tests__/embedding-queue.test.ts
  • public/help/en-US/local-embedding.md
  • public/help/zh-CN/local-embedding.md
  • public/help/zh-TW/local-embedding.md
  • public/releaseNotes/RELEASE_NOTES_v0.18.0.md
  • src/constants/version.ts

Incremental scope: reviewed 45af95d9..a3713365 (sync-gate bypass fix). Main resume-bypass path from the prior review is verified fixed; previous findings were all addressed and dropped. One new WARNING found in the fix itself.

Previous review (commit 45af95d)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (7 files)
  • src/constants/version.ts
  • src/i18n/en-US/embedding-ui.ts
  • src/i18n/en-US/settings-ui.ts
  • src/i18n/zh-CN/embedding-ui.ts
  • src/i18n/zh-CN/settings-ui.ts
  • src/i18n/zh-TW/embedding-ui.ts
  • src/i18n/zh-TW/settings-ui.ts

Previous review (commit 6d9df9d)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0
Issue Details (click to expand)

WARNING

File Line Issue
src/i18n/zh-CN/embedding-ui.ts 38 新 mobileHint 称手机端检索「仅使用关键词匹配」,但降级评分为关键词 0.75 + 时间衰减 0.25(FALLBACK_WEIGHTS)。发布说明中同一表述已在 6d9df9d 修正,此处及 en-US/zh-TW 的平行字符串(均第 38 行)未同步修正
Files Reviewed (30 files)
  • README.md / README.zh-TW.md / README.en-US.md — 无问题
  • package.json、src/constants/version.ts — 无问题
  • public/releaseNotes/RELEASE_NOTES_v0.18.0.md — 无问题
  • public/help/{zh-CN,zh-TW,en-US}/index.json — 无问题
  • public/help/{zh-CN,zh-TW,en-US}/ai-models-guide.md — 无问题
  • public/help/{zh-CN,zh-TW,en-US}/book-details-memory.md — 无问题
  • public/help/{zh-CN,zh-TW,en-US}/local-embedding.md — 无问题
  • public/help/{zh-CN,zh-TW,en-US}/settings-guide.md — 无问题
  • public/help/{zh-CN,zh-TW,en-US}/toolbar-guide.md — 无问题
  • src/i18n/{zh-CN,zh-TW,en-US}/embedding-ui.ts — 1 处问题(mobileHint 措辞)
  • src/i18n/{zh-CN,zh-TW,en-US}/settings-ui.ts — 无问题
事实核查(文档声明 vs 代码实现)

以下关键声明均已对照代码验证一致:16 个章节小组(sync-chapter-layout.ts hash & 15);远端下载并发 4(gist-sync-incremental.ts DOWNLOAD_CONCURRENCY = 4);并发写入整轮最多 3 次尝试(useSyncExecutor.ts MAX_CONCURRENT_WRITE_RETRIES = 3);同步进度 99% 封顶且只增不减(stores/settings.ts);嵌入下载进度 95% 封顶且不回退(EmbeddingSettingsTab.vue);CORS 代理直连地址段 localhost / 127.x / 10.x / 172.16–31.x / 192.168.x / *.local(proxy-url-policy.ts);记忆向量与模型版本号上传前剥离、访问时间本地化(sync-strip.ts);桌面侧栏「AI 列表」与平板/手机「AI 模型」标签与 i18n 一致;新增锚点 settings-guide-sync-progress 及所有交叉引用锚点在三语文档中均存在;发布说明相对链接格式与 v0.17.0 一致。此前 Codex 指出的 4 处问题(回退模型显示、全局队列计数、Worker 恢复描述、关键词+时间衰减)均已在当前 HEAD 验证修复。

Fix these issues in Kilo Cloud


Reviewed by glm-5.3 · Input: 58.9K · Output: 9.3K · Cached: 423.4K

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 45af95d98f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread public/help/zh-CN/local-embedding.md Outdated
Comment thread src/services/embedding-queue.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a3713365d1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/services/embedding-queue.ts Outdated
Comment thread public/help/zh-CN/local-embedding.md Outdated
Comment thread public/releaseNotes/RELEASE_NOTES_v0.18.0.md
Comment thread public/help/zh-CN/local-embedding.md Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 10a4fa6f49

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread public/releaseNotes/RELEASE_NOTES_v0.18.0.md
Comment thread public/releaseNotes/RELEASE_NOTES_v0.18.0.md Outdated
Comment thread public/help/zh-CN/local-embedding.md
Comment thread src/services/sync-data-service.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1dce2dd5a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread public/help/zh-CN/local-embedding.md
Comment thread src/services/memory-scoring.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d58f39a44c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/services/embedding-queue.ts Outdated
Comment thread public/releaseNotes/RELEASE_NOTES_v0.18.0.md Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 20f83d7945

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/services/embedding-queue.ts
Comment thread README.md Outdated
Comment thread src/services/memory-service.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c81f21cc39

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/services/sync-data-service.ts
Comment thread src/services/memory-service.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d0fa44ae8c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/services/embedding-queue.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f2f0993c4f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/__tests__/memory-cache-embedding-sync.test.ts
Comment thread src/services/sync-data-service.ts Outdated
@rozx
rozx merged commit 080dacb into main Oct 10, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release Create a electron relase

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant