Skip to content

backlog: file #1357 -- the connscale FD probe cannot see a multi-process engine - #601

Open
wshallwshall wants to merge 1 commit into
mainfrom
claude/builder-1-probe-cadence
Open

backlog: file #1357 -- the connscale FD probe cannot see a multi-process engine#601
wshallwshall wants to merge 1 commit into
mainfrom
claude/builder-1-probe-cadence

Conversation

@wshallwshall

Copy link
Copy Markdown
Collaborator

Filed and verified by Builder 1: a single connscale probe tick costs 1419-1848ms against
`hold_seconds = 1.5`, so `_RESOLVE_EVERY_TICKS = 8` (probe.py:60) is unreachable by construction --
not a badly-chosen constant, one the measurement window cannot afford at any cadence. The PID set is
resolved once per sweep step and never re-resolved, so a multi-process engine's worker children are
invisible to the FD gauge.

Measured, not argued: the walk's PID set swings 2, 3, 8, 50 across consecutive ticks of one run, with
handles tracking it almost linearly -- `handles_peak` measures how many processes the walk happened
to catch, not the engine's footprint. Surfaces as a controlled A/B: `test_the_fd_and_empty_claim_
curves_are_monotonic_in_n` fails 4 runs in 5 under `[sandbox].mode=subprocess`, 0 in 5 under `off`
(Fisher exact p=0.0476).

Explicitly distinguished from PR 598 (already landed): that fix is about re-resolution producing the
wrong verdict when it runs; this is re-resolution not running at all. 598's own test constructs
`FdSampler(resolve_every=1)` explicitly, so its green does not cover this defect.

Deliberately carries no resource-cost figure -- an earlier ~312-handles-per-child estimate is
withdrawn in the row itself, since the trace shows the denominator isn't stable enough to divide by.
This is why BACKLOG #1278 is held on a costed-resource question with no credible number yet, not on
a test failure.

Number allocated properly (scripts/coord/alloc.ps1) before filing. Docs-only, no code changes, no
tests to run -- verified the ledger gate passes (600 items, each declaring exactly one status).

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

…ess engine

A single probe tick costs longer than the entire measurement window, so the PID
set is resolved once per sweep step and never re-resolved. Measured: one tick
costs 1419-1848 ms against hold_seconds = 1.5. _RESOLVE_EVERY_TICKS = 8 is
therefore unreachable by construction -- not a badly-chosen constant, one the
window cannot afford at any cadence. Its own comment reasons at "the runner's
poll cadence", which this profile does not have.

The consequence is the reason it is worth a row: nothing on this project can
currently measure the resource posture of a multi-process engine. That is what
holds #1278, rather than any test failure.

The item carries the per-tick trace, because the summary number hides the
finding. The walk's PID set varies 2, 3, 8, 50 across CONSECUTIVE TICKS OF ONE
RUN and handles track it almost linearly -- so handles_peak measures what the
walk caught, not what the engine holds.

Four things it is not, each checked rather than assumed: not probe degradation
(zero degraded ticks, and degradation makes that SLO pass vacuously so it cannot
red it); not the #220 PID-set gate (that predicate is on the CPU path, the FD
gauge is a plain max); not PR 598 (grepped against its diff -- and its test
constructs FdSampler(resolve_every=1) explicitly, so the fixed guard PASSES
against this defect, proving re-resolution works when asked while production
never asks); and not a loose SLO (a red needs a collapse below 75 percent).

It also deliberately does NOT carry a resource figure. Forcing per-tick resolve
produced ~3745 handles against a ~385 baseline, which would be ~312 per worker
child. That number is withdrawn and the item says so in terms, because the trace
shows the denominator is not stable enough to divide by. Leaving a withdrawn
figure quotable from a backlog row is how it comes back as a fact.

Number allocated with scripts/coord/alloc.ps1 and the row added in the same
commit. backlog_status_check passes: 600 items, each declaring exactly one
status.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@wshallwshall
wshallwshall enabled auto-merge (squash) August 25, 2026 21:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant