Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
437 commits
Select commit Hold shift + click to select a range
2754cd8
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 14, 2026
1d81769
fix(telemetry): bake legend brackets into cloud + Alloy collector labels
pratikmankawde Jul 14, 2026
f18b03b
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 14, 2026
b4af979
docs(telemetry): refresh legend-group comment for bracketed label values
pratikmankawde Jul 14, 2026
5e37c5f
fix(telemetry): revert collector group-label build (cloud + Alloy con…
pratikmankawde Jul 15, 2026
e08b290
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 15, 2026
49e4425
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 15, 2026
216a9c6
added annotations section to dashboards
pratikmankawde Jul 15, 2026
48c9743
dashboards updated with proper legends
pratikmankawde Jul 15, 2026
0d704f7
fix(telemetry): comma-format legend identity + plain-text dashboard d…
pratikmankawde Jul 16, 2026
36e3025
fix(telemetry): re-layout Node Health into subsystem rows
pratikmankawde Jul 16, 2026
02ead70
feat(telemetry): Node Health Server Info panels + ledger-seq descript…
pratikmankawde Jul 16, 2026
f569440
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 20, 2026
d01570c
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 20, 2026
838407b
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 20, 2026
03e3071
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 20, 2026
8939ccf
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 20, 2026
9995759
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 20, 2026
c715f56
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 20, 2026
2cab93a
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 20, 2026
956dbaa
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 20, 2026
c0c97da
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 21, 2026
0b771c2
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 21, 2026
ce3d806
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 21, 2026
1f98f2c
test(telemetry): add rpc_in_flight_requests to phase10 expected_metri…
pratikmankawde Jul 21, 2026
f52673b
feat(telemetry): correct ledger-close-time derivation on dashboards
pratikmankawde Jul 22, 2026
9464912
fix(telemetry): correct Ledger Close Duration on consensus-health das…
pratikmankawde Jul 22, 2026
0e02a67
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 22, 2026
62371de
docs(telemetry): add panel Keywords + References and a telemetry glos…
pratikmankawde Jul 22, 2026
13a48cb
refresh interval set to 30s
pratikmankawde Jul 22, 2026
03d04ea
docs(telemetry): tag each keyword with per-node vs network-wide scope
pratikmankawde Jul 22, 2026
8dd64d4
fix(telemetry): add second-scale spanmetrics histogram buckets
pratikmankawde Jul 22, 2026
7ef1f22
docs(telemetry): add Computation boundary to each panel description
pratikmankawde Jul 22, 2026
4535daa
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 22, 2026
3ad291e
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 22, 2026
056c863
delete throwaway scripts
pratikmankawde Jul 22, 2026
1fc65db
docs(telemetry): rename Ripple->XRPL / rippled->xrpld in telemetry docs
pratikmankawde Jul 22, 2026
4263aad
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 22, 2026
903a89d
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 22, 2026
addd7f8
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 22, 2026
48a5aad
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 22, 2026
f547c80
fix(telemetry): mirror second-scale histogram buckets into Alloy config
pratikmankawde Jul 23, 2026
11e5454
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 23, 2026
5eed34d
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 23, 2026
f0df68a
docs(telemetry): add protocol span-flow diagrams to runbook
pratikmankawde Jul 23, 2026
1f441c8
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
da3e947
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
9807734
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
694062d
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
c1dcb9b
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
cab0bc4
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
5bc4968
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
6cd2d3f
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
3eae98f
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
ffeb82a
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
bbc318f
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
69c3bb5
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 24, 2026
9956b9b
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 25, 2026
a30494f
docs(telemetry): align new panels with the dashboard conventions
pratikmankawde Jul 25, 2026
556d620
fix(telemetry): make job-queue legends resolve every label they name
pratikmankawde Jul 25, 2026
b41caee
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 27, 2026
05d01de
fix(test): restore the helpers DatabaseConfig_test lost in the GTest …
pratikmankawde Jul 27, 2026
e3c2f82
fix(test): use SuiteJournal and drop an unused local
pratikmankawde Jul 27, 2026
972c279
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
a42e2f3
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
a987752
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
a8b6b02
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
d18f713
docs(telemetry): point the runbook at the renamed found-ratio panel
pratikmankawde Jul 28, 2026
356e0af
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
df55255
fix(ci): build telemetry validation in the same image as the main CI
pratikmankawde Jul 28, 2026
2d4cdad
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
33299dc
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
fdfd44d
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
6182b15
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
6e0c1a3
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 28, 2026
817c773
fix(telemetry): make a failed validation run explain itself
pratikmankawde Jul 28, 2026
4a86635
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 29, 2026
d802e5d
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 30, 2026
1120964
fix(telemetry): resolve sub-ms span buckets and unmatchable consensus…
pratikmankawde Jul 30, 2026
923a1a9
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 30, 2026
5a05386
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Jul 30, 2026
80bc5d7
docs(telemetry): finish the Node Health panel descriptions
pratikmankawde Jul 30, 2026
7d3e836
docs(telemetry): finish the panel descriptions across all dashboards
pratikmankawde Jul 31, 2026
d68ffbe
alerts updatedpha
pratikmankawde Aug 4, 2026
a19078c
added log derived insights
pratikmankawde Aug 4, 2026
1e6faa3
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 4, 2026
3149d0b
docs(telemetry): update runbook for 15 dashboards and LogQL metadata …
pratikmankawde Aug 4, 2026
0102177
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 4, 2026
d662d96
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 4, 2026
3ee76bc
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 4, 2026
aec8ce4
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 4, 2026
a52f952
docs(telemetry): section 5c is no longer future work on this branch
pratikmankawde Aug 4, 2026
fd47833
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 5, 2026
1df24ae
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 5, 2026
fbae18c
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 5, 2026
803d209
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 5, 2026
156acec
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 6, 2026
4acecb3
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 6, 2026
5698cee
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 6, 2026
ab08143
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 7, 2026
672a56c
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 7, 2026
bd07a68
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 7, 2026
91e6619
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 7, 2026
7caff8b
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 7, 2026
c3064cb
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 7, 2026
9e32260
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 7, 2026
57d1268
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 11, 2026
0825ac8
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 13, 2026
22e440a
fix(telemetry): correct the phase-10 validation harness against the code
pratikmankawde Aug 14, 2026
1dea579
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 14, 2026
1110800
chore: stop tracking the phase-10 validation scratch notes
pratikmankawde Aug 14, 2026
02819e9
Merge remote-tracking branch 'origin/pratik/otel-phase9-metric-gap-fi…
pratikmankawde Aug 14, 2026
d3ff791
fix(telemetry): assert histogram metrics by their exported names
pratikmankawde Aug 14, 2026
d059f21
fix(telemetry): address review findings in the workload validation ha…
pratikmankawde Aug 14, 2026
2770dbb
docs(telemetry): drop the legacy daemon name from the workload README
pratikmankawde Aug 14, 2026
aea0422
fix(telemetry): count only rendered panels, and drop no-reply latencies
pratikmankawde Aug 14, 2026
bf5c3e3
ci(telemetry): make a cluster bring-up failure diagnosable
pratikmankawde Aug 14, 2026
f8290d8
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 14, 2026
040a75d
ci(telemetry): report why a node stopped instead of waiting on a corpse
pratikmankawde Aug 15, 2026
b7167e5
fix(telemetry): emit valid JSON for sub-1 TPS, and stop double-report…
pratikmankawde Aug 15, 2026
5206261
docs(telemetry): record why the workload stack runs anonymous Grafana…
pratikmankawde Aug 15, 2026
6ec4825
ci(telemetry): state -Dtelemetry=ON instead of relying on the default
pratikmankawde Aug 15, 2026
813b7fc
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 15, 2026
1f54dcd
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 17, 2026
1f8907b
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 17, 2026
9e9e991
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 17, 2026
7fc93d3
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 17, 2026
f6d9a4f
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 17, 2026
8270d07
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 19, 2026
3035d9f
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 19, 2026
09fdcd2
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
67e676f
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
55d85bb
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
3764f9b
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
8a011c6
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
9706b35
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
2fea0d4
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
4dc413d
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
4b017db
fix(telemetry): make the log-trace correlation checks meaningful
pratikmankawde Aug 20, 2026
91a85eb
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
0edabc2
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 20, 2026
de64a7a
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 21, 2026
bda6c13
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 21, 2026
1282645
test(telemetry): invalidate job-queue baselines captured on the old l…
pratikmankawde Aug 21, 2026
d1b80e4
test(telemetry): void span baselines captured on the old span ladder
pratikmankawde Aug 24, 2026
14badbf
docs(telemetry): record rpc_size_bytes and the other unasserted histo…
pratikmankawde Aug 24, 2026
2afae66
test(telemetry): assert xrpl_node_id reaches the metric series
pratikmankawde Aug 24, 2026
2ae47c6
fix(telemetry): assert ios_latency and correct the rpc_size rename at…
pratikmankawde Aug 24, 2026
2097293
fix(telemetry): run the workload at info so log-trace correlation is …
pratikmankawde Aug 24, 2026
ff8629b
fix(telemetry): drop the inert insight prefix and its false comment
pratikmankawde Aug 24, 2026
ea4282f
docs(telemetry): correct the stale metric-gate counts in the runbook
pratikmankawde Aug 24, 2026
ee1f2ce
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 24, 2026
98ba282
fix(telemetry): make the integration test correlate by construction, …
pratikmankawde Aug 24, 2026
4c33ffb
docs(telemetry): retire the rpc_size instrument-mismatch warning
pratikmankawde Aug 24, 2026
bca2b35
docs(telemetry): stop showing inert [insight] prefix on the OTel path
pratikmankawde Aug 24, 2026
9c89419
docs(telemetry): correct two miscounted facts in dashboard and metric…
pratikmankawde Aug 24, 2026
6a82fc6
docs(telemetry): qualify the log-correlation guarantee and record the…
pratikmankawde Aug 24, 2026
c4b8df9
test(telemetry): recapture span baselines on the current ladder
pratikmankawde Aug 24, 2026
e4926f5
fix(telemetry): derive workload gate bounds from the bucket above the…
pratikmankawde Aug 24, 2026
8547adb
test(telemetry): close the 20-metric harness coverage gap
pratikmankawde Aug 25, 2026
638ab2f
test(telemetry): log every emitted metric family, not 19 prefixes
pratikmankawde Aug 25, 2026
dc7f968
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 25, 2026
7d35eb8
docs(telemetry): correct the harness contract's pathfinding and gauge…
pratikmankawde Aug 25, 2026
c863b83
feat(telemetry): warn on telemetry the harness contract does not acco…
pratikmankawde Aug 25, 2026
9eaa94c
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 25, 2026
59a0595
fix(telemetry): stop the workload harness issuing refused path-findin…
pratikmankawde Aug 25, 2026
c65cb0e
feat(telemetry): gate log-trace correlation in CI with per-leg diagno…
pratikmankawde Aug 25, 2026
3836078
fix(telemetry): stop gating ledger.validate p95 and p99, which vary t…
pratikmankawde Aug 25, 2026
8418d47
fix(telemetry): read span names from the Tempo name intrinsic
pratikmankawde Aug 26, 2026
6cb02a1
fix(telemetry): make the Loki diagnostic count real, and Tempo errors…
pratikmankawde Aug 26, 2026
a734da8
test(telemetry): recapture the baseline and stop gating what variance…
pratikmankawde Aug 26, 2026
29673de
fix(telemetry): correlate WebSocket replies, and stop silent placehol…
pratikmankawde Aug 26, 2026
f13524c
fix(telemetry): map every harness failure to exit 2, and always captu…
pratikmankawde Aug 26, 2026
c531ac5
fix(telemetry): trigger the workload by what changed, and assert the …
pratikmankawde Aug 26, 2026
e5d7b2a
fix(telemetry): skip the txq accept-pass hierarchy, which sampling ca…
pratikmankawde Aug 26, 2026
a215ab7
fix(telemetry): assert the rpc.command hierarchies, whose skips descr…
pratikmankawde Aug 26, 2026
6d17df0
test(telemetry): account for every declared span parenting
pratikmankawde Aug 26, 2026
8521b96
fix(telemetry): stop an incomplete capture becoming the committed bas…
pratikmankawde Aug 27, 2026
a87d772
fix(telemetry): find a span hierarchy where it happened, not only whe…
pratikmankawde Aug 27, 2026
5638cd9
fix(telemetry): write the wildcard span predicate without a backslash…
pratikmankawde Aug 27, 2026
b8cb36f
fix(telemetry): refuse an empty capture, and name a bad baseline entry
pratikmankawde Aug 27, 2026
a14d9ac
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
ed92501
style(telemetry): cut the comments I over-wrote back to the guideline
pratikmankawde Aug 27, 2026
83b003d
ci(telemetry): warn when a span constant no longer has a reference (r…
pratikmankawde Aug 27, 2026
c771f25
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
53cc08a
fix(telemetry): assert real ancestry in the span hierarchy check
pratikmankawde Aug 27, 2026
0bda9e8
test(telemetry): cover the capture completeness guard and run the har…
pratikmankawde Aug 27, 2026
01c3008
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
4d2a3aa
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
a3d4aba
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
1ce5d37
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
da065e8
clang-tidy fix
pratikmankawde Aug 27, 2026
be1b7fb
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
e32a2bd
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
35ed03a
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
e219026
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Aug 27, 2026
22362bc
docs(telemetry): drop pre-squash comparisons from the workload harnes…
pratikmankawde Sep 2, 2026
fa9f75d
docs(telemetry): explain the absent path-finding load without the cha…
pratikmankawde Sep 2, 2026
3a63a17
docs(telemetry): stop the harness contract narrating its own revisions
pratikmankawde Sep 2, 2026
3e930d9
merge: bring the traces_endpoint rename forward from phase-9
pratikmankawde Sep 3, 2026
f52e654
merge: bring the metrics_endpoint key forward from phase-9
pratikmankawde Sep 3, 2026
038d144
merge: bring the span-attribute fixes forward from phase9-metric-gap-…
pratikmankawde Sep 3, 2026
79d2be2
merge: bring develop forward from phase9-metric-gap-fill
pratikmankawde Sep 3, 2026
4615d88
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 3, 2026
8900060
merge: bring telemetry config and doc fixes forward from phase9-metri…
pratikmankawde Sep 3, 2026
f80faea
fix(telemetry): match the renamed close-time attrs in expected_spans.…
pratikmankawde Sep 4, 2026
8c124ab
merge: bring the close-time attr doc fixes forward from phase9-metric…
pratikmankawde Sep 4, 2026
5a56784
merge: bring the review fixes forward from otel-phase9-metric-gap-fill
pratikmankawde Sep 7, 2026
d73e6f4
merge: bring the review fixes forward from otel-phase9-metric-gap-fill
pratikmankawde Sep 8, 2026
738b590
merge: bring the CI fixes forward from phase9-metric-gap-fill
pratikmankawde Sep 8, 2026
d9427c2
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 9, 2026
d2cefa0
fix(telemetry): make the load generators fail loudly instead of exiti…
pratikmankawde Sep 9, 2026
c8d9d88
fix(telemetry): measure telemetry overhead under load, on this cluste…
pratikmankawde Sep 9, 2026
7f829a5
fix(telemetry): fail the regression gate on a unit change, and report…
pratikmankawde Sep 9, 2026
ec308c6
fix(telemetry): poll the parity queries instead of racing one instant…
pratikmankawde Sep 9, 2026
478b3e4
docs(telemetry): correct stale claims and citations in the harness docs
pratikmankawde Sep 9, 2026
ac07e13
fix(telemetry): name the harness log directories after their instance…
pratikmankawde Sep 9, 2026
2ee24d4
merge: bring the lock-free ValidationTracker forward from phase9-metr…
pratikmankawde Sep 9, 2026
a75d277
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 9, 2026
a0385c5
fix(telemetry): confirm account funding from the ledger, not a fixed …
pratikmankawde Sep 10, 2026
00c0265
test(telemetry): refresh the timing baseline from three clean runs
pratikmankawde Sep 10, 2026
6601697
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 14, 2026
fa9e021
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 14, 2026
8e50c6f
merge: bring phase-9 forward
pratikmankawde Sep 14, 2026
379bd5a
merge: bring the stop() recording gate and identity tests forward fro…
pratikmankawde Sep 14, 2026
fe7d973
merge: bring the noopMeter() clang-tidy fixes forward from phase9-met…
pratikmankawde Sep 14, 2026
904d4da
merge: bring the SecretKey test-compare fix forward from phase9-metri…
pratikmankawde Sep 15, 2026
d87ca87
merge: bring the clang-tidy include-cleaner fixes forward from phase9…
pratikmankawde Sep 15, 2026
a305b10
merge: bring the optional-access NOLINT fix forward from phase9-metri…
pratikmankawde Sep 15, 2026
50eff17
docs(telemetry): drop the host name from the sampling-clock comment
pratikmankawde Sep 15, 2026
8efc8e9
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 15, 2026
5277ef4
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 15, 2026
5f03e41
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 16, 2026
3b674d8
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 17, 2026
ffc4ee4
fix(telemetry): correct node directory naming and stale gates in the …
pratikmankawde Sep 17, 2026
3c05bdf
ci: call the telemetry validation from on-pr.yml
pratikmankawde Sep 17, 2026
85fc1c5
fix(telemetry): keep the workload cluster on [ips], not [ips_fixed]
pratikmankawde Sep 17, 2026
e0520b7
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 17, 2026
04786c4
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 17, 2026
d5c2964
test(telemetry): drop the suppressed requirement from tx.receive
pratikmankawde Sep 17, 2026
43d1fba
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 18, 2026
b541092
test(telemetry): drop suppressed from the mirrored dimension list
pratikmankawde Sep 18, 2026
4ca5a21
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 18, 2026
60f348e
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 18, 2026
536c5a0
docs(telemetry): correct the tx.receive note for where the span now s…
pratikmankawde Sep 18, 2026
2844277
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 18, 2026
f07beac
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 18, 2026
a397769
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 18, 2026
1ec6272
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 18, 2026
ebf8918
Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-ph…
pratikmankawde Sep 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/scripts/otel-naming/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,10 @@ still caught.

### Warnings (printed, never fail the build)

| Rule | Check |
| ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| H | A namespace-qualified constant (e.g. `foo::bar::myKey`) used at a telemetry call-site is not defined in any `*SpanNames.h`. The constant should live in the proper header; defining it in-place bypasses rules A/G/F. Warns rather than fails — the argument may be a legitimately dynamic value, and the header may live on a later branch. Bare locals and `std::` names are not warned. |
| Rule | Check |
| ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| H | A namespace-qualified constant (e.g. `foo::bar::myKey`) used at a telemetry call-site is not defined in any `*SpanNames.h`. The constant should live in the proper header; defining it in-place bypasses rules A/G/F. Warns rather than fails — the argument may be a legitimately dynamic value, and the header may live on a later branch. Bare locals and `std::` names are not warned. |
| M | A constant defined in a `*SpanNames.h` that no code in `src/**` or `include/**` references — the reverse of every failing rule above, which all start from a consumer and look for its L1 source. Deleting the last `setAttribute(attr::foo, …)` while leaving `attr::foo` in the header otherwise passes every rule and the compiler, and the telemetry silently stops being emitted. Whole files are searched rather than telemetry call sites only, since a constant is also passed to helpers and used as an attribute _value_. Constants only test code references are reported separately. Warns rather than fails: in a stacked chain a constant may legitimately land a commit before its call site. |

## Presence-gated

Expand Down
176 changes: 175 additions & 1 deletion .github/scripts/otel-naming/check_otel_naming.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@
exemption). Warnings, not failures, because presence-gating must keep
working on partial branches -- but the skip is now visible instead of
silent.
M A constant DEFINED in a *SpanNames.h that no code references — the reverse
of every rule above, which all start from a consumer. Constants referenced
only by test code are reported separately. A warning because a constant may
legitimately land a commit before its call site in a stacked chain.

Exit code is non-zero if any present-and-enforced rule finds a violation.
Warnings never change the exit code.
Expand All @@ -109,7 +113,7 @@
import subprocess
import sys
from pathlib import Path
from typing import Dict, List, Optional, Set, Tuple
from typing import Dict, List, NamedTuple, Optional, Set, Tuple

# ---------------------------------------------------------------------------
# Repo location
Expand Down Expand Up @@ -488,6 +492,9 @@ def main() -> None:
header_symbols = spanname_symbol_names(headers)
run_rule_f(root, report, header_symbols)

# --- Rule M (warning): L1 constants nothing references ------------------
run_rule_m_unreferenced(root, headers, report)

# --- Cross-layer rules B/C/D/E (each presence-gated) -------------------
# L6 native-metric labels: span attributes are not the only valid dashboard
# labels — the MetricsRegistry emits OTel metrics whose label keys are an
Expand Down Expand Up @@ -748,6 +755,173 @@ def iter_calls(text: str):
yield name, arglist, lineno


# ---------------------------------------------------------------------------
# Rule M: L1 constants nothing references (the reverse direction)
# ---------------------------------------------------------------------------

# A scope event: `namespace <name> {`, a bare `{`, or a `}`. Reuses NS_OPEN's
# pattern, keeping its capture as group 1.
NS_EVENT = re.compile(NS_OPEN.pattern + r"|\{|\}")
IDENTIFIER_TOKEN = re.compile(r"[A-Za-z_]\w*")
# A qualified name such as `ledger_span::attr::ledgerHash`, possibly wrapped
# across lines. Bare names are useless here: `JSS(aborted)` in jss.h would
# vouch for `val::aborted`.
QUALIFIED_CHAIN = re.compile(r"[A-Za-z_]\w*(?:\s*::\s*[A-Za-z_]\w*)+")
# Wider than the .h/.cpp the other rules parse: a file missed here would make a
# live constant look dead.
REFERENCE_EXTENSIONS = ("*.h", "*.cpp", "*.ipp", "*.hpp")
RULE_M_DEAD = "no reference in src/ or include/"
RULE_M_TEST_ONLY = "referenced only by test code"


def iter_sources(
root: Path, extensions: Tuple[str, ...] = ("*.h", "*.cpp")
) -> List[Path]:
"""Every C++ source/header under src/ and include/. Rule M passes a wider
`extensions` set; see REFERENCE_EXTENSIONS."""
return [
p
for base in ("src", "include")
for ext in extensions
for p in (root / base).rglob(ext)
if p.is_file()
]


def constant_definitions(text: str) -> List[Tuple[str, str]]:
"""Every `inline constexpr auto NAME = ...;`, as `(name, qualified)` where
`qualified` is `<innermost namespace>::NAME` — the form to grep for.

String literals are blanked to same-length spacing before the brace scan, so
a `{` inside a literal is not read as a scope and offsets stay valid."""
masked = STRING_LITERAL.sub(lambda m: " " * len(m.group(0)), text)
events: List[Tuple[int, bool, Optional[str]]] = []
for m in NS_EVENT.finditer(masked):
if m.group(1) is not None:
# `namespace a::b {` opens one brace; the innermost name is the
# qualifier a call site writes.
events.append((m.start(), True, m.group(1).split("::")[-1]))
elif m.group(0) == "{":
events.append((m.start(), True, None))
else:
events.append((m.start(), False, None))
out: List[Tuple[str, str]] = []
stack: List[Optional[str]] = []
event_idx = 0
for m in CONST_DEF.finditer(text):
while event_idx < len(events) and events[event_idx][0] < m.start():
_, is_open, ns = events[event_idx]
if is_open:
stack.append(ns)
elif stack:
stack.pop()
event_idx += 1
inner = next((ns for ns in reversed(stack) if ns), None)
name = m.group(1)
out.append((name, f"{inner}::{name}" if inner else name))
return out


class References(NamedTuple):
"""Reference forms found in one body of code: `<outer>::<inner>` pairs, plus
bare identifiers (needed only for a constant outside any namespace)."""

pairs: Set[str]
bare: Set[str]


def qualified_references(text: str) -> Set[str]:
"""Every adjacent `<outer>::<inner>` pair, so a constant is found however
deeply its call site qualifies it.

Whole chains are split rather than matched two segments at a time: a
non-overlapping regex over `a::b::c` eats `a::b` and never sees `b::c`."""
pairs: Set[str] = set()
for chain in QUALIFIED_CHAIN.finditer(text):
segments = [s.strip() for s in chain.group(0).split("::")]
for outer, inner in zip(segments, segments[1:]):
pairs.add(f"{outer}::{inner}")
return pairs


def referenced_constants(root: Path) -> Tuple[References, References]:
"""References made by production code and by test code, across `src/**` and
`include/**`.

Comments are stripped: a constant a doc comment only mentions is still dead.
In a `*SpanNames.h`, `using` re-exports are dropped too — an unused alias
must not vouch for the constant it renames."""
prod = References(set(), set())
tests = References(set(), set())
for path in iter_sources(root, REFERENCE_EXTENSIONS):
text = strip_comments(read_source(path))
if path.name.endswith("SpanNames.h"):
text = USING_DECL.sub("", text)
target = tests if is_test_path(path) else prod
target.pairs.update(qualified_references(text))
target.bare.update(IDENTIFIER_TOKEN.findall(text))
return prod, tests


def sibling_bare_tokens(text: str) -> Set[str]:
"""Bare identifiers on the right-hand side of one header's definitions, so a
sibling composed unqualified (`join(prefix, op::x)`) counts as used.

String literals are removed first, so `makeStr("header")` cannot vouch for a
constant named `header`."""
tokens: Set[str] = set()
for m in CONST_DEF.finditer(text):
tokens.update(IDENTIFIER_TOKEN.findall(STRING_LITERAL.sub("", m.group(2))))
return tokens


def constant_is_referenced(name: str, qualified: str, refs: References) -> bool:
"""True if `refs` names the constant by its qualified form, or by its bare
name when it sits outside any namespace and so has no qualified form."""
if qualified in refs.pairs:
return True
return qualified == name and name in refs.bare
Comment thread
pratikmankawde marked this conversation as resolved.


def run_rule_m_unreferenced(root: Path, headers: List[Path], report: Report) -> None:
"""Rule M (WARN): a `*SpanNames.h` constant that no code references.

The reverse of the other rules, which start from a consumer and look for its
L1 source. Warns rather than fails: in a stacked chain a constant can
legitimately land a commit before its call site. A constant only test code
names is reported separately, since the fix differs.

Whole files are searched, not just telemetry call sites, because a constant
is also passed to helpers and used as an attribute VALUE. Matching is by
`<innermost namespace>::<name>`, so two headers declaring the same qualified
form share one key — under-reporting, the safe direction.

Presence-gated on `*SpanNames.h` existing."""
if not headers:
report.skip("M", "no *SpanNames.h present")
return
prod, tests = referenced_constants(root)
total = dead = test_only = 0
for h in sorted(headers):
rel = str(h.relative_to(root))
text = strip_comments(read_source(h))
siblings = sibling_bare_tokens(text)
for name, qualified in constant_definitions(text):
total += 1
if constant_is_referenced(name, qualified, prod) or name in siblings:
continue
if constant_is_referenced(name, qualified, tests):
test_only += 1
report.warning("M", rel, qualified, RULE_M_TEST_ONLY)
else:
dead += 1
report.warning("M", rel, qualified, RULE_M_DEAD)
note = f"M: {total} *SpanNames.h constant(s) checked for references"
if dead or test_only:
note += f" ({dead} unreferenced, {test_only} test-only — see warnings)"
report.ok(note)


def run_rule_b_collector(root: Path, l1_keys: Set[str], report: Report) -> None:
path = root / "docker" / "telemetry" / "otel-collector-config.yaml"
if not path.is_file():
Expand Down
Loading
Loading