102 lines
8.6 KiB
Markdown
102 lines
8.6 KiB
Markdown
# Артефакты пака 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 пользователя);
|
||
числа прогона — строка `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/`.
|