WEB-618 · Задача · — · web
SEC-069 [Low] Analytics readonly SQL не выполняет документированное provisioning
Закрыт
P2
ведёт: —
эпик: WEB-515
Суть
# SEC-069 — Analytics readonly SQL не выполняет документированное provisioning
## 1. Суть и условие дефекта
Analytics readonly SQL: SELECT разрешён, записи запрещены (fail-closed); provisioning должен выполняться как документировано.
## 2. МЕХАНИКА
`ops/sql/analytics_readonly_role.sql:14-17,35-40` (provisioning readonly-роли), `src/lib/prisma-readonly.ts:29-33` (клиент readonly). **Корень:** документированное provisioning не выполнялось. Фикс `025814f8` (repair 3355). `READONLY_DATABASE_URL` указывает на живой пароль, роль `analytics_readonly`.
## 3. ЧТО СДЕЛАНО
1. **10.09** — триаж BACKLOG64 (база `49bc58dcc`): карточка заведена из отчёта R09; условие подтверждено, независимая приёмка 3320SEC069ACCEPTANCE-REPORT.md (a2) — NO-GO.
2. **10.09** — repair-волна 3355 написала фикс `025814f8`; независимая source-приёмка 3361 — 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 закрыт.
## 4. ЧЕМ ДОКАЗАНО ЖИВЬЁМ
Чекер ролей БД → **PASS 2224 (FAIL 0 / UNKNOWN 0)**. Роль analytics_readonly; SELECT разрешён, записи запрещены (fail-closed); READONLY_DATABASE_URL → живой пароль.
Матрица: `/home/ubuntu/sec-checks-3592/out/matrix.txt`.
## 5. КАРТА ДОКУМЕНТОВ
- Repair-волна: A2 `/home/ubuntu/waves/3355REPAIRDBROLES-REPORT.md`
- Независимая source-приёмка: A1 `/home/wave/waves/3361INDEPENDENTDBROLES-REPORT.md`
- Приёмка условия (триаж): `/Users/annakorin/nc-ops-scripts/run-l115b-luna/acceptance-results/a2/3320SEC069ACCEPTANCE-REPORT.md`
- Живая матрица гейтов: `/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. ОСТАТОК
нет
## 7. КАК ПЕРЕПРОВЕРИТЬ
```
bash ops/sql/web078_roles_test.sh # sequence privileges runtime-роли
# + проверка analytics_readonly: SELECT разрешён, любая запись fail-closed.
```
## История (триаж 10.09)
Правила обогащения: WEB-449. Parent WEB-515. BACKLOG64-TRIAGE-20260910. Дата UTC: 2026-09-10T17:07:52.835164+00:00.
## ДЛЯ ТИКЕТА — SEC-069
**Условие:** Analytics readonly SQL не выполняет документированное provisioning.
**Состояние:** подтверждено в изученных стендовых свидетельствах воркера на указанной базе; независимая приёмка на Нео ещё не выполнена. Это не объявление дефекта живого l115a. Исходный NO-GO относится к полному scope и может одновременно содержать незавершённые группы.
**Исследованные байты:** `5701c436097e10240a2b8cdd5d87a786b1014def`. Базовая ветка — указанная в исходном отчёте; рабочее дерево lead `/Users/poolpooly/audit/nc` не используется вместо этой версии. **Файл:строка:** ops/sql/analytics_readonly_role.sql:14-17,35-40; src/lib/prisma-readonly.ts:29-33.
**Доказательство и controls:** Rawtemplate psql exit3 перед rolecreation; temporarynormalizedSQL exit0,10SELECTgrants и INSERTdeny. Проверить literal/rolname quoting независимоот passwordplaceholder.
**CVSS 3.1:** 1.9 Low — `CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:L` (предварительно).
Предварительно: localprivilegedprovisioning; currentreadonlyactivation неустановлена.
Числа пересчитаны по FIRST CVSS3.1, а не скопированы из заголовков: https://www.first.org/cvss/v3.1/specification-document#7-1-Base-Metrics-Equations . При неполных предпосылках оценка не становится окончательной. N/A/UNKNOWN не означает Low или нулевой риск.
**Предложение исправления:** Параметризовать/quote rolecomparison и secretliteral, добавить disposableapplytest инструкции,не fallback на writeclient за policy успех.
**Сданные изменения:** Не представлен в этом возврате.
**Связи/дедупликация:** WEB-078 Старые условия SEC-001…048 не регистрируются заново. Эта карточка описывает отдельное условие, а не повтор счёта того же отчёта.
## KNOWN ISSUES / ТРАБЛШУТИНГ
Симптом → Analytics readonly SQL не выполняет документированное provisioning.
Проверка → воспроизвести указанный actual-module/PG fixture с положительным разрешённым контролем; сверить SHA исходников и хеши артефактов. Мок транспорта допустим, мок самой проверяемой проверки — нет. Report file получен и хеширован лидом; исходные raw artifacts вне inbox ещё не объявляются независимо проверенными.
Причина → ops/sql/analytics_readonly_role.sql:14-17,35-40; src/lib/prisma-readonly.ts:29-33.
Лечение/статус → Параметризовать/quote rolecomparison и secretliteral, добавить disposableapplytest инструкции,не fallback на writeclient за policy успех. Приёмка/актуальность 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.
## Карта документов
- R47: /Users/poolpooly/audit/inbox/b37-04-B37-04-REPORT.md — SHA256 `29b6fcf9d1856be91f118966f099006584e32a18121b27ffbade0e227c5bf030`
- Мастер-разбор: /Users/poolpooly/audit/outbox/BACKLOG64-TRIAGE-20260910.md
- Данные: /Users/poolpooly/audit/evidence/backlog64-20260910/findings28.json
SEC-INDEPENDENT-GO:3361
2026-09-10: Независимая source-приёмка 3361: GO для SEC-068/069 на 025814f87a2449d7e1bd6a96f3a4069422e548a6; QA 86eea117c4d28912ab85c6519da828762ae1f47a. Полный отчёт и raw RED/GREEN прочитаны координатором: BASE sequence denial с 0 rows и readonly SQL syntax error; candidate 8/8 independent PG stages и 6/6 own runtime tests. Рабочие serial/identity INSERT сохранены, ledger/DDL/backup writes запрещены; ровно 10 readonly SELECT grants, repeated/deferred/concurrent writes оставляют 0 rows, missing secret не создаёт роль. Report/bundle/evidence сохранены на Intel; SHA256 47e3935e77593c41b24911036a16dd45f5b2ecdd57bb15b5a8a9d405ca848bad, bundle verify/ancestry PASS. Источник a1nc:/home/wave/waves/3361INDEPENDENTDBROLES-REPORT.md. DONE отсутствует, комплект проверен по файлам. Live role provisioning/grants, READONLY_DATABASE_URL и release mapping ещё впереди. Исправление не посажено.
CHECKPOINT3478:WEB-618 2026-09-10T23:30:08.650195+00:00
3473 активно объединяет 14 точных кандидатов для22 критериев. Этот кандидат dbroles 025814f87a2449d7e1bd6a96f3a4069422e548a6; критерии SEC-068,SEC-069. Входные 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-618 2026-09-10T23:46:59.374675+00:00
3473 integration GO: exact HEAD f9c514014fcedccdecc2cf9e7c39a79421b4655b, все 14 кандидатов/22 критерия сохранены; P19 и migration-set 200/200, дерево чистое, SHA и bundle проверены координатором. Кандидат dbroles 025814f87a2449d7e1bd6a96f3a4069422e548a6. Независимая 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-618 — точка входа для нового агента
Правила обогащения: [[WEB-449]]. Наблюдение: 12.09.2026 18:21:36 Europe/Dublin / 17:21:36 UTC. Автор: координатор. История выше сохранена; эту запись читать как текущий handoff на указанное время.
**Задача.** SEC-069 [Low] Analytics readonly SQL не выполняет документированное provisioning
**Что подтверждено и что остаётся.** 3521 дал bounded source/isolated-PG GO при общем NO-GO;3525 закрыл узкий SOURCE_PG_HANDOFF и CHARGE_COMPLETENESS, сохранив RELEASE_RUNTIME=OPEN. Итог на реальном релизе для этой карточки не подтверждён.
**Как устроено / почему остановилось.** Readonly: фактический URL/роль разрешают SELECT и запрещают repeated/deferred/concurrent writes с нулевым побочным эффектом; не исполнять старые shell fixtures с устаревшими credentials.
**Следующая операция.** Общий переход релиза выполнять по [[WEB-515]]. Индивидуальный gate этой карточки: Readonly: фактический URL/роль разрешают SELECT и запрещают repeated/deferred/concurrent writes с нулевым побочным эффектом; не исполнять старые shell fixtures с устаревшими credentials. Зафиксировать 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-618
ТЕКУЩИЙ СРЕЗ ПЕРЕД ОСТАНОВКОЙ — WEB-618 / SEC-069
Задача: SEC-069 [Low] Analytics readonly SQL не выполняет документированное provisioning
Пакет 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-069 readonly; source=GREEN inherited; PG=GREEN inherited. Evidence: Same `29`: positive SELECT and fail-closed INSERT controls, exit 0. Оставшиеся gates при handoff: R, live readonly URL.
ТОЧНЫЙ ОСТАТОК / СЛЕДУЮЩИЙ ИСПОЛНИТЕЛЬ
Применение/проверка documented readonly role provisioning на нужном контуре, реальный readonly URL и отсутствие side effects. Не запускать старые скрипты с устаревшими credentials.
Координатор собирает 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]].
Доказательства
RECEIVED-FINAL6:8f7e0308365dcbab3b253045c15c5180c146cf4c1533a979237c1ec646721a4e
/Users/annakorin/nc-ops-scripts/run-l115b-luna/acceptance-results/a2/3320SEC069ACCEPTANCE-REPORT.md
SHA256 8f7e0308365dcbab3b253045c15c5180c146cf4c1533a979237c1ec646721a4e
SEC-REPAIR-DISPATCH:3355:WEB-618
/home/ubuntu/waves/3355REPAIRDBROLES-REPORT.md
SEC-INDEPENDENT-GO:3361
2026-09-10: Независимая source-приёмка 3361: GO для SEC-068/069 на 025814f87a2449d7e1bd6a96f3a4069422e548a6; QA 86eea117c4d28912ab85c6519da828762ae1f47a. Полный отчёт и raw RED/GREEN прочитаны координатором: BASE sequence denial с 0 rows и readonly SQL syntax error; candidate 8/8 independent PG stages и 6/6 own runtime tests. Рабочие serial/identity INSERT сохранены, ledger/DDL/backup writes запрещены; ровно 10 readonly SELECT grants, repeated/deferred/concurrent writes оставляют 0 rows, missing secret не создаёт роль. Report/bundle/evidence сохранены на Intel; SHA256 47e3935e77593c41b24911036a16dd45f5b2ecdd57bb15b5a8a9d405ca848bad, bundle verify/ancestry PASS. Источник a1nc:/home/wave/waves/3361INDEPENDENTDBROLES-REPORT.md. DONE отсутствует, комплект проверен по файлам. Live role provisioning/grants, READONLY_DATABASE_URL и release mapping ещё впереди. Исправление не посажено.
CHECKPOINT3478:WEB-618 2026-09-10T23:30:08.650195+00:00
3473 активно объединяет 14 точных кандидатов для22 критериев. Этот кандидат dbroles 025814f87a2449d7e1bd6a96f3a4069422e548a6; критерии SEC-068,SEC-069. Входные 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-618 2026-09-10T23:46:59.374675+00:00
3473 integration GO: exact HEAD f9c514014fcedccdecc2cf9e7c39a79421b4655b, все 14 кандидатов/22 критерия сохранены; P19 и migration-set 200/200, дерево чистое, SHA и bundle проверены координатором. Кандидат dbroles 025814f87a2449d7e1bd6a96f3a4069422e548a6. Независимая 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-618 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-618 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-618 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-618 — автономный 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-618
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:54.789Z · astra-securityBACKLOG64-TRIAGE-20260910-SEC-069 — 2026-09-10T17:07:54.788789+00:00 / IST=2026-09-10T22:37:54.788798+05:30
Новая карточка по возвратам R47.
Rawtemplate psql exit3 перед rolecreation; temporarynormalizedSQL exit0,10SELECTgrants и INSERTdeny. Проверить literal/rolname quoting независимоот passwordplaceholder.
База 5701c436097e10240a2b8cdd5d87a786b1014def; CVSS3.1 1.9 Low — `CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:L` (предварительно). Приёмка Нео и current mapping pending. Предложение: Параметризовать/quote rolecomparison и secretliteral, добавить disposableapplytest инструкции,не fallback на writeclient за policy успех.
Исходные отчёты:
- R47: /Users/poolpooly/audit/inbox/b37-04-B37-04-REPORT.md — SHA256 `29b6fcf9d1856be91f118966f099006584e32a18121b27ffbade0e227c5bf030`
2026-09-10T17:43:11.078Z · coordinator[2026-09-10T17:43:11.002Z] Маршрут изменён по прямому указанию владельца: 3320-sec069-acceptance-brief.md → Codex gpt-5.6-luna xhigh, NEO. Предыдущий Claude-запуск завершился по weekly limit без отчёта; его бриф и лог сохранены. Повторно поставлен тот же номер волны. База current l115a и три исторических SHA проверены на хосте. Доставлены исходные отчёты с manifest SHA256; raw artifacts и effective host inputs не объявляются полностью полученными. Критерии независимости и доказательств сохранены. Постановка в очередь не является положительной приёмкой или посадкой.
2026-09-10T18:39:13.545Z · coordinatorACCEPTANCE-PENDING-1838:SEC-69
Волна 3320: независимая проверка выполняется на A2. Финального отчёта в собранном наборе пока нет. Шесть ожидавших волн перенесены с Нео на A2, проверены brief-guard, запуски подтверждены; пауза Нео снята.
2026-09-10T19:06:33.486Z · coordinatorRECEIVED-FINAL6:8f7e0308365dcbab3b253045c15c5180c146cf4c1533a979237c1ec646721a4e
Получена независимая проверка исходников l115a: NO-GO. Это сдача проверки находки, нового исправления продукта нет; необходимы исправление и повторная приёмка.
## ДЛЯ ТИКЕТА
Evolution: WEB-449 enrichment, parent WEB-515, and `BACKLOG64-TRIAGE-20260910` identified SEC-069 / WEB-618 as a separate condition: the documented `analytics_readonly` provisioning SQL fails before role creation, while `src/lib/prisma-readonly.ts` can use the write-capable main client until `READONLY_DATABASE_URL` is configured. R47 reported the condition using historical bytes; its raw lead artifacts were not independently present in the inbox.
Independent acceptance on A2 used current base `8d598d69a663cfa8977816d96bb20303e9a9650c` and historical bytes `5701c436097e10240a2b8cdd5d87a786b1014def` in separate worktrees. The source bytes for `ops/sql/analytics_readonly_role.sql` and `src/lib/prisma-readonly.ts` match between those commits. The actual current caller path reaches the readonly client through the admin analytics endpoints and the six analytics read modules; the analytics rollup write path remains on the main client.
Independent PostgreSQL 16.15 reproduction: raw template exit `3`, role count `0`; synthetic-literal normalized control exit `0`, exactly ten SELECT grants, positive SELECT exit `0`, and INSERT denied on repeated, deferred, and concurrent attempts with exits `1`; final durable fixture row count `0`. Targeted node:test/tsx suite: `22/22` pass. These results confirm the condition in the current candidate and do not claim live activation, production impact, release landing, or a fix.
Ticket status: `NO-GO / CONFIRMED_CONDITION / current activation UNKNOWN_INPUT`. Proposed remedy remains: safely quote/parameterize `rolecomparison` and `secretliteral`, add disposable raw-apply instructions/tests and exact grant checks, and do not use write-client fallback as evidence of readonly policy success. WEB-078 / SEC-001…048 are not re-registered; this is an independent SEC-069 condition.
## Manifest and handoff files
- Key input/source hashes: R47 `29b6fcf9d1856be91f118966f099006584e32a18121b27ffbade0e227c5bf030`, triage `cb4a8e808f279e5f6050907664a2652afa284dfb3e0b44587c6caaf56f53856b`, findings `2cd97fb3b35f608d1bd27cfa89fe0203ffb9820e81e67cfe126feedbe717dcd1`, input manifest `6a64f902c71a8820799e27ff520054e58f034ebb3664cea57315719d310f274e`.
- Reviewed source hashes: `ops/sql/analytics_readonly_role.sql` `b12559287b970e553cd0bd04a033af7dccef7ad32a42a85c21d599ad783b7d03`; `src/lib/prisma-readonly.ts` `056b77f841a04186bf0cc0bf43b2e2168864ad72af4e800ef1cae9dfea689d61` (same in historical and current worktrees).
- Artifact manifest: `/home/ubuntu/waves/3320SEC069ACCEPTANCE-artifacts/SHA256SUMS.txt`.
- Artifact manifest SHA256: `af318e6592785e66445543cf63ef1f5ce0285173fa3b314997500fb412960434`.
- Artifact-manifest sidecar: `/home/ubuntu/waves/3320SEC069ACCEPTANCE-artifacts/SHA256SUMS.txt.sha256`.
- Source/input hash audit: `/home/ubuntu/waves/3320SEC069ACCEPTANCE-artifacts/source-input-hash-check.log`.
- Required acceptance report: `/home/ubuntu/waves/3320SEC069ACCEPTANCE-REPORT.md`.
- Coordinator naming alias: `/home/ubuntu/waves/3320-SEC-069-NEO-REPORT.md`.
- Report sidecar: `/home/ubuntu/waves/3320SEC069ACCEPTANCE-REPORT.md.sha256`.
- Bundle: not created because the acceptance branch has no tracked source/tree changes; the requested bundle condition was “only if you changed tree”.
2026-09-10T19:23:44.921Z · coordinatorSEC-REPAIR-DISPATCH:3355:WEB-618
Назначено исправление: волна 3355 repair-dbroles, A2, Codex gpt-5.6-luna xhigh. Это разработка исправления; отдельная приёмка и посадка ещё впереди. База l115c 1ad52e16b. Входы доставлены и проверены по SHA256: /home/ubuntu/waves/inputs/security-repairs-20260910/dbroles.
Бриф: /home/ubuntu/waves/queue/3355-repair-dbroles-brief.md
Отчёт: /home/ubuntu/waves/3355REPAIRDBROLES-REPORT.md
Предыдущие результаты сохранены; 5 отсутствующих исторических кандидатов ищет координатор. Исполнитель обязан сначала проверить доступный кандидат; при отсутствии исправлять воспроизводимый дефект текущей базы и явно назвать новую реализацию.
Состояние на проверке: active.
2026-09-10T19:54:37.195Z · coordinatorSEC-INDEPENDENT-DISPATCH:3361:WEB-618
2026-09-10T19:54:22.234861+00:00 — Получен исходный repair 3355, коммит 025814f87a2449d7e1bd6a96f3a4069422e548a6. Отчёт автора: a2nc:/home/ubuntu/waves/3355REPAIRDBROLES-REPORT.md. Bundle SHA256: 9cd35bfd4bd7cef1474fc40eda590fb387f38da4314fd5d0d43e84953dcb54c4.
Отдельная независимая приёмка 3361 на A1, Codex gpt-5.6-luna xhigh; сессия подтверждена.
Проверка exact candidate с собственными RED/GREEN/negative tests; PostgreSQL там, где требуется durable/race proof. Входы проверены по SHA256, candidate objects импортированы и проверены.
Входы: /home/wave/waves/inputs/security-independent-20260910/3361
Бриф: /home/wave/waves/queue/3361-secaccept-dbroles-brief.md
Ожидаемый отчёт: /home/wave/waves/3361INDEPENDENTDBROLES-REPORT.md
Source repair GO автора не является независимым GO. Приёмка, интеграция, посадка и runtime proof ещё не получены. Итоговый статус после проверки; эта запись не закрывает находку.
2026-09-10T20:30:31.994Z · coordinatorSEC-INDEPENDENT-GO:3361
2026-09-10: Независимая source-приёмка 3361: GO для SEC-068/069 на 025814f87a2449d7e1bd6a96f3a4069422e548a6; QA 86eea117c4d28912ab85c6519da828762ae1f47a. Полный отчёт и raw RED/GREEN прочитаны координатором: BASE sequence denial с 0 rows и readonly SQL syntax error; candidate 8/8 independent PG stages и 6/6 own runtime tests. Рабочие serial/identity INSERT сохранены, ledger/DDL/backup writes запрещены; ровно 10 readonly SELECT grants, repeated/deferred/concurrent writes оставляют 0 rows, missing secret не создаёт роль. Report/bundle/evidence сохранены на Intel; SHA256 47e3935e77593c41b24911036a16dd45f5b2ecdd57bb15b5a8a9d405ca848bad, bundle verify/ancestry PASS. Источник a1nc:/home/wave/waves/3361INDEPENDENTDBROLES-REPORT.md. DONE отсутствует, комплект проверен по файлам. Live role provisioning/grants, READONLY_DATABASE_URL и release mapping ещё впереди. Исправление не посажено.
2026-09-10T23:33:44.005Z · coordinatorCHECKPOINT3478:WEB-618 2026-09-10T23:30:08.650195+00:00
3473 активно объединяет 14 точных кандидатов для22 критериев. Этот кандидат dbroles 025814f87a2449d7e1bd6a96f3a4069422e548a6; критерии SEC-068,SEC-069. Входные 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.857Z · coordinatorCHECKPOINT3484:WEB-618 2026-09-10T23:46:59.374675+00:00
3473 integration GO: exact HEAD f9c514014fcedccdecc2cf9e7c39a79421b4655b, все 14 кандидатов/22 критерия сохранены; P19 и migration-set 200/200, дерево чистое, SHA и bundle проверены координатором. Кандидат dbroles 025814f87a2449d7e1bd6a96f3a4069422e548a6. Независимая 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.390Z · coordinatorCHECKPOINT3484LIMIT:WEB-618 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.261Z · coordinatorCHECKPOINT3488:WEB-618 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.809Z · coordinatorCHECKPOINT3492:WEB-618 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.315Z · coordinatorTICK-3525-STALE-LIMIT-20260912:WEB-618
Старая отметка 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.219Z · coordinatorSHIFT-STOP-20260912:R2:WEB-618
ТЕКУЩИЙ СРЕЗ ПЕРЕД ОСТАНОВКОЙ — WEB-618 / SEC-069
Задача: SEC-069 [Low] Analytics readonly SQL не выполняет документированное provisioning
Пакет 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-069 readonly; source=GREEN inherited; PG=GREEN inherited. Evidence: Same `29`: positive SELECT and fail-closed INSERT controls, exit 0. Оставшиеся gates при handoff: R, live readonly URL.
ТОЧНЫЙ ОСТАТОК / СЛЕДУЮЩИЙ ИСПОЛНИТЕЛЬ
Применение/проверка documented readonly role provisioning на нужном контуре, реальный readonly URL и отсутствие side effects. Не запускать старые скрипты с устаревшими credentials.
Координатор собирает 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.500Z · coordinator[12.09 22:25Z координатор] ОБОГАЩЕНИЕ 12.09 (3574-enrich-web515-b):
Сделано: аналитика переведена на отдельную readonly-роль — SELECT разрешён, записи запрещены (fail-closed).
На проде: да. Роль analytics_readonly посажена, READONLY_DATABASE_URL указывает на живой пароль, приложение на роли web, checker чистый.
Доказано: приёмка 3320, repair 3355, независимая 3361 (GO), checker 3541→3551 (PASS 2224/0/0).
Осталось: прогнать реальный readonly URL после рестарта юнитов.
Кто следующий: координатор (рестарт + верификация). Статус keep (review).
Ссылки: /Users/annakorin/nc-ops-scripts/run-l115b-luna/acceptance-results/a2/3320SEC069ACCEPTANCE-REPORT.md (SHA 8f7e0308…); /home/ubuntu/waves/3355REPAIRDBROLES-REPORT.md; commit: 025814f8; ops/sql/analytics_readonly_role.sql:14-17,35-40; src/lib/prisma-readonly.ts:29-33; sec-live-checks-l115f/db-roles-after-3551.txt; [[WEB-650]]
Отчёт волны: /Users/milamarty/waves/3574ENRICH*-REPORT.md (M4), копия nc-ops-scripts/shift-20260912-resume/wash-20260912/enrich-collected/.
2026-09-13T06:21:04.153Z · coordinator[13.09 06:21Z координатор] ЖИВОЕ ДОКАЗАТЕЛЬСТВО ЕСТЬ → done. SEC-069: чекер ролей БД PASS 2224 (FAIL 0 / UNKNOWN 0); роль analytics_readonly, READONLY_DATABASE_URL указывает на живой пароль
Проверено на проде l115h (13.09, прогон раннера живых гейтов с копии боевого процесса на :3011 и QA-фикстурами; SEC-068/069 — чекером ролей БД, PASS 2224/0/0). Остатка по коду нет.
Матрица: /home/ubuntu/sec-checks-3592/out/matrix.txt; карта эпика: shift-20260912-resume/3604/collected/out/WEB515-CLOSING-MAP.md (волна 3604).
2026-09-13T09:05:32.725Z · coordinator[13.09 09:05Z координатор] ОБОГАЩЕНИЕ ПОД НУЛЕВОГО АГЕНТА (канон WEB-449, волна 3639): тело карточки переписано — суть, МЕХАНИКА (файлы/функции/где гейт/корень), хронология с волнами и коммитами, чем доказано живьём с путями к evidence, карта документов по машинам, остаток, и одна команда для перепроверки. Прежний текст триажа 10.09 сохранён в конце тела как «История», плюс бэкап /tmp/secbody-backup-WEB-618.md на M1.
Воркер
не проверен
STOPPED; l115f-r2 installed; finding live gate OPEN
coordinator
движение в панели: неизвестно
Подключиться и смотреть/перехватить руками. Колесо мыши листает; клавишами — Ctrl-b затем [, выход из прокрутки q. Отсоединиться — Ctrl-b затем d:
Прочитать историю панели без подключения — листается и ищется (/ поиск, q выход), воркеру не помешает:
Обновлён
2026-09-13T09:05:32.724Z