yer — Yocto error-report analyzer
A command-line tool that reads Yocto/OpenEmbedded error-report.txt files,
highlights the errors, failures, and anomalies in the embedded build logs,
and turns them into:
- Rich terminal output for developers debugging a failed build.
- Self-contained static HTML + JSON + SARIF artifacts for CI to publish.
- Compact, token-bounded summaries designed to be fed to Claude for automated root-cause analysis and fix suggestions.
- Cross-run trends — new / recurring / regressed / fixed failures, with a
--fail-on-newregression gate.
error-report.txtfiles are the JSON payloads produced by OpenEmbedded'sreport-errorbbclass /send-error-report. See docs/data-format.md.
Status
✅ Implemented (v0.1.0). The full pipeline (ingest → parse → analyze → summarize → render) plus cross-run trends is built, tested against the real
report corpus, and green in CI. Milestones M0–M6 are complete — see
docs/roadmap.md and CHANGELOG.md.
Why
A failed Yocto build drops a large JSON report whose real content is one or more
raw task logs — up to ~2 MB each. Finding the actual root cause means scrolling
past thousands of lines of NOTE:/DEBUG: noise. yer extracts the handful of
lines that matter, classifies the failure (compile / configure / patch / QA /
fetch / dependency), deduplicates repeats, and presents a ranked list of
findings — the same findings drive the terminal view, the HTML report, and
the LLM summary.
Quick example
$ yer analyze error-reports/error_report_20260701180755.txt
[ERROR] gz-gui9 [do_configure] - configure (0.85)
package "Qt5" considered NOT FOUND
at CMakeLists.txt:86
| -- Could NOT find Qt5QuickControls2 (missing: Qt5QuickControls2_DIR)
| but it set Qt5_FOUND to FALSE so package "Qt5" is considered to be NOT
1 error(s), 0 warning(s) - exit 1
$ yer report error-reports/*.txt --html out/ # static dashboard + report.json
$ yer analyze error-reports/*.txt --format sarif -o out.sarif # code-scanning annotations
$ yer summarize error-reports/err.txt | claude -p "Fix this build failure"
$ yer trend error-reports/*.txt --store .yer/trends.jsonl --record --fail-on-new # regression gate
Documentation map
| Doc | Purpose |
|---|---|
| docs/quickstart.md | Install and first run (dev + CI). |
| docs/ci.md | CI recipes: exit codes, SARIF upload, trend gating. |
| docs/releasing.md | Maintainer runbook: how to publish yer to PyPI. |
| docs/architecture.md | The five-stage pipeline and module layout. |
| docs/roadmap.md | Milestones and the development plan. |
| docs/data-format.md | Reference for the error-report.txt format. |
| docs/corpus.md | How to add to the sample corpus and derive fixtures. |
| docs/spec-driven-workflow.md | How specs, plans, and tasks are organized for Claude Code. |
| docs/specs/ | Component specifications (SPEC-000…006). |
| tasks/ | Actionable, per-milestone task lists. |
| CHANGELOG.md | Release history. |
| CLAUDE.md | Operating guide for Claude Code in this repo. |
Design commitments (v1)
- Language: Python 3.11+. Core
parse/analyze/modelsare stdlib-only; rendering adds Jinja2. - Inputs:
error-report.txtJSON files (globs, dirs, stdin). - Outputs: terminal, canonical
report.json, self-contained HTML, SARIF 2.1.0, and a local cross-run trend store. - LLM: emits a structured summary only — no API calls in the core tool.
- CI-first: meaningful exit codes, machine-readable output, deterministic artifacts, and privacy redaction of host identity in everything shareable.
License
MIT © 2026 Rob Woolley.
Metadata
Release files for yer 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| yer-0.1.0.tar.gz | 161.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| yer-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 206.0 kB
Release files / yer-0.1.0.tar.gz
| Download URL | yer-0.1.0.tar.gz |
|---|---|
| Size | 161.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b32c6cc869b282778f99e43ff11fd049775e7ae72452e717553b033ed876ec3e
|
|
BLAKE2b-256 checksum How to use checksums |
4f8346ff1938ae96fe2ba9562accdf997bd8523f8678be636946ea91c48a6473
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency logRelease files / yer-0.1.0-py3-none-any.whl
| Download URL | yer-0.1.0-py3-none-any.whl |
|---|---|
| Size | 45.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0754b16a081d0bbf893588c907fcad7b379c80876ded6ae389ca6191a9b33c65
|
|
BLAKE2b-256 checksum How to use checksums |
df99053e0142cd85ac815d08daefe9f01f5d13660cf28b447156093f38d448c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency log