telemetry: schema-first event registry (typed catalog + generated docs)
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 32/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- typescript
調査の方向性
まず src/instrumentation/CONVENTIONS.md、src/instrumentation/* 配下のドメインごとのファイル、src/instrumentation/EVENTS.md を読んでください。TelemetryService.trace/log/logError、Span、およびそれらのテストを追跡し、現在のイベントとプロパティの型付けを理解してください。選択したレジストリ設計が実装され、インストルメンテーションとテストが更新され、生成された EVENTS.md が CI の鮮度チェックに合格したら、作業は完了です。
索引モデルが issue の本文から書いたものです。
説明
Problem
Telemetry events, properties, and value unions are declared per-domain in src/instrumentation/* and documented by hand in src/instrumentation/EVENTS.md. Nothing structurally prevents:
- emitting an event name that isn't cataloged anywhere,
- adding/renaming a property without updating the docs,
- drifting from the conventions in
src/instrumentation/CONVENTIONS.md(a recent audit found camelCase keys, kebab-case enum values, and caller-setresultthat review missed).
Proposal
Adopt a schema-first registry as the single source of truth for the telemetry surface, the way OTel itself defines semantic conventions in a registry and generates code + docs from it (Weaver).
TS-native sketch:
- A central
TelemetryEventMapinterface declaring every event with its properties and measurements (value unions spelled out). TelemetryService.trace/log/logErrorconstrained tokeyof TelemetryEventMap;Spanbecomes generic (Span<E>) sosetProperty/setMeasurementkeys and values are type-checked per event. An undeclared event or attribute key becomes a compile error.EVENTS.mdgenerated from the registry (script walking the interface + JSDoc), with a CI--checkmode so the doc can never go stale.
Known costs / open questions
- Every instrumentation class and its tests are touched by the
Span<E>generic. - Phase names compose at runtime (
parent.child), so child phases need registry entries or looser typing. - The registry partially duplicates per-domain unions the instrumentation classes already export; decide whether the registry imports those types or replaces them.
Cheaper interim guards (could land independently)
- Type the event-name parameter of
TelemetryService.trace/logas a union of registered names (names are already top-level string literals; near-zero churn). - ESLint restriction banning raw
telemetry.trace(/.log(outsidesrc/instrumentation(the layering rule from CONVENTIONS.md). - Golden event catalog aggregated from the test suite's sinks, checked like the existing OTLP goldens.
- 主要言語
- TypeScript
- スター
- 131
- フォーク
- 48
- 平均マージ
- 4日 21時間
- マージ済み PR(30日)
- 14
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
coder/vscode-coder のほかの issue
-
tech-debt
coder/vscode-coder#1120 · コメント 1 件 · 担当者 1 名 ·
-
tech-debt
coder/vscode-coder#1119 · コメント 1 件 · 担当者 1 名 ·
-
enhancement tech-debt
難易度 3/5 1〜2日 初心者へのやさしさ 74/100
coder/vscode-coder#1118 · コメント 1 件 ·
-
coder/vscode-coder#1113 · コメント 3 件 · 担当者 1 名 ·
-
Flush the connection log buffer after N failed reconnect attempts against an unreachable server オープンenhancement tech-debt
難易度 5/5 1週間以上 初心者へのやさしさ 45/100
coder/vscode-coder#1112 · コメント 1 件 ·
coder/vscode-coder の issue をすべて見る
似ている issue
-
blocklist removal
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
MetaMask/eth-phishing-detect#296544 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
pastelsky/bundlephobia#1122 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
category/development priority/P2 scope/file-operations scope/testing type/enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
Enatega Customer and Rider app: Add-ons price is not visible to customer after order is placed. オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100