← The Loop
· WEEK 31 · 5 min

Building Spectroscope, part 5: ship week

TL;DR

Four days after going public: signed artifacts on Maven Central, a Python edition that reproduces the Java wire format byte for byte, a native OTel exporter, and an edu-suite that teaches the tool. The voice rule for all of it: a laboratory instrument, not AI hype.

Public and named, spectroscope shipped fast. The ship log reads like a week of compound interest on the stream-first design.

ship logstdout
07-21  Fleet Manager — spawn-and-stop control for many agents at once
       spectroscope-edu-suite — backend-free React 19 teaching app,
       interactive lessons, deployed to edu.spectroscope.ai
07-22  v0.1.0 first public release
       v0.2.0 signed + notarized on Maven Central
         dev.spectroscope:spectro-core:0.2.0
         dev.spectroscope:spectro-orchestrator:0.2.0
       spectroscope-harness-python — the wire format, byte for byte
07-23  18 sessions -> 34 verified OTel traces via a local Langfuse bridge,
       then a native OtlpSink ships inside spectro-core
       test gate: 725 JUnit · 494 vitest
07-24  0.3.0 scoped · gate: 733 JUnit · 501 vitest
fig. 01 — Four days, one thread: everything is a consumer of the same event stream.

The piece I keep coming back to is the Python edition. It re-serializes the Java wire format byte for byte, down to key order, separators, null-omission and line termination, pinned by a whole-document string comparison in its own test suite. That is the thesis as an acceptance test: if the stream is truly the contract, an independent reader in another language must reproduce it exactly, and "close enough" fails the build.

the spectrum viewimage
Screenshot of the spectrum view
fig. 02 — The shipped product reading a run: the event stream fanned into discrete spectral lines.

The OTel work closes the observability loop from the other side. First a bridge proved the streams translate, turning eighteen sessions into thirty-four verified traces. Then a native TracingPort shipped inside the core, so the tool that watches agents now exports its own telemetry as a first-class OpenTelemetry producer. I wanted the watcher to be watchable from the start, and this was the week it became true.

Through all of it, one design rule from the product's own design system kept the tone in check: calm, precise, alert. A laboratory instrument, not AI hype.

What I'd do differently

Commit the corpus behind every number. One widely-quoted figure from this week, a session-count verification on a kanban card, was a one-off manual check with no corpus committed behind it. It was probably right. But the byte-identical format test is provably right, forever, in two languages. Only one of those two kinds of number survives an audit.