Wrap a new backend endpoint in the TypeScript SDK (packages/sdk), or record it as skipped. Use when `just coverage` fails, or after adding an endpoint to a Rust service.
中文简介正在准备中。当前显示原文说明。
Add OpenTelemetry tracing to a new flow or hot path, frontend or backend. Use when building a user-facing flow, a cross-service call, a queue or background job, or code on a latency-sensitive path; when adding spans, span attributes, or trace propagation; or when a trace in Tempo/Datadog is missing, disconnected, or opaque.
中文简介正在准备中。当前显示原文说明。
安装前可以查看交给 AI 代理的指令内容。
New flows and hot paths ship instrumented, in the same change. The standard is the observability rule: one connected trace from the user's action through every service, with phases timed and the entity id on the spans. This skill is how to meet it.
Before writing code, sketch the trace you want to read during an incident:
doc.open (browser, root, document.id)
├─ doc.load
│ └─ doc.load.context (HTTP → DSS, traceparent header)
├─ doc.seed / doc.sync.catchup
└─ sync-service connect (WebSocket, traceparent query param)
One root span per user action, one child per phase a reader would ask about (network, queue wait, processing, each external call), and the id you'd search by on the root.
Use the @macro-inc/observability facade (packages/observability); never
import OpenTelemetry directly.
Telemetry.span(name, fn) for a phase; span.span(name, fn) for a child.
Telemetry.clientSpan(name) for an outbound call, then
span.injectTraceHeaders(headers).span.setAttr(key, value) for ids and counts; span.error(message) on
failure; manual spans must end() on every path.span.traceparent() another way, such as a
WebSocket query parameter.instrument() and createWorkerTraceConfig
from @macro-inc/observability/worker, which adopts the incoming
traceparent.macro_tower_layers; outbound HTTP calls
macro_tower_layers::inject_trace_headers.#[tracing::instrument(skip_all, fields(document_id = %id), err)] on domain
operations and outbound adapters (CS-22: err only on Result, no
level = "info").kafka_util injects trace headers on publish; consumers open
kafka_util::consumer_span and call record_span_error on failure.genai_telemetry::propagation::inject / set_parent
carry context in _meta; GenAI spans follow CS-55..instrument(span)) or link to it.Document open lifecycle (web → DSS → sync-service).
apps/web/src/features/block-md/definition.ts starts or resumes doc.open
(document.id, doc.type) and times doc.load → doc.load.context.
apps/web/src/features/block-md/observability.ts keeps open document spans by
id so the launcher's doc.create, the collab provider, and the sync client all
attach to one trace. packages/collaboration/src/collab/telemetry.ts stamps
document.id and session.id on doc.seed, doc.sync.catchup, and
edit.apply. The sync WebSocket carries traceparent as a query parameter,
which sync-service reads with worker_rs_otel::traceparent_from_request.
Agent editing (web or Rust → ai-editing-worker → sync-service).
The web client (apps/web/src/lib/service-clients/ai-editing-worker/client.ts)
opens http POST /edit under the document's span; Rust callers
(crates/documents/src/outbound/editing_worker_client.rs) inject headers from
an instrumented method. The worker
(services/ai-editing-worker/src/endpoints/edit.ts) roots an edit.session
with outcome fields (edit.mode, edit.ops_total, edit.blocked,
edit.aborted), then a child per phase: edit.sync_init, edit.hydrate,
edit.interpret, edit.supervise.turn, edit.dispatch, edit.run_code,
edit.flush. On the agent side, crates/agent_session/src/domain/session/telemetry.rs
emits invoke_agent and execute_tool and propagates into the ACP agent.
Run the flow on the local stack and find its trace (see the live-debug
skill): one trace from browser to the last service, each phase visible with its
duration, findable by the entity id, and failures marked as errors. Report the
trace as verified or say it wasn't.
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
Wrap a new backend endpoint in the TypeScript SDK (packages/sdk), or record it as skipped. Use when `just coverage` fails, or after adding an endpoint to a Rust service.
中文简介正在准备中。当前显示原文说明。
Add or change an in-app feature tour (a view's guided flyover) in the web app. Use when adding a tour to a view, adding or editing tour steps, pointing a step at a new control, or when a step's target needs something opened first.
中文简介正在准备中。当前显示原文说明。
Post-change checks before handing off. Works out which checks apply from the files changed (directory AGENTS.md Checks sections and matching .agents/rules), runs or verifies each, and reports pass/fail/skipped. Use before saying work is done, before pushing, or when asked to audit or verify a change.
中文简介正在准备中。当前显示原文说明。
Enforce hexagonal architecture in the Rust backend. Use before modifying crates/ or Rust services, especially inbound axum/tool/listener adapters, domain services/ports, outbound adapters, authorization, permissions, database access, or external clients.
中文简介正在准备中。当前显示原文说明。
Use when adding collaborative markdown, notes, or descriptions to a feature with collab surfaces. Covers parent entities, service entry points, authorization, content storage, and lifecycle.
中文简介正在准备中。当前显示原文说明。
Build a new AI tool end-to-end — Rust implementation, toolset wiring, infra, schema generation, and frontend UI.
中文简介正在准备中。当前显示原文说明。