Skip to content

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 10 Aug 21:14
· 31 commits to master since this release
63e77b3

Fixed

  • Typed entries: parse_entries() now returns ErrorEntry dataclasses (dict-compatible via __getitem__), full type hints on all functions, and a small exception vocabulary (AgentLogError / ValidationError / LockTimeoutError) — same behavior, same exit codes.

  • stdin reconfigured to UTF-8 on Windows: piped unicode no longer double-encodes into the log (stdout-only reconfigure bug).

  • L10: load() no longer crashes on a locked/unreadable log file (graceful OSError fallback; regression tests added).

  • Concurrent --add appends no longer lose entries: the append is
    now serialized by a cross-process lock file (<log>.lock, stdlib-only,
    atomic O_CREAT|O_EXCL create with 5s wait and stale-lock recovery)
    and the log is re-read inside the lock before writing (lost-update fix).

  • _extract_area() marker semantics documented and pinned by tests:
    the CI gate and the shell hooks agree on the marker (first matching
    line, last AREA:/LOG: on it — the hooks' grep -m1 + greedy sed).

  • status_token() strips the en-dash as well as the em-dash (OPEN– ->
    OPEN).

  • start.py active_errors() delegates to check_errors.parse_entries()
    (the canonical parser) instead of re-implementing entry splitting, so
    the boot briefing can never drift from the tool's format.

  • load() reads with utf-8-sig so a BOM-prefixed log is parsed, not
    silently ignored.

Added

  • Robustness tests: 100-entry fuzz, BOM / invalid UTF-8, en-dash
    statuses, an empty section-5-only log, and multi-marker precedence in
    --check-commit (last marker on the first matching line).

Docs

  • Add a permanent visitor badge to the README (GitHub traffic stats
    only keep 14 days).
  • README: document the lessons-clustering chain limitation, the parser's
    worst-case O(n²) on pathological logs, and LOGNAME repo-root-relative
    paths.