Giovambattista Fazioli

octoscope v0.13.0 β€” Repos tab gets serious πŸŸ’πŸ”΄πŸŸ‘

Two additions on the Repos tab that turn it from a passive listing into a dashboard you actually live in.

CI status, at a glance

Every Repos row now leads with a coloured dot sourced from the default branch's status-check rollup:

- 🟒 green β€” passing

- πŸ”΄ red β€” failing

- 🟑 yellow β€” pending / expected

- dim Β· β€” no rollup (no CI on this repo)

Image

Press s and the sort cycle picks up a "by CI" entry that surfaces failing repos first β€” open octoscope and immediately see the rows that need attention.

Pinned repos

Press P on any Repos row to pin it. Pinned repos stick to a sticky section at the top of the list, ordered exactly as you want, separated from the rest by a muted rule. The choice is written back to ~/.config/octoscope/config.toml automatically β€” your pins survive restarts. Sort cycle, filter and public-only mode all respect the partition.

pinned_repos = [
  "gfazioli/octoscope",
  "gfazioli/Mantine-Hint",
]

Quiet but important

There's also a vhs smoke harness under tapes/ that scripts the canonical user flows β€” same scenarios I used to walk through manually before every release, now reproducible with make tapes. And a CI workflow runs build / test / lint on every push, so regressions don't sneak through to a tag. None of this you see as a user, but every future release lands faster and safer because of it.

Upgrade

brew upgrade gfazioli/tap/octoscope

Or grab a binary from the release page: https://github.com/gfazioli/octoscope/releases/tag/v0.13.0


As always: read-only, free, MIT, on Linux / macOS / Windows. Source: https://github.com/gfazioli/octoscope

πŸ‘‰ What would you want to pin to the top?
πŸ‘‰ CI dashboards for the 5 repos you watch?

πŸ‘‰ Personal projects only?

Curious how people use it.

35 views

Add a comment

Replies

Best
Stan Kolotinskiy

Nice stuff - and the VHS approach is amazing! I guess it would be really great to be able to have assertions inside tapes - that would make things sooo much easier to test

Giovambattista Fazioli

@sk_uxpinΒ Thanks β€” and great catch. vhs by itself doesn't expose Expect / Assert in its DSL today (it's record-only), so the literal "assertions inside the tape" needs to land via a wrapper.


Three concrete paths I'm weighing for the follow-up:


1. Textual transcript + grep. vhs can dump a plain-text snapshot alongside the GIF; a tiny script asserts expected substrings ("breadcrumb says Files / file.go", "row 3 highlighted"). Cheapest entry point, no new deps.


2. PNG / SSIM diff against baseline. Catches layout shifts the textual pass misses, but fragile across OS/font renderers β€” every legit UI tweak forces a baseline refresh. Skipping until someone actually needs it.


3. charmbracelet/x/exp/teatest. The test-oriented sibling of vhs β€” drives the tea.Model with simulated messages and snapshots the rendered output at model level (no terminal artefacts). Probably the "proper" path for unit-style assertions on the TUI; vhs stays as the asset-generation / visual-smoke layer.


My current plan is to start with (1) β€” it pays for itself the moment any tape would catch a regression β€” and graduate to (3) when there's a real assertion lacking the textual grep can't express. (2) only if specific layout bugs ever ship and demand pixel-level coverage.


Tracked it for a future release. Thanks again for nudging this forward β€” both v0.12.0 and v0.13.0's follow-ups now have your fingerprints πŸ™

Stan Kolotinskiy

@gfazioliΒ sounds like a great approach to me!