NEC-300: The e2e harness can run a typing script twice when WebDriver retries execute #303

Merged
nectenda-agent merged 2 commits from worktree-nec-300-the-e2e-harness-can-run-a-typing-script into main 2026-10-17 17:22:45 +01:00
Collaborator

Task: NEC-300 — https://projectron.nerchure.com/tasks/317

WebDriver re-sends nearly any failed command up to three times, including a script that throws and the inspector's 'Promise was collected'. A script that had already run when its error came back ran again; on NEC-298's branch that doubled a typed line in both vaults, which looks exactly like a sync duplication. startVault now tags every execute (and so every executeObsidian), and the renderer answers a re-send from the first run instead of running it again. Every retry of any command logs a 'once:' line naming the command and whether it was guarded. New e2e test execute-once.test.ts: a throwing script ran 4 times without the guard, once with it. Harness-only; no plugin or shared code changes. Clicks and keystrokes are filed as NEC-301.

Spec: docs/changes/NEC-300-execute-at-most-once/spec.md

Changelog

NONE

Task: NEC-300 — https://projectron.nerchure.com/tasks/317 WebDriver re-sends nearly any failed command up to three times, including a script that throws and the inspector's 'Promise was collected'. A script that had already run when its error came back ran again; on NEC-298's branch that doubled a typed line in both vaults, which looks exactly like a sync duplication. startVault now tags every execute (and so every executeObsidian), and the renderer answers a re-send from the first run instead of running it again. Every retry of any command logs a 'once:' line naming the command and whether it was guarded. New e2e test execute-once.test.ts: a throwing script ran 4 times without the guard, once with it. Harness-only; no plugin or shared code changes. Clicks and keystrokes are filed as NEC-301. Spec: `docs/changes/NEC-300-execute-at-most-once/spec.md` ## Changelog NONE
webdriver re-sends nearly any failed command up to three times, a script
that throws included. A script that had already run when its error came
back ran again: a typed line once landed twice in both vaults, which looks
exactly like a sync duplication. startVault now tags every execute, and the
renderer answers a re-send from the first run instead of running it again.
Each re-send is logged as a `once:` line.

Without the guard, a throwing script ran four times in the container; with
it, once.

Task: NEC-300

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UTtLR14xigRXRBtiz6hm3S
Name the retried command in the once: line, and claim absorption only for scripts
All checks were successful
Release note / release-note (pull_request) Successful in 27s
CI / build (pull_request) Successful in 5m41s
CI / e2e (pull_request) Successful in 12m35s
CI / promote (pull_request) Has been skipped
CI / build (push) Successful in 5m39s
CI / e2e (push) Successful in 12m17s
CI / promote (push) Successful in 33s
c8ed234fec
webdriver retries clicks, keystrokes and failed lookups too, and the retry
event does not say which command it is. A line claiming every retry was
absorbed would clear exactly the retry that doubled a keystroke. The
preceding `command` event names it, so the line now says whether it was a
guarded script or an unguarded command (NEC-301).

Task: NEC-300

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UTtLR14xigRXRBtiz6hm3S
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Nectenda/nectenda!303
No description provided.