A build's duration said how long it took and nothing about where the
time went — the two unattributed minutes of the legacy measurements
could only be reconstructed from journal timestamps and file mtimes.
Every build now records its phases: the wait for a free slot, preparing
the worktree, whatever the build runtime does before the command's own
process exists, the clean and the build command, and storing the
artifacts. The artifact page shows them beside the duration, the API
carries them in milliseconds.
executor.overheadBudget (30s by default) warns once per build when the
orchestration's own phases exceed it, naming the slowest. The queue wait
is measured but never counted: waiting for a slot on a host that runs one
build at a time is not overhead.
Implements plan step 14, items 1 and 2; items 4-6 were already done or
groundless in the rewrite, item 3 (Docker ownership repair) follows.
A build's duration said how long it took and nothing about where the
time went — the two unattributed minutes of the legacy measurements
could only be reconstructed from journal timestamps and file mtimes.
Every build now records its phases: the wait for a free slot, preparing
the worktree, whatever the build runtime does before the command's own
process exists, the clean and the build command, and storing the
artifacts. The artifact page shows them beside the duration, the API
carries them in milliseconds.
executor.overheadBudget (30s by default) warns once per build when the
orchestration's own phases exceed it, naming the slowest. The queue wait
is measured but never counted: waiting for a slot on a host that runs one
build at a time is not overhead.
Implements plan step 14, items 1 and 2; items 4-6 were already done or
groundless in the rewrite, item 3 (Docker ownership repair) follows.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A build's duration said how long it took and nothing about where the
time went — the two unattributed minutes of the legacy measurements
could only be reconstructed from journal timestamps and file mtimes.
Every build now records its phases: the wait for a free slot, preparing
the worktree, whatever the build runtime does before the command's own
process exists, the clean and the build command, and storing the
artifacts. The artifact page shows them beside the duration, the API
carries them in milliseconds.
executor.overheadBudget (30s by default) warns once per build when the
orchestration's own phases exceed it, naming the slowest. The queue wait
is measured but never counted: waiting for a slot on a host that runs one
build at a time is not overhead.
Implements plan step 14, items 1 and 2; items 4-6 were already done or
groundless in the rewrite, item 3 (Docker ownership repair) follows.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
mi
merged commit 16146ef349 into main2026-09-15 17:37:19 +02:00
mi
deleted branch build-phase-timing2026-09-15 17:37:19 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
A build's duration said how long it took and nothing about where the
time went — the two unattributed minutes of the legacy measurements
could only be reconstructed from journal timestamps and file mtimes.
Every build now records its phases: the wait for a free slot, preparing
the worktree, whatever the build runtime does before the command's own
process exists, the clean and the build command, and storing the
artifacts. The artifact page shows them beside the duration, the API
carries them in milliseconds.
executor.overheadBudget (30s by default) warns once per build when the
orchestration's own phases exceed it, naming the slowest. The queue wait
is measured but never counted: waiting for a slot on a host that runs one
build at a time is not overhead.
Implements plan step 14, items 1 and 2; items 4-6 were already done or
groundless in the rewrite, item 3 (Docker ownership repair) follows.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com