WEB board

всеканоны и докиворкеры↗ iOS↗ Легаси
WEB-601 · Задача · — · web

SEC-052 [Medium] Expiry sweep завершает reservation после успешного heartbeat

Закрыт P1 · важно ведёт: — эпик: WEB-515
Суть
# SEC-052 — Expiry sweep завершает reservation после успешного heartbeat
## 1. Суть и условие дефекта
Expiry sweep не должен завершать reservation после успешного (свежего) heartbeat — гонка sweep↔heartbeat не должна закрывать резервацию.

## 2. МЕХАНИКА
`src/lib/billing/spendReservation.ts:1405-1414` (скан просроченных), `:1644-1660`/`:2330-2346` (settle). **Корень:** sweep завершал reservation, не перепроверяя свежий heartbeat внутри той же транзакции `FOR UPDATE`. Фикс `1060a940a` (repair 3350): `closeReservation` перепроверяет `leaseExpiresAt`/`heartbeatAt` внутри транзакции до записи `SETTLED_MAX`.

## 3. ЧТО СДЕЛАНО
1. **10.09** — триаж BACKLOG64 (база `49bc58dcc`): карточка заведена из отчёта R09; условие подтверждено, независимая приёмка 3303SEC052ACCEPTANCE-REPORT.md (a2) — NO-GO.
2. **10.09** — repair-волна 3350 написала фикс `1060a940a`; независимая source-приёмка 3370 — GO.
3. **10–11.09** — интеграция 3473 → 3488 (все 26 кандидатов, HEAD `d95fd864`, 201/201 миграций, P19 negative blocksStartup).
4. **12.09** — посадки на прод: l115f-r2 (18:02Z, source `92f7ae807`, artifact `1353e969b`) → l115g (`9c8a9762`) → l115h (`f0777c4d`, 23:47Z).
5. **13.09** — l115i (`6aac3421`, 06:37Z); получено живое доказательство (см. ниже) → карточка переведена в done. Эпик WEB-515 закрыт.
6. **13.09** — закрыто харнессом (не живым гейтом на проде): волна 3626 — изолированный стенд с артефактом прода l115i (`.next/standalone`, не пересобран) + одноразовые фикстуры


## 4. ЧЕМ ДОКАЗАНО ЖИВЬЁМ
Волна 3626 (13.09): своя одноразовая PG16 + настоящая активная DISPATCHED-резервация со свежим лизом против `sweepExpiredReservations()` на барьере `SpendAccountingEpoch FOR UPDATE`: лог `[billing][expiry_claim_lost]`, `sweep={releasedPreDispatch:0,settledMax:0,skipped:1,failed:0}`; live-gate `scripts/security/live-gates/gates/SEC-052.mjs` → `{"state":"DISPATCHED","lease_fresh":true}` → PASS. Evidence: `/home/ubuntu/waves/3626SECURITYLASTSIX-evidence/SEC-052.log`, `SEC-052-gate.log`, `SEC-052-fixture-row.txt`.

## 5. КАРТА ДОКУМЕНТОВ
  - Repair-волна: A2 `/home/ubuntu/waves/3350REPAIRRESERVATION-REPORT.md`
  - Независимая source-приёмка: M4 `/Users/milamarty/waves/3370INDEPENDENTRESERVATION-REPORT.md`
  - Приёмка условия (триаж): `/Users/annakorin/nc-ops-scripts/run-l115b-luna/acceptance-results/a2/3303SEC052ACCEPTANCE-REPORT.md`
  - Харнесс-отчёт: волна 3626 — изолированный стенд с артефактом прода l115i (`.next/standalone`, не пересобран) + одноразовые фикстуры
  - Отчёт 3626: `/home/ubuntu/waves/3626SECURITYLASTSIX-REPORT.md` (A2) = `/Users/milamarty/waves/inputs/3639/3626SECURITYLASTSIX-REPORT.md` (M4).
  - Evidence 3626: `/home/ubuntu/waves/3626SECURITYLASTSIX-evidence/` (SHA256SUMS).
  - Живая матрица гейтов: `/home/ubuntu/sec-checks-3592/out/matrix.txt` (A2) = `/Users/milamarty/waves/inputs/3639/matrix-l115i.txt` (M4).
  - Карта закрытия эпика: `WEB515-CLOSING-MAP.md` — `/Users/milamarty/waves/inputs/3639/WEB515-CLOSING-MAP.md` (M4) и `nc-ops-scripts/shift-20260912-resume/3604/collected/out/WEB515-CLOSING-MAP.md` (Intel).
  - Канон: `/Users/milamarty/waves/inputs/3639/canon449.json` (WEB-449).
  - Исходник R09 (мастер-разбор): `/Users/poolpooly/audit/inbox/2813-BLOCK24-PROVIDER-SPEND-WIRING-REPORT.md` (SHA `26816992…`).
  - Все 28 карточек: `/Users/milamarty/waves/inputs/3639/sec28.json`.

## 6. ОСТАТОК
нет (гонка закрыта; обратный контроль без heartbeat корректно делает SETTLED_MAX)

## 7. КАК ПЕРЕПРОВЕРИТЬ
```
NODE_PATH=node_modules node --experimental-test-module-mocks --import tsx --test \
  src/lib/billing/__tests__/reservationRepair.pg.test.ts   # реальный одноразовый PG
node scripts/security/live-gates/run.mjs   # гейт SEC-052 с SEC052_RESERVATION_ID на уцелевшей фикстуре
```


## История (триаж 10.09)

Правила обогащения: WEB-449. Parent WEB-515. BACKLOG64-TRIAGE-20260910. Дата UTC: 2026-09-10T17:07:52.835164+00:00.

## ДЛЯ ТИКЕТА — SEC-052

**Условие:** Expiry sweep завершает reservation после успешного heartbeat.

