textmachine/platform/docs/p8-review/README.md

8.6 KiB
Raw Blame History

Артефакты пака P8-REVIEW (24.08.2026)

Скрипты и снимки, которыми воспроизводятся находки пака (PD-375PD-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 пользователя); числа прогона — строка battery-final.log таблицы ниже.

⚠ Два правила, без которых мутации читаются неверно

  1. Копия platform/, вынутая из репозитория, даёт ДВА возможных красных, не связанных с кодом: gates.TestTheAnnouncedContractVersionIsTheOneTheCanonRatified (гейт читает канон по пути ВЫШЕ модуля — постоянный, заведён строкой PD-395) и runner.TestARunIsBoundedByItsOwnCgroup (грабли стенда: опустевший cgroup.subtree_control у tm.slice, лечится строкой из рецепта). Поэтому мутация судится по ДЕЛЬТЕ против чистой базовой линии ТОЙ ЖЕ копии, а не по «батарея красная» и не по exit-коду.
  2. Вердикт выносится по ТОПИЧНОСТИ упавшего теста, а не по цвету. У пака это стоило одной ошибки: мутация ClearSession покраснела на TestAClaimThatLostARaceToAReleaseIsRetriedAndNotAnError — известном флейке PD-369, к куке отношения не имеющем. Ложное «пойман» ТИХО теряет находку о недостающем пине.

Как пере-снять мутации координатора

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 знает M1M16 поимённо, репозиторий не трогает никогда (откат — копирование из 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.txt06-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/.