feat: the test suite no longer ships, and dist upgrade deletes what a release stops shipping (#113)
CI / verify (push) Successful in 5m26s
CI / pwsh (push) Successful in 2m7s
Release / release (push) Successful in 35s

dist export leaves out tools/chemenu/tests/, tools/pytest.ini and tools/.coveragerc by exact
path - the suite tests the origin repository, and 257 of its tests failed in a fresh export.
dist upgrade now deletes a no-longer-shipped file that is unchanged since install, with any
directory that leaves empty, and blocks one changed since install like any local change
(--take-release deletes it, --keep-local keeps it). --prune is accepted and ignored.

Files changed:
- CHANGES.md
- EVALS.md
- VERSION
- instructions/mcp-read-server.md
- instructions/upgrade-instance.md
- tools/CONTRACT.md
- tools/README.md
- tools/chemenu/commands/dist_cmd.py
- tools/chemenu/tests/test_dist_cmd.py
- tools/chemenu/tests/test_dist_upgrade.py
- tools/requirements-mcp.txt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2
This commit is contained in:
torbenandClaude Opus 5.5 committed 2026-10-03 20:12:32 +02:00
1 parent dd565d249f
commit 0d3499ab04
11 files changed
+479 -87

No files matched your search

+9 -3
View File
@@ -52,7 +52,7 @@ but names a path that has gone raises `ToolPathError`, which the CLI turns
into an `ERROR` line pointing at the preflight rather than a traceback.
The package runs natively on Windows as well, which CI never does. So the rules that keep
it portable are held by reading the source, in `tests/test_portability.py`: a path that
it portable are held by reading the source, in the origin repository's `tests/test_portability.py`: a path that
becomes a string goes through `.as_posix()`, a text file is opened with `encoding=` and
written with `newline="\n"`, a `subprocess` call with `text=True` names `encoding="utf-8"`,
and only `filelock.py` imports `fcntl` or `msvcrt`. An `rg` path comes back with `\` on
@@ -109,7 +109,7 @@ tools/
search/ pluggable search backends, plus service.py - the search core
tasks/ the task-tracker provider layer: protocol.py (TaskReader/TaskWriter), config.py (.wikitool-tasks.json), one module per adapter - no instruction ever learns which provider it is
commands/ one module per command or command group: the terminal adapters
tests/ pytest suite
tests/ pytest suite - origin repository only, `dist export` leaves it out
```
**A script beside the package.** `bugreport.py` is not part of `chemenu` and imports nothing
@@ -121,7 +121,7 @@ identities it can read from the machine (stage 1), and `--bundle`/`--candidates`
model found in the result (stage 2), both word by word so that length, separators and depth
survive. The mapping, the review list and the candidate file stay beside the bundle directory.
`dist export` ships it with the rest of `tools/`;
its tests (`tests/test_bugreport.py`) run it on a bare interpreter (`-I -S`) to keep that promise.
its tests (`tests/test_bugreport.py`, in the origin repository) run it on a bare interpreter (`-I -S`) to keep that promise.
It is started through `tools/bugreport` (`bugreport.ps1` under PowerShell), which assumes no more
than the collector does: no preflight, no `.wikitool-tools.json`, no venv. It looks for the
@@ -243,8 +243,13 @@ the tool writes edges into a collection whose rules the author never read.
directions so an ignore rule can neither swallow tracked content nor stop
ignoring generated copies.
<!-- dist:strip-start -->
## Tests
The suite exists in the origin repository only: `dist export` leaves out `chemenu/tests/`,
`pytest.ini` and `.coveragerc`, because the suite tests that repository's own type-specs and
conventions, not an instance's.
```bash
cd tools && .venv/bin/python -m pytest -q
```
@@ -275,3 +280,4 @@ section name from `sections`, not on a literal.
Assert on prose in a type-spec or a contract only when the prose is the subject of the test.
Otherwise it is a tripwire that fires on an edit nobody connected to the test.
<!-- dist:strip-end -->