Skip to content

Fix disabled tracer timing still records span end times - #7116

Merged
tim-smart merged 2 commits into
mainfrom
audit/repro-b206fa5d76-tracer-disabled-timing-end
Aug 7, 2026
Merged

Fix disabled tracer timing still records span end times#7116
tim-smart merged 2 commits into
mainfrom
audit/repro-b206fa5d76-tracer-disabled-timing-end

Conversation

@fubhy

@fubhy fubhy commented Aug 7, 2026

Copy link
Copy Markdown
Member

Summary

The probe returned Ended with startTime=0n and endTime=1786089303652000000n.

Important

This PR includes the focused regression test, the implementation fix, and a patch changeset.

Disabled tracer timing still records span end times

Module: packages/effect/src/internal/effect.ts
Audit ID: relsem-tracer-disabled-timing-end
Severity / confidence: low / high

What happens

The probe returned Ended with startTime=0n and endTime=1786089303652000000n.

Why it happens

makeSpanUnsafe consults TracerTimingEnabled for startTime, but useSpan captures only Clock and always uses its current time for endTime. The scoped path correctly captures timingEnabled and calls endSpan.

Expected behavior

When tracer timing is disabled, span timing fields must remain zero for the complete span lifetime, including endTime.

Relevant implementation

These links and excerpts are pinned to audit base b206fa5d7655c1634c9993410a9203f6616a5ca2.

View problematic code at packages/effect/src/internal/effect.ts:5833
/** @internal */

View exact lines on GitHub

Reproduction

pnpm test --run packages/effect/test/Tracer.test.ts -t "should set start and end times to zero when timing is disabled"

Observed failure: Independently rerun; failed at the intended semantic assertion.

Validation

  • Focused disabled-timing regression: passed
  • Full packages/effect/test suite: 7,988 passed, 3 skipped
  • Repository lint and type checks: passed

Audit provenance

  • Audit base: b206fa5d7655c1634c9993410a9203f6616a5ca2
  • Reproduction base: b206fa5d7655c1634c9993410a9203f6616a5ca2
  • Findings: relsem-tracer-disabled-timing-end
  • Implementation: route useSpan completion through the timing-aware endSpan helper

Closes EFF-551

@fubhy fubhy added the audit Findings originating from the Effect runtime correctness audit label Aug 7, 2026
@changeset-bot

changeset-bot Bot commented Aug 7, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: a53f866

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 30 packages
Name Type
effect Patch
@effect/ai-anthropic Patch
@effect/ai-openai Patch
@effect/ai-openai-compat Patch
@effect/ai-openrouter Patch
@effect/atom-react Patch
@effect/atom-solid Patch
@effect/atom-vue Patch
@effect/docgen Patch
@effect/doctest Patch
@effect/openapi-generator Patch
@effect/opentelemetry Patch
@effect/platform-browser Patch
@effect/platform-bun Patch
@effect/platform-deno Patch
@effect/platform-node Patch
@effect/platform-node-shared Patch
@effect/sql-clickhouse Patch
@effect/sql-d1 Patch
@effect/sql-libsql Patch
@effect/sql-mssql Patch
@effect/sql-mysql2 Patch
@effect/sql-pg Patch
@effect/sql-pglite Patch
@effect/sql-sqlite-bun Patch
@effect/sql-sqlite-do Patch
@effect/sql-sqlite-node Patch
@effect/sql-sqlite-react-native Patch
@effect/sql-sqlite-wasm Patch
@effect/vitest Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@effect-slopcop effect-slopcop Bot added 4.0 bug Something isn't working labels Aug 7, 2026

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ No critical issues — minor suggestion inline.

Reviewed changes

Reviewed the single added regression test in packages/effect/test/Tracer.test.ts that pins the disabled tracer timing behavior for Effect.useSpan and Effect.withSpan.

The test correctly reproduces the bug: makeSpanUnsafe already consults TracerTimingEnabled for startTime, but useSpan ends spans with clock.currentTimeNanosUnsafe() unconditionally, so endTime is non-zero when timing is disabled. Running the focused reproduction command confirms the intended failure (endTime: 1000000n vs. expected 0n). The implementation fix in packages/effect/src/internal/effect.ts is still pending on this branch, which matches the PR description's stated intent.