**Состояние:** подтверждено в изученных стендовых свидетельствах воркера на указанной базе; независимая приёмка на Нео ещё не выполнена. Это не объявление дефекта живого l115a. Исходный NO-GO относится к полному scope и может одновременно содержать незавершённые группы.

**Исследованные байты:** `49bc58dcc508c612b337c92af7d7d5bb71c7a681`. Базовая ветка — указанная в исходном отчёте; рабочее дерево lead `/Users/poolpooly/audit/nc` не используется вместо этой версии. **Файл:строка:** src/lib/billing/spendReservation.ts:1405-1414,1644-1660,2330-2346.

**Доказательство и controls:** Actual PG: sweep выбрал stale row, valid heartbeat продлил lease, sweep всё равно SETTLED_MAX10000micros; inverse order и один terminal event PASS. Red exit1 settledMax1 !=0.

**CVSS 3.1:** 5.9 Medium — `CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L` (предварительно).
Предварительно: concurrent paid-operation accounting; ошибочное maximum settlement подтверждено только на syntheticPG.
Числа пересчитаны по FIRST CVSS3.1, а не скопированы из заголовков: https://www.first.org/cvss/v3.1/specification-document#7-1-Base-Metrics-Equations . При неполных предпосылках оценка не становится окончательной. N/A/UNKNOWN не означает Low или нулевой риск.

**Предложение исправления:** Под reservation lock повторно проверить lease freshness относительно sweep timestamp; heartbeat, committed до close, должен отменять expiry claim.

**Сданные изменения:** Не представлен в этом возврате.
**Связи/дедупликация:** WEB-521 Старые условия SEC-001…048 не регистрируются заново. Эта карточка описывает отдельное условие, а не повтор счёта того же отчёта.

## KNOWN ISSUES / ТРАБЛШУТИНГ

Симптом → Expiry sweep завершает reservation после успешного heartbeat.
Проверка → воспроизвести указанный actual-module/PG fixture с положительным разрешённым контролем; сверить SHA исходников и хеши артефактов. Мок транспорта допустим, мок самой проверяемой проверки — нет. Report file получен и хеширован лидом; исходные raw artifacts вне inbox ещё не объявляются независимо проверенными.
Причина → src/lib/billing/spendReservation.ts:1405-1414,1644-1660,2330-2346.
Лечение/статус → Под reservation lock повторно проверить lease freshness относительно sweep timestamp; heartbeat, committed до close, должен отменять expiry claim. Приёмка/актуальность l115a пока pending. Если условие уже устранено позднейшим коммитом, зафиксировать точный fix→release mapping и принять существующий результат; повторный фикс не нужен.

## Три группы приёмки на Нео

1. **Байты и достижимость:** сравнить исследованную базу с переданным current candidate, проверить реальный entrypoint/инициализацию/feature flag и не подменять его вызовом недостижимого helper. Отдельно актуализировать policy/grants там, где это предпосылка.
2. **Поведение:** тот же безвредный red fixture на базе; нормальный positive control; после исправления — требуемый отказ/результат до side effect, повтор/конкурентный/отложенный вариант, точные счётчики. Для durable эффектов — одноразовый PostgreSQL, не только in-memory adapter.
3. **Независимость и сдача:** reviewer на Нео, не OpenAI; сверка diff/тестов/изменённых путей, bundle+SHA256, report с GO/NO-GO и отдельными UNKNOWN. Live/prod/host действия — только отдельная работа координатора. Не заявлять landing по наличию commit.

## Карта документов

- R11: /Users/poolpooly/audit/inbox/2818-BLOCK25-WALLET-CONCURRENCY-ACCEPTANCE-REPORT.md — SHA256 `9bda18bbbbb477af21fb98c4d238304a502e53e983328d961cb57ff31c45fe2c`
- Мастер-разбор: /Users/poolpooly/audit/outbox/BACKLOG64-TRIAGE-20260910.md
- Данные: /Users/poolpooly/audit/evidence/backlog64-20260910/findings28.json


SEC-INDEPENDENT-GO:3370
2026-09-10: Независимая source-приёмка 3370: GO для SEC-052/061 на 1060a940a799b7026cd518d633f9bf324a61c765. Собственные PG тесты BASE 2/5, candidate 5/5; raw RED/GREEN прочитаны. Heartbeat race, stale dispatch owner/version, concurrent replay, historic recovery, положительный billing. Legacy BASE 37/41, candidate 38/41: три одинаковых baseline failures остаются. QA 7441a4cd615258f87530074f923407d5ce84a9cf; SHA256 9c7614abc283df130b18d073b54e275f06e3d48d9bdb470449d0d85dfc6918d1, bundle verify и ancestry PASS. Report/bundle/raw evidence сохранены на Intel. Источник m4:/Users/milamarty/waves/3370INDEPENDENTRESERVATION-REPORT.md. Интеграция, сборка и live proof впереди; исправления не посажены.

CHECKPOINT3478:WEB-601 2026-09-10T23:30:08.650195+00:00
3473 активно объединяет 14 точных кандидатов для22 критериев. Этот кандидат reservation 1060a940a799b7026cd518d633f9bf324a61c765; критерии SEC-052,SEC-061. Входные hashes и git objects проверены до старта. Последний наблюдённый merge66a666e38 объединил манифест миграций; итогового integration verdict нет. SEC053/054 и062/064 вне этой партии. Предыдущий scoped GO не означает проверку конфликтов, сборку или посадку.
Полные отчёты и проверки SHA: /Users/annakorin/nc-ops-scripts/checkpoint-3478/snapshot.json; задания и SHA inputs: refill-20260911-0015,0025,0028,0030. Спецификация: /Users/annakorin/nc-ops-scripts/enterprise2-20260910/ENTERPRISE-2.md; цель: SHIFT-GOAL-20260911-8H.md.

CHECKPOINT3484:WEB-601 2026-09-10T23:46:59.374675+00:00
3473 integration GO: exact HEAD f9c514014fcedccdecc2cf9e7c39a79421b4655b, все 14 кандидатов/22 критерия сохранены; P19 и migration-set 200/200, дерево чистое, SHA и bundle проверены координатором. Кандидат reservation 1060a940a799b7026cd518d633f9bf324a61c765. Независимая 3484 Claude Opus доставлена на A1 с inputs SHA и exact BASE для merged-source/изолированной PG проверки. Пока подтверждена очередь, не выполнение тестов. Новых посадок нет; live flags/roles/scheduler/browser и post-QA впереди.
Доказательства: /Users/annakorin/nc-ops-scripts/checkpoint-3484/receipt.json, integration-manifest.json, focused-tests-summary.log, migration-gates.log и 3473SECURITYINTEGRATION-REPORT.md; доставка: refill-20260911-0050. Норматив: enterprise2-20260910/ENTERPRISE-2.md.

## HANDOFF-20260912T1721:WEB-601 — точка входа для нового агента
Правила обогащения: [[WEB-449]]. Наблюдение: 12.09.2026 18:21:36 Europe/Dublin / 17:21:36 UTC. Автор: координатор. История выше сохранена; эту запись читать как текущий handoff на указанное время.

**Задача.** SEC-052 [Medium] Expiry sweep завершает reservation после успешного heartbeat

**Что подтверждено и что остаётся.** 3521 дал bounded source/isolated-PG GO при общем NO-GO;3525 закрыл узкий SOURCE_PG_HANDOFF и CHARGE_COMPLETENESS, сохранив RELEASE_RUNTIME=OPEN. Итог на реальном релизе для этой карточки не подтверждён. 

**Как устроено / почему остановилось.** Expiry/reconcile: живой heartbeat не позволяет sweep завершить свежую reservation; доказать вызов таймера, stale recovery и отсутствие двойного эффекта.

**Следующая операция.** Общий переход релиза выполнять по [[WEB-515]]. Индивидуальный gate этой карточки: Expiry/reconcile: живой heartbeat не позволяет sweep завершить свежую reservation; доказать вызов таймера, stale recovery и отсутствие двойного эффекта. Зафиксировать exact deployed artifact, positive/negative, raw commands, exits и skips. Непройденный runtime gate не заменять повтором прежнего source suite.

**Исполнитель и приёмка.** Координатор даёт установленный artifact и исполняет хостовые операции; независимый security-приёмщик проверяет gate. Назначение не считать запущенным процессом.

**Условие закрытия.** Доказанный результат именно этой finding на установленной версии и соответствующий независимый вердикт; review остаётся до этого.

**КАРТА ДОКУМЕНТОВ**
- Intel: /Users/annakorin/nc-ops-scripts/tick-20260912-recovery/3521/3521ACCSECURITY26REPAIRED-REPORT.md
- Intel: /Users/annakorin/nc-ops-scripts/tick-20260912-recovery/3525/3525SECURITYHANDOFFGATES-REPORT.md
- Intel: /Users/annakorin/nc-ops-scripts/tick-20260912-recovery/3525/3525SECURITYHANDOFFGATES-evidence/GATES.md
- Intel: /Users/annakorin/nc-ops-scripts/release-l115f/r2/l115f-artifact.json
- Intel: /Users/annakorin/nc-ops-scripts/release-l115f/handoff-tickets/live-observation.json

**Релизная зависимость:** [[WEB-515]] — r2 staged/signed, compat BUILDING; prod l115e на времени наблюдения. Не путать SEC registry с количеством сегментов аудита.


SHIFT-STOP-20260912:R2:WEB-601
ТЕКУЩИЙ СРЕЗ ПЕРЕД ОСТАНОВКОЙ — WEB-601 / SEC-052
Задача: SEC-052 [Medium] Expiry sweep завершает reservation после успешного heartbeat
Пакет l115f-r2 установлен на прод 2026-09-12T18:02:33.922654Z.
SOURCE=92f7ae807869bbaa8ae7ef6ca2ea622675e31af9
ARTIFACT_SHA256=1353e969b2a7a1a31ac702be361913c41cb53c104db49938a02f5fcd07766668
Runtime 18:15:34 UTC: оба backend ready=true, paidReady=true/enforce_ready; web A/B, indexing и extraction указывают на новый release; старых процессов 0. Таймеры indexing/extraction active.
Сборка, подпись с tamper-negative, совместимый rollback, dryrun и flip выполнены. Редактор: приложение HTTP200, список 58 документов, один документ открыт, новых ошибок после клика 0; при загрузке были две прерванные prefetch-загрузки и admin/agents403. Это не полная browser/security приёмка.
Один платный synthetic chat: HTTP200; operation terminal/succeeded, event APPLIED, 5/5 обязательных receipts нового identity. BILLING_PARITY=NO-GO: в ответе $0.000637, в LedgerEntry списано $0.039476, разница $0.038839, SETTLED_MAX/usage_untrusted. HTTP200 и paidReady не доказывают корректность суммы или ответа.
Владелец 18:13:55 UTC поручил сохранить готовое, обогатить тикеты, написать хендофф и остановить смену. Новые волны, сборки, paid requests, load/soak и security-вердикты не запускаются. Эпик остаётся открыт.
Откат после появления candidate receipts — только arm64-l115e-compat-20260912T172738Z, SHA ef4b7c2a6e8bcda45fc361f979076f43d37f4caf1256bcbbccf2188b2e2d092d. Plain l115e несовместим с новой identity; исторические receipts не переписывать.

ПРИЁМКА ЭТОЙ НАХОДКИ
ALL26 criterion: SEC-052 reconcile; source=GREEN; PG=bounded billing group GREEN. Evidence: Final `04-billing-group-after-qa.log`: 70/70 pass, 0 fail, 0 skip, exit 0; reconcile and settlement retry included. Оставшиеся gates при handoff: R, live scheduler.
ТОЧНЫЙ ОСТАТОК / СЛЕДУЮЩИЙ ИСПОЛНИТЕЛЬ
Проверить настоящий expiry sweep/heartbeat race с новым InvocationID и отсутствием ошибочного terminal effect; свежесть таймеров сама race не доказывает.
Координатор собирает runtime receipts; независимый security-приёмщик не на OpenAI выдаёт scoped verdict. Сейчас никто не назначается на новую волну. Review сохраняется: факт установки не превращает OPEN в PASS.
КАРТА ДОКУМЕНТОВ
Intel: /Users/annakorin/nc-ops-scripts/release-l115f/r2/{l115f-artifact.json,signature-receipt.json,runtime-stop-verified.log,editor-postqa-rerun.log,paid-probe-accounting-receipt.json,paid-probe-failure-detail.json}.
Source/QA: /Users/annakorin/nc-ops-scripts/tick-20260912-recovery/3521/3521ACCSECURITY26REPAIRED-REPORT.md; 3525/3525SECURITYHANDOFFGATES-evidence/GATES.md; 3530/3530ACCSECURITYGOOGLEFIXTURE-REPORT.md.
Merge: /Users/annakorin/nc-ops-scripts/tick-20260912-recovery/3526/3526INTEGRATESECURITYRELEASE-evidence/merge-manifest.json.
Transition: /Users/annakorin/nc-ops-scripts/release-l115f/{3534-collected,3536-collected,compat}.


Billing finding: [[WEB-650]].
Доказательства

ACCEPTANCE-3300-3327:3303SEC052ACCEPTANCE-REPORT.md:5bb8cf87b095da245ee3408739ce20a01681e922ac7039e74ae02b1b6f6f874c
/Users/annakorin/nc-ops-scripts/run-l115b-luna/acceptance-results/a2/3303SEC052ACCEPTANCE-REPORT.md
SHA256 5bb8cf87b095da245ee3408739ce20a01681e922ac7039e74ae02b1b6f6f874c
SEC-REPAIR-DISPATCH:3350:WEB-601
/home/ubuntu/waves/3350REPAIRRESERVATION-REPORT.md
SEC-INDEPENDENT-GO:3370
2026-09-10: Независимая source-приёмка 3370: GO для SEC-052/061 на 1060a940a799b7026cd518d633f9bf324a61c765. Собственные PG тесты BASE 2/5, candidate 5/5; raw RED/GREEN прочитаны. Heartbeat race, stale dispatch owner/version, concurrent replay, historic recovery, положительный billing. Legacy BASE 37/41, candidate 38/41: три одинаковых baseline failures остаются. QA 7441a4cd615258f87530074f923407d5ce84a9cf; SHA256 9c7614abc283df130b18d073b54e275f06e3d48d9bdb470449d0d85dfc6918d1, bundle verify и ancestry PASS. Report/bundle/raw evidence сохранены на Intel. Источник m4:/Users/milamarty/waves/3370INDEPENDENTRESERVATION-REPORT.md. Интеграция, сборка и live proof впереди; исправления не посажены.

CHECKPOINT3478:WEB-601 2026-09-10T23:30:08.650195+00:00
3473 активно объединяет 14 точных кандидатов для22 критериев. Этот кандидат reservation 1060a940a799b7026cd518d633f9bf324a61c765; критерии SEC-052,SEC-061. Входные hashes и git objects проверены до старта. Последний наблюдённый merge66a666e38 объединил манифест миграций; итогового integration verdict нет. SEC053/054 и062/064 вне этой партии. Предыдущий scoped GO не означает проверку конфликтов, сборку или посадку.
Полные отчёты и проверки SHA: /Users/annakorin/nc-ops-scripts/checkpoint-3478/snapshot.json; задания и SHA inputs: refill-20260911-0015,0025,0028,0030. Спецификация: /Users/annakorin/nc-ops-scripts/enterprise2-20260910/ENTERPRISE-2.md; цель: SHIFT-GOAL-20260911-8H.md.

CHECKPOINT3484:WEB-601 2026-09-10T23:46:59.374675+00:00
3473 integration GO: exact HEAD f9c514014fcedccdecc2cf9e7c39a79421b4655b, все 14 кандидатов/22 критерия сохранены; P19 и migration-set 200/200, дерево чистое, SHA и bundle проверены координатором. Кандидат reservation 1060a940a799b7026cd518d633f9bf324a61c765. Независимая 3484 Claude Opus доставлена на A1 с inputs SHA и exact BASE для merged-source/изолированной PG проверки. Пока подтверждена очередь, не выполнение тестов. Новых посадок нет; live flags/roles/scheduler/browser и post-QA впереди.
Доказательства: /Users/annakorin/nc-ops-scripts/checkpoint-3484/receipt.json, integration-manifest.json, focused-tests-summary.log, migration-gates.log и 3473SECURITYINTEGRATION-REPORT.md; доставка: refill-20260911-0050. Норматив: enterprise2-20260910/ENTERPRISE-2.md.

CHECKPOINT3484LIMIT:WEB-601 2026-09-10T23:52:07.659549+00:00
3484 не выполнила приёмку: A1 после ремонта TMPDIR отказала OAuth session expired; тот же exact candidate перенесён без дубля на A2, guard/SHA/BASE проверены. A2 запустила Claude Opus, затем WAVE_EXIT=1: weekly limit, resets Sep 12 16:00 UTC. Приёмка merged-source/PG BLOCKED_PROVIDER_LIMIT, результата нет. Кошелёк и OpenAI для security acceptance не подключались. 3473 остаётся integration-only GO для22 критериев, HEAD f9c514014fcedccdecc2cf9e7c39a79421b4655b. Посадки нет. Evidence: checkpoint-3484, refill-20260911-0052; A2 /home/ubuntu/waves/3484-acc-security-merged-pg-claude.log.

