otel: tick P3, log progress + pre-existing env note

This commit is contained in:
2026-07-01 14:38:11 +00:00
parent c2def0ea16
commit 06294e964c

View File

@@ -41,7 +41,7 @@ type-block grammar + type-def editor). You are on branch `loops/otel` in
- [x] **P2 — monotonic clock.** Find/confirm a time prim on the OCaml host (the warm-conf
profiler + response cache already measure time; grep `lib/host` + the OCaml bridge). Wrap as
`otel/now-ns`. Tests: monotonic non-decreasing, non-negative, a `with-span` has `t1 >= t0`.
- [ ] **P3 — auto-instrument the handlers.** Wrap route handlers at the `host/make-app` / router
- [x] **P3 — auto-instrument the handlers.** Wrap route handlers at the `host/make-app` / router
seam (see `lib/host/server.sx`) so every HTTP request becomes a trace: a root span per request
named by method+route, with `{:http.method :http.route :http.status}` attrs. Tests: a request
through the app produces one trace with the right span name + status attr.
@@ -66,6 +66,7 @@ type-block grammar + type-def editor). You are on branch `loops/otel` in
+ an event). Tests: traceparent round-trips; an error thunk yields an error span.
## Progress log (newest first)
- 2026-07-01 — P3 done. `otel/instrument-routes` wraps each flattened Dream route's handler in a timed span "METHOD /route" with `{:http.method :http.route :http.status}`; `host/make-app` applies it (seam) so every matched request is a trace. Refactored `with-span` onto a shared `otel/-timed` core with a `finalize` fn for result-derived attrs (http.status is only known post-handler; bare-string handler results coerced → 200). Suite 37/37; server 13/13 unchanged. NOTE: cold `conformance.sh feed|relations|blog` currently fail at test-file load with `Undefined symbol: parse-safe`/`render-page` — these are `bind`-registered server-env prims in `sx_server.ml` not resolving in the current shared binary's epoch context; **pre-existing & environmental** (reproduces with my P3 changes stashed), NOT caused by this work. otel/server/page suites unaffected.
- 2026-07-01 — P2 done. Host time prim is `clock-milliseconds` (OCaml `Unix.gettimeofday`, epoch ms; no dedicated nano/monotonic prim). `otel/now-ns` wraps it as epoch NANOSECONDS (×1e6, the OTLP unit) with a high-water clamp so it never steps backwards → durations non-negative across NTP steps. P1 placeholder counter removed. Suite 23/23 (added: non-negative, monotonic non-decreasing, ns-scale, real with-span t1≥t0 + ns-scale t0).
- 2026-07-01 — P1 done. `lib/host/otel.sx`: span dict + `otel/with-span` (dynamic parent stack builds the trace tree), monotonic id/clock placeholders (P2 replaces now-ns), bounded ring buffer (`record!`/`recent`/`set-cap!`, drop-oldest), `current-span`/`current-trace`, `reset!`. Suite `lib/host/tests/otel.sx` wired into conformance — 18/18 (nested parent links, attrs, ring caps at N drops oldest).
- (append one dated line per iteration)