Skip to content

v0.7.15

Choose a tag to compare

@github-actions github-actions released this 25 Sep 20:21
· 105 commits to main since this release

Fixed — documented settings that did nothing

An audit of every setting against the code found five that no code read.

  • EPOCHIX_SCRUB_SECRETS was documented — "redact secret-looking strings
    from stored lines" — and implemented nowhere.
    A training script that
    printed its W&B key, an HF_TOKEN or a database URL had it stored verbatim
    in the raw-line store, and the opt-in LLM fallback sent it to the configured
    provider. It is implemented now (epochix/scrub.py: credentials in URLs,
    bearer tokens, …_API_KEY=/password: assignments, and AWS, GitHub,
    OpenAI/Anthropic, Hugging Face, Slack, Google and JWT token shapes) and on
    by default
    : it only touches the stored or transmitted copy of a line, never
    what the parsers read, and never a plain number.
  • EPOCHIX_POSTGRES_DSN and EPOCHIX_REDIS_URL were documented as a
    Postgres store and a Redis hub. Neither exists; a run pointed at Postgres
    went to the local SQLite file. Setting either now stops epochix with an
    error saying so. The postgres and redis extras, which installed drivers
    nothing imported, are empty aliases.
  • EPOCHIX_OPEN_BROWSER=false opened the browser anyway — every command
    and the SDK called the browser directly. Everything now goes through one
    helper that honours it.
  • EPOCHIX_TELEMETRY is documented as what it is: there is no telemetry.

Fixed — reading logs

  • fastai's metric columns were filed as training metrics. fastai computes
    them on the validation set; a fastai classifier's accuracy is now
    val_accuracy, in both engines.
  • A Lightning progress line inside a Keras log was dropped — the fallback
    was the universal parser alone, which skips progress bars by design. A line
    the run's parser cannot read now gets a look from every other parser, best
    first, in both engines.
  • Stored story frames read back as task "custom" whatever the run was, in
    every export and API that reads frames. The task is stored with the frame;
    frames from older databases take the run's task.

Added — Farsi PDFs

  • A Farsi run's PDF is drawn in Farsi. fpdf2's core fonts are Latin-1, so
    the report fell back to English chrome and left its sentences out. It now
    embeds Vazirmatn (SIL Open Font License, shipped in the package with its
    licence) and shapes the text with uharfbuzz — joined letters, right-to-left
    order, right-aligned pages. uharfbuzz is the pdf extra
    (pip install "epochix[pdf]"); without it the fallback stays, and the cover
    now names that command. English and French reports keep the core fonts.
  • Phase names were English in every report language — the PDF's phase
    pages and epoch table, and the Markdown summary, printed Understanding in a
    French or Farsi report. They come from the same translated catalogue as the
    warnings now; the PDF's "<- best" marker is translated too.

Performance

  • The universal parser is ~25% faster again (25k to 31k lines/sec on CI),
    with byte-identical output over 680,021 lines — contextlib.suppress around
    every number cost more than the conversion, and the same metric names were
    re-canonicalised on every line. Name lookups are cached pipeline-wide. The
    50k planning target is retired, with the reasoning in ROADMAP.md.

Fixed — docs

  • ARCHITECTURE.md described parser detection as "the first 50 lines, or 5
    seconds"; it is 200 lines or 1.5 s of quiet, with the per-line fallback.
  • ROADMAP.md lost six sections to an edit in this release's PDF work; restored.

Fixed — the Alembic migrations

They had fallen behind the schema the store creates (no milestones or
raw_lines tables, two missing columns). Migration 0002 catches up, and a
test now fails when they disagree.