NEC-313: A drawing's file can stay without an image link: a let-go refused by the 30 s window is never retried #311

Merged
nectenda-agent merged 3 commits from worktree-nec-313-a-drawings-file-can-stay-without-an-imag into main 2026-10-21 01:55:53 +01:00
Collaborator

Task: NEC-313 — https://projectron.nerchure.com/tasks/333

A bound Excalidraw view whose save leaves out an image's link lets go so its file gets the link (NEC-291), at most once per link in 30 s. A let-go refused inside that window armed nothing, so it was retried only by the view's next save, and a view that saved no more kept a file without the link: an empty frame in that vault (hardness seed 1642605425). A refusal now arms one timer per binding for when the window ends; it reads the file, which while bound only the view writes, and lets go if the link is still left out, asking again 30 s later if the file cannot be read. Cleared on detach. Four unit tests, each mutation-checked; SAFE-A29 and sync-limitations updated; 85 minutes of the Excalidraw hardness run passed (the replayed seed did not reach the failing round).

Spec: docs/changes/NEC-313-link-let-go-retry/spec.md

Changelog

An Excalidraw drawing open in one vault no longer shows an image as an empty frame indefinitely after a short run of saves that left the image out.

Task: NEC-313 — https://projectron.nerchure.com/tasks/333 A bound Excalidraw view whose save leaves out an image's link lets go so its file gets the link (NEC-291), at most once per link in 30 s. A let-go refused inside that window armed nothing, so it was retried only by the view's next save, and a view that saved no more kept a file without the link: an empty frame in that vault (hardness seed 1642605425). A refusal now arms one timer per binding for when the window ends; it reads the file, which while bound only the view writes, and lets go if the link is still left out, asking again 30 s later if the file cannot be read. Cleared on detach. Four unit tests, each mutation-checked; SAFE-A29 and sync-limitations updated; 85 minutes of the Excalidraw hardness run passed (the replayed seed did not reach the failing round). Spec: `docs/changes/NEC-313-link-let-go-retry/spec.md` ## Changelog An Excalidraw drawing open in one vault no longer shows an image as an empty frame indefinitely after a short run of saves that left the image out.
A bound Excalidraw view whose save leaves out the link of an image the
document draws lets go so its file is written with the link (NEC-291), at
most once per link in 30 s. A let-go refused inside that window armed
nothing, so it was retried only by the view's next save; a view that saved
no more kept a file without the link, an empty frame in that vault (the
hardness run, seed 1642605425).

A refusal now arms one timer per binding for when the window ends. It reads
the file — which while bound only the view writes — and lets go if it still
leaves the link out. Cleared on detach. SAFE-A29 and sync-limitations say so.

Task: NEC-313

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SzbvKTp2sQTUdhh3gaV7uu
Found in review: a retry whose read of the drawing's file threw, or caught
text that did not parse, was dropped, leaving the link to wait on a save
again — the state NEC-313 fixed. It now asks again 30 s later. The comment
that a rebind starts from a file naming the link was not guaranteed; what
bounds the let-goes is the witness, and the comment says so now. The spec's
acceptance lines say what the tests defend. conformance.md regenerated for
the two lines SAFE-A29 gained.

Task: NEC-313

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SzbvKTp2sQTUdhh3gaV7uu
Record NEC-313's hardness runs in its spec
All checks were successful
Release note / release-note (pull_request) Successful in 18s
CI / build (pull_request) Successful in 5m34s
CI / e2e (pull_request) Successful in 12m29s
CI / promote (pull_request) Has been skipped
CI / build (push) Successful in 5m46s
CI / e2e (push) Successful in 12m20s
CI / promote (push) Successful in 32s
58187a9800
Task: NEC-313

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SzbvKTp2sQTUdhh3gaV7uu
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!311
No description provided.