fix(telemetry): give the turn histograms a range a turn fits in #1080
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/sirens-echo!1080
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/turn-duration-buckets"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Refs #976. Answers the "metric reporting gaps" blocker in the QA verdict, and
corrects its diagnosis.
The metrics were never broken
The QA comment reports
sirens_echo.turn.durationandsirens_echo.turnsreturning nothing over 7 days, blames the cumulative-temporality family, and
concludes the issue's acceptance is unmeasurable pending an exporter or
collector fix. All three are wrong.
newMetricExporterhas setDeltaTemporalitySelectorsince the initial publicrelease, and every counter is created on the same meter, so
sirens_echo.turnsand
sirens_echo.tool.callscannot differ on the wire. The SigNoz catalogmetadata is simply stale for five names. Same metric, same 24h window:
The data was landing the whole time. Nothing in the pipeline needs fixing, and
no deploy or collector change is owed. Anyone reading these should pass
temporality: deltaexplicitly until the catalog rows are corrected.What is actually broken
With the metric readable, the acceptance evidence comes back useless:
The OpenTelemetry SDK's default explicit boundaries top out at 10,000 ms. Turn
p50 is ~17s and p95 ~181s (measured in #1076), so every turn lands in the
overflow bucket and any percentile reports the 10,000 boundary rather than a
duration, identically on both sides of any comparison.
This is why it survived: a histogram whose range is wrong fails as a plausible
number, not an empty one.
The same defect hit the other finding in that comment.
coalesce.batch.sizeused the same defaults, whose first bucket is
[0, 5), so a batch of 1 wasindistinguishable from a batch of 4. The
.maxgauge is the only reason theone batch of 2 was visible at all.
The change
sirens_echo.turn.durationandsirens_echo.coalesce.turn.durationtakeboundaries running to 300,000 ms, the request ceiling, so a turn that ran the
clock out is distinguishable from one that nearly did.
sirens_echo.coalesce.batch.sizetakes small-integer boundaries so batchdistribution is directly readable rather than inferred from a max gauge.
Every other histogram keeps the defaults, its recorded range being one they
fit. Boundaries are a view on the meter provider rather than a knob: a
deployment that changed them would make its own history unreadable against
everyone else's.
Caveat on the evidence
Boundaries change what the histogram can express, not what was recorded.
Pre-rollout turn latency is not recoverable and the before half of #976's
acceptance cannot be produced from the histogram retrospectively. Trace
durations on
community.turnare the fallback for the before window, which iswhat #1076 used. After this rolls, the histogram measures turns properly.
The tests fail against the defaults, reporting the boundary set
[0 5 10 25 50 75 100 250 500 750 1000 2500 5000 7500 10000], so they are aregression guard rather than a restatement.
go build,go vet,go test ./..., andpre-commit run --all-filesare green.