Skip to content

Commit 81f7860

Browse files
committed
release: finalize DetFuzz v1.0.2 maintenance release
1 parent 8553ae5 commit 81f7860

6 files changed

Lines changed: 66 additions & 11 deletions

File tree

README.md

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,15 @@ rule-resilience finding, not a claim that the fixture is malicious.
3535

3636
## V1 status
3737

38-
V1.0.1 is complete and locally verified on 2026-08-13 with the pinned
39-
development toolchain. It adds fail-closed suite-health, clock-status, and
40-
report-contract hardening while preserving the same deliberately narrow V1
41-
experiment.
38+
V1.0.2 is the current maintenance release. It was locally verified on
39+
2026-08-28 with the pinned development toolchain. It preserves the deliberately
40+
narrow V1 experiment while adding fail-closed XML parsing, explicit handling of
41+
malformed caller-supplied telemetry, and stricter security-lint enforcement.
42+
43+
The latest live Windows experiment remains the V1.0.1 run from 2026-08-13. Its
44+
bundle is retained unchanged rather than being relabeled as V1.0.2 evidence;
45+
the maintenance release changes parser failure handling and project hardening,
46+
not the recorded lab result below.
4247

4348
The latest end-to-end run produced:
4449

@@ -261,10 +266,13 @@ Ruff: all checks passed
261266
mypy: no issues found in 31 source files
262267
```
263268

264-
The v1.0.1 release was validated at 95 tests; the three additional tests cover
265-
the DOCTYPE rejection added after that release. `docs/v1-local-validation.md`
266-
and the release manifest retain the 95/94 figures deliberately, as a
267-
point-in-time record of the validated run rather than a claim about this tree.
269+
The v1.0.1 live release was validated at 95 tests. V1.0.2 adds three DOCTYPE
270+
tests and hardens missing/non-numeric Event IDs, mid-poll parse failures, and the
271+
`evaluate-detection` CLI error path. `docs/v1-local-validation.md` and the
272+
release manifest retain the historical 95/94 figures deliberately, as a
273+
point-in-time record of the validated VM run rather than a claim about this
274+
tree. See [`docs/v1.0.2-maintenance-release.md`](docs/v1.0.2-maintenance-release.md)
275+
for the maintenance-release boundary.
268276

269277
## V1 boundary
270278

docs/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ documentation for DetFuzz V1.
1212
validated finding.
1313
- [`v1-local-validation.md`](v1-local-validation.md): latest live Windows
1414
validation record.
15+
- [`v1.0.2-maintenance-release.md`](v1.0.2-maintenance-release.md): current
16+
maintenance-release changes and their validation boundary.
1517

1618
## Operations and evidence
1719

docs/v1.0.2-maintenance-release.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# DetFuzz V1.0.2 Maintenance Release
2+
3+
V1.0.2 is a code-hardening maintenance release built on the V1.0.1 experiment.
4+
It does not relabel or rewrite the retained V1.0.1 Windows evidence.
5+
6+
## Changes
7+
8+
- Reject XML documents containing a DTD before `xml.etree.ElementTree` parses
9+
them, closing the entity-expansion path for caller-supplied XML.
10+
- Treat a missing or non-numeric Sysmon `EventID` as an invalid event instead of
11+
raising an uncaught exception.
12+
- Tolerate malformed XML returned during telemetry polling and retry until the
13+
normal deadline.
14+
- Make `evaluate-detection` return structured `XML_PARSE_FAILED` output and a
15+
nonzero exit instead of a traceback for malformed input.
16+
- Enable Ruff's blind-except, stale-suppression, and security rule families so
17+
future broad exception handlers, subprocess calls, and XML parsing changes
18+
require explicit review.
19+
- Remove a dead calibration parameter and correct the documented timeout
20+
selection formula.
21+
- Commit the historical V1.0.1 evidence bundle with a pinned SHA-256 digest so
22+
the evidence referenced by the repository is available from a clone.
23+
24+
## Verification
25+
26+
Verified locally on 2026-08-28 with the pinned development toolchain:
27+
28+
```text
29+
98 tests run; 97 passed and 1 expected dependency-path test skipped
30+
Ruff: all checks passed
31+
mypy: no issues found in 31 source files
32+
```
33+
34+
The package version and CLI report `1.0.2`. The historical live evidence remains
35+
`artifacts/detfuzz-v1.0.1-release.zip`, whose digest is pinned by
36+
`artifacts/detfuzz-v1.0.1-release.sha256.txt`. That bundle records the
37+
2026-08-13 V1.0.1 VM run and is intentionally unchanged.
38+
39+
## Claim boundary
40+
41+
V1.0.2 is locally verified for unit-tested behavior, linting, type checking,
42+
packaging, and CLI smoke checks. The live Windows classification results cited
43+
by the project are still the retained V1.0.1 results. A future live rerun should
44+
receive a new evidence bundle and validation record rather than modifying the
45+
historical one.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "detfuzz"
7-
version = "1.0.1"
7+
version = "1.0.2"
88
description = "Detection rule mutation and resilience testing platform."
99
readme = "README.md"
1010
requires-python = ">=3.11"

src/detfuzz/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""DetFuzz package version."""
22

3-
__version__ = "1.0.1"
3+
__version__ = "1.0.2"

tests/test_cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def test_version_reports_v1_release(self) -> None:
3333
main()
3434

3535
self.assertEqual(raised.exception.code, 0)
36-
self.assertEqual(stdout.getvalue().strip(), "detfuzz 1.0.1")
36+
self.assertEqual(stdout.getvalue().strip(), "detfuzz 1.0.2")
3737

3838
def test_failed_clock_preflight_exits_nonzero(self) -> None:
3939
args = argparse.Namespace(powershell_path="powershell.exe")

0 commit comments

Comments
 (0)