pz_redact_all.sh is the one-shot Docker wrapper that runs the PHP
ProjectZomboidRedactor over .scratch/pz/Logs/ and produces the
gitignored .scratch/pz/Logs.redacted/ directory consumed by both
the Qwen analyser and the deterministic classifier.
pz_error_analysis.py is the developer-facing Qwen-backed log
analyser: walks the redacted directory, dedupes signatures, and
asks the local sam-desktop Qwen endpoint to classify each unique
shape into a fixed taxonomy with title / cause / fix / confidence.
Runtime depends on the Qwen endpoint; the deterministic classifier
at pz_classify.py is the production-bound counterpart.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Constant was already imported by pz_classify; this just formalises
it as part of the public surface so __all__ matches actual usage.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Was leaking unhandled OSError tracebacks when the output's parent
path could not be created. Exit code stays 1; user-facing message
matches the existing write-failure path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Walks DebugLog-server*.txt under the redacted directory, runs the
parser per file, merges cross-file by signature, and emits the
spec-shaped JSON report.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Honest test docstring (old/new semantics equivalent on contiguous
entries; test locks post-fix behavior against future regressions),
and add severity-prefix strip to the spec's normalization list.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Strip body-prefix severity in normalize_first_line so pattern_id
is stable across body-prefix vs bracketed-only variants.
- Lookback for inferred attribution now counts raw file lines
(per spec literal), not body-line budget across entries.
- Document hash truncation (64-bit) and direct-attribution priority.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>