Skip to content

Add optional embedded tracing components - #788

Merged
rmcdaniel merged 98 commits into
mainfrom
feature/durable-trace-carrier
Oct 20, 2026
Merged

rmcdaniel merged 98 commits into
mainfrom
feature/durable-trace-carrier

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

Optional embedded tracing adds bounded W3C context at admission, queue dispatch, processing, activity attempts and recovery, plus Laravel log correlation. Applications own OpenTelemetry providers, sampling, exporters and shutdown. Tracing is disabled by default. Stable API 1.10.1 remains optional; older installed APIs are excluded because of the baggage regression.

The current head is ffe793c46fad8febf90766f5f5f30217e4627a6e, integrating actual main 2edaa6b / Core 2.8.0. Its complete tree 51255c7651841fa503b79d27e8d314993c0bc6be is identical to 19525e33, the source of whole-source run 39499146953. The prospective tracing version is 2.9.0, following the agreed independent 2.8 release. No tracing tag is published.

Current local style and full static analysis pass. Six actual queue/cache tracing controls pass 189 assertions. The broad tracing family completes 238 cases and 11,779 assertions without failures, with one explicit optional HTTP-instrumentation skip covered by its separate required CI consumer. The corrected 69 PostgreSQL dispatch cases passed on the preceding combined source. The earlier cancellation failure remains failed: a controlled unchanged 20-second deadline reproduces its empty-memo symptom after expiry, but the original terminal reason was not retained. That explanation remains an inference. The new assertion records bounded terminal diagnostics. No deadline was widened.

Current Sonar passes, with independent API readback showing zero OPEN/CONFIRMED findings after the three source-specific maintainability corrections. Full-source run 39499146953 is now complete SUCCESS, including all database shards, Laravel source journeys, actual HTTP instrumentation, quality, canonical coverage and the final aggregate. Normal PR checks also pass. The full-source result applies to the identical complete tree proven above. Detailed new coverage percentages were not retrieved because artifact transfer timed out; no percentage is inferred.

Qualification retained from earlier source:

  • 31ab1fcf normal 39462234355 and full-source 39462226227 pass. Canonical v2 coverage is 93.52% against unchanged 93.08%. Its separate Codecov report fails at 92.53% patch / 93.74% project against 93.76%. Added readback controls need fresh coverage; no threshold or exclusion changed.
  • 31ab1fcf Sonar passes; finding-specific review records zero OPEN/CONFIRMED, 0.7% duplication and complete hotspot review. This does not qualify the new combined source.
  • The October 17 study and October 20 20-cell study qualify none of their original 1% disabled / 5% enabled CPU budgets. The separate prospective 32-cell method revised agent-selected targets to 5%/15%. That batch stopped after 26 completed cells because an exponent-looking Docker hostname was parsed as a YAML number by the official Collector. It is incomplete and runner-blocked, with no qualifying aggregate. Its resources are retired and originals preserved.
  • The Collector correction prefixes the interpolated identity with container-. The exact official Collector validates both exponent-looking and all-digit hostnames; the original configuration reproduces the failure. All 70 reader/proof controls pass. The corrected source-specific study is now running under its prospectively declared method; no aggregate is qualified yet.

A new, prospectively declared study compares this candidate with normally installed, immutable Core 2.8.0. Source/dependency equality and all four functional/capacity/export prerequisites passed before admission to the fixed 32-cell batch. No new performance pass is claimed.

Before an embedded release: complete source-specific performance qualification, verify normal installed packages and migrations, then publish the matching guide, website draft #332 and affected-consumer updates.

Full PHP/Python/Rust tracing remains required before closing #773. Independent SDK drafts PHP #199, Python #182 and Rust #110 implement the accepted optional wire contract and secondary-link decision. PHP Server implementation is now owned here in draft Server #558; it remains unreleased and its capability unadvertised; SDK mock controls do not establish service propagation. Native/catalog adoption retains Server #325 coordination. No Cloud deployment or automatic issue closure.

@rmcdaniel

Copy link
Copy Markdown
Member Author

This draft remains unqualified because the committed real-API baggage round-trip control fails. Completed quality, selected unit, Laravel dependency audit, CodeQL and boundary checks pass, but those do not resolve that failure. I cancelled the still-queued remaining build jobs on exact e7213e8 to keep runner capacity for the current correctness release. No merge or capability claim. After resolving the actual carrier boundary, run the complete affected checks on the corrected candidate.

@rmcdaniel

Copy link
Copy Markdown
Member Author