CHECKPOINT3488:WEB-601 2026-09-11T00:15:51.647210+00:00
Пять новых сдач проверены координатором: bundle verify, SHA256 и exact HEAD. 3427 сдала ingest cf64ed4074c8349c12ed10a3725797ec2c65ff75; source PG 23/23, component 33+3+20; ESLint UNKNOWN timeout, финальная security/live приёмка не выполнена. 3488 реально запущена на A1: объединяет 3473 (22 критерия), 3479 (tokens/types), 3427 (ingest), охватывая входы всех исходных26. Итогового merge verdict ещё нет. Security acceptance3484 остаётся BLOCKED_PROVIDER_LIMIT до12.09 16:00UTC; кошелёк не менялся. Новых посадок нет. Evidence: checkpoint-3488/snapshot.json; security-integration-3488/{3488-receipt.json,inputs/manifest.json}; полный3427 report.

CHECKPOINT3492:WEB-601 2026-09-11T00:32:55.179360+00:00
3488 завершила source integration: d95fd864292c2763e8125de62a08e8fd8c181cde. Все 26 строк матрицы и исходные 14 веток сохранены; 201/201 миграций, P19 negative blocksStartup, 123 activation rows сохранены. SHA256 d3bd60ef387de0cb79342522be849d9023365f96e33d69c866b3ab2598aa8e7d, exact HEAD/clean/bundle проверены и скопированы. Это не независимая security/PG/runtime приёмка. 3484 BLOCKED_PROVIDER_LIMIT до 2026-09-12 16:00 UTC; новых посадок нет. Evidence: checkpoint-3491/snapshot.json, полный 3488 REPORT и бандл; A1 3488SECURITYINTEGRATIONFINAL-evidence.

HANDOFF-20260912T1721:WEB-601 — автономный handoff добавлен в body: причина, механизм, подтверждённое/OPEN, следующая операция, ответственный, критерий закрытия и карта документов. Срез фактов 2026-09-12T17:21:36.454887+00:00. Исторические отказы и статусы сохранены. Полный аудит записи: Intel /Users/annakorin/nc-ops-scripts/release-l115f/handoff-tickets/.

SHIFT-STOP-20260912:R2:WEB-601
Installed source92f7ae807 / artifact1353e969; runtime-stop-verified.log; billing parity NO-GO [[WEB-650]]; per-finding remaining gates in body.
Замечен в сборке
l115f-r2 / 92f7ae807
Лента
2026-09-10T17:07:53.399Z · astra-security
BACKLOG64-TRIAGE-20260910-SEC-052 — 2026-09-10T17:07:53.398872+00:00 / IST=2026-09-10T22:37:53.398882+05:30

Новая карточка по возвратам R11.

Actual PG: sweep выбрал stale row, valid heartbeat продлил lease, sweep всё равно SETTLED_MAX10000micros; inverse order и один terminal event PASS. Red exit1 settledMax1 !=0.

База 49bc58dcc508c612b337c92af7d7d5bb71c7a681; CVSS3.1 5.9 Medium — `CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L` (предварительно). Приёмка Нео и current mapping pending. Предложение: Под reservation lock повторно проверить lease freshness относительно sweep timestamp; heartbeat, committed до close, должен отменять expiry claim.

Исходные отчёты:
- R11: /Users/poolpooly/audit/inbox/2818-BLOCK25-WALLET-CONCURRENCY-ACCEPTANCE-REPORT.md — SHA256 `9bda18bbbbb477af21fb98c4d238304a502e53e983328d961cb57ff31c45fe2c`
2026-09-10T17:43:11.043Z · coordinator
[2026-09-10T17:43:11.002Z] Маршрут изменён по прямому указанию владельца: 3303-sec052-acceptance-brief.md → Codex gpt-5.6-luna xhigh, A2. Предыдущий Claude-запуск завершился по weekly limit без отчёта; его бриф и лог сохранены. Повторно поставлен тот же номер волны. База current l115a и три исторических SHA проверены на хосте. Доставлены исходные отчёты с manifest SHA256; raw artifacts и effective host inputs не объявляются полностью полученными. Критерии независимости и доказательств сохранены. Постановка в очередь не является положительной приёмкой или посадкой.
2026-09-10T18:39:13.427Z · coordinator
ACCEPTANCE-3300-3327:3303SEC052ACCEPTANCE-REPORT.md:5bb8cf87b095da245ee3408739ce20a01681e922ac7039e74ae02b1b6f6f874c
Независимый отчёт получен координатором. Проверенная база l115a 8d598d69a663cfa8977816d96bb20303e9a9650c; это не повторная проверка l115c.
Исправление требует выполнения; положительной приёмки исправленного кода нет.

SEC-052 remains `NO-GO` for the accepted candidate. The original R11 evidence reported the expiry/heartbeat condition on `49bc58dcc508c612b337c92af7d7d5bb71c7a681` at `src/lib/billing/spendReservation.ts:1405-1414,1644-1660,2330-2346`, with `SETTLED_MAX10000micros` after a successful heartbeat and a red assertion `settledMax=1 != 0`. This independent A2 acceptance recreated the same ordering on the exact historical bytes and on current BASE `8d598d69a663cfa8977816d96bb20303e9a9650c` using a real disposable PostgreSQL 16.15 database. The valid heartbeat extended the lease and committed before close, yet the sweep still wrote one terminal `SETTLED_MAX` event and moved the global counter from reserved `10000` to cost `10000`.

