docs(ai-adoption-ladder): native-vs-hook telemetry audit + decision record#699
Conversation
|
Claude finished @kyle-sexton's task in 1m 51s —— View job PR Review
This is a documentation-only PR adding an empirical decision record. Overall the content is accurate, well-structured, and appropriately narrow in scope. What I verifiedContract accuracy — I read
Relative link: Revisit triggers: All three are precisely scoped to the conditions that would invalidate this decision — native trace context joining, a native schemaUrl declaration, and injection regression. No gaps. ✓ Index.md change: The new "Post-delivery decision records" section is correctly placed below the work-package table and follows the existing formatting conventions. ✓ One minor nit (non-blocking)Pillar 2 verdict implies a precondition that isn't visible in the table. The verdict This is cosmetic — the decision section makes the requirement clear. Not requesting a change, just flagging. VerdictClean, well-reasoned decision record. Content matches the live empirical findings as described, maps correctly to the contract pillars, and the hybrid-native-first conclusion is the right call given the Pillar 3 gap. The revisit triggers mean this record has a defined exit path rather than being open-ended. Ready to merge. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 046ac006d9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
046ac00 to
c76dfab
Compare
|
Claude finished @kyle-sexton's task in 1m 52s —— View job PR Review (follow-up — c76dfab reconciliation)
This review covers the reconciliation commit (c76dfab) added after the initial review. The Codex P1 concern was valid and the fix is complete and correct. Codex P1 — Pillar 3 contract vs native-surface realitytelemetry.md (L65–76) The old text said "conforming headless agent surfaces read inbound trace context from their environment" — binding native surfaces to a guarantee they don't honour. The new text correctly scopes the requirement to CONTRACT-AUTHORED emissions only, explicitly documents that a native surface may start a fresh root trace, and states that native session signals attach query-side via the Pillar 2 attribute. Native inbound-context adoption is now a migration trigger, not an assumption. The fix is precise and doesn't overstate or understate what the probe proved. ✓ ci-otlp-artifact.md trace-context section (L35–54) The old heading said "so its spans join the tree" — implying all agent spans, including native ones, would trace-propagate. The new text changes "its spans" to "every contract-authored emission in that step", adds a callout explaining that native CLI emissions may ignore Audit doc — reconciliation noteDecision point 4 explicitly names the contract-vs-probe contradiction and records that both the telemetry contract and the CI template were corrected in this change. An adopter reading the audit doc can trace the full provenance of the decision. ✓ Plugin version + CHANGELOGVersion bumped One minor nit (non-blocking, pre-existing)The session env block comment at ci-otlp-artifact.md L92–94 still reads: After this change, "join the trace tree" means query-side attachment, not direct trace-context joining — a reader hitting this comment after reading the new trace-context section above it will infer the right meaning, but in isolation it implies direct trace propagation. This comment predates this PR and is out of scope here; flagging as a future cleanup candidate. VerdictThe Codex P1 finding is fully resolved. The contract, template, and audit doc are now internally consistent: wrapper-authored spans join by trace context, native session spans attach query-side via the Pillar 2 join attribute. No gaps remain. Ready to merge. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c76dfabd2c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
#351) Field-by-field audit of the native Claude Code OTLP surface (2.1.215) against the autonomy telemetry contract, from live headless-session probes: OTEL_RESOURCE_ATTRIBUTES injection lands the Pillar-2 join attribute at resource scope natively; inbound TRACEPARENT is ignored, so the contract-authored wrapper span keeps owning Pillar-3 causal joining; no schemaUrl declared (re-confirmed). Decision: hybrid, native-first — session signals native with env-injected join attribute, wrapper emission only for the causal tree, query-side join between them. Version-pinned facts + revisit triggers recorded; hub links the record. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ive-surface reality Review follow-up on the #351 audit: the contract required conforming headless surfaces to read inbound trace context while the shipped template implied TRACEPARENT export alone joins the session's spans — both contradicted by the probe (native session emission starts a fresh root). Pillar 3 now binds traceparent propagation to CONTRACT-AUTHORED emissions, states the query-side attach for native session signals via the Pillar 2 attribute, and records native inbound-context adoption as a migration trigger. The template's trace-context section carries the same correction plus the OTEL_RESOURCE_ATTRIBUTES injection the setup flow already wires. Bump 0.7.2 + CHANGELOG; no emission or checker behavior changes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The stale-baseline guard fired exactly as designed: autonomy gained its CHANGELOG.md, so the grandfather entry cannot outlive the debt it named. Baseline is now empty. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
c76dfab to
f038a44
Compare
|
Claude finished @kyle-sexton's task in 2m 49s —— View job PR Review (follow-up — f038a44 / open Codex P2)
Codex P2 —
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f038a4430e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…e — beta joins Re-probe prompted by review: with the vendor's enhanced-telemetry opt-in the same headless surface DOES read inbound TRACEPARENT and parents session spans into the injected trace; only the default surface starts a fresh root. The audit's Pillar-3 verdict, the contract's Pillar 3 clause, the CI template caveat, and the CHANGELOG entry now say "default surface may ignore inbound context; honoring it may sit behind an opt-in" — wrapper emission stays the stable conforming leg because the setup slice deliberately never depends on beta span shapes; the revisit trigger is that graduation. The setup skill's existing inherit claim stands (it was written about the beta path and stays accurate). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 3m 17s —— View job PR Review (follow-up — aa5164a)
What changed in aa5164aThis commit re-probed Pillar 3 with All four documents that were changed update consistently:
Previous blocking finding — SKILL.md — resolvedThe prior Claude review (f038a44) blocked on SKILL.md lines 114–115:
The commit resolves this cleanly: the claim was written about the beta path and stays accurate because the CI template the setup skill generates explicitly exports Open finding — design-threads.md:234–236 — not yet addressed (P2)
The word "natively" is now incorrect — it implies the default surface without any opt-in, which the audit proves is wrong (fresh root on the default surface). The correct reading is: behind Suggested fix — append a SHARPENED note inline with the existing pattern used at line 230: 3. W3C TRACEPARENT propagates across trigger → CI → agent session: one causal tree.
- Verified: headless agent sessions inherit TRACEPARENT natively. Unification by context
- propagation, not sink merging.
+ SHARPENED 2026-07-20 (native-vs-hook audit, #351): headless sessions join natively only
+ behind `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` (verified 2.1.215); default surface starts
+ a fresh root. Contract-authored wrapper emission is the stable causal-chain leg; the beta
+ path is a bonus. Query-side join via `autonomy.work_item.url` is the stable fallback.
+ See `docs/topics/ai-adoption-ladder/native-vs-hook-telemetry-audit.md`.VerdictThe audit finalization in aa5164a is correct and internally coherent. The SKILL.md blocking concern from the prior review is legitimately resolved — the beta-path rationale is sound and the CI template confirms it. Only One targeted fix away from ready to merge. |
…to the beta surface Review follow-up: the setup skill's TRACEPARENT-inheritance sentence and the T6 design-thread verification line both read as unconditional; both now carry the audited scoping — inheritance holds under the enhanced-telemetry beta, the default surface starts a fresh root and joins query-side via the resource attribute, and the contract-authored wrapper span stays the stable causal leg until spans graduate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 52s —— View job PR Review (follow-up — 7e26885)
Both open Codex P2 findings from the previous review are resolved. Here's what I verified at HEAD. SKILL.md — Codex P2 (trace-context inherit claim)
The old text stated unconditionally that headless sessions inherit
This is precise: the beta path inherits (which the re-probe in design-threads.md — Codex P2 (T6 causal-tree record)
The old text stated "Verified: headless agent sessions inherit TRACEPARENT natively." The new text cites the audit, scopes the claim to the enhanced-telemetry opt-in, documents the query-side fallback for the default surface, and names the wrapper span as the stable causal leg until graduation. ✓ Internal consistency check
Pre-existing nit (unchanged, still out of scope)
VerdictAll previously flagged open findings are resolved. The audit table, decision section, telemetry contract, CI template, SKILL.md, and design-threads.md now describe a single internally consistent model: wrapper-authored spans own the causal join, native session signals attach query-side via the Pillar 2 resource attribute on the default surface, and the beta path adds direct span parenting as a non-load-bearing bonus. Ready to merge. |
Summary
Executes the WP2-deferred audit (#351) empirically and records the decision:
otelcol-contribcollector): native emission declares noschemaUrlon any signal;OTEL_RESOURCE_ATTRIBUTESinjection landsautonomy.work_item.urlat RESOURCE scope on native session metrics (Pillar 2 satisfied natively, no hook code); an inboundTRACEPARENTenv value is ignored — fresh root trace (Pillar 3 not satisfiable natively).Acceptance criteria from #351: field-by-field comparison verified against live session capture ✔; decision recorded in
docs/topics/ai-adoption-ladder/with revisit triggers ✔.Related
Closes #351
🤖 Generated with Claude Code