Repository navigation
Emit DeliveryResult in the access telemetry row #1155
Description
Chosen contract
The user approved emitting the existing delivery classification rather than keeping unused groundwork. Implemented on PR #1261 in 7214c60 through 02f020a, not yet merged or deployed.
access_logs_v2 now has a bounded delivery_result dimension:
complete: the local body handoff finished without an observed error.partial: body bytes were accepted before a drive error, or the transport failed to finish cleanly.error: the body drive failed before any body byte was accepted.
This is transport-handoff evidence, not confirmed client receipt. HTTP status remains the already-sent status, so a row can report status 200 with partial/error delivery. The duplicate unused DeliveryOutcome.bytes field was removed; the timing collector still owns response-byte accounting. DeliveryOutcome.result now reaches the access row rather than being suppressed as dead code.
Implementation and checks
-
DeliveryResultis a typed core access-row input, serialized after the send/finish attempt rather than captured at header freeze. - Producer, 31-column v2 datasource, JSONPaths, fixtures, operator guide and rollout notes agree. Core tests automate producer/schema/fixture field agreement.
- Core serialization tests preserve all three outcomes independently of HTTP status.
- Fastly boundary regressions were added for successful drive, zero-byte failure, partial-stream failure and transport finish failure, through access-row construction.
- Execute those main.rs send/finish-boundary regressions against a compatible committed EdgeZero pin. Current full Fastly application compilation is still blocked by its missing lifecycle API; added test source is not a green execution result.
- Validate the schema/deployment diff and stored rows in the intended Tinybird workspace before rollout. No live ingestion/rollback claim is made.
The actual Tinybird emitter module separately passed 19 WASM tests and Clippy in a wrapper that includes the repository files and original locked dependency identities. That verifies dispatch/drop, framing/auth/body limits and startup failures, not the application main.rs delivery boundary. The core and JS suites pass; the PR records exact broader outcomes and inherited baseline failures.
Rollout
This changes the new v2 contract before its intended rollout, alongside the collection field rename and TS build-version meaning. If a preview v2 schema is already deployed, inspect and coordinate its migration before deploying this producer. Do not modify or backfill the legacy nine-column access_logs_raw.
The issue remains open for the committed-pin boundary execution and workspace rollout checks. Related tracking: #1458 and review.
Activity