The baggage gap is now isolated against the maintained upstream source, using the unchanged TraceCarrierTest from this draft:

  • Normal published open-telemetry/api 1.10.0, Context 1.5.0, PHP 8.3.35, PHPUnit 11.5.57: 19/20 pass. approved=hello%20world;property=yes is dropped; the assertion observes null instead of hello world.
  • The same controls with exact upstream API source 864051f45beef36740170e8308f10a587eb9b4a8: 20 tests / 33 assertions pass, including value, metadata and idempotent round-trip checks. Upstream changes since the published source validate the encoded value before decoding and use raw URL encoding/decoding.

This verifies an upstream source correction, not a published dependency or product delivery. The normal stable API still fails, so baggage qualification remains open. No replacement parser, product diff or dependency pin was added. Keep the real failing control, use a normally published corrected API for final acceptance, and continue the remaining embedded persistence/execution work independently.

@rmcdaniel rmcdaniel changed the title Add bounded optional trace carrier for embedded execution Add optional embedded activity tracing components Oct 15, 2026
@rmcdaniel

Copy link
Copy Markdown
Member Author

Exact dd06d714 PR unit job 116417018275 has 306 tests / 1,526 assertions and one failure: the unchanged released-API baggage control at TraceCarrierTest.php:44 expects hello world and observes null. The scope controls pass in that job. Later queued-activity steps are skipped after that failure. This is not hosted acceptance of the cold-worker controls, whose two local framework results remain separate. Quality/feature checks are still running; the draft remains unqualified.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Exact source a208207 now passes hosted regression-corpus job 116428429807 in run 38736816340, including the official current/base consumer and new-fixture counterfactual. Quality, repository contracts, dependency security and public boundaries pass. Unit contracts run 309 tests / 1,559 assertions with exactly the unchanged TraceCarrierTest:44 baggage failure; the later queue step is consequently skipped. The actual queued controls remain locally verified, and pr-feature-mysql is still running. The previous uninitialized-Fiber corpus failure remains recorded. This stays a draft without full tracing or release acceptance.

@rmcdaniel rmcdaniel changed the title Add optional embedded activity tracing components Add optional embedded tracing components Oct 15, 2026
@rmcdaniel

Copy link
Copy Markdown
Member Author

Exact 083df060 hosted build 38739552101 now passes the real HTTP instrumentation job (1 test / 50 assertions), quality and the official replay corpus. The queue tracing step also ran and passed 8 tests / 381 assertions. Unit contracts retain exactly the original baggage failure (309 tests / 1,563 assertions), so the aggregate is not qualified. MySQL feature checks are still running.

The dependency has an existing merged upstream correction, OpenTelemetry PHP #2056. Its code validates the encoded value before decoding, preserving percent-encoded spaces and other valid values. The latest API tag still reads 1.10.0, whose installed failure is reproduced here. We do not need a duplicate upstream report. Keep the unchanged failing control and qualify a released correction when available; no development dependency override or local parser is introduced.

This HTTP component's disposable local image, dependency installations and scratch are removed. PR #788 remains a draft with the rest of #773's acceptance scope open.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Dependency blocker cleared

A fresh normal Composer installation now resolves open-telemetry/api 1.10.1
at b2bc26bf8bd6b2b6447b3626b2a1b5733873aa0b. The official split repository's
immutable 1.10.1 tag points to the same commit. The live Composer metadata and
actual installation establish availability; the package HTML still presents
the older release and is not being used as release authority.

On unchanged tracing source 0c0f6420, all 25 TraceCarrier tests / 52
assertions pass
, including the previously failing percent-encoded baggage
value/metadata case. No vendor patch, development pin, skipped test or changed
expectation. The older stable1.10.0 failure remains its own original result.

status:blocked is removed and this work is back in progress. The remaining
work is owned here: finish the normal stable dependency suite, integrate the
current Core source, establish the supported API floor, qualify the collector
and supported runtime paths, then publish only the accepted scope. Nullable
observability columns and native/catalog/default dependency adoption remain
separate and unqualified. This is not a whole-tracing or release claim.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Current source is 3aaab4d61a6320a4baca41cb73e1fc3d1368a312, whole tree
5680b2f03e2a13a6e76a8fb35b2048729fa0c977, integrating delivered Core 2.7.0.
Normal stable OpenTelemetry API 1.10.1 contains the baggage fix. Composer rejects
the incompatible older API and resolves the fixed stable package without vendor
edits. The prospective benchmark lock changes only Core and API; it is not a
measurement of this new combination.

Fresh local selection: 214 tests / 11,428 assertions PASS, one explicit
optional Guzzle/PHP-extension skip covered by the passing real hosted HTTP job.
Integrated signal/retention regressions separately pass 30 / 430. ECS and
full src tests PHPStan pass. The prior carrier25/52 and cancellation7/609
selections overlap these checks; totals are not additive.

Normal PR build39357001708
passes. Exact Sonar app and independent API pass: zero open/confirmed findings,
1.1% new duplication under unchanged3%,100% hotspot review. Required separate
full-source39358010049
is still active, including the remaining coverage/feature/upgrade gates.

The original overlay-backed local admission timeouts remain failed setup
observations. Diagnostics end during migration before business admission; a
schema-only control took17s with zero work. The unchanged child control and new
full selection use separately declared bounded RAM-backed scratch, retaining
2CPU/2GiB/no swap and original business/process deadlines. No production failure
cause, runtime fix, power-loss durability or performance acceptance is inferred.

All local services, dependencies, caches and raw data are retired, verified
02:21:58UTC. Both data services exit0/noOOM; only source and a small readable
summary remain. No borrowed image or foreign resource was removed.

Draft remains unpublished and unqualified for release. The upstream stable
blocker is cleared, while full-source, baseline-capacity, existing1%/5% overhead
and coordinated catalog/published-consumer gates remain. Earlier failed source
and performance observations remain failed; no native or catalog adoption.

@rmcdaniel

Copy link
Copy Markdown
Member Author

The stable OpenTelemetry dependency is now normally installable. Current source
052cb6141335fd887b72d61175a8d0c69a6b8649 also fixes a configured-storage gap found
by the required full-source run: the optional carrier migrations previously only
added columns to the default tables. They now use the established configured-model
and workflow-connection migration pattern, including idempotent rollback.

Three table-preservation controls fail the preceding migrations. Current focused
checks pass 8 tests /71 assertions (five PostgreSQL controls and three separate
SQLite storage-isolation controls), plus existing default-table controls 3/24.
Actual configured-model workflow execution and original configured eight-second
leases remain covered. Lease assertions now inspect the returned original task
models rather than an obsolete private boolean return. Whole ECS and PHPStan pass.

The normal PR build39360260345
passes. The fresh full-source39360308585
has passed every feature/upgrade prerequisite and is running coverage. The old
full-source failure remains failed. Exact Sonar check and API review pass at0.8%
new duplication under unchanged3%, with zero OPEN/CONFIRMED issues.

All local databases, containers, network, dependencies, caches and raw outputs are
retired. The draft remains unpublished. Collector capacity, matched overhead and
coordinated catalog/consumer acceptance are still required by #773.

@codecov

codecov Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.53663% with 163 lines in your changes missing coverage. Please review.
✅ Project coverage is 93.74%. Comparing base (dda951d) to head (31ab1fc).

Files with missing lines Patch % Lines
src/V2/Support/TaskOutcomeCarrier.php 78.46% 42 Missing ⚠️
src/V2/WorkflowStub.php 94.78% 38 Missing ⚠️
src/V2/Support/ExecutionTracing.php 93.40% 33 Missing ⚠️
src/V2/Support/TraceCarrier.php 87.23% 18 Missing ⚠️
src/V2/Jobs/RunTimerTask.php 89.58% 10 Missing ⚠️
src/V2/Support/TaskTraceCarrier.php 82.85% 6 Missing ⚠️
src/V2/Support/ScheduleManager.php 97.50% 3 Missing ⚠️
src/V2/Support/TaskOutcomeTraceState.php 95.00% 3 Missing ⚠️
src/V2/Support/TaskTraceTimings.php 93.87% 3 Missing ⚠️
src/V2/Support/WorkflowExecutor.php 90.32% 3 Missing ⚠️
... and 2 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #788      +/-   ##
==========================================
- Coverage   93.76%   93.74%   -0.02%     
==========================================
  Files         538      549      +11     
  Lines       76916    76469     -447     
==========================================
- Hits        72118    71686     -432     
+ Misses       4798     4783      -15     
Flag Coverage Δ
v2 93.74% <92.53%> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@sonarqubecloud

Copy link
Copy Markdown

@rmcdaniel
rmcdaniel marked this pull request as ready for review October 20, 2026 23:36
@rmcdaniel
rmcdaniel merged commit 9776f4a into main Oct 20, 2026
20 checks passed
@rmcdaniel
rmcdaniel deleted the feature/durable-trace-carrier branch October 20, 2026 23:41
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.

2 participants