Pullfrog  | ⚠️ this action is pinned to a commit SHA, which freezes the cleanup step — switch to @v0 or keep the SHA fresh with Dependabot | Fix all ➔Fix 👍s ➔View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

Comment thread packages/effect/test/Tracer.test.ts Outdated

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes

Reviewed the incremental delta since the prior Pullfrog review: the implementation fix in packages/effect/src/internal/effect.ts, the added patch changeset, and the test cleanup in packages/effect/test/Tracer.test.ts.

  • Added a patch changeset documenting the disabled-timing fix.
  • Routed useSpan span completion through the existing timing-aware endSpan helper, so endTime stays at 0n when TracerTimingEnabled is false. This aligns useSpan with makeSpanScoped.
  • Updated the regression test to use Effect.withTracerTiming(false) consistently with sibling tests and removed the now-unnecessary References import.

The focused regression test and the full Tracer.test.ts suite both pass.

Pullfrog  | ⚠️ this action is pinned to a commit SHA, which freezes the cleanup step — switch to @v0 or keep the SHA fresh with Dependabot | View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Bundle Size Analysis

Generated from PR build output; treat the content below as untrusted.

File Name Current Size Previous Size Difference
basic.ts 6.92 KB 6.92 KB 0.00 KB (0.00%)
batching.ts 9.72 KB 9.72 KB 0.00 KB (0.00%)
brand.ts 6.60 KB 6.60 KB 0.00 KB (0.00%)
cache.ts 10.59 KB 10.59 KB 0.00 KB (0.00%)
config.ts 20.83 KB 20.83 KB 0.00 KB (0.00%)
differ.ts 19.67 KB 19.67 KB 0.00 KB (0.00%)
http-client.ts 21.52 KB 21.50 KB +0.02 KB (+0.09%)
logger.ts 10.81 KB 10.81 KB 0.00 KB (0.00%)
metric.ts 8.86 KB 8.86 KB 0.00 KB (0.00%)
optic.ts 6.68 KB 6.68 KB 0.00 KB (0.00%)
pubsub.ts 14.86 KB 14.86 KB 0.00 KB (0.00%)
queue.ts 11.54 KB 11.54 KB 0.00 KB (0.00%)
schedule.ts 10.71 KB 10.71 KB 0.00 KB (0.00%)
schema-class.ts 19.38 KB 19.38 KB 0.00 KB (0.00%)
schema-fromJsonSchemaDocument.ts 29.24 KB 29.24 KB 0.00 KB (0.00%)
schema-representation-roundtrip.ts 25.51 KB 25.51 KB 0.00 KB (0.00%)
schema-string-transformation.ts 13.49 KB 13.49 KB 0.00 KB (0.00%)
schema-string.ts 11.03 KB 11.03 KB 0.00 KB (0.00%)
schema-template-literal.ts 15.30 KB 15.30 KB 0.00 KB (0.00%)
schema-toArbitraryLazy.ts 21.43 KB 21.43 KB 0.00 KB (0.00%)
schema-toCodeDocument.ts 23.87 KB 23.87 KB 0.00 KB (0.00%)
schema-toCodecJson.ts 18.64 KB 18.64 KB 0.00 KB (0.00%)
schema-toEquivalence.ts 18.47 KB 18.47 KB 0.00 KB (0.00%)
schema-toFormatter.ts 18.32 KB 18.32 KB 0.00 KB (0.00%)
schema-toJsonSchemaDocument.ts 22.09 KB 22.09 KB 0.00 KB (0.00%)
schema-toRepresentation.ts 19.01 KB 19.01 KB 0.00 KB (0.00%)
schema.ts 18.62 KB 18.62 KB 0.00 KB (0.00%)
stm.ts 12.59 KB 12.59 KB 0.00 KB (0.00%)
stream.ts 9.67 KB 9.67 KB 0.00 KB (0.00%)

@tim-smart
tim-smart merged commit aea89d0 into main Aug 7, 2026
20 checks passed
@tim-smart
tim-smart deleted the audit/repro-b206fa5d76-tracer-disabled-timing-end branch August 7, 2026 21:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

4.0 audit Findings originating from the Effect runtime correctness audit bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants