Description
Found by loop52 review rvc13: internal/agento11yprovision replaces an exact-read error with a bare ErrConflict at apply.go:1818 (engineVerifyPrefix), :1894 (enginePreflight), :2073 (engineBefore), :2237 (engineReceipt) and cleanup.go:130 (engineCleanupBefore), dropping a wrapped context.DeadlineExceeded from client.go:132. About 20 lifecycle-test sites pinned to ErrConflict (SKT-0153.03.04.03) can therefore still pass on a caller deadline. Wrap the cause (fmt.Errorf with both %w) so errors.Is finds both ErrConflict and the original cause, with no change to which operations refuse.
Acceptance Criteria
- #1 Each of the five sites returns an error matching ErrConflict and, when present, the underlying cause (incl. DeadlineExceeded)
- #2 A test forcing a deadline during each exact read shows errors.Is(err, context.DeadlineExceeded) and the tightened tests now fail on it
- #3 No decision, write or contract change; frozen contract unchanged
Definition of Done
- #1 just check (fmt-check, lint, gen-check, env-check, docs-check, test, race, hygiene, ui-check, compose-check, helm-test, lab-check, signal-fidelity)
- #2 just gen (only if a blueprint field, construct/workload config struct, or a skill under plugins/synthkit/skills/ changed)
- #3 just dump — inventory diffed against signals/
Implementation Plan
Preserve exact-read causes at five refusal sites with dual error wrapping; reproduce each with deadline cause and retain conflict identity, without changing decisions, writes, revisions or limits. Scoped remote checks and guarded review before composed landing.
Implementation Notes
Landed task158dc0f in exact green merged30e154c/tree1290aa3 with foreign main preserved; root recomputed accepted patch hashfae2bc51. All five exact-read caller sites retain ErrConflict and original returned cause; real TLS caller-deadline reds/greens and lifecycle-helper rejection subprocesses. Guarded reviewerPASS, CodeRabbit7/7 composed files zero findings, remote full gate20261023T095319Z-synthkit-94a6d21e exit0. No revisions/limits/decisions/writes changed. Generation/dump not applicable to internal error propagation. Internal client-only cause collapse is separate SKT-0173 (retain HTTP-client interruption causes).
Final Summary
Exact-read caller refusals now dual-wrap conflict and cause without changing successful-read mismatch predicates. Targeted deadline proof prevents hidden deadlines from satisfying lifecycle conflict assertions; client-only collapse inside exact reader remains explicitly separate.