Parse Yocto error-report.txt files into ranked build findings.
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yer-0.1.0.tar.gz.
File metadata
- Download URL: yer-0.1.0.tar.gz
- Upload date:
- Size: 161.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b32c6cc869b282778f99e43ff11fd049775e7ae72452e717553b033ed876ec3e
|
|
| MD5 |
46e368c120a6c894687fdc56d2acb5b2
|
|
| BLAKE2b-256 |
4f8346ff1938ae96fe2ba9562accdf997bd8523f8678be636946ea91c48a6473
|
Provenance
The following attestation bundles were made for yer-0.1.0.tar.gz:
Publisher:
release.yml on robwoolley/yer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yer-0.1.0.tar.gz -
Subject digest:
b32c6cc869b282778f99e43ff11fd049775e7ae72452e717553b033ed876ec3e - Sigstore transparency entry: 2082164710
- Sigstore integration time:
-
Permalink:
robwoolley/yer@40b93b85ab34540719bf666902c032b375e8b6ea -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/robwoolley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@40b93b85ab34540719bf666902c032b375e8b6ea -
Trigger Event:
push
-
Statement type:
File details
Details for the file yer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: yer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 45.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0754b16a081d0bbf893588c907fcad7b379c80876ded6ae389ca6191a9b33c65
|
|
| MD5 |
174aac732f65446592421bba30195e90
|
|
| BLAKE2b-256 |
df99053e0142cd85ac815d08daefe9f01f5d13660cf28b447156093f38d448c0
|
Provenance
The following attestation bundles were made for yer-0.1.0-py3-none-any.whl:
Publisher:
release.yml on robwoolley/yer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yer-0.1.0-py3-none-any.whl -
Subject digest:
0754b16a081d0bbf893588c907fcad7b379c80876ded6ae389ca6191a9b33c65 - Sigstore transparency entry: 2082164723
- Sigstore integration time:
-
Permalink:
robwoolley/yer@40b93b85ab34540719bf666902c032b375e8b6ea -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/robwoolley
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@40b93b85ab34540719bf666902c032b375e8b6ea -
Trigger Event:
push
-
Statement type: