Files
ik-codex/CHANGELOG.md
indifferentketchup 52ff8cb3fe
Some checks failed
Tests / Run tests on PHP v8.4 (push) Failing after 1s
Tests / Run tests on PHP v8.5 (push) Failing after 1s
docs: add CHANGELOG.md with v0.1.0 entry
Keep-a-Changelog format, dated 2026-05-01, sections Added / Changed /
Deferred. Captures the framework rename to IndifferentKetchup\Codex\*
(Aternos namespace fully removed in 66a2fcc, MIT LICENSE preserves
original copyright), the components-outer-with-game-suffix layout
(option 1 from the Phase A Q3 decision, not option 3), the package
name indifferentketchup/codex, and the eight analysers shipped across
Phase B.1 / B.2 / B.3. Redactor utility, non-PZ games, and Packagist
publication land in Deferred.
2026-05-01 12:57:46 +00:00

6.3 KiB
Raw Blame History

Changelog

All notable changes to indifferentketchup/codex are documented here.

The format follows Keep a Changelog and this project adheres to Semantic Versioning.

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 / Insight pipeline forked from upstream aternos/codex and renamed end-to-end to IndifferentKetchup\Codex\* in 66a2fcc. Zero Aternos\Codex\* namespace references remain in src/ or test/.
  • FilenameDetector at IndifferentKetchup\Codex\Detective\FilenameDetector — path-based detector that uses the new LogFileInterface::getPath() accessor to dispatch on a filename hint. Falls back to false for 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-line ProjectZomboidServerLog for DebugLog-server.txt, an abstract ProjectZomboidEventLog base for the ten single-line logs, and concrete subclasses for admin.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>Pattern carries a LINE regex used by PatternParser, plus named-group extractor regexes (FIELDS, COMBAT, MOD_LOAD, etc.) used by analysers.
  • ProjectZomboidDetective at IndifferentKetchup\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 attached ModMissingSolution), 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 Analyser subclasses in the tree, addressing logic that vanilla PatternAnalyser cannot express: ConnectionFailureAnalyser (event pairing across the file), ItemDuplicationAnalyser (sliding-window heuristic with THRESHOLD_COUNT=5, THRESHOLD_WINDOW_SECONDS=10), SkillProgressionAnomalyAnalyser (consecutive-snapshot delta with THRESHOLD_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 IDs 7656119800000000176561198000000004, names Player1 / 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.md with framework architecture, pitfalls, and workflow conventions; README.md with 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 codex Redactor utility, all under docs/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 flat IndifferentKetchup\Codex\Games\<Game>\* tree) was originally proposed and was not selected.
  • LICENSE retains the original Copyright (c) 2019-2026 Aternos GmbH line per MIT requirements; the LICENSE file is byte-for-byte unchanged from the upstream import.
  • composer.json rewritten in aae016d: package name indifferentketchup/codex, MIT license, generic-framework description, single author entry, PSR-4 autoload roots set to IndifferentKetchup\Codex\ and the test-fixture / test-suite namespaces, PHP >=8.4 require constraint, PHPUnit ^12 dev dependency.
  • tests.yaml uses the modern $GITHUB_OUTPUT workflow command instead of the deprecated ::set-output (commit 60f12bc). CI matrix runs PHP 8.4 and 8.5.
  • .gitignore excludes Logs.zip (real production log fixtures) and .scratch/ (extracted reference logs), plus .claude/ and .claude.local.md for personal Claude Code artefacts.

Deferred

  • Codex Redactor utility — design captured in docs/superpowers/specs/2026-04-30-redactor-design.md. Not implemented in v0.1.0. iblogs (the downstream consumer) handles upload-time PII filtering for this release; codex itself ships no PII helper. The deferred spec exists so iblogs's privacy story has a referenced design to point at and so a future implementation pass has a clear contract to start from.
  • Other game implementationsMinecraft, Hytale, and SevenDaysToDie are detective-stub-only. Each has a TODO <Game>Detective extending base Detective; their per-component subdirectories under Analyser, Log, Parser, and Pattern contain only .gitkeep placeholders. Real implementations land if and when fixtures and demand exist.
  • Packagist publication — v0.1.0 is consumable via Composer's vcs repository entry pointing at the Gitea remote. Pushing to Packagist is a separate decision and is not in scope for this release.