Run the core tests from the gate and finish the layout rename

The gate now runs pytest as well, so one command answers whether the code
base is broken: syntax, protocol imports, the 125 core tests, then the lab
functional suites. It fails when a test fails, verified by feeding it a
deliberately broken test.

Two leftovers from moving the labs into experiments/ are fixed: the lab
command still pointed at tests/, and the hook only watched protocol and
tests, so edits under experiments/ and tools/ triggered nothing.

Profiling the 3.6 s gate: 0.24 s syntax, 0.12 s imports, 0.61 s pytest,
2.7 s lab functional suites, of which Lab042's software loopback is 1.14 s
because it pushes a whole image through the chain. The pytest addition is
the small part. prepare_jpeg is now cached, since six checks call it and
each call re-encoded the image at several qualities.

README described the gate without the tests it now runs.
This commit is contained in:
LittleSam129
2026-08-11 13:40:05 +03:00
parent a37ad1f7b3
commit 13f183f7c7
5 changed files with 57 additions and 7 deletions

View File

@@ -12,7 +12,7 @@ argument-hint: <номер лабы> [краткая постановка]
Запусти агента `Explore` с запросом: что в `protocol/` уже относится к этой задаче,
какие модули придётся трогать, где есть пересечение или дублирование, как устроены
две-три ближайшие по смыслу лабы в `tests/`.
две-три ближайшие по смыслу лабы в `experiments/`.
Прочитай сам последние записи в `PROJECT_LOG.md` — там указано, чем должен
заниматься следующий этап.

View File

@@ -19,7 +19,7 @@ import subprocess
import sys
PROJECT_ROOT = Path(__file__).resolve().parents[2]
WATCHED = re.compile(r"[\\/](?:protocol|tests)[\\/][^\\/]+\.py$")
WATCHED = re.compile(r"[\\/](?:protocol|experiments|tests|tools)[\\/][^\\/]+\.py$")
def main() -> int: