2.9 KiB
2.9 KiB
Tasks: enterprise-events-otel
- Change ID: enterprise-events-otel
- Package:
@suaveplan/events-otel - Date: 2026-04-24
Prerequisites (must be published to Verdaccio first)
@suaveplan/events@suaveplan/error@suaveplan/types
Tasks
1. Scaffold package
- Create
universal/events/events-otel/directory tree per file layout inproposal.md - Write
package.json(name@suaveplan/events-otel, version0.1.0,sideEffects: false, correct workspace deps and@opentelemetry/apicatalog dep) - Write
tsconfig.jsonextending@suaveplan/typescript-config/library.json - Write
vitest.config.tsusingcreateTestConfig()from@suaveplan/testing/config
2. Error codes (src/error-codes.ts)
- Define
EventsOtelErrorCodeunion type - Call
defineCodesto register allEVENTS_OTEL.*codes - Export
registerEventsOtelErrorCodes()andEventsOtelError
3. Span attribute constants (src/constants/index.ts)
- Export
SPAN_ATTRIBUTESandSPAN_NAMESasas constobjects
4. Sampling rule (src/sampling/sampling-rule/)
- Implement
SamplingRuletype union and decision function - Write
.md,.types.ts,.test.ts,index.ts
5. Trace context propagation (src/propagation/trace-context/)
- Implement
serializeTraceContext()using@opentelemetry/apiW3C propagator - Implement
deserializeTraceContext(headers)restoring context - Write
.md,.test.ts,index.ts
6. Core attachEventTracing (src/core/attach-event-tracing/)
- Implement
attachEventTracing(bus, options?)via@suaveplan/eventsinterceptor API only - Create
events.dispatchspan per dispatch; run listeners within that context - Create
events.listenerchild span per listener invocation - Set
span.status = ERRORand callspan.recordException(err)on listener throw - Apply
SamplingRule— check parent sampling decision first - Return
EventTracingHandlewithdetach() - Write
.md,.types.ts,.test.ts,index.ts
7. Tests
- Unit tests co-located (100% coverage target)
tests/integration.test.ts— attach to real EventBus with in-memory OTel SDK, dispatch events, assert span tree structure and attributestests/property.test.ts— fast-check properties perproposal.md§5
8. Docs
- Every
.tsimplementation file has a sibling.md - Root
README.md
9. Pre-publish gate
bunx turbo lint typecheck test --filter=@suaveplan/events-otelgreenbunx turbo test:coverage --filter=@suaveplan/events-otel≥ 100% on touched modules
10. Publish
bun scripts/publish.ts --package @suaveplan/events-otel
11. Archive
- Fold spec delta into
openspec/specs/events/spec.md mv openspec/changes/enterprise-events-otel openspec/archive/2026-04-24-enterprise-events-otel