mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-03 22:19:42 +02:00
fix(predictive-echo): anchor hold after unpredicted wire edits (review findings)
Independent post-build review found three gaps, all one family: input that changes the composer without a prediction leaves the DISPLAYED cursor stale for one RTT, and anchoring a new run on it painted ghosts one cell off (blank-neutral, so they lived out the full TTL: "tehh" on backspace-then-retype, exactly on the links the feature targets). Fix: the addon now HOLDS new predictions after any such edit (backspace with nothing outstanding = deleting echoed text, clearPredictions, and now also IME/plain-paste 'text' commits, which the hook clears like 'clear') until the next PARSED write releases the hold. The inline predictChar reconcile deliberately does not count: only the emitter pass or the public reconcile() is the display-caught-up contract. Worst case is exactly one unpredicted keystroke, whose own echo releases the hold. Also patched the one bypass path the PR had missed: _handleCjkInput now clears predictions like insertTerminalText and the other bypass sends. Package suite 230, vm gating 85, E2E 10/10 all green after the change. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -411,11 +411,13 @@ describe('_predictHookOnData (wire neutrality)', () => {
|
||||
expect(app._predictiveEcho!.clearPredictions).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("kind 'text' (plain paste) takes no visual action", () => {
|
||||
it("kind 'text' (plain paste, IME commit) clears the run like 'clear'", () => {
|
||||
// Review finding: an IME word-commit changes the composer without a
|
||||
// prediction; new predictions after it would mis-anchor until cascade.
|
||||
const app = makePredictApp();
|
||||
app._predictHookOnData('pasted text');
|
||||
expect(app._predictiveEcho!.predictChar).not.toHaveBeenCalled();
|
||||
expect(app._predictiveEcho!.clearPredictions).not.toHaveBeenCalled();
|
||||
expect(app._predictiveEcho!.clearPredictions).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('never touches _pendingInput and never sends (visual-only pin)', () => {
|
||||
|
||||
Reference in New Issue
Block a user