You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .agents/sow/done/SOW-0016-20260610-client-call-timeout-and-abort.md
+51-2Lines changed: 51 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@
4
4
5
5
Status: completed
6
6
7
-
Sub-state: implementation and validation completed on 2026-06-11; `SOW-0015` remains paused and can be resumed after this SOW is committed.
7
+
Sub-state: regression repair completed on 2026-06-11 after CI failures on commit `aaec3d5`; `SOW-0015` remains paused and can be resumed after this repair is committed.
8
8
9
9
## Requirements
10
10
@@ -375,4 +375,53 @@ None.
375
375
376
376
## Regression Log
377
377
378
-
None yet.
378
+
### 2026-06-11
379
+
380
+
CI failures after commit `aaec3d5` reopened this SOW:
381
+
382
+
- Static Analysis run `27336192003`, job `Go Static Analysis (src/go)`, failed because `gosec` exited with status 1 after uploading SARIF. Local reproduction with `gosec -fmt=json -exclude=G404 ./...` under `src/go` reports `G115` at `src/go/pkg/netipc/service/raw/client_unix.go:198`: integer overflow conversion `int64 -> uint32` in the SHM receive polling timeout calculation.
383
+
- CodeQL run `27336192249`, job `Analyze Go Windows`, failed in the MSYS2 build step while running Go tests. The failing test was `TestSessionReceiveRejectsMalformedChunks/continuation_recv_disconnect` in `src/go/pkg/netipc/transport/windows/pipe_edge_test.go`; CI observed `peer disconnected` while the existing test expected the old wrapped continuation receive error.
384
+
385
+
Why previous validation missed it:
386
+
387
+
- The local Go validation did not run `gosec`; the static-analysis workflow did.
388
+
- The final `win11` validation did run Windows Go tests, but the CI failure is a Windows named-pipe close timing variation. The changed framing code returned raw continuation receive errors, so one platform/timing path exposed a direct `ErrDisconnected` instead of the pre-existing wrapped `ErrRecv` contract.
389
+
390
+
Repair plan:
391
+
392
+
- Keep timeout and abort errors distinct through chunk continuation receives.
393
+
- Restore pre-SOW behavior for ordinary continuation receive failures by wrapping them as `ErrRecv("continuation recv: ...")`.
394
+
- Replace duplicated timeout polling conversions with bounded helpers that prove the narrowed value is below the poll cap before converting to `uint32`.
395
+
396
+
Validation plan:
397
+
398
+
- Re-run `gosec -fmt=json -exclude=G404 ./...` under `src/go`.
399
+
- Re-run `cd src/go && go test ./pkg/netipc/...` locally.
400
+
- Re-run the failing Windows package/test on `win11` with `MSYSTEM=MSYS`.
401
+
- Re-run `git diff --check`.
402
+
403
+
Repair results:
404
+
405
+
- Updated `src/go/pkg/netipc/transport/internal/framing/receive.go` so chunk continuation receive errors are wrapped as `ErrRecv("continuation recv: ...")` unless the transport explicitly marks them as timeout/abort control errors.
406
+
- Updated POSIX UDS and Windows Named Pipe receive config to propagate only timeout and abort receive errors raw.
407
+
- Replaced duplicated Go SHM timeout narrowing logic in `src/go/pkg/netipc/service/raw/client_unix.go` and `src/go/pkg/netipc/service/raw/client_windows.go` with `boundedClientWaitMs()`, which caps the value before the justified `G115`-suppressed conversion.
408
+
- Updated Windows named-pipe receive polling to use the same bounded conversion pattern.
409
+
410
+
Validation results:
411
+
412
+
-`cd src/go && go test ./pkg/netipc/...`: passed.
413
+
-`cd src/go && go vet ./...`: passed.
414
+
-`cd src/go && staticcheck ./...`: passed.
415
+
- Exact CI-style `gosec -quiet -fmt sarif -out gosec.sarif -exclude=G404 ./...` passed for `src/go`, `tests/fixtures/go`, and `bench/drivers/go`.
416
+
- Verbose local `gosec -fmt=json -exclude=G404 ./...` under `src/go` now reports zero issues; it still reports the pre-existing assembly-stub SSA warning for `pkg/netipc/transport/posix/shm_pause_amd64.go`, but the CI-style SARIF command exits successfully with zero findings.
417
+
-`win11` MSYS CodeQL-style loop passed: `CGO_ENABLED=0 go test ./...` in `src/go`, `tests/fixtures/go`, and `bench/drivers/go`.
418
+
-`win11` focused failure reproduction passed 50 times: `CGO_ENABLED=0 go test ./pkg/netipc/transport/windows -run 'TestSessionReceiveRejectsMalformedChunks/continuation_recv_disconnect' -count=50`.
419
+
-`git diff --check`: passed.
420
+
421
+
Regression artifact maintenance:
422
+
423
+
-`AGENTS.md`: no update needed; workflow and project guardrails did not change.
424
+
- Runtime project skills: no update needed; this was a narrow code regression repair, not a reusable workflow change.
425
+
- Specs and end-user/operator docs: no update needed; public timeout/abort behavior remains as documented.
426
+
- End-user/operator skills: no update needed; integrator guidance remains correct.
427
+
- SOW lifecycle: SOW was reopened from `done/`, repaired, validated, marked completed, and moved back to `done/` with the repair commit.
0 commit comments