Rotation is decided from the current write callโs length, so a
caller must hand over one whole record per call and keep it under
the buffer capacity - a partial write re-enters the check with only
the remainder.
Default tracing filter. info baseline keeps signal-to-noise
sensible; the targets at debug are the ones we actually stare at
when triaging UI/event drops (input submission, the bridge connect
path). agent.env_git is there for a second reason: a git probe
missing refs/remotes/origin/HEAD is real and is not forgeโs
problem. At debug it stays readable without raising a warning
that says forge is unwell. forge_workspace::output_tail is there for
the same reason: a line in a commandโs output file that cannot be
decoded is the watched commandโs own output rather than a problem with
forge. (forge_server too: its session reads are one sessionโs own
work.)
No target can be empty, so this key collides with no real slot: every
bare level token shares it, because the parser resolves them all to the
filterโs one global directive and the level is not part of that slotโs
identity.
The two directive lists composed into one, a directive both name kept
once - the presetโs copy, whatever level it sets - so a default never
overrides a slot the preset names. The presetโs own order leads; the
defaultsโ directives it did not name follow.
A directiveโs slot in the filter, the part two directives naming the
same slot collide on. A bare level token (info, 4, a case variant)
is the global directive, which every bare level shares. Anything else
keys by its target, cut at the = the parser would use: the first one
outside a brace shape.
The presetโs directives with the default set composed in, so a preset
extends the always-on coverage rather than replacing it: a target that
only the defaults name stays readable under every preset.