v0.51.0

feder-cr/invisible_dotsv0.51.0Sep 14, 2026by github-actions[bot]

Upgrading?

AI Summary

This release refactors the server lifecycle management by introducing a `Work` class to centralize state, significantly reducing code complexity and file size. It also improves user feedback by making browser rebuilds explicit and updates error handling to align with invisible-playwright 0.15.0.

Key Highlights

  • Introduction of a `Work` class to own the server lifecycle (declare, wake, look, act, remember, close).
  • Reduction of `server.py` from 1,231 to 783 lines by consolidating state management.
  • Browser rebuilds are no longer silent; `browser_navigate` now warns users if the browser died and was reopened.
  • Updated error handling to recognize `TargetClosedError` from invisible-playwright 0.15.0.

New Features

  • Centralized server lifecycle management via the `Work` class.
  • Explicit warning messages for browser rebuilds in the transcript.
  • Address scanners now read both modules.

Full Release Notes

The server held its whole lifecycle in four module globals - the registry, a restored flag, the pages seen and the pages owed - and a dozen free functions reading them. Every fixture that wanted a clean server rebuilt all four by hand, which is the tell of state that wants to be one thing with one lifecycle; the cost showed three times in one afternoon (#1324).

`Work` now owns it: declare, wake, look, act, remember, close, each one method, documented in the order it happens. The server builds one from `AIHAWK_SESSION_ID` and every tool goes through it; a test installs one of its own with a factory that launches nothing. `server.py` is 783 lines where it was 1231, with nothing added but the object.

A rebuild is no longer silent: `browser_navigate` says in front of its answer that the browser had died and was reopened as the same person, so a person watching the window close and reopen reads the same thing in the transcript.

And a dead browser is recognised by its type: invisible-playwright 0.15.0 raises one `TargetClosedError` for a disposed object and a closed pipe alike and exports it, so the three sentences 0.50.0 matched are gone and the floor moves to 0.15.0.

The address scanners read both modules now. Five known-bad mutations seen red. Suite 622 green, ruff, content and english gates clean. Version 0.51.0.

Related Repositories