Skip to content

Beta 0.7.3 post-tag focused coverage gaps

Summary

Add or identify focused regression probes for post-1.0 fixes that currently have only indirect replay evidence. This item is release-blocking because the fixes are patch-release hardening commits and should not rely only on broad build/native replay.

Required Coverage

  • [x] BUG-102: prove DirectDownload cancellation cannot register a new WinInet handle after owner cancellation has already consumed the cancellation state.
  • [x] BUG-105: prove the WebSocket listener continues draining pending accepted sockets after rejecting a disallowed remote-access IP.
  • [x] BUG-108: prove autocomplete enumeration returns E_OUTOFMEMORY without copying through a null CoTaskMemAlloc result.
  • [x] BUG-109: prove the GDI ownership seams used by meter-icon creation release brushes, bitmaps, and scratch DCs on success and early-return paths.
  • [x] BUG-110: prove selected GDI bitmaps are restored before callers consume them, matching the meter-icon deselection requirement before CreateIconIndirect.

Acceptance Criteria

  • [x] Each required coverage target has a focused native test, Python smoke, live smoke, or documented existing evidence that directly exercises the patched behavior.
  • [x] New tests run through supported python -m emule_workspace commands.
  • [x] The Release x64 replay remains green after the new probes.
  • [x] Any confirmed product defect found while adding coverage becomes a BUG-111+ item.
  • [x] CI-023 and Beta 0.7.3 post-tag replay are updated with final evidence.

Validation

  • python -m emule_workspace build tests --config Release --platform x64
  • python -m emule_workspace test all --config Release --platform x64
  • Additional focused commands added by the implementation slice.

Progress Evidence

  • App commit dc412b4 routes DirectDownload WinInet handle ownership through the cancellation registry policy seam.
  • Test commit f377146 adds DirectDownload seam rejects handle registration after owner cancellation.
  • App commit 220c0cb exposes the WebSocket rejected remote-access IP accept-drain policy through WebSocketHttpSeams.
  • Test commit 46eab04 adds WebSocket HTTP seams keep draining accepts after remote IP rejection, which asserts rejected disallowed IPs keep the listener draining pending accepts.
  • App commits e336f26 and 083478a expose the autocomplete enum-string copy path through CustomAutoCompleteSeams and use the bounded CRT copy helper.
  • Test commit 6273fdb adds focused autocomplete coverage:
  • Custom autocomplete enum string seam copies values into COM task memory
  • Custom autocomplete enum string seam returns out-of-memory before copying through a null allocation
  • Test commit 237e6d2 adds focused native coverage for the ResourceOwnershipSeams GDI helpers used by MeterIcon.cpp:
  • ScopedGdiObject deletes owned bitmaps on scope exit
  • ScopedGdiObject release leaves ownership with the caller
  • ScopedDc deletes scratch DCs on scope exit
  • ScopedSelectObject restores the previous bitmap before callers consume the selected object
  • Test commit 237e6d2 links the native harness with gdi32.lib so the GDI ownership seam tests run in the standard harness.
  • Validation:
  • python -m emule_workspace build app --config Release --platform x64
  • python -m emule_workspace build tests --config Release --platform x64
  • python -m emule_workspace test all --config Release --platform x64
  • python -m emule_workspace validate
  • Latest native coverage artifact: EMULE_WORKSPACE_ROOT\repos\emulebb-build-tests\reports\native-coverage\20260509-142259-eMulebb-workspace-v0.72a-eMule-main-x64-Release.
  • The Release x64 parity suite now reports 501 passing parity cases and 72 passing web API cases.
  • No new BUG-111+ item was opened because the focused coverage work did not confirm a new product defect.

Relationship To Other Items