Expand description
The classes of Git step a commit starts for itself, with the bound and the notice grace of each.
What:
The two kinds of Git step a commit starts for itself, and the quiet window and the notice grace of each.
A step is ended only when it has shown no sign of work for its window (child_watch.rs); elapsed time alone never ends
one (owner, 2026-11-03: “Stop only on no progress”; pick 4 of doc/planning/cli-git-shipped-limits-audit.md, the
coordinator’s under the owner’s delegation and open to the owner’s veto).
Why:
One window for every step had to be long enough for the slowest, so a stalled rev-parse held a commit for as long
as a stalled pack-objects, and the first notice came after one second for steps that only needed a moment.
The classes follow what a step touches, measured on the repository this crate lives in
(doc/planning/cli-git-commit-timeouts.md):
a query reads refs, commits and trees and ends in milliseconds whatever the worktree holds, while a step that
writes objects, or that compares the index with the worktree, costs time in proportion to the bytes it reads
(reset, update-index --refresh and ls-files --modified took 2.9 s on a stat-dirty 20 000-file index against
0.03 s on a clean one, and a cold disk multiplies that).
The user’s own git commit with its hooks is not a class: its runtime belongs to the user and it is never bounded.
In TS you’d write (pseudocode):
const limit = QUERY_SUBCOMMANDS.includes(subcommandOf(args)) ? QUERY_LIMIT_MS : BULK_LIMIT_MS;Enums§
- Child
Class - What: The kind of a Git step, which decides its quiet window and when its first notice comes. Why: The two kinds differ by orders of magnitude in how long a healthy step takes, and so in how long it may be quiet.
Constants§
- CHILD_
WAIT_ VARIABLE - Environment variable that sets, in whole seconds, how long any Git step the wrapper starts for itself may show no sign of work before it is ended, whatever its class.
- OBJECT_
NOTICE_ GRACE - How long a bulk step runs before the first notice.
- OBJECT_
QUIET_ WINDOW - How long a bulk step may show no sign of work before it is ended.
Citation: none, and unmeasured as a quiet window, for the reason given at
PLUMBING_QUIET_WINDOW. - PLUMBING_
NOTICE_ GRACE - How long a query step runs before the first notice.
- PLUMBING_
QUIET_ WINDOW - How long a query step may show no sign of work before it is ended.
Citation: none, and unmeasured as a quiet window. The figure was the wall-clock bound of a query step, derived from
elapsed times (
doc/planning/cli-git-commit-timeouts.md), which measure a different thing from a quiet gap. No log held a quiet gap beforequiet_ledger.rs; the timing records now carry the longest gap of each step, and the audit records what the existing logs bound (doc/planning/cli-git-shipped-limits-audit.md, “Time limits on Git child steps of a commit”). The number stays until a measured interval replaces it. - PLUMBING_
SUBCOMMANDS - Subcommands that only read refs, commits and trees, or write one ref or one tree from the index as it is:
they end in milliseconds whatever the worktree holds.
Every other subcommand, named or not, is a bulk step and gets the longer window instead of an early stop:
pack-objects,index-pack,add,hash-objectandmaintenancemove bytes, andreset,read-tree,update-index,ls-files,diff,diff-index,showandls-remoterefresh the index, compare it with the worktree or talk to a remote.
Functions§
- class_
of - What:
The class of the Git step a request runs.
Why:
A step is a query only when its subcommand is named in
PLUMBING_SUBCOMMANDS; every other step, a request with no subcommand included, gets the longer bound.