CLAUDE.md: added RedactorInterface bullet to the architecture list (after Custom Analyser subclasses, before Detectors); added ProjectZomboidRedactor entry under ProjectZomboid specifics; added src/Util/ to the game-subtrees layout code block with a prose note marking it as the sixth component directory introduced post-v0.1.0; added Pitfall 5 on mandatory pass order. README.md: new "Redaction" subsection between Quick start and Architecture — PHP snippet, replacement descriptions, three toggle methods, three documented v1 limitations. CHANGELOG.md: added [Unreleased] section (Added + Changed) above [0.1.0]. Removed the Redactor bullet from [0.1.0]'s Deferred list entirely — the historical record stays accurate (v0.1.0 shipped without it) and [Unreleased] now documents its arrival; a stub mention in Deferred would be redundant. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.7 KiB
6.7 KiB
Changelog
All notable changes to indifferentketchup/codex are documented here.
The format follows Keep a Changelog and this project adheres to Semantic Versioning.
[Unreleased]
Added
RedactorInterface(src/Util/RedactorInterface.php) andProjectZomboidRedactor(src/Util/ProjectZomboid/ProjectZomboidRedactor.php) — render-time PII filter that scrubs Steam IDs, player names, and world coordinates from Project Zomboid log content. Three independent toggles default to on. Designed as a string-in/string-out utility so consumers can apply it at any rendering or export step. Documented v1 limitations: in PvP combat lines, only the attacker's name and coords are redacted; victim's name and coords (afterhit) are deferred to v2. In admin lines,teleported X to <coords>coordinates are not redacted in v1.
Changed
- New top-level
src/Util/directory introduced. The Redactor is its first occupant; future utilities (e.g. tokenising redactor variants) land here.
0.1.0 — 2026-05-01
First public release. Codex is a generic PHP log parsing and analysis framework with full Project Zomboid server-log support across eight analysers. The Composer package name is indifferentketchup/codex (the repository directory and Gitea slug are ik-codex; the package name is not).
Added
- Framework foundation — generic
Log/Entry/Line/Parser/Analyser/Detective/Insightpipeline forked from upstreamaternos/codexand renamed end-to-end toIndifferentKetchup\Codex\*in66a2fcc. ZeroAternos\Codex\*namespace references remain insrc/ortest/. FilenameDetectoratIndifferentKetchup\Codex\Detective\FilenameDetector— path-based detector that uses the newLogFileInterface::getPath()accessor to dispatch on a filename hint. Falls back tofalsefor path-less log files (StringLogFile,StreamLogFile).- Project Zomboid log subclasses (11) under
IndifferentKetchup\Codex\Log\ProjectZomboid\*covering every PZ server-log file type: a multi-lineProjectZomboidServerLogforDebugLog-server.txt, an abstractProjectZomboidEventLogbase for the ten single-line logs, and concrete subclasses foradmin.txt,BurdJournals.txt,chat.txt,ClientActionLog.txt,cmd.txt,item.txt,map.txt,PerkLog.txt,pvp.txt,user.txt. - Pattern classes (11) under
IndifferentKetchup\Codex\Pattern\ProjectZomboid\*holding regex string constants. Each<Type>Patterncarries aLINEregex used byPatternParser, plus named-group extractor regexes (FIELDS,COMBAT,MOD_LOAD, etc.) used by analysers. ProjectZomboidDetectiveatIndifferentKetchup\Codex\Detective\ProjectZomboid\ProjectZomboidDetective— pre-registers all 11 log subclasses in its constructor with paired filename-hint plus content-signature detectors.- Phase B.1 ServerLog analysers (3):
EngineVersionAnalyser(extracts engine version, build hash, and build date from the server banner),ModLoadAnalyser(mod load order plus missing-mod problems with attachedModMissingSolution),ServerExceptionAnalyser(Java exception type and stack-trace body, coalesced by exception type). - Phase B.2 PvP and Admin analysers (2):
PvpDamageAnalyser(filters zombie hits and zero-damage rows at the regex itself),AdminAuditAnalyser(verb-pattern dispatch across six admin actions: added item, added xp, granted access, changed option, reloaded options, teleported). - Phase B.3 deferred analysers (3) — first custom
Analysersubclasses in the tree, addressing logic that vanillaPatternAnalysercannot express:ConnectionFailureAnalyser(event pairing across the file),ItemDuplicationAnalyser(sliding-window heuristic withTHRESHOLD_COUNT=5,THRESHOLD_WINDOW_SECONDS=10),SkillProgressionAnomalyAnalyser(consecutive-snapshot delta withTHRESHOLD_DELTA=3). All three threshold constants ship with rationale docblocks and are tunable via subclass override. - Synthetic test fixtures under
test/src/Games/ProjectZomboid/fixtures/, hand-crafted from observed PZ log shapes with placeholder identifiers per the project's privacy rules: Steam IDs76561198000000001–76561198000000004, namesPlayer1/Player2/AdminUser/PlayerSuspect, generic coords. No real-log content reaches the index. - End-to-end tests validating each Log subclass's parser, each analyser's insight emission, and the Detective's dispatch behaviour against the synthetic fixtures. Final count: 195 tests, 412 assertions.
- Project documentation:
CLAUDE.mdwith framework architecture, pitfalls, and workflow conventions;README.mdwith worked Project Zomboid example and per-game support table; design specs and as-built plans for Phase B.1 / B.2 / B.3 plus a deferred-status spec for the codexRedactorutility, all underdocs/superpowers/.
Changed
- Layout: components-outer with game suffix. Every game's code lives at
IndifferentKetchup\Codex\<Component>\<Game>\*for the existing components (Analyser,Analysis,Detective,Log,Parser,Pattern). This is option 1 from the Phase A Step 2 layout decision; option 3 (a flatIndifferentKetchup\Codex\Games\<Game>\*tree) was originally proposed and was not selected. LICENSEretains the originalCopyright (c) 2019-2026 Aternos GmbHline per MIT requirements; the LICENSE file is byte-for-byte unchanged from the upstream import.composer.jsonrewritten inaae016d: package nameindifferentketchup/codex, MIT license, generic-framework description, single author entry, PSR-4 autoload roots set toIndifferentKetchup\Codex\and the test-fixture / test-suite namespaces, PHP>=8.4require constraint, PHPUnit^12dev dependency.tests.yamluses the modern$GITHUB_OUTPUTworkflow command instead of the deprecated::set-output(commit60f12bc). CI matrix runs PHP 8.4 and 8.5..gitignoreexcludesLogs.zip(real production log fixtures) and.scratch/(extracted reference logs), plus.claude/and.claude.local.mdfor personal Claude Code artefacts.
Deferred
- Other game implementations —
Minecraft,Hytale, andSevenDaysToDieare detective-stub-only. Each has a TODO<Game>Detectiveextending baseDetective; their per-component subdirectories underAnalyser,Log,Parser, andPatterncontain only.gitkeepplaceholders. Real implementations land if and when fixtures and demand exist. - Packagist publication — v0.1.0 is consumable via Composer's
vcsrepository entry pointing at the Gitea remote. Pushing to Packagist is a separate decision and is not in scope for this release.