The inverse order is safe in the tested scope: close first yields one terminal event and the late heartbeat is rejected. A non-stale lease is also not swept. These controls do not neutralize the confirmed race. No product code, release, production database, provider, or host state was changed. No bundle was created because the acceptance branch contains no tree changes. CVSS remains preliminary `5.9 Medium`, `CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:L`; the synthetic PG result does not establish live/prod impact or an attempted provider charge.

Deduplication: WEB-521 and SEC-001…048 are not re-registered. This package is the independent acceptance of the separate SEC-052 expiry/heartbeat condition under WEB-449, parent WEB-515, BACKLOG64-TRIAGE-20260910.
2026-09-10T19:23:44.058Z · coordinator
SEC-REPAIR-DISPATCH:3350:WEB-601
Назначено исправление: волна 3350 repair-reservation, A2, Codex gpt-5.6-luna xhigh. Это разработка исправления; отдельная приёмка и посадка ещё впереди. База l115c 1ad52e16b. Входы доставлены и проверены по SHA256: /home/ubuntu/waves/inputs/security-repairs-20260910/reservation.
Бриф: /home/ubuntu/waves/queue/3350-repair-reservation-brief.md
Отчёт: /home/ubuntu/waves/3350REPAIRRESERVATION-REPORT.md
Предыдущие результаты сохранены; 5 отсутствующих исторических кандидатов ищет координатор. Исполнитель обязан сначала проверить доступный кандидат; при отсутствии исправлять воспроизводимый дефект текущей базы и явно назвать новую реализацию.
Состояние на проверке: active.
2026-09-10T20:01:17.619Z · coordinator
SEC-INDEPENDENT-DISPATCH:3370:WEB-601
2026-09-10T20:00:55.438418+00:00 — Получен исходный repair 3350, коммит 1060a940a799b7026cd518d633f9bf324a61c765. Отчёт автора: a2nc:/home/ubuntu/waves/3350REPAIRRESERVATION-REPORT.md. Bundle SHA256: 00a13f0aa16bc7f0af535953a9f4f0db8f8089719181de299c95f576123c4f89.
Отдельная независимая приёмка 3370 на M4, Codex gpt-5.6-luna xhigh; сессия подтверждена.
Проверка exact candidate с собственными RED/GREEN/negative tests; PostgreSQL там, где требуется durable/race proof. Входы проверены по SHA256, candidate objects импортированы и проверены.
Входы: /Users/milamarty/waves/inputs/security-independent-20260910/3370
Бриф: /Users/milamarty/waves/queue/3370-secaccept-reservation-brief.md
Ожидаемый отчёт: /Users/milamarty/waves/3370INDEPENDENTRESERVATION-REPORT.md
Source repair GO автора не является независимым GO. Приёмка, интеграция, посадка и runtime proof ещё не получены. Итоговый статус после проверки; эта запись не закрывает находку.
2026-09-10T20:27:13.972Z · coordinator
SEC-INDEPENDENT-GO:3370
2026-09-10: Независимая source-приёмка 3370: GO для SEC-052/061 на 1060a940a799b7026cd518d633f9bf324a61c765. Собственные PG тесты BASE 2/5, candidate 5/5; raw RED/GREEN прочитаны. Heartbeat race, stale dispatch owner/version, concurrent replay, historic recovery, положительный billing. Legacy BASE 37/41, candidate 38/41: три одинаковых baseline failures остаются. QA 7441a4cd615258f87530074f923407d5ce84a9cf; SHA256 9c7614abc283df130b18d073b54e275f06e3d48d9bdb470449d0d85dfc6918d1, bundle verify и ancestry PASS. Report/bundle/raw evidence сохранены на Intel. Источник m4:/Users/milamarty/waves/3370INDEPENDENTRESERVATION-REPORT.md. Интеграция, сборка и live proof впереди; исправления не посажены.
2026-09-10T23:33:44.060Z · coordinator
CHECKPOINT3478:WEB-601 2026-09-10T23:30:08.650195+00:00
3473 активно объединяет 14 точных кандидатов для22 критериев. Этот кандидат reservation 1060a940a799b7026cd518d633f9bf324a61c765; критерии SEC-052,SEC-061. Входные hashes и git objects проверены до старта. Последний наблюдённый merge66a666e38 объединил манифест миграций; итогового integration verdict нет. SEC053/054 и062/064 вне этой партии. Предыдущий scoped GO не означает проверку конфликтов, сборку или посадку.
Полные отчёты и проверки SHA: /Users/annakorin/nc-ops-scripts/checkpoint-3478/snapshot.json; задания и SHA inputs: refill-20260911-0015,0025,0028,0030. Спецификация: /Users/annakorin/nc-ops-scripts/enterprise2-20260910/ENTERPRISE-2.md; цель: SHIFT-GOAL-20260911-8H.md.
2026-09-10T23:46:59.876Z · coordinator
CHECKPOINT3484:WEB-601 2026-09-10T23:46:59.374675+00:00
3473 integration GO: exact HEAD f9c514014fcedccdecc2cf9e7c39a79421b4655b, все 14 кандидатов/22 критерия сохранены; P19 и migration-set 200/200, дерево чистое, SHA и bundle проверены координатором. Кандидат reservation 1060a940a799b7026cd518d633f9bf324a61c765. Независимая 3484 Claude Opus доставлена на A1 с inputs SHA и exact BASE для merged-source/изолированной PG проверки. Пока подтверждена очередь, не выполнение тестов. Новых посадок нет; live flags/roles/scheduler/browser и post-QA впереди.
Доказательства: /Users/annakorin/nc-ops-scripts/checkpoint-3484/receipt.json, integration-manifest.json, focused-tests-summary.log, migration-gates.log и 3473SECURITYINTEGRATION-REPORT.md; доставка: refill-20260911-0050. Норматив: enterprise2-20260910/ENTERPRISE-2.md.
2026-09-10T23:52:08.278Z · coordinator
CHECKPOINT3484LIMIT:WEB-601 2026-09-10T23:52:07.659549+00:00
3484 не выполнила приёмку: A1 после ремонта TMPDIR отказала OAuth session expired; тот же exact candidate перенесён без дубля на A2, guard/SHA/BASE проверены. A2 запустила Claude Opus, затем WAVE_EXIT=1: weekly limit, resets Sep 12 16:00 UTC. Приёмка merged-source/PG BLOCKED_PROVIDER_LIMIT, результата нет. Кошелёк и OpenAI для security acceptance не подключались. 3473 остаётся integration-only GO для22 критериев, HEAD f9c514014fcedccdecc2cf9e7c39a79421b4655b. Посадки нет. Evidence: checkpoint-3484, refill-20260911-0052; A2 /home/ubuntu/waves/3484-acc-security-merged-pg-claude.log.
2026-09-11T00:15:52.138Z · coordinator
CHECKPOINT3488:WEB-601 2026-09-11T00:15:51.647210+00:00
Пять новых сдач проверены координатором: bundle verify, SHA256 и exact HEAD. 3427 сдала ingest cf64ed4074c8349c12ed10a3725797ec2c65ff75; source PG 23/23, component 33+3+20; ESLint UNKNOWN timeout, финальная security/live приёмка не выполнена. 3488 реально запущена на A1: объединяет 3473 (22 критерия), 3479 (tokens/types), 3427 (ingest), охватывая входы всех исходных26. Итогового merge verdict ещё нет. Security acceptance3484 остаётся BLOCKED_PROVIDER_LIMIT до12.09 16:00UTC; кошелёк не менялся. Новых посадок нет. Evidence: checkpoint-3488/snapshot.json; security-integration-3488/{3488-receipt.json,inputs/manifest.json}; полный3427 report.
2026-09-11T00:32:55.668Z · coordinator
CHECKPOINT3492:WEB-601 2026-09-11T00:32:55.179360+00:00
3488 завершила source integration: d95fd864292c2763e8125de62a08e8fd8c181cde. Все 26 строк матрицы и исходные 14 веток сохранены; 201/201 миграций, P19 negative blocksStartup, 123 activation rows сохранены. SHA256 d3bd60ef387de0cb79342522be849d9023365f96e33d69c866b3ab2598aa8e7d, exact HEAD/clean/bundle проверены и скопированы. Это не независимая security/PG/runtime приёмка. 3484 BLOCKED_PROVIDER_LIMIT до 2026-09-12 16:00 UTC; новых посадок нет. Evidence: checkpoint-3491/snapshot.json, полный 3488 REPORT и бандл; A1 3488SECURITYINTEGRATIONFINAL-evidence.
2026-09-12T14:52:13.231Z · coordinator
TICK-3525-STALE-LIMIT-20260912:WEB-601
Старая отметка provider-limit снята: source/QA приёмка3521 и узкая3525 завершены. Неизменённые доказательства наследуются с точным SHA и указанными skips/границами; это не новые live тесты этой карточки. Посадка, соответствующие runtime/browser/provider gates остаются OPEN. Матрица26 и GATES.md привязаны к WEB-515; done не выставляется.
2026-09-12T18:22:02.117Z · coordinator
SHIFT-STOP-20260912:R2:WEB-601
ТЕКУЩИЙ СРЕЗ ПЕРЕД ОСТАНОВКОЙ — WEB-601 / SEC-052
Задача: SEC-052 [Medium] Expiry sweep завершает reservation после успешного heartbeat
Пакет l115f-r2 установлен на прод 2026-09-12T18:02:33.922654Z.
SOURCE=92f7ae807869bbaa8ae7ef6ca2ea622675e31af9
ARTIFACT_SHA256=1353e969b2a7a1a31ac702be361913c41cb53c104db49938a02f5fcd07766668
Runtime 18:15:34 UTC: оба backend ready=true, paidReady=true/enforce_ready; web A/B, indexing и extraction указывают на новый release; старых процессов 0. Таймеры indexing/extraction active.
Сборка, подпись с tamper-negative, совместимый rollback, dryrun и flip выполнены. Редактор: приложение HTTP200, список 58 документов, один документ открыт, новых ошибок после клика 0; при загрузке были две прерванные prefetch-загрузки и admin/agents403. Это не полная browser/security приёмка.
Один платный synthetic chat: HTTP200; operation terminal/succeeded, event APPLIED, 5/5 обязательных receipts нового identity. BILLING_PARITY=NO-GO: в ответе $0.000637, в LedgerEntry списано $0.039476, разница $0.038839, SETTLED_MAX/usage_untrusted. HTTP200 и paidReady не доказывают корректность суммы или ответа.
Владелец 18:13:55 UTC поручил сохранить готовое, обогатить тикеты, написать хендофф и остановить смену. Новые волны, сборки, paid requests, load/soak и security-вердикты не запускаются. Эпик остаётся открыт.
Откат после появления candidate receipts — только arm64-l115e-compat-20260912T172738Z, SHA ef4b7c2a6e8bcda45fc361f979076f43d37f4caf1256bcbbccf2188b2e2d092d. Plain l115e несовместим с новой identity; исторические receipts не переписывать.

