# Артефакты пака P8-REVIEW (24.08.2026) Скрипты и снимки, которыми воспроизводятся находки пака (`PD-375`…`PD-395` и ⚠-дописки к существующим строкам). Лежат в репозитории намеренно: строка регистра, чьё «воспроизведение» существует только текстом, воспроизведением не является. ## Стенд, на котором всё снято Postgres 18.4 без root (`~/.local/pgsql`, сокет `/tmp`, порт 55433) · движок `tmctl` и шаблон книги собраны по рецепту `../STACK_DECISIONS.md`, раздел «Стенд разработчика» · дев-демон координатора на `127.0.0.1:8099`, метрики `127.0.0.1:9464` · по своей копии дерева, своей базе и своей паре портов на каждого из восьми субагентов. Базовая линия батареи на дереве репозитория, ТРИ гейта выполнены (DSN · пара `TM_PLATFORM_TEST_ENGINE_BIN`+`_BOOK_TEMPLATE` · достижимый пользовательский менеджер systemd): **18 пакетов, EXIT=0, скипов 0, линтер 0 issues** — `battery-final.log`. ## ⚠ Два правила, без которых мутации читаются неверно 1. **Копия `platform/`, вынутая из репозитория, даёт ДВА возможных красных, не связанных с кодом:** `gates.TestTheAnnouncedContractVersionIsTheOneTheCanonRatified` (гейт читает канон по пути ВЫШЕ модуля — постоянный, заведён строкой `PD-395`) и `runner.TestARunIsBoundedByItsOwnCgroup` (грабли стенда: опустевший `cgroup.subtree_control` у `tm.slice`, лечится строкой из рецепта). Поэтому мутация судится по **ДЕЛЬТЕ** против чистой базовой линии ТОЙ ЖЕ копии, а не по «батарея красная» и не по exit-коду. 2. **Вердикт выносится по ТОПИЧНОСТИ упавшего теста, а не по цвету.** У пака это стоило одной ошибки: мутация `ClearSession` покраснела на `TestAClaimThatLostARaceToAReleaseIsRetriedAndNotAnError` — известном флейке `PD-369`, к куке отношения не имеющем. Ложное «пойман» ТИХО теряет находку о недостающем пине. ## Как пере-снять мутации координатора ```sh export P8_REPO=<репо>/platform export P8_COPY=~/tm-p8-review/mine/platform mkdir -p ~/tm-p8-review/mine && cp -a "$P8_REPO" "$P8_COPY" export TM_PLATFORM_TEST_DSN='postgres://postgres@/<своя база>?host=/tmp&port=55433&sslmode=disable' export TM_PLATFORM_TEST_ENGINE_BIN=~/tmstand-work/tmctl export TM_PLATFORM_TEST_BOOK_TEMPLATE=~/tmstand-work/book-template.yaml python3 plant.py M8 plant && (cd "$P8_COPY" && go test ./... -count=1); python3 plant.py M8 revert P8_OUT=. ./run-round2.sh # девять посадок разом, с чистой базовой линией и судом по дельте ``` `plant.py` знает M1–M16 поимённо, репозиторий не трогает никогда (откат — копирование из `P8_REPO`). ## Что где лежит ### Корень — работа координатора пака | Файл | Что доказывает | |---|---| | `battery-final.log` | сдаваемый прогон батареи: 18 пакетов, EXIT=0, скипов 0, линтер 0 issues | | `reconcile-two-ways.sh` | сводит баланс, сумму леджера и открытые холды ДВУМЯ независимыми путями — тем, что отвечает платформа, и прямым SQL по сырому леджеру | | `reconcile-with-open-hold.txt` | **обязательная норма промта**: сведение на НЕТРИВИАЛЬНОМ состоянии — 8 строк леджера и ОТКРЫТЫЙ холд $0.06 в момент замера, оба пути сошлись | | `reconcile-after-settle.txt` | то же сведение после закрытия холда | | `plant.py` · `run-mutations.sh` · `run-full-mutations.sh` · `run-round2.sh` | харнесс посадок и три прогона | | `mutations.log` · `mutations-full.log` · `mutations-round2.log` | их результаты; в третьем — чистая базовая линия копии и суд по дельте | | `agent-mutations.md` | таблицы 42 посадок восьми субагентов (⚠ сырые логи их прогонов НЕ сохранены) | | `pd23-retention-probe.sh` · `pd23-result.txt` | ретенция журнала входов РАБОТАЕТ: строка возрастом 200 суток исчезла на ближайшем тике, демон напечатал `"login sweep" events=1` | | `sse-origin-probe.txt` | SSE-хендшейк с ЧУЖИМ `Origin` и амбиентной кукой отвечает 200 и стримит (`PD-6`) | | `sse-outlives-revocation.txt` | отозванная сессия получает кадр данных через 9 секунд после `revoke` (`PD-379`) | ### `axis1-money/` — деньги и леджер Готовые пины к `PD-376` (`a1_spendbound_test.go.txt`, независимый `r1_spendbound_test.go.txt`) · воспроизведение `PD-375` (`a1-mut5-ceiling-bound.sh`, `r1_ceiling_bound_test.go.txt`, `a1-full-battery-under-MUT5.log`) · `PD-377` (`a1-ceiling-column-doc.sql`) · `PD-378` (`a1-usage-overflow.sh`, сам откатывает грант; порог — `r1_usage_threshold_test.go.txt`) · проба констрейнтов денежных таблиц (`constraint-probe.sh` + `.out`). ### `axis2-auth/` — вход, сессии, CSRF `sse-outlives-revocation.sh` и `sse-outlives-absolute-ceiling.sh` плюс независимые рефутерские `refute-*` — четыре независимых воспроизведения `PD-379` · `mutations-axis2.sh` (шесть посадок, несёт гард «refusing to mutate the live repository») · `csrf-matrix.sh` и `session-clocks-probe.sh` — матрица CSRF по маршрутам и поведение обоих потолков на границах. ### `axis3-queue/` — очередь и джобы Пробы на РЕАЛЬНЫХ функциях с реальным Postgres: `probe_settlement_surface_test.go.txt` (`PD-384`), `probe_sweep_serialisation_test.go.txt` (`PD-386`, 40 тактов против 9), `probe_drain_budget_pair_test.go.txt` (`PD-388`) · `live-stalled-settlement.sh` (`PD-385`, состояние выращено штатными путями) · `mutations.sh` и `mutations-refuter.sh` · рефутерские пины `refute_*_test.go.txt`. ### `axis4-metrics/` — метрики **Механизм оси целиком:** `01-metrics-rest.txt` (покой) → `03-full-before-outage.txt` → отказ вызван → `04-full-during-outage.txt` → `06-diff-before-vs-during-outage.txt` (дифф, на котором ось и закрывается) · `20-abandon-keeps-the-hold.sh` и `r3-abandon-hold.sh` (`PD-391`) · `30-stale-gauges.sh` и `r1-boot-with-blind-telemetry.sh` (`PD-390`) · `r6-read-replica-zeroes.sh` (вторая половина `PD-390`) · `50-gauges-without-a-handle.sh` и `r5-hold-without-a-handle.sh` (`PD-392`) · `40-exposition-check.sh` (`PD-393`) · `60-mutations.sh` (`PD-389`). ## Переносимость Скрипты параметризованы переменными окружения (`P8_COPY`, `P8_REPO`, `P8_OUT`, `P8_ENV`, `CTL`, `ROOT`, `PLATFORM`, `BASE`) — стендовых путей этой сессии в исполняемом коде не осталось, остались только примеры в комментариях. `bash -n` чист на всех скриптах каталога. Файлы с расширением `.go.txt` — готовые пины и пробы; они НАМЕРЕННО не `.go`, иначе `go vet ./...` и `gofmt -l` в зоне падают на конфликте пакетов внутри `docs/`.