overengineeringstudio / overengineeringstudio/effect-utils
otel-contract: add a first-class event() builder (event signal kind) to the registry DSL + Weaver Layer-1
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 82
- Forks
- 2
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 121
Description
Problem
@overeng/otel-contract's ./registry DSL and the @overeng/genie Weaver
Layer-1 generator support only span and metric signals (SignalDef = span | metric). There is no event() builder / kind:'event' variant, even though the
docs prose references events and the OpenTelemetry Weaver format supports
type: event groups.
A consumer that needs to model a discrete, point-in-time occurrence as a governed
OTel event (a log record with event.name and a registry-defined attribute set)
currently has to model it as a zero-duration span. That misrepresents a
point-in-time event as a duration and is only a workaround — the semantically
correct primitive (an event / log record) is unavailable.
Goal
A first-class event signal in the registry DSL, rendered and Weaver-checked like
spans and metrics.
Acceptance criteria
-
event()builder in@overeng/otel-contract's./registry— authors
name, attributes, and stability, reusing the shared attribute catalog and the
required/recommended/conditionally/optInrequirement-level model, the
same wayspan()andmetric()do. -
kind:'event'variant added toSignalDef(Layer-2 and the genie Layer-1
mirror). - A
weaverEventsemitter renderstype: eventgroups into the Weaver
registry YAML, plus the TS/Rust typed constants, mirroring the existing
span/metric emitters. - Weaver
registry check/diff/live-checkcover event groups. - Docs updated so the prose mention of events is backed by a real builder.
Notes
- Related: #882 (weaver Layer-1 registry consolidation) — same generator,
different capability. - Motivation: a downstream producer needs to emit state-transition records as
first-class semantic-convention events rather than as spans.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the existing span() and metric() implementations in @overeng/otel-contract's ./registry, then follow SignalDef and the genie Layer-1 mirror into the emitters. Run the Weaver registry check, diff, and live-check paths to understand current coverage. Done means event(), kind:'event', weaverEvents output, validation coverage, and the related documentation all align with the acceptance criteria.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- documentation, observability-sre, tooling
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100