ПРИЁМКА ЭТОЙ НАХОДКИ
ALL26 criterion: SEC-052 reconcile; source=GREEN; PG=bounded billing group GREEN. Evidence: Final `04-billing-group-after-qa.log`: 70/70 pass, 0 fail, 0 skip, exit 0; reconcile and settlement retry included. Оставшиеся gates при handoff: R, live scheduler.
ТОЧНЫЙ ОСТАТОК / СЛЕДУЮЩИЙ ИСПОЛНИТЕЛЬ
Проверить настоящий expiry sweep/heartbeat race с новым InvocationID и отсутствием ошибочного terminal effect; свежесть таймеров сама race не доказывает.
Координатор собирает runtime receipts; независимый security-приёмщик не на OpenAI выдаёт scoped verdict. Сейчас никто не назначается на новую волну. Review сохраняется: факт установки не превращает OPEN в PASS.
КАРТА ДОКУМЕНТОВ
Intel: /Users/annakorin/nc-ops-scripts/release-l115f/r2/{l115f-artifact.json,signature-receipt.json,runtime-stop-verified.log,editor-postqa-rerun.log,paid-probe-accounting-receipt.json,paid-probe-failure-detail.json}.
Source/QA: /Users/annakorin/nc-ops-scripts/tick-20260912-recovery/3521/3521ACCSECURITY26REPAIRED-REPORT.md; 3525/3525SECURITYHANDOFFGATES-evidence/GATES.md; 3530/3530ACCSECURITYGOOGLEFIXTURE-REPORT.md.
Merge: /Users/annakorin/nc-ops-scripts/tick-20260912-recovery/3526/3526INTEGRATESECURITYRELEASE-evidence/merge-manifest.json.
Transition: /Users/annakorin/nc-ops-scripts/release-l115f/{3534-collected,3536-collected,compat}.


Billing finding: [[WEB-650]].
2026-09-12T22:25:57.469Z · coordinator
[12.09 22:25Z координатор] ОБОГАЩЕНИЕ 12.09 (3573-enrich-web515-a): SEC-052 — Expiry sweep завершает reservation после heartbeat
Сделано: условие подтверждено на базе (независимая приёмка), исправление прошло независимую source-приёмку и интегрировано (3473→3488).
На проде: да — линия l115g, HEAD 9c8a97629 (BASE), фикс-коммит 1060a940a в истории; live-гейт UNKNOWN: фикстуры нет.
Доказано: /home/ubuntu/waves/3350REPAIRRESERVATION-REPORT.md; /Users/milamarty/waves/3370INDEPENDENTRESERVATION-REPORT.md; SHIFT-STOP R2 (SOURCE=92f7ae807, ARTIFACT_SHA256=1353e969b); гейты scripts/security/live-gates/run.mjs.
Осталось: Live-гейт UNKNOWN: подготовить фикстуру и прогнать гейт.; Точный fix→release mapping принят координатором (SOURCE=92f7ae80 → l115g), но независимой строкой на карточке ещё не зафиксирован.; Полная browser/security приёмка (SHIFT-STOP R2 помечен как неполная)..
Кто следующий: координатор — дождаться гейта, закрыть BILLING_PARITY=NO-GO; статус не меняется (keep).
Ссылки: /Users/milamarty/waves/3370INDEPENDENTRESERVATION-REPORT.md; /home/ubuntu/waves/3350REPAIRRESERVATION-REPORT.md; ARTIFACT_SHA256 1353e969b2a7a1a31ac702be361913c41cb53c104db49938a02f5fcd07766668; BASE l115a 8d598d69a663cfa8977816d96bb20303e9a9650c; R11 2818-BLOCK25-WALLET-CONCURRENCY-ACCEPTANCE-REPORT.md (SHA 9bda18bbbbb477af21fb98c4d238304a502e53e983328d961cb57ff31c45fe2c); SOURCE 92f7ae807869bbaa8ae7ef6ca2ea622675e31af9; candidate 1060a940a799b7026cd518d633f9bf324a61c765; fix 1060a940a799b7026cd518d633f9bf324a61c765; https://bugs.wool2.online/web; integration 3473 HEAD f9c514014fcedccdecc2cf9e7c39a79421b4655b; integration 3488 HEAD d95fd864292c2763e8125de62a08e8fd8c181cde; prod l115g HEAD 9c8a97629b3f7fd8c79faff162eed482670f499d
Отчёт волны: /Users/milamarty/waves/3573ENRICH*-REPORT.md (M4), копия nc-ops-scripts/shift-20260912-resume/wash-20260912/enrich-collected/.
2026-09-13T08:03:18.529Z · coordinator
[13.09 08:03Z координатор] ЖИВОЕ ДОКАЗАТЕЛЬСТВО ЕСТЬ → done. SEC-052: sweep не закрывает резервацию после свежего heartbeat: фикс уже в l115i (closeReservation перепроверяет lease/heartbeat внутри той же транзакции), поднята своя фикстура активной резервации и гейт SEC-052 дал PASS живым прогоном (волна 3626, 13.09, изолированный стенд с артефактом прода l115i и одноразовые фикстуры; вердикт определённый, не UNKNOWN). Evidence: /home/ubuntu/waves/3626SECURITYLASTSIX-evidence/ (A2), копия в shift-20260912-resume/3626/collected/.
2026-09-13T09:05:32.585Z · coordinator
[13.09 09:05Z координатор] ОБОГАЩЕНИЕ ПОД НУЛЕВОГО АГЕНТА (канон WEB-449, волна 3639): тело карточки переписано — суть, МЕХАНИКА (файлы/функции/где гейт/корень), хронология с волнами и коммитами, чем доказано живьём с путями к evidence, карта документов по машинам, остаток, и одна команда для перепроверки. Прежний текст триажа 10.09 сохранён в конце тела как «История», плюс бэкап /tmp/secbody-backup-WEB-601.md на M1.
Воркер
не проверен STOPPED; l115f-r2 installed; finding live gate OPEN coordinator движение в панели: неизвестно
Подключиться и смотреть/перехватить руками. Колесо мыши листает; клавишами — Ctrl-b затем [, выход из прокрутки q. Отсоединиться — Ctrl-b затем d:
Прочитать историю панели без подключения — листается и ищется (/ поиск, q выход), воркеру не помешает:
Обновлён
2026-09-13T09:05:32.582Z