Skip to content

Flowlight 0.9.0 - #8

Merged
blessdyb merged 2 commits into
mainfrom
release/0.9.0
Sep 27, 2026
Merged

blessdyb merged 2 commits into
mainfrom
release/0.9.0

Conversation

@blessdyb

Copy link
Copy Markdown
Contributor

First of the 0.9 line: turning claims the app makes into things it can show.

Coverage

Every other screen answers what happened. This one answers what you would not have been told, which is what decides how much the others are worth. Flowlight says it sees every connection, and then honest paragraphs elsewhere list the exceptions — so reading any screen correctly meant having read the docs first.

Three questions per app, kept separate because they fail separately:

  • Seen. The filter sees flows as they open; the sampler reads counters once a second and misses whole connections between readings. That gap can't be expressed as a percentage, so it's stated in words rather than scored.
  • Named. The share of an app's bytes — not connections — whose destination had a hostname. One unnamed connection carrying a gigabyte is a bigger hole than a hundred carrying a kilobyte, and counting connections ranks them backwards.
  • Readable. Four answers, one gap: being read, never reached the proxy, on the Never decrypted list (a choice), or inspection off (a setting).

What no engine sees at all is on the screen, not in a footnote: traffic from before capture started, system services content filters are never shown, certificate pinning, QUIC, an agent's MCP server on a pipe.

A crash that was waiting for a tenth screen

The sidebar derived ⌘1…⌘9 from each item's position, so the tenth produced Character("10") — which traps in Swift. The app would have crashed on launch, not in some edge case. ⌘1–⌘9 then ⌘0 now.

Two findings from the translation pass, fixed here

  • Sampling with nettop once a second duplicated an existing key with the same meaning; two keys with near-identical translations in nine languages would have drifted on the next edit. Collapsed to one.
  • The row said "never-inspect list" while the interface calls it Never decrypted, so a reader couldn't find the switch being referred to. The English now matches the UI.

Checks

482 tests including seven for the coverage model, ten catalogs at 1200/1200 with zero specifier mismatches, docs section written and its help anchor verified by test.

🤖 Generated with Claude Code

blessdyb and others added 2 commits September 27, 2026 01:57
Every other screen answers what happened. This one answers what you would not have been told, which decides
how much the others are worth. The app claims it sees every connection, and then honest paragraphs elsewhere
list the exceptions — traffic from before capture started, system services content filters are never shown,
certificate pinning, QUIC, an agent's MCP server on a pipe — so reading any screen correctly meant having read
the documentation first.

Three questions per app, kept separate because they fail separately. Whether it was *seen*: the filter sees
flows as they open, the sampler reads counters once a second and misses whole connections between readings,
which is a gap no percentage can express and so is said in words. Whether it was *named*: the share of that
app's bytes, not connections, whose destination had a hostname — one unnamed connection carrying a gigabyte is
a bigger hole than a hundred carrying a kilobyte, and counting connections ranks them backwards. And whether
it was *readable*: being on the Never decrypted list is a choice, inspection being off is a setting, and only
"never reached the proxy" is a gap.

What no engine sees at all is on the screen rather than in a footnote, because a coverage figure that counted
only what it could see would be a reassurance rather than a fact.

Adding a tenth screen also found a crash that had been waiting: the sidebar derived ⌘1…⌘9 from each item's
position, so the tenth produced `Character("10")` and trapped on launch. It is ⌘1…⌘9 then ⌘0 now, as browsers
number tabs, and nil past that.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Version, notes and rebuilt site, on the release branch until the tag has published.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@blessdyb
blessdyb merged commit b96b95c into main Sep 27, 2026
6 of 7 checks passed
@blessdyb
blessdyb deleted the release/0.9.0 branch September 27, 2026 09:12

This branch was successfully deployed

1 active deployment
release — ea14698f Deployed Sep 27, 2026 by blessdyb via release #57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant