feat(analysis): integrate same-tree move focus - #449
Conversation
Preserve accepted remote position evidence across local navigation and revalidate complete position semantics and the current confirmed engine incarnation before admitting a fresh evaluation. Publish evidence after frame application, isolate stale processing epochs, and reject malformed native frames while retaining parser diagnostics and stop-boundary recovery.
|
感谢 @qiyi71w 对同树选点评估、root visits 语义和 ReadBoard 上下文恢复的完整实现与验收记录。维护者本轮核查确认:此 PR 仍是 Draft,且与最新 main 在 CHANGELOG.md、Lizzie.java、Leelaz.java 存在冲突;KataGo 上游 #1252 当前仍为 OPEN,官方 v1.18.2 发布说明不包含该能力;#445 的最终重启确认仍未关闭。为避免用旧 CI 或实验引擎结果替代稳定包验收,本轮保留草稿、不强行合并、不改写你的实现分支。待主线集成、支持/不支持引擎矩阵、最终编号 name 确认及 Windows 固定候选验收完成后再复审。感谢把未验证部分明确列出。 |
|
按维护者本次要求完成主线集成,保留原作者提交历史,已推送 本轮补齐:解决与当前 main 的冲突;能力探测前、成功/拒绝响应后和 lifecycle 延迟恢复均尊重用户暂停,新增四个回归场景。最终回归捕获测试夹具的同步响应死锁,已让对应回退场景使用独立串行 reader,并连续重复十次通过;未通过删除产品锁或削弱生命周期检查来规避。 真实隔离协议验证:官方 Metal 1.18.1 拒绝 focus 后,普通分析和 stop/quit 正常;自行构建固定上游 Windows 首次 CI 的 undo 超时测试失败也已处理:超时与迟到 ACK 使用同一独立 reader,断言前等待响应消费完成,连续重复十次;未放宽失败断言或延长超时。 最终提交 PR 继续保留 Draft:官方能力 G3、独立 #445、Windows 真机整合 G4 未解除;当前官方包没有 focus,直接替换旧实现会丢失现有点研究入口,所以本轮不强制合并。CI 的 Windows 检查不等于真机 GPU/UI 验收。 |
qiyi71w
left a comment
There was a problem hiding this comment.
P1 — Same-tree move-focus plus #433/#444 ReadBoard retention is implemented on e0dd755; remaining work is the stated draft gates, not a broken originating ask on this head
Reviewed e0dd75541994724ce1a18e6a3c25dae36f32f1f8 (delta from ae535bab is test-only rollback-ack serialization). Draft gates called out in the PR body are classified DEFERRED.
Standards
No findings
Spec
No IN_SCOPE findings. On this head, #414 same-tree focus, #433 identical-frame retention, and #444 navigation readmission are implemented and covered by TrackingProductionCutoverTest. Official-engine cutover, #445, Windows G4, and a pause-at-init probe hole are DEFERRED.
SPEC-D1 — scope: DEFERRED — Official binaries still reject focus; this head removes allow-based tracking, so Evaluate this point is disabled there.
Acceptance: ship a supported/unsupported matrix in which currently supported official engines keep a usable point-evaluation entry until an official KataGo with compatible move-focus is the accepted cutover.
SPEC-D2 — scope: DEFERRED — Independent restart final numbered name fence is not in this PR.
Acceptance: #445 — real b11 restart sends and consumes the final numbered name fence.
SPEC-D3 — scope: DEFERRED — Remaining fixed-candidate Windows integration and release acceptance.
Acceptance: G4 recorded as pass on the frozen Windows candidate, including visual/outline behavior the PR does not claim.
SPEC-D4 — scope: DEFERRED — If the once-per-incarnation probe is skipped because analysis is paused (or notStartPondering) at the only init call site, later unpause/ponder never probes.
Acceptance: after that skip, unpause or the first intended analysis start on the same incarnation completes the probe on a focus-capable engine so canStartMoveFocus() becomes true without restart.
Follow-up ledger
Owned by existing tickets
- SPEC-D2 — axis: Spec — defer_reason:
OUTSIDE_FROZEN_BOUNDARY— OWNED_BY_EXISTING_TICKET(#445)
#445 already owns host-side restart confirmation: send and consume the final numbered name fence; retired receipts stay rejected; this PR’s early-review boundary excludes that independent fix.
Candidates — Fix
-
SPEC-D1 — axis: Spec — defer_reason:
OUTSIDE_FROZEN_BOUNDARY— CANDIDATE(kind=FIX)- evidence: Exclusive
allowtracking is gone (TrackingProductionCutoverTestasserts commands contain noallow B). User focus requiresMoveFocusCapability.SUPPORTED. Unsupported engines get a disabled menu (RightClickMenu.trackPoint.requiresCapability). Maintainer: keep Draft; do not merge a cutover that removes legacy tracking from currently supported official engines. PR body: official Metal 1.18.1 rejects focus; experimentalefb7450is not a release matrix. - objective acceptance condition: official supported/unsupported runtime matrix is complete, and currently supported official engines still have a usable Evaluate this point path (legacy tracking or an accepted product waiver) until official KataGo move-focus is the cutover.
- behavior that must remain stable: ordinary analysis after a rejected probe; same-tree focus (
focus VERTEX[,VERTEX] 0.5) on a confirmed supported incarnation; #433/#444 ReadBoard retention/readmission. - focused validation: official 1.18.x reject-focus + ordinary analysis; experimental
efb7450ordinary → single/multi/remove/clear with retained root visits; menu enabled only whencanStartMoveFocus()is true.
- evidence: Exclusive
-
SPEC-D3 — axis: Spec — defer_reason:
OUTSIDE_FROZEN_BOUNDARY— CANDIDATE(kind=FIX)- evidence: Draft gate “Complete the remaining fixed-candidate Windows integration and release acceptance” is unchecked. Ticket 03 notes dynamic outline recoloring was not exercised natively. Native #444 evidence is recorded, not G4.
- objective acceptance condition: frozen Windows candidate completes G4 (Fox/ReadBoard, outlines, pause/cancel/multipoint, rectangular coords) as release acceptance, not only headless/cutover tests.
- behavior that must remain stable: identical-frame retention; navigation readmission without another helper frame; old selections do not revive.
- focused validation: the PR’s G4 Windows checklist on the accepted candidate, including a leading-candidate change if quality-outline recoloring is in G4.
-
SPEC-D4 — axis: Spec — defer_reason:
NON_BLOCKING— CANDIDATE(kind=FIX)- evidence: The production probe is only started from engine-ready init. If that returns false because the user is paused,
ponderIfAnalysisControlAllows()also no-ops. Unpause usestogglePonder()only.ponder()starts ordinary analysis whenever capability is notPROBING, soUNKNOWNnever becomesSUPPORTEDon that incarnation. - objective acceptance condition: pause/notStartPondering at the init probe still does not start a probe or ordinary analysis; when analysis is next intentionally started on that incarnation, a focus-capable engine completes the once-per-incarnation probe and
canStartMoveFocus()is true without restart. - behavior that must remain stable: probe is not attached to every
ponder()(navigation/manual continue must not insert a second stream); pause during an in-flight probe still must not restart ordinary analysis (TrackingProductionCutoverTestpause cases). - focused validation: paused (or
notStartPondering) atstartMoveFocusProbeAfterInitialization→ capabilityUNKNOWN→ unpause/first analysis start →SUPPORTEDon a fake focus-capable engine; rejected-probe-once and pause-during-probe tests still pass.
- evidence: The production probe is only started from engine-ready init. If that returns false because the user is paused,
Candidates — Diagnose
No entries
Closed
No entries
Open IN_SCOPE: 0
Owned: 1
Fix candidates: 3
Diagnose candidates: 0
Closed: 0
Summary
Implement point evaluation inside the foreground KataGo search tree,
so targeted research feeds directly into ordinary candidates and saved
analysis.
ranking across analysis, display, budgets, cache admission, and SGF.
move focus, using equal weights and a fixed focus probability of 0.5.
tree to update the node's analysis, while preserving ordinary cache
protection outside this action.
quality outlines. Reaching the visit target removes the extra search
priority while retaining the watched-point outline.
restore admission after returning to the accepted position without
requiring another helper frame.
startup/idle ownership. Unsupported engines retain ordinary analysis.
Verification
21 skipped; additional focused regression and native Swing checks
recorded afterward.
while helper output was suspended, proving readmission without
another helper frame.
a subsequent admission-snapshot repair passed 22 focused regressions.
efb7450b0478094fb9561f3a8858edaa2dd226fc, using Eigen CPU and the b6
test network, passed ordinary → single-point → multipoint → remove
→ clear transitions with retained search statistics.
retained outlines after completion, outline toggling, pause,
cancellation, multipoint clearing, and rectangular-board coordinates.
because the leading candidate did not change. This coverage gap was
explicitly accepted for Ticket 03; it is not reported as a native pass.
in the recorded implementation verification.
These are recorded implementation checks, not completed final release
acceptance.
Draft gates
cross-regressions.
semantics and complete the supported/unsupported runtime matrix.
real restart final numbered name fence is sent and consumed.
release acceptance.
This PR is for early review and is not ready to merge or release.
The experimental commit above must not be interpreted as support in
every binary reporting KataGo v1.18.2.
Related issues
requirements and acceptance evidence.
currently include that independent fix.
Upstream engine work
Maintainer integration (2026-09-09)