5.35.0: a sequence diagram draws why a call failed (#232 R3). Generated Reports says a failed answer's note opens with its reason in the theme's failure ink, under the headers and above the body; Report Themes lists --dg-fail-ink; HTTP Tracking Setup and the SQS, SNS, EventBridge, S3, DynamoDB and Atlas Data API pages say the reason is drawn in the note on the return.
5.34.3: every tracked call that throws ends with an answer that says it failed and why, and every reader reads a failed answer one way (#232). Each tracker's page says what a failed call shows (A call that fails); Cross-Run History gives rule 12 and its bridge; HTTP Tracking Setup lists the trackers that answer a call that threw; the OTLP pages say an ERROR span's answer carries its message as error and the export's message is a failure's reason; Component Diagrams says % errors counts every failed answer; Tracking Custom Dependencies says how an answer is read as failed, with today's success words (#140 left to #140); DispatchProxy says the deferred queue flushes after a send that throws, a method that throws answers its exception's type with its stack kept, and a stream is answered when it ends; ClickHouse says a client reader's later failure is not seen.
Internal Flow Tracking, HTTP Tracking Setup, Report Configuration, API Reference, OpenTelemetry Extension, Diagnostics and Debugging: from 5.34.0 a gRPC call is one step named for its method, its transport spans folded into it (#138); the handler options' InternalFlowActivitySources, the listener constructor and the DI overload that take source names are obsolete, as none was ever read, with overloads that take none; ReportConfigurationOptions.InternalFlowActivitySources filters what a report draws under Manual.
HTTP Tracking Setup, Tracking Dependencies, Generated Reports, Querying Reports, AI Integration Prompt: from 5.32.0 TestTrackingMessageHandlerOptions.TestDouble says what answers a tracking handler's calls. A name marks every call it tracks, empty or white space marks none, and null reads the chain (#219).
Boundary: the Setup/Action boundary is drawn at the step, once per test, whoever makes the calls (5.31.0, STEP_PHASE_PLAN R2).
5.13.0: a call to a remote host nothing maps is named by its host and port (pricing.example.com:443), and a call to this machine keeps localhost:{port} (#190 R0)
HTTP-Tracking-Setup, Tracking-Dependencies, Diagnostics-and-Debugging and the ten integration pages said the handler's fallback is localhost:{port} for every host; they now say what it does. Tracking-Dependencies' Pattern 2 options mapped port 443 to "My API", which names every host on that port alike; the maps are reduced to the local port, with a pointer to Pattern 8 for remote hosts. Cross-Run-History: the fingerprint rule is 7, and a run carries a bridge under rule 6 while such runs are in its window, so the rename reads as no change.
5.6.1: HTTP-Tracking-Setup says that CreateTestTrackingClient makes its client under a lock of the factory's own, so tests running in parallel can share one WebApplicationFactory and make their clients from it at the same moment (before 5.6.1 the first clients made at once each started the application, and one could be lost from the factory's list or leave a null in it, so the factory's Dispose threw NullReferenceException), and how to make a client of the factory's own safely; Integration-Grpc-Extension says the same of CreateTestTrackingGrpcClient and its WithChannel variant
4.18.2: the wiki edits of the #136 audit (plans/MONGODB_ACCESSOR_OPTION_PLAN.md section 12). The Atlas Data API's IHttpClientFactory recipe adds the handler as the primary one, since AddHttpMessageHandler threw when the client was created; Tracking-Dependencies' first recipe no longer sets InnerHandler to null, which threw ArgumentNullException. MassTransit's page no longer says DI resolves the accessor, Spanner's options table gains its HttpContextAccessor row, and MediatR's row says to leave it null in a host. BigQuery's, Pub/Sub's and the Atlas Data API's rows and HTTP-Tracking-Setup say which accessor wins, with what changed in 4.18.2, and 'every extension options class' now reads every one with a CurrentTestInfoFetcher
4.16.1: what the #134 audit fixed (a gRPC call recorded however it fails, a message holding an Any, a stream disposed under another span, a call logged with the trace id it carries, HeadersToForward on a request that already carries the header, the ignore header in any casing, TrackingProxy after an awaited call, Spanner LogSqlText and phase content on every path and the server observer's failed status), and stale pages corrected: CurrentStepTypeFetcher is read only by the HTTP handler, the identity headers are written by the gRPC interceptor too, a host with AddTestTrackingContextPropagation resolves through its scope without an accessor, and the trace id nests a host's calls only for trackers that reuse it
4.14.3: every HTTP hop carries the test identity and, between TestServer hosts, the trace (Tracking-Dependencies, HTTP-Tracking-Setup, Integration-Playwright, Multi-Host-Test-Architectures)
4.13.1: outside a test, Kronikol.xUnit2's and Kronikol.NUnit4's fetchers throw, so a call made there goes to a TestIdentityScope, the global fallback or the background, as on the other frameworks (#133). The pages that said every fetcher returns ("Unknown", "unknown") or throws now say which did not until 4.13.1 and what that cost; xUnit v2 runs a test class's constructor, InitializeAsync, DisposeAsync and Dispose outside the test (Integration-xUnit2 table row and troubleshooting entry, Tracking-Custom-Dependencies), as NUnit runs a fixture's one-time set-up and tear-down (Integration-NUnit); Diagnostics-and-Debugging gains "Calls made outside a test are missing, and a scope or fallback does not bring them back"; Assertion-Tracking lists every integration that sets Track.TestIdResolver; and the custom-tracker recipe takes its identity from TestInfoResolver.Resolve(null, CurrentTestInfo.Fetcher) and skips the call when nothing names a test, where it read XUnit2TestTrackingContext.GetCurrentTestInfo(), whose id outside a test no scenario owns
4.12.1: test names and ids no longer fail the calls that carry them, and the gRPC interceptor leaves the caller's metadata and trace alone (#134). HTTP-Tracking-Setup gains "Header values": a name, id or caller name that is not plain printable ASCII, or that begins or ends with a space, travels in the RFC 8187 UTF-8'' form every Kronikol reader decodes, with the HeaderValue helper for headers written by hand and TestTrackingServerBridge for reading them; its dual-resolution list now gives all six steps in order. Diagnostics-and-Debugging says the HttpContextAccessor column counts the instances that hold an accessor (N of M) and shows each instance's. Integration-Playwright and Integration-ProxyTap-Extension say ToHeaders() and the re-stamp send the encoded form whole, where they replaced characters with ? and cut values at 512. Integration-Grpc-Extension: CurrentStepTypeFetcher has no effect, the caller's Activity.Current is given back when an async unary call starts, and the traceparent's flags say 01 for a recorded span
4.10.0 and 4.11.0: MongoDB tracking takes an IHttpContextAccessor through its options (#136), and so does every other extension options type. Integration-MongoDB-Extension names Kronikol.Extensions.MongoDB.V2 for MongoDB.Driver 2.x (#142 item 6), passes the host's accessor in its WebApplicationFactory setup (Option C), and shows the client line Option D needs: on its own, AddMongoDbTestTracking recorded nothing. Its options table gains HttpContextAccessor, and its CurrentTestInfoFetcher and CurrentStepTypeFetcher rows say what they do. HTTP-Tracking-Setup and Diagnostics-and-Debugging say which version gave each options type the property, so 'every extension options class' holds, and their Kafka sample compiles from 4.11.0. The Kafka, Bigtable, Spanner, MediatR and EF Core Relational pages list the property, and the EF Core page describes WithSqlTestTracking(options) and WithTestInfoFrom with it
4.3.0: a failed call's error on the ingest feed (the interaction table's error row, the !Type status, !Error for an error with no status, the lossless note), in Failures.md and in kronikol export's ERROR span; Merging Parallel Reports says the merge keeps error, attributionSource, expiredFrom and each shard's background block; HTTP Tracking Setup addresses a failed call's error by its response half, where query http prints it
Roadmap stage 0: every anchored [[...]] link resolves (164 rewritten: 100 space-form anchors to their heading's slug, 5 reversed label|target links turned round, 39 bare slug links labelled, 16 [[Integration: X Extension]] links pointed at the pages that exist, 4 renamed sections repointed, 2 typos); CI-Summary-Integration describes the summary that exists (server URLs plus source, no inline images in any mode, the split fires whenever the compact form differs); PlantUML-Browser-Rendering: themes have no effect under BrowserJs, the phantom CiSummaryPlantUmlRendering option is gone, Node.js rendering documented here; report sizes given as measured, 10.7 and 82.7 MB
3.18.0: alternating verdicts, failed sends carry their exception, the background heading
docs: fix remaining audit findings across wiki pages
- HTTP-Tracking-Setup: update stale IHttpClientFactory registration to
IHttpMessageHandlerBuilderFilter (v3.0.21+)
- xUnit3: fix broken Dispose(bool) pattern in BaseFixture example
- Component-Diagrams: add missing ArrowColorMode/DependencyColors to
API reference code block
- PubSub: remove misleading "Tracker Only" DI section (no separate overload)
- PlantUML-Browser-Rendering: fix "official CDN" claim (uses jsdelivr fork)
- Tracking-Custom-Dependencies: add DependencyCategory to properties table
- LightBDD-xUnit2: update deprecated ReportWritersConfiguration() example
docs: Pattern 10 for TestWebHostDriverBase, updated matching semantics (#66, #67, #68)
docs: v3.0.21 EndsWith matching for ClientNamesToServiceNames (#65)
docs: v3.0.21 - TrackDependenciesForDiagrams uses filter, ClientNamesToServiceNames contains matching (#65)
docs: complete rebrand TestTrackingDiagrams → Kronikol (v3.0.0)
- All TestTrackingDiagrams references → Kronikol
- All TTD abbreviations → Kronikol
- X-TTD-TestName/X-TTD-TestId → test-tracking-current-test-name/test-tracking-current-test-id
- ttd- prefixed headers → kronikol-
- TTD_ env vars → KRONIKOL_
- Updated all code examples, API references, and guides
docs: ExcludedHosts option, RemoveDbContext<T> helper (v2.28.23)
docs: v2.28.13 - comprehensive documentation improvements
New pages:
- Background Thread Correlation: TestIdentityScope, ActiveTestTracker, Unknown entries, LazyHttpContextAccessor
- Service Bus Tracking Patterns: MessageTracker setup, BeforePublish/AfterPublish bridging, atomic tracking, dual-caller attribution
Updated pages:
- HTTP Tracking Setup: handler pipeline ordering, PrimaryHandler vs AdditionalHandlers, CreateTestTrackingClient behaviour, IHttpContextAccessor timing
- Diagnostics and Debugging: 8 new troubleshooting entries (empty reports, Unknown entries, Service Bus, function triggers, CosmosDB, service names)
- Quick Start (xUnit): TestContexts.Enqueue warning for custom fixtures
- Integration CosmosDB Extension: fault injection code example, background thread correlation link
- What's New in 2.0: upgrading from 2.27.x to 2.28.x migration guide
- Tracking Custom Dependencies: interface-based blob tracking with auto-resolving LogPair
- Multi-Host Test Architectures: consistent test identity, HttpContextAccessor wiring order, initialization order
- Home and Sidebar: links to new pages
docs: v2.28.12 - diagnostic report improvements, ClientNamesToServiceNames, AtlasDataApi/BigQuery HttpContextAccessor
- Diagnostics-and-Debugging: grouped component table, HttpContextAccessor column, smart warnings, HasHttpContextAccessor interface
- HTTP-Tracking-Setup: ClientNamesToServiceNames exact match semantics section
- Integration-AtlasDataApi-Extension: HttpContextAccessor option in setup example
- Integration-BigQuery-Extension: HttpContextAccessor option in setup example
docs: v2.28.11 - DiagramMethod/DiagramStatusCode, LogPair auto-resolving, TrackSendMessage, multi-host architecture guide
- Tracking-Custom-Dependencies: OneOf ambiguity workaround, auto-resolving LogPair, IDistributedCache decorator example
- Integration-DispatchProxy: ReplaceWithTracked failure scenarios table
- Integration-CosmosDB: InMemoryEmulator integration guide
- HTTP-Tracking-Setup: JustEat.HttpClientInterception recipe
- Multi-Host-Test-Architectures: NEW page covering dual-host, shared messaging, DI ordering
- _Sidebar: Added Multi-Host Test Architectures link
docs: rename CallingServiceName → CallerName across all wiki pages
Updated all 49 wiki pages to use CallerName. Added deprecation
callouts to HTTP-Tracking-Setup.md and Event-Annotations.md.
docs: update wiki for v2.27.10 — CurrentTestInfo.Fetcher NRE fix
docs: update all extension pages with HttpContextAccessor auto-resolution (v2.26.3)
- Add HttpContextAccessor row to 16 extension options tables
- Update dual-resolution notes with v2.26.3 auto-resolve info
- Rewrite HTTP-Tracking-Setup How to Use It section
- Add Auto-Resolution (v2.26.3+) section replacing MediatR-only section
- Add generalized troubleshooting for missing dependencies in Diagnostics
- Update DispatchProxy note with ReplaceWithTrackingProxy overload info
docs: add CurrentTestInfo.Fetcher as standard API for CurrentTestInfoFetcher across all framework docs
docs: gRPC AddTrackedGrpcClient DI extension + auto-resolve IHttpContextAccessor (v2.26.1)
- Updated Integration-Grpc-Extension with new DI extension section, auto-resolve docs
- Updated Diagnostics-and-Debugging with recommended AddTrackedGrpcClient fix
- Updated HTTP-Tracking-Setup, Tracking-Dependencies, Tracking-Custom-Dependencies
- Updated Phase-Aware-Tracking gRPC note for auto-resolution
- Added gRPC extension to API-Reference