Inspiration
A system promise sounds simple: a deployment should become healthy in thirty seconds; a backup should survive the next ten minutes. But what counts as the matching event? When does waiting become failure? What does a missing observation actually prove?
Traceweaver makes those assumptions visible in a small executable language.
What it does
Declare typed events and write rules that expect or forbid matching events within a time window. Each observed trigger produces its own pending, fulfilled or violated obligation. Move through a trace, inspect the matching keys and see the evidence behind each result.
In the deployment example, a healthy check for web cannot satisfy an api deployment. At thirty seconds the API promise fails because no matching check arrived in its window; a check at forty seconds cannot repair that expired obligation. The workbench also includes coffee-order and backup examples, editable source, located compile diagnostics, and export/import that recomputes results rather than trusting saved claims.


How I built it
Traceweaver has an original lexer, parser, event-schema and correlation type checker, exact duration conversion and deterministic finite-trace interpreter. JavaScript ES modules expose the same evaluator through a browser workbench and CLI. CSS and SVG display the interpreter's actual output. No monitoring service, model API or package installation is required to use the app.
Its grammar is intentionally small enough to explain. A promise names a trigger, a required or forbidden event, an interval and the correlation fields. Written event order matters; matching is broadcast across overlapping obligations rather than consuming an event after one match.
- Language reference: https://github.com/ToukoUrsin/traceweaver/blob/main/docs/LANGUAGE.md
- Examples: https://github.com/ToukoUrsin/traceweaver/tree/main/examples
- CLI:
node src/cli.js examples/deploy.weave examples/deploy.trace --at 30000
Challenges and accomplishments
The hardest boundary was deciding when absence is evidence. A required event arriving at the exact deadline must be processed before a failure is concluded. An open observation window must remain pending. An absence explanation must retain the relevant complete window, rather than pretending a tiny event subset proves that nothing else happened.
Eighteen tests cover deadline boundaries, same-time order, overlapping and zero-length windows, wrong keys, invalid units/types, imports and real CLI behavior. Scripted Chromium checks at desktop and phone widths exercised replay, all three stories, located errors and export/reimport. Invalid edited source hides stale results until it compiles again.

What I learned and what is next
A useful DSL needs both precise semantics and explanations people can inspect. Next steps are user testing of the syntax, richer editor support and adapters for real logs. Those would need explicit policies for incomplete and late telemetry. Today the watermark claims completeness only for the supplied trace: missing telemetry cannot be distinguished from an event that never occurred. This is a bounded trace checker, not a distributed monitoring service or theorem prover.
Originality, credits and AI disclosure
Created from scratch on September 21, 2026 for Syntax Summit by Touko Ursin (solo). The grammar, implementation, fixtures, UI and tests are original. OpenAI Codex substantially assisted language design, implementation, interface, tests and documentation; Claude (Anthropic, via Claude Code) assisted with browser QA, small fixes and the demo film. The film narration is an ElevenLabs stock synthetic voice; all footage is the actual app and real command output. The examples are synthetic; no private logs or external datasets were used. Runtime has no AI inference dependency. MIT licensed, using system fonts and original CSS/SVG visuals.
Links
- Working app: https://toukoursin.github.io/traceweaver/
- Source (MIT): https://github.com/ToukoUrsin/traceweaver
Built With
- css3
- html5
- interpreter
- javascript
- node.js
- svg
Log in or sign up for Devpost to join the conversation.