Build intelligence
Build reports
Automatic build metrics, the cache rule, and offline regression analysis.
What a build report is
Every successful native Go/Rust build (build, rebuild, zero-downtime deploys) automatically prints a Build Report and records it with the version metadata - no flags, no configuration, no network. It works fully offline.
→ Build Report Application api Version v12 Compiler Go 1.27 Duration 31.2s Cache COLD (go-build-cache) Binary 14.8 MB (linux/amd64) Commit 8f31c2a ──────────────────────────────────────────────── Regression Analysis Compared against 1 previous comparable build. Binary size Previous 14.1 MB Current 14.8 MB Change +0.7 MB (+4.9%) Build duration Comparison skipped: cache mode differs from the previous comparable build (COLD → HIT)What is captured
- Application and version
- Language and compiler/toolchain version (
go version/rustc --version) - Build start/end time and duration
- Binary size and target platform (artifact type, size, platform)
- Cache status:
COLD= real compilation happened,HIT= served from the compiler's build cache - Git commit when available (
unavailableoutside a git repository) - The build arguments you passed via
--build-arg
The cache rule
Binary size remains a valid regression signal across cache states when the artifact, toolchain, platform, and matrix context are comparable - a cache hit does not change what the compiler produces.
Regression analysis
Regression analysis compares the current build against the previous 5 comparable builds. Comparable means the same application, language, toolchain, target platform, and artifact type - with cache state ignored for size comparisons and matched for duration comparisons.
Alert thresholds
| Signal | Alert fires when |
|---|---|
| Binary size | growth ≥ 1 MB or ≥ 5% versus the previous comparable build, plus an N-build average baseline when enough history exists |
| Build duration | slowdown ≥ 25% and ≥ 2s versus a previous build in the same cache mode (thresholds avoid noisy micro-changes) |
Interpreting results
The report is the fastest way to detect unexpected binary growth, compilation regressions, or toolchain changes - the compiler version in the report makes accidental toolchain bumps visible. A comparison that is skipped is information, not a failure: the report would rather say Comparison skipped than show a percentage that compares a cold compile to a cache hit.
Regression analysis is pure observability: missing history never fails a build, and a reporting problem only prints a warning.
phelix build-report
Read-only inspection of stored build reports - never triggers a build, works fully offline:
phelix build-report myapp # 5 most recent reportsphelix build-report myapp --limit 10→ Build reports for 'myapp' (2 most recent)→ v2 2026-08-26T03:25:00Z Compiler Go 1.27 Duration 5.2s Cache HIT (go-build-cache) Binary 14.9 MB (linux/amd64) Commit 8f31c2a Args -trimpath→ v1 2026-08-26T03:20:00Z ...Versions recorded before build reporting existed show no build report metadata. Use build-report to review stored build history before investigating a performance or size issue.
Storage format
The report lives inside versions.json as the optional additive build_report field per version - there is no separate build database, and everything works offline. See version metadata for the exact shape. A malformed payload degrades to "no report" instead of breaking the version index.