refactor(core,cli): rename Gemini residue in memory/spinner/leaf ids - #9900
Conversation
PR 1 of #4063 item 6 (de-Google naming). Renames three independent families plus the leaf LLM types: - Memory filename: GeminiMd* -> Memory* (project memory file, not an LLM client) - UI spinners: GeminiRespondingSpinner/GeminiSpinner -> RespondingSpinner/Spinner - Leaf types: GeminiCodeRequest/GeminiChatSendOptions/GeminiErrorEventValue/GeminiFinishedEventValue -> Llm* - geminiRequest.ts -> llm-request.ts (and its collocated test) No behavior change. Renamed symbols typecheck clean in core+cli; eslint clean on renamed files. Refs #4063
|
Re-run gate (author pushed four fix rounds since the first gate; re-gated at the current head). Template: complete ✓ (bilingual, reviewer test plan included, Before/After correctly marked N/A for a rename). Problem: unchanged and real — the tracked item-6 naming cleanup from #4063, backed by the design doc this PR adds (~271 files / ~4000 Direction: aligned. The repo already standardized on Size: 82 files / 848 lines — 501 production lines across 42 files (13 of them core-path) + 347 test lines across 40 files. Author is a maintainer, so the Tier 1 hard block does not apply; the production count sits right at the 500-line awareness threshold, but this is a uniform rename sweep (~12 lines/file average), and breadth is the expected shape of a rename — flagging the number for the record, not escalating. Approach: scope still right — three independent families + leaf types moved atomically, exactly matching the doc's PR-1 phasing; no drive-by changes. The open question from the first gate (the lowercase Risk: the revert-history scan still matches two paths this PR touches — Moving on to code review. 🔍 中文说明复跑门审(自首次门审后作者已推送四轮修复;按当前 head 重新门审)。 模板:完整 ✓(双语,含评审测试计划,Before/After 对纯重命名正确标注 N/A)。 问题:不变且真实存在——#4063 第 6 项有追踪的命名清理,附本 PR 新增的设计文档(按其度量,main 上约 271 个文件 / 约 4000 处 方向:对齐。仓库其他地方已统一采用 规模:82 个文件 / 848 行——501 行生产代码(42 个文件,其中 13 个核心路径)+ 347 行测试(40 个文件)。作者是维护者,Tier 1 硬阻断不适用;生产行数恰在 500 行关注阈值附近,但这是均匀的重命名改动(平均每文件约 12 行),广度符合重命名的预期形态——仅记录数字备查,不升级处理。 方案:范围依然合理——三个独立家族 + 叶子类型原子化推进,与文档的 PR-1 分阶段完全一致;无顺手夹带。首次门审遗留的疑问(小写 风险:revert 历史扫描仍命中本 PR 触及的两条路径—— 进入代码审查。🔍 — Qwen Code · qwen3.8-max Reviewed at |
Code review (re-run at
|
| Check | Conclusion |
|---|---|
| Test (ubuntu-latest, Node 22.x) | ✅ success (attempt 2; attempt 1 failed pre-re-run on same SHA) |
| Qwen Code CI (workflow) | ✅ success — includes ESLint, Prettier, i18n, settings-schema checks, full vitest unit suite, no-AK integration gate (typecheck:integration + integration subset) |
| Serve A/B (ubuntu-latest, Node 22.x) | ✅ success |
| Integration gate: Real daemon E2E / Java 11 | ✅ success |
| Desktop Shell (ubuntu-22.04 / windows-2022) | ✅ success |
| web-shell E2E Smoke (ubuntu-latest, Node 22.x) | ✅ success |
| SDK Java (ubuntu/macOS/windows matrix) | ✅ success |
| Security Checks (Dependency CVE audit, Secret scan) | ✅ success |
| Test (macos/windows, Node 22.x) | ⏭️ skipped (merge-queue lanes by CI design on PR events) |
| Integration Tests (CLI, No Sandbox) | ⏭️ skipped |
Real-scenario (tmux) testing: N/A — pure rename with no user-visible behavior change (the spinners render identically; the one runtime-visible risk, tmux nesting, is pinned by the surviving unit regression test). No sandboxed-lane line either — there is no behavioural claim to settle; for a rename, the full unit suite failing on any missed export is the oracle, and it's green.
Not verified: workspace tsc --noEmit does not run as a discrete CI step (vitest doesn't typecheck), but the independent residue grep at head covers the same failure mode more directly for a rename — no old symbol survives anywhere in packages/.
中文说明
代码审查(复跑于 aceb6643)
此前各轮的所有发现均已解决,本轮无新增阻断项。本次核实内容:
- 第 1 轮 Critical 已正确修复:
Spinner重命名与ink-spinner默认导入的冲突已用别名解决(import InkSpinner from 'ink-spinner'),tmux<Text>嵌套回归测试在文件重命名后保留(RespondingSpinner.test.tsx)。 - 重命名完整性已在 head 上独立核实(对
packages/全量大小写不敏感 grep 所有旧家族符号):零残留。仍带Gemini的符号均属明确的 PR 2 范围(GeminiClient/GeminiChat/GeminiEventType、useGeminiStream、ServerGemini*事件、convert*Gemini*协议转换器、扩展格式gemini-converter.ts)——与设计文档的分阶段一致。 - 接线一致:core barrel 重新导出
./core/llm-request.js;eslint.legacy-filenames.mjs移除geminiRequest但为 PR 2 保留geminiChat/geminiContentGenerator;memory-config.ts旧入口 re-export 已切换为新名。 - 文档修改准确、非漂移:ACP-bridge 文档中删除的
contextFilename行与现实一致——packages/acp-bridge/src中该选项已不存在,daemon 现通过 workspace service 传递文件名。 - 新增固定测试(
run-qwen-serve.test.ts):无context.fileName时主工作区落在硬编码的QWEN.mdinit 兜底上——关闭第 3 轮"该字面量无测试守护"的建议。
一条非阻断小项,留给 PR 2 或后续清扫:两份较早的设计文档仍引用旧名——docs/design/channels/qwen-tag.md(getCurrentGeminiMdFilename() ×2)与 docs/design/performance/fire-and-forget-startup-prefetch.md(config.getGeminiMdFileCount())——因为验证 grep 只覆盖了 -- packages。设计文档卫生不值得阻断重命名 PR。
测试证据(经 API 读取 PR 自身 CI——无人值守运行,不在本地构建/执行)
该 SHA 的首次 CI 尝试为红(Test (ubuntu-latest, Node 22.x)——即 00:27 /review 降级所追踪的失败),但两次尝试之间没有推送任何代码;重跑(attempt 2,run 31487)为绿。同一棵树上消失的失败是 flaky/环境问题,而非 PR 缺陷——特此说明,避免红转绿的历史被误读。
真实场景(tmux)测试:N/A——纯重命名,无用户可见行为变化(spinner 渲染不变;唯一的运行时可见风险即 tmux 嵌套,已由保留的单元回归测试固定)。也无沙箱验证行——没有需要裁决的行为性主张;对重命名而言,全量单测在任何遗漏导出时必然失败,它就是裁决器,且为绿。
未验证:workspace 级 tsc --noEmit 未作为独立 CI 步骤运行(vitest 不做类型检查),但 head 上的独立残留 grep 对重命名而言更直接地覆盖了同一失效模式——packages/ 中不存在任何旧符号。
— Qwen Code · qwen3.8-max
Reviewed at aceb66436273ea9e16dfcfdb5e2515213bf2be62 · re-run with @qwen-code /triage
|
Confidence: 5/5 — five rounds converged cleanly; every prior finding is fixed and verified at head, and CI is green on the reviewed commit. Stepping back: this is exactly what PR 1 of the design doc promised — three independent rename families plus the leaf request/event types, moved atomically, with the strongly-coupled core layer deliberately left for the atomic PR 2. My independent read of "how would I do this cleanup" lands on the same phasing: the families here have zero cross-package coupling, so they're safe to land before the risky core move, and each one is verifiable by a residue grep. The diff matches the doc exactly — no scope creep, no drive-by edits, and the two additions beyond mechanical renames (the The review history is a good one: round 1 caught a real build-breaking collision ( Verdict: approve — same-repo PR from a maintainer, all stages clean, CI settled green. Approving pinned to the reviewed commit. ✅ 中文说明置信度:5/5 ——五轮评审干净收敛;此前所有发现均已修复并在 head 上核实,CI 在被审提交上为绿。 退一步看:这正是设计文档承诺的 PR 1——三个独立的重命名家族加叶子级请求/事件类型,原子化推进,强耦合的核心层刻意留给原子化的 PR 2。我独立判断"这个清理该怎么做"得到的分阶段方案与此相同:这里的家族零跨包耦合,可以先于高风险的核心改动安全落地,且每一族都能用残留 grep 验证。diff 与文档完全一致——无范围蔓延、无顺手改动;机械重命名之外的两处新增( 评审历史是良性的:第 1 轮抓到真实的构建破坏性冲突( 结论:批准——同仓维护者 PR,各阶段干净,CI 已稳定为绿。批准锚定在被审提交上。✅ — Qwen Code · qwen3.8-max Reviewed at |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
The Spinner rename collides with the ink-spinner default import in RespondingSpinner.tsx — packages/cli fails tsc --build (TS2440), which cascades into all four red CI jobs. Details in my review notes above. 🙏
|
Good catch — fixed in |
|
Closeout update: the red build was the |
Code Coverage Summary
CLI Package - Full Text ReportCore Package - Full Text ReportFor detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run. |
🩺 serve daemon A/BBuilt the PR base vs this PR head ✅ No response changes against the PR base across 12 scenario(s). — Qwen Code · serve A/B |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
中文说明
仅完成部分审查,审查缺口已披露。
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
— qwen3.8-max via Qwen Code /review (v0.22.0)
|
Closeout update: corrected the serve/ACP memory-filename docs and comments to name the real |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed. Suggestions are inline.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
中文说明
仅完成部分审查,审查缺口已披露。 建议见行内评论。
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
— qwen3.8-max via Qwen Code /review (v0.22.0)
Assert that the primary daemon workspace service receives the hard-coded 'QWEN.md' context filename when boot settings carry no context.fileName. Previously only the secondary workspace's explicit SECONDARY.md resolution was asserted, so swapping the fallback literal at the createDaemonWorkspaceService call site survived the suite.
|
Closeout — round 3 (single Suggestion handled):
Note: an external 'Merge origin/main' (082c2c9) landed on the branch mid-round; the fix fast-forwards on top of it, no conflict with the finding's files. Push 082c2c9..ed97f92 (one non-force push). 0 unresolved threads; the push auto-triggers re-review. |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed. Suggestions are inline. 1 Suggestion-level finding(s) could not be anchored to a changed line and were dropped; nothing further to act on here.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 5.
Convergence: round 3 posted 3 inline comment(s), 3 of them reported for the first time; the previous round posted 1 (1 new). Findings keep coming back to the same files: packages/cli/src/serve/run-qwen-serve.ts (findings in round 2; 1 more now). The rate of new findings is not falling. A cluster that keeps producing siblings usually means the fixes are treating instances of a shared root cause — triaging that cause before the next round, or splitting an independent cluster into its own pull request, tends to end the loop faster than fixing them one at a time. Batching the remaining fixes and verifying them before the next push, or dropping this PR's reviews to --severity-floor critical, keeps the loop from re-deriving the same set. No Critical finding is open on this round, so merging and moving the remaining Suggestion threads to a follow-up issue is available as an ending — a merged pull request cannot diverge further. (Observation only — nothing was withheld from this review because of this observation.)
中文说明
仅完成部分审查,审查缺口已披露。 建议见行内评论。 1 条建议级发现无法锚定到改动行,已丢弃;此处无需进一步处理。
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
未审查:反向审计——在 5 轮的反审轮数上限内未收敛。
收敛情况:第 3 轮发布了 3 条行内评论,其中 3 条是首次提出;上一轮发布了 1 条(其中 1 条首次提出)。发现反复回到同一批文件:packages/cli/src/serve/run-qwen-serve.ts(第 2 轮已出过发现,本轮又有 1 条)。新发现的产出速度没有下降。一个不断再生兄弟发现的簇,通常意味着逐条修复只在处理同一根因的实例——先定位并处理该根因,或把独立的簇拆成单独的 PR,通常比逐条修复更快结束循环。把剩余修复攒成一批、验证后再推送,或将本 PR 的评审降到 --severity-floor critical,可以避免循环反复推导同一组发现。本轮没有未决的 Critical,因此"合入后把剩余 Suggestion 线程转到后续 issue"是一个可选的结束方式——已合入的 PR 不会继续发散。(仅为观察——本轮评审未因此扣留任何内容。)
— qwen3.8-max via Qwen Code /review (v0.22.0)
Complete the rename flagged in review: GeminiFileContent -> MemoryFileContent (module-local interface), includeDirectoriesToReadGemini -> includeDirectoriesToReadMemory (parameter only; all call sites are positional, zero cross-package impact), plus test-local variable names and the stale ORIGINAL_GEMINI_MD_FILENAME test title.
Per exception #1 the Llm prefix is reserved for the generic LLM-client surface; the symbol is a memory-file loader (thin wrapper around core's loadServerHierarchicalMemory), so the PR-2 symbol map targets loadHierarchicalMemory instead of loadHierarchicalLlmMemory. Doc-only: the code symbol is not renamed by this PR.
The undefined fallback first inherits the primary workspace's configured context.fileName snapshot (contextFilenameForInit) at the secondary startup and dynamically added workspace call sites, before the hard-coded QWEN.md. Describe the actual chain instead of the hard-coded default only. Comment-only: the inheritance behavior predates this PR and is unchanged.
|
Closeout pass on the 3 remaining bot Suggestions — all fixed, pushed
Verification: |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed. Suggestions are inline.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
Deferred under the convergence posture (round 4, not a blocker) — recorded, not requested in this round:
docs/design/2026-08-22-rename-gemini-fork-residue.md:125 — [review] Risks row overstates PR-2 blast radius: only cli imports GeminiClient/GeminiEventType from the barrel
Convergence: round 4 posted 1 inline comment(s), 1 of them reported for the first time; the previous round posted 3 (3 new). Findings keep coming back to the same files: docs/design/2026-08-22-rename-gemini-fork-residue.md (findings in round 3; 1 more now). A cluster that keeps producing siblings usually means the fixes are treating instances of a shared root cause — triaging that cause before the next round, or splitting an independent cluster into its own pull request, tends to end the loop faster than fixing them one at a time. No Critical finding is open on this round, so merging and moving the remaining Suggestion threads to a follow-up issue is available as an ending — a merged pull request cannot diverge further. (Observation only — nothing was withheld from this review because of this observation.)
中文说明
仅完成部分审查,审查缺口已披露。 建议见行内评论。
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
收敛姿态下延后(第 4 轮,非阻断)——已记录,本轮不要求修改:共 1 条(原文未翻译,列表见上方英文部分)。
收敛情况:第 4 轮发布了 1 条行内评论,其中 1 条是首次提出;上一轮发布了 3 条(其中 3 条首次提出)。发现反复回到同一批文件:docs/design/2026-08-22-rename-gemini-fork-residue.md(第 3 轮已出过发现,本轮又有 1 条)。一个不断再生兄弟发现的簇,通常意味着逐条修复只在处理同一根因的实例——先定位并处理该根因,或把独立的簇拆成单独的 PR,通常比逐条修复更快结束循环。本轮没有未决的 Critical,因此"合入后把剩余 Suggestion 线程转到后续 issue"是一个可选的结束方式——已合入的 PR 不会继续发散。(仅为观察——本轮评审未因此扣留任何内容。)
— qwen3.8-max via Qwen Code /review (v0.22.0)
…lMemory The design doc's symbol map routes the memory loader to loadHierarchicalMemory (memory family, exception #1), but no phasing bullet performed the rename and a prior round left the mixed signature. Complete the rename across the definition (config.ts), the AppContainer call site, and the AppContainer test mocks, and update the design doc's exception #1, symbol map, and PR-1 phasing bullet so the map row is no longer orphaned.
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
Not explored to full depth (tool budget reached): "agent 5": executing the renamed AppContainer.test.tsx via vitest to confirm green (worktree has node_modules but no built workspace dist/ outputs, which CLI tests requi….
中文说明
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
未探索到全部深度(达到工具调用预算):"agent 5":executing the renamed AppContainer.test.tsx via vitest to confirm green (worktree has node_modules but no built workspace dist/ outputs, which CLI tests requi…。
— qwen3.8-max via Qwen Code /review (v0.22.0)
|
@qwen-code /triage |
|
Sandboxed verification: ❌ not passed — findings reported (agent verdict) - workflow run Ran the PR in an isolated, token-free container: A/B against the base build, mock-free harness assertions, targeted gates. Advisory evidence for human reviewers — not a review, an approval, or a CI check. Scripted assertions: 32 passed · 1 failed · 33 total Flakiness gate: 中文 — 判定:❌ 不通过 · 报告了发现(agent 判定)沙箱验证在隔离、无凭证的容器中执行了该 PR 的代码(与 base 构建 A/B 对照、无 mock harness 断言、定向门禁)。仅作为评审证据,不构成评审、批准或 CI 检查。 脚本断言:32 通过 · 1 失败 · 33 总计 抖动门: Verification reportPR 9900 Deep Verification — refactor(core,cli): rename Gemini residue in memory/spinner/leaf idsVerdict: 中文摘要
Central claim and A/B proofCentral claim (from the PR): this is a pure rename — memory-filename helpers ( The diff is 82 files, +499/−349. Line-level inspection found zero logic changes: every production hunk is an identifier swap (the only content edits are a doc-comment rewrite in A/B wire oracle (the load-bearing proof)Identical scenario on both builds: headless CLI (
Request bodies are byte-identical between arms after substituting each arm's own scratch root (the system prompt embeds the cwd, which necessarily differs) — the UUID normalization was precautionary and matched zero occurrences. Raw bodies differ only in that scratch path. Both validity controls (marker attachment) were run on BOTH arms per the symmetry rule — this is what proves the renamed memory-discovery path actually executed rather than silently no-op'ing. 15/15 comparator assertions pass; see Control purity: the base worktree reused the root Unit-test A/B (all PR-touched test files, both arms)
The 6 core failures are byte-identical in file + test names across arms (diffed after ANSI strip) — they reproduce on the base arm without the PR, so they are pre-existing, not PR-caused ( The equal 1957/1957 cli counts are expected: the PR's new assertion lives inside an existing Vacuity check on the new test assertionThe added assertion claims the primary workspace lands on the hard-coded
The failure is the behavioral mismatch the assertion exists to catch (not an import/compile break), so the new test is not vacuous — swapping the fallback literal can no longer survive the suite, which is exactly the commit's stated purpose. See Findings1. (Nit) Three stale old-symbol references remain in two pre-existing design docs
These symbols no longer exist after this PR (now No other findings: no behavioral deltas, no residue in Not covered
MethodologyRan in the CI verify container ( Flakiness gate logEvidence imagesHarness scripts and raw logs are in the workflow run artifacts (7-day retention). — Qwen Code · sandboxed verification |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
LGTM, looks ready to ship. ✅
chiga0
left a comment
There was a problem hiding this comment.
No blocking findings. Approving.
Scope
Source and documentation at current head. Not reviewed: execution rungs 1–3 (no working tree); macOS/Windows platform behaviour (test jobs SKIPPED in CI); Integration Tests (CLI, No Sandbox) (SKIPPED in CI).
What was checked
Backward-compatibility contract (class 2)
Verified all six deprecated aliases against the public packages/core surface (packages/core/src/index.ts at head):
| Old name | New name | Alias location | Re-exported via index.ts |
|---|---|---|---|
setGeminiMdFilename |
setMemoryFilename |
utils/memory-constants.ts |
export * from './utils/memory-constants.js' ✓ |
getCurrentGeminiMdFilename |
getCurrentMemoryFilename |
same | same ✓ |
getAllGeminiMdFilenames |
getAllMemoryFilenames |
same | same ✓ |
GeminiCodeRequest |
LlmCodeRequest |
core/llm-request.ts |
export * from './core/llm-request.js' ✓ |
GeminiChatSendOptions |
LlmChatSendOptions |
core/geminiChat.ts |
export * from './core/geminiChat.js' ✓ |
GeminiErrorEventValue |
LlmErrorEventValue |
core/turn.ts |
export * from './core/turn.js' ✓ |
GeminiFinishedEventValue |
LlmFinishedEventValue |
core/turn.ts |
same ✓ |
Deep-import shim (geminiRequest.ts)
packages/core/src/core/geminiRequest.ts at head is exactly export * from './llm-request.js'. Consumers who import the deep path still resolve GeminiCodeRequest (deprecated alias in llm-request.ts). ✓
index.ts change (+1/−1)
export * from './core/geminiRequest.js' → export * from './core/llm-request.js'. The net public surface is the same: LlmCodeRequest + deprecated GeminiCodeRequest. ✓
Prior-reviewer findings (cross-check)
The previous review bot filed four Critical documentation-accuracy findings (R2-1, R2-2, R4-1, R4-2) and one Suggestion about unrenamed identifiers in memoryDiscovery.ts. Verified at current head:
17-configuration.md:--memory-file-nameclaim andBridgeOptions.contextFilenamefield claim — both removed ✓qwen-serve-protocol.md:--memory-file-namereference — removed ✓02-serve-runtime.md:loadSettings/getCurrentMemoryFilenamefrom packages/core — removed; doc now correctly referencesgetAllMemoryFilenames✓memoryDiscovery.ts:GeminiFileContentandincludeDirectoriesToReadGemini— renamed toMemoryFileContentandincludeDirectoriesToReadMemory✓
CI
Test (ubuntu-latest, Node 22.x): ✅ success (covers build + typecheck + tests)Serve A/B (ubuntu-latest): ✅ successDesktop Shell (ubuntu-22.04): ✅ successDesktop Shell (windows-2022): ✅ successTest (macos-latest):⚠️ SKIPPED — macOS test platform not verified by CI (author states manual macOS test, but SKIPPED means CI has no evidence)Test (windows-latest):⚠️ SKIPPEDIntegration Tests (CLI, No Sandbox):⚠️ SKIPPED — the PR's own test plan prescribesvitest runon three focused suites; those are covered by the ubuntu run but the broader integration suite was not exercised
Not covered
Execution rungs 1–3 not run (no working tree). Claim that "grep matches are limited to deprecated aliases and their tests" was not independently verified; the passing ubuntu typecheck is indirect evidence that no active production call site uses the old names (a broken import would fail tsc).
Reviewed with AI assistance.
# Conflicts: # packages/core/src/memory/memoryDiscovery.ts
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 5.
中文说明
仅完成部分审查,审查缺口已披露。
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
未审查:反向审计——在 5 轮的反审轮数上限内未收敛。
— qwen3.8-max via Qwen Code /review (v0.22.0)
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
Not reviewed: build-and-test — Test (macos-latest / windows-latest, Node 22.x) was skipped in CI; the platform suites did not exercise this change.
Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 5.
Deferred under the convergence posture (round 7, not a blocker) — recorded, not requested in this round:
packages/core/src/memory/memoryDiscovery.test.ts:927 — [review] stale GEMINI.md comment in parallel-discovery test
中文说明
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
未审查:build-and-test — Test (macos-latest / windows-latest, Node 22.x) was skipped in CI; the platform suites did not exercise this change。
未审查:反向审计——在 5 轮的反审轮数上限内未收敛。
收敛姿态下延后(第 7 轮,非阻断)——已记录,本轮不要求修改:共 1 条(原文未翻译,列表见上方英文部分)。
— qwen3.8-max via Qwen Code /review (v0.22.2)
chiga0
left a comment
There was a problem hiding this comment.
No blocking findings.
CI status — pending at this head (main-merge commit just pushed); no failures at this head yet.
The previous head (914ece3) had one red job: Test (ubuntu-latest, Node 22.x) — failing test src/serve/run-qwen-serve.test.ts:14291 expect(handle.url).not.toContain(':4170'), triggered when the OS assigns port 41705 (the string :41705 contains :4170 as a substring). That line is not changed by this PR. Pre-existing flaky assertion, not a regression introduced here.
What I checked:
-
API compatibility (class 2): All renamed public core symbols have deprecated aliases in place, verified in the diff:
GeminiCodeRequest— deprecatedtypealias inllm-request.ts, re-exported from barrelGeminiErrorEventValue/GeminiFinishedEventValue— deprecatedtypealiases inturn.tssetGeminiMdFilename/getCurrentGeminiMdFilename/getAllGeminiMdFilenames— deprecatedconstaliases inmemory-constants.tsgetGeminiMdFileCount()/setGeminiMdFileCount()— deprecated wrapper methods onConfig;geminiMdFileCountparameter kept withparams.memoryFileCount ?? params.geminiMdFileCount ?? 0fallback- Legacy deep-import path
packages/core/src/core/geminiRequest.js— shim that re-exports fromllm-request.js; regression test added inllm-request.test.ts
-
Spinner collision (TS2440): Previously reported as blocking. Fixed at this head —
import InkSpinner from 'ink-spinner'(renamed fromSpinner) used in the render body; the exportedSpinnercomponent no longer collides. -
Doc accuracy (four previously flagged Critical findings): All resolved:
BridgeOptions.contextFilenamerow removed from the BridgeOptions table in17-configuration.md;--memory-file-nameflag reference removed fromqwen-serve-protocol.md;loadSettingsremoved from02-serve-runtime.md;getCurrentGeminiMdFilenameremoved from03-acp-bridge.mddependencies. -
Cross-file contract (class 1): Pure rename, no persisted format changed. Constructor fallback
memoryFileCount ?? geminiMdFileCount ?? 0is additive and backward-compatible.
Unreviewed dimensions:
- CI is still in progress at this head (merge from main just pushed,
Test (ubuntu-latest, Node 22.x),Real daemon E2E, andServe A/Bin progress). Test (windows-latest, Node 22.x)andTest (macos-latest, Node 22.x)are SKIPPED. PR is a pure rename with no platform-specific branches.Integration Tests (CLI, No Sandbox)is SKIPPED.
Reviewed with AI assistance.
|
我按当前 head 重点核对了三类兼容承诺:已发布 core 旧名称仍由 deprecated 别名承接; 本地用全新依赖树验证: 远端 |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
Partially reviewed — gaps disclosed.
1 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:
- Cross-package barrel blast-radius claim in docs/design/2026-08-22-rename-gemini-fork-residue.md — already reported as the round-4 deferred Suggestion anchored at the same bullet (:125, review 5013057215 deferral list); the bullet is unchang…
Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.
Not reviewed: build-and-test — Test (macos-latest / windows-latest, Node 22.x) was skipped in CI; the platform suites did not exercise this change.
Deferred under the convergence posture (round 8, not a blocker) — recorded, not requested in this round:
packages/core/src/core/llm-request.ts:21 — [probe] four deprecated type-only compat aliases pinned by no testpackages/core/src/utils/memory-constants.ts:82 — [review] getCurrentGeminiMdFilename alias lost its only test pin
中文说明
仅完成部分审查,审查缺口已披露。
本轮确认的 1 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。
未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。
未审查:build-and-test — Test (macos-latest / windows-latest, Node 22.x) was skipped in CI; the platform suites did not exercise this change。
收敛姿态下延后(第 8 轮,非阻断)——已记录,本轮不要求修改:共 2 条(原文未翻译,列表见上方英文部分)。
— qwen3.8-max via Qwen Code /review (v0.22.2)
qqqys
left a comment
There was a problem hiding this comment.
已按当前 head 8043c882d4 完成复核,没有发现新的合并阻塞,Approve。远端 review-pr 仍在运行,CI 状态单独看。
|
Released in v0.22.3. |




What this PR does
Renames three independent families of identifiers that still carry the
Geminifork prefix but are not Gemini-API concepts, plus the leaf LLM request/event types. Active repository consumers use the new names, while previously published core exports and the legacygeminiRequestdeep-import path remain available as deprecated aliases until a future major release. This is PR 1 of the #4063 item 6 naming cleanup.Why it's needed
The repo inherited the
Geminiprefix from the upstream Gemini CLI fork. The memory-filename helpers describe the project memory file (QWEN.md), the spinners are generic UI, and the request/event types are generic LLM concepts — none are Gemini-specific. The codebase already usesLlmandMemorynaming elsewhere, so these renames remove the brand mismatch without immediately breaking standalone@qwen-code/qwen-code-coreconsumers.Reviewer Test Plan
How to verify
Confirm current consumers compile with the renamed symbols and legacy core consumers can still import the deprecated names and old request-module path:
The build, typecheck, and focused tests should pass. Grep matches should be limited to the documented deprecated compatibility aliases/shim and their regression tests; active production call sites should use the new names.
Evidence (Before & After)
N/A (naming-only change, no user-visible behavior).
Tested on
✅ tested ·⚠️ not tested · N/A
Risk & Scope
GeminiClient/GeminiChat/GeminiEventType, the protocol converters,useGeminiStream, and thegemini-converter.tsextension-format module remain untouched — they are PR 2 of refactor: core + cli 架构 Review — 12 项结构性问题清单 #4063.geminiRequestpath. Consumers should migrate to the new names before the deprecated aliases are removed in a future major release.Linked Issues
Refs #4063
中文说明
本 PR 做了什么
重命名三组仍带着
Geminifork 前缀、但并非 Gemini API 概念的标识符,外加叶子级的 LLM 请求/事件类型。仓库内活跃调用统一使用新名称;此前已经发布的 core 导出,以及旧的geminiRequest深层导入路径,作为 deprecated 兼容别名保留至未来主版本。这是 #4063 第 6 项命名清理的 PR 1。为什么需要
仓库从上游 Gemini CLI fork 继承了
Gemini前缀。记忆文件名辅助函数描述的是项目记忆文件(QWEN.md),spinner 是通用 UI,请求/事件类型是通用 LLM 概念——它们都不是 Gemini 专属。代码库别处已采用Llm和Memory命名,这些重命名消除了品牌错位,同时避免立即破坏独立使用@qwen-code/qwen-code-core的消费者。评审测试计划
如何验证
确认仓库内调用可以使用新名称编译,同时旧版 core 消费者仍能导入 deprecated 名称和旧请求模块路径:
构建、类型检查和定向测试应通过。grep 结果应仅限文档化的 deprecated 兼容别名、shim 及其回归测试;活跃生产调用应使用新名称。
证据(前后对比)
N/A(仅命名变化,无用户可见行为变化)。
测试平台
✅ 已测 ·⚠️ 未测 · N/A
风险与范围
GeminiClient/GeminiChat/GeminiEventType、协议转换器、useGeminiStream,以及gemini-converter.ts扩展格式模块保持不变——它们是 refactor: core + cli 架构 Review — 12 项结构性问题清单 #4063 的 PR 2。geminiRequest路径。消费者应在未来主版本移除 deprecated 别名前迁移到新名称。关联 Issue
Refs #4063