@@ -245,7 +245,7 @@ and ``project-tests``, and ``required-checks`` (see `Required Status
245245Checks `_ below), gated out by their own ``if: `` rather than by having
246246already run. ``changelog `` carries no
247247``if: `` at all and runs on every path regardless -- deliberately, per its own
248- comment (``unit-tests.yml:1037-1043 ``): ``create-release.yml `` feeds
248+ comment (``unit-tests.yml:1062-1068 ``): ``create-release.yml `` feeds
249249``CHANGELOG.md `` to the GitHub Release body, so the release path is exactly
250250where a drifted file must not go unchecked. Confirmed on run `36210743295
251251<https://github.com/JarryShaw/PyPCAPKit/actions/runs/36210743295> `__ (a
@@ -352,9 +352,14 @@ and ``patch = ["subprocess"]``, without which only the xdist controller is
352352measured, not its workers, plus ``core = "ctrace" ``: with the suite purging
353353and re-importing pcapkit, one module's peak RSS was 4.17 GiB under the default
354354``sys.monitoring `` core against 0.41 GiB under ``ctrace ``, and that growth
355- killed the runner. The leg then writes the total and a per-package table to the
356- job summary and uploads the HTML report as the ``coverage-html ``
357- artifact (30 days), with the bare numbers as the ``coverage-summary `` artifact.
355+ killed the runner. ``sigterm = true `` and a ``pytest_sessionfinish `` hook in
356+ :file: `tests/conftest.py ` that saves each xdist worker's data early keep a
357+ worker that dies during shutdown from losing its file
358+ (`#1423 <https://github.com/JarryShaw/PyPCAPKit/issues/1423 >`__). The leg then
359+ writes the total and a per-package table to the job summary and uploads the HTML
360+ report as the ``coverage-html `` artifact (30 days), with the bare numbers as the
361+ ``coverage-summary `` artifact and the per-process debug log as
362+ ``coverage-processes-log ``.
358363
359364The PR comment comes from **Coverage Comment ** (:file: `coverage-comment.yml `),
360365not from ``unit-tests.yml ``. That file is also a reusable workflow, a called
@@ -384,7 +389,7 @@ grepping every workflow file for its name:
384389 - Where
385390 * - ``Required checks passed ``
386391 - job ``required-checks ``
387- - ``unit-tests.yml:1346 ``
392+ - ``unit-tests.yml:1371 ``
388393 * - ``Compat Python 3.10 ``
389394 - job ``compatibility ``, matrix leg ``3.10 ``
390395 - ``python-compatibility.yml:31,41 ``
@@ -402,20 +407,20 @@ grepping every workflow file for its name:
402407 - ``python-compatibility.yml:31,45 ``
403408
404409``Required checks passed `` is defined by exactly one job
405- (``unit-tests.yml:1346 ``). ``Compat Python `` is defined by two in
410+ (``unit-tests.yml:1371 ``). ``Compat Python `` is defined by two in
406411``python-compatibility.yml ``: the required ``compatibility `` job (``:31 ``,
407412``Compat Python ${{ matrix.python-version }} ``, expanding to the five required
408413legs at ``:41-45 ``) and the non-required ``compatibility-nightly `` job (``:69 ``,
409414``Compat Python 3.15 (scheduled) ``, see below). A comment at
410- ``unit-tests.yml:1261 `` mentions the string without defining it.
415+ ``unit-tests.yml:1286 `` mentions the string without defining it.
411416
412417``Required checks passed `` is an aggregate, not a single check run. The ruleset
413418requires it and the five ``Compat Python 3.10 ``-``3.14 `` legs, nothing else, as
414- ``unit-tests.yml ``'s own comment (``unit-tests.yml:1260-1270 ``) records. It
419+ ``unit-tests.yml ``'s own comment (``unit-tests.yml:1285-1295 ``) records. It
415420``needs: `` the gating jobs of ``unit-tests.yml `` -- ``test ``, ``integration ``,
416421``engine-tests `` and ``pypcap-parity ``, plus ``changes `` and ``project-tests ``
417422for the docs-only path -- and checks each result explicitly
418- (``unit-tests.yml:1345-1399 ``). Rulesets match check names literally, with no
423+ (``unit-tests.yml:1370-1424 ``). Rulesets match check names literally, with no
419424wildcard, so requiring the matrix cells one by one would mean editing the
420425ruleset whenever a matrix changes; the aggregate keeps the required list fixed.
421426It accepts the four legs as ``skipped `` only on a docs-only pull request, where
@@ -424,13 +429,13 @@ instead. The ``Compat`` legs stay required separately because they come from
424429``python-compatibility.yml ``, and a job cannot ``needs: `` a job in another
425430workflow file. This job runs on Unit Tests' own ``push ``/``pull_request ``
426431triggers; the ``gate-only: true `` reusable calls documented above skip it via
427- ``if: ${{ always() && inputs.gate-only != true }} `` (``unit-tests.yml:1348 ``),
432+ ``if: ${{ always() && inputs.gate-only != true }} `` (``unit-tests.yml:1373 ``),
428433so it is never produced -- and never expected -- on those paths.
429434
430435``Compat Python 3.10 ``-``3.14 `` are five ordinary matrix legs, not an
431436aggregate: ``python-compatibility.yml ``'s own comment (``:37-40 ``) and
432437``unit-tests.yml ``'s matching one for its own, differently-matrixed
433- ``test ``/``integration `` jobs (``unit-tests.yml:59-62 ``, ``unit-tests.yml:256 ``) both say why 3.15 is
438+ ``test ``/``integration `` jobs (``unit-tests.yml:59-62 ``, ``unit-tests.yml:281 ``) both say why 3.15 is
434439excluded from every *required * matrix in this repository -- the ruleset's
435440required-checks list stops at 3.14, so a 3.15 leg cannot gate a merge and is
436441kept advisory (``continue-on-error: true `` in ``python-compatibility.yml ``'s
0 commit comments