Tobi T4 consensus: alpha gems shouldn't ship without proof that
'bundle exec rake test' passes on push. Workflow runs the test
suite + gem build + post-install smoke load on Ruby 3.2, 3.3,
and 3.4.
Workflow will activate when the repo moves to GitHub. Local
'bundle exec rake test' continues to be the dev feedback loop.
Code review consensus from Tobi+Sandi: the empty-block call
'Opencode::Instrumentation.instrument(name, payload) { }' at fire-
and-forget call sites in opencode-rails is API smell. Tobi: 'two
named verbs are clearer than one verb with a vestigial block.'
Sandi: 'a method with a block parameter that's optional but expected
empty in some call sites is doing two things.'
Two emission shapes now:
.instrument(name, payload) { ... } # block; duration measured
.notify(name, payload) # fire-and-forget; no block
Both flow through the same adapter. The adapter still always
receives a block argument (some adapters key on it, e.g. AS::
Notifications.instrument requires a block) — .notify passes an
empty {}. Adapter return value is ignored for .notify (it returns
nil); .instrument continues to pass through the block's return.
Three new tests in smoke_test.rb:
- no-op when no adapter set
- forwards to adapter + verifies block presence + verifies that
.notify returns nil (not the adapter's return)
- works without a block at the call site
Also: switched gemspec metadata URLs from Gitea to GitHub. The gem
will eventually publish from github.com/ajaynomics/opencode-ruby —
the metadata now reflects that. (No actual GitHub remote push yet;
that's the user's manual step.)
15 tests pass, 32 assertions, 0 failures.
Reference material for shipping v0.0.1.alpha1. Not part of the gem
(excluded from gemspec.files), but lives at repo root so the human
launching it has the steps in one place.
Sections:
1. Publish to Rubygems (gem signin + push + verify; Gemfile swap)
2. Three screenshots (terminal quickstart, rubygems.org page,
Gemfile.lock excerpt) — Tobi's 'don't ship until the screenshots
are beautiful' bar
3. Announcement drafts (r/ruby, dev.to, Twitter/Bluesky/Mastodon)
4. Friendly note to Eric Guo (opencode_client maintainer) — D1
etiquette
5. Demand-signal tracking (60-day window per D18) — thresholds for
deciding whether to extract opencode-rails next
6. Note to OpenCode maintainers about repo donation if traction hits
(D2)
assets/screenshots/ created as an empty directory (with this commit)
so screenshot files can land alongside LAUNCH.md in a single PR
after the human takes them.