v0.68.1

feder-cr/invisible_dotsv0.68.1Sep 15, 2026by github-actions[bot]

Upgrading?

AI Summary

This release consolidates the English language gate logic by moving it from a local script to the `invisible_core` module. It removes outdated file exclusions, ensures version consistency across configuration files, and makes `invisible-core` an explicit test dependency to support direct imports.

Key Highlights

  • Moved the English language gate logic from a local script to the `invisible_core` module.
  • Updated the dependency floor to `invisible-playwright>=0.16.2`.
  • Ensured version declarations are consistent across `pyproject.toml`, `manifest.json`, and `server.json`.
  • Added `invisible-core` as an explicit test dependency.
  • Removed outdated file exclusion paths that existed in the wrapper but not this repository.

Full Release Notes

* The language gate comes from the core, and this repository exempts nothing

invisible-core 30.23.0 carries the check that a public repository is English,
as `invisible_core.english`. Until now it was a script copied here from the
wrapper, and the copy carried the wrapper's data with it: four of the five
paths in its exclusion list - `src/invisible_playwright/_pw/`, `_driver/`,
`_juggler/injected.js`, `tests/test_fork.py` - do not exist in this repository
and never did. A dead exclusion never makes anything red, which is exactly why
nobody found it; the shared gate refuses one.

So `scripts/check_english_only.py` is deleted, the `english` CI job installs the
core and runs the module, and the tool-description test imports the word list
from `invisible_core.english` instead of loading the script by path. This
repository declares no `[tool.invisible.english]` at all: measured, the shared
gate reads 245 tracked files here and is silent with nothing exempt.

The dependency floor moves to `invisible-playwright>=0.16.2`, which is the
first wrapper pinning a core that has the module the test imports.

* The version is declared in three files, and the suite declares what it imports

Three things the CI found on the first run, all of them mine and all of them
real.

The version lives in `pyproject.toml`, `manifest.json` and `server.json`, and
bumping one left two behind: the gate compares them and said so. Bumped.

`invisible-core` is now a DECLARED test dependency. It was already arriving
through `invisible-playwright`, so nothing was missing at runtime - but since
30.23.0 the language gate is `invisible_core.english` and two test files import
it directly, and an import that leans on a transitive dependency works until the
day the wrapper stops needing the core. `test_the_suite_declares_everything_it
_imports` caught it against the published stack, which is what it is for.

And `test_the_gate_says_which_tree_it_judged.py` is rewritten against the module
instead of the deleted script. Its own docstring had named this consolidation and
said it was not done yet - "the single home for a rule that all three must obey
is invisible_core ... that consolidation is a core release and is not done here".
It is done, so the test that asserted the REFUSAL is gone: the script could only
judge where it lived, so pointing it elsewhere was a mistake to catch; the module
takes the tree as an argument, so pointing it elsewhere is an ordinary request.
What replaces it is the property the refusal was protecting - a cross-repo run
answers about the tree it was given and names it, and pointed at a guilty tree it
accuses THAT one rather than reporting its own clean state. The file also pins
what the copy cost: four of the five exclusions it carried named paths that only
ever existed in the wrapper, and this repository now declares none.

Suite 693 passed against the published stack - invisible-core 30.23.0 and
invisible-playwright 0.16.2 resolved from the index, in a clean venv. ruff clean,
language gate clean on 245 files with nothing exempt.

Related Repositories