WEB-244 · Дефект · security · web
[роли R4] P0 privacy-утечка: производный фактчек-отчёт раскрывает контент скрытого источника через citations[].content + полный live-ретест 6 гейтов
Закрыт
P0 · горит
ведёт: fix-wave
Суть
GPT Pro повторная проверка ролей R3 (zip roles-round3-full-independent-recheck-20260806, sha c574c648; наш архив был им УЖЕ проверен по частям — вердикт прежний NO-GO, 0/6 гейтов): (1) P0-УТЕЧКА r3-money1.json: базовый health-note скрыт скоупом, но его текст возвращается через citations[9].content ПРОИЗВОДНОГО fact-check отчёта — производные должны фильтровать citation-контент по видимости БАЗОВОГО источника на момент ЧТЕНИЯ (связь с WEB-179 наследованием приватности); (2) Money не тестировался (provider:system/model:inventory-truth/0 токенов — это инвентарь, не ROLE-12); (3) Smith-прогон не повторяет исходный кейс (нужен исходный research RUN-03 запрос + role receipt + citation-judge trace + repair trace + coverage); (4) в архиве не было serving-verify.bundle; (5) live-тесты не сделаны: ACL before→revoke→after, SAFE-05 Timeline, Council с member-level receipts, настоящий Money; (6) ROLE_POLICY_ENFORCEMENT выключен (пилот = WEB-149). Ретест-манифест: previous-review/NEXT-LIVE-RETEST-MANIFEST.md в его zip. План: воркер чинит утечку (код) + готовит live-скрипты; live-прогоны против прода гоню я; пакет R4 АТОМАРНО.
## 2026-08-23 BOARDSWEEP: NEEDS-PAID
- Evidence: Canonical contains privacy ACL/provenance code and tests under src/lib/factcheck/reportCitationAcl.ts, verdictCache.ts and __tests__, but the ticket still requires authenticated R4 live ACL/Money/Council retests; its own trail records those as not run. No paid run sent.
- buildFixed: v4-0f668cd; canonical: v4-081ff4fb5 / 081ff4fb5f6110f8001daec7ed910ccef2e395dc.
- Status preserved by sweep: review.
---
2026-08-23 PRIVACYQA (cumulative)
Verdict: CORRECT for bounded owner-QA acceptance. Production marker was verified (masked). A new own-run derived JSON report and stored replay each returned one own report/claim shape; visible citation rows were all public-provider rows, with zero `sourceHidden` rows and zero corpus-document identities. The derived export carried `private, no-store` and `nosniff`. No values, identifiers, citation text, URLs, or secrets retained here.
Scope note: this is a positive owner-QA observation of the current response boundary; it does not disclose or probe another tenant.
Доказательства
[24.08 ~00:30 paidsweep2] PASS: отчёт сохранён в приватной тетради с закрытыми parent sources; второй аккаунт не получил notebook/run/export и не увидел маркер в ответе. Граница приватности держит. Отчёт: /home/ubuntu/waves/PAIDSWEEP2-REPORT.md. Родня: WEB-300, WEB-320.
Починено в
v4-0f668cd
Лента
2026-08-06T02:38:03.816Z · backup-opusЗакрыто воркером o244, едет волной CD. Исходный вектор (citations[].content производного отчёта раскрывал скрытый источник) закрыт read-time фильтром по видимости БАЗОВОГО источника для текущего читателя, единым для всех каналов отдачи (чтение отчёта, экспорт, inline-checks) — тесты канального контракта проверяют, что новый канал не сможет обойти фильтр. Вердикты и счётчики сохраняются, пропадает только текст утечки. Сверх задачи воркер нашёл более широкий вектор: FactcheckVerdictCache уникален по claimHash БЕЗ userId/notebookId/teamId, то есть цитаты одного тенанта прилетали другому через общий кеш — закрыто с двух сторон (read-time редакция чужой кеш-строки + write-side предикат isSharedCacheableEvidence, приватные цитаты в общую таблицу больше не пишутся; claim, доказанный только приватным корпусом, в общий кеш не попадает вовсе). Тесты: 15+5+7+5+4+12+7 зелёных, регресс фактчека чист. ОСТАТОК вынесен в WEB-255: строки, записанные ДО фикса, лежат в общей таблице — читать их нельзя, но чистка/ключевание кеша тенантом требует решения владельца (запрошено).
2026-08-10T23:50:14.267Z · backup-opus11.08: активна на GPT-нити роли R8. Батарея 44/44, V5F blocker на независимом аудите GPT Pro (стабильность). Не QA-review — ждёт зелёнки линии; C8 prod-deploy DEFERRED.
2026-08-11T19:33:08.354Z · backup-opusРевизия 11.08: живая нить ролей (V8 сдан GPTPRO_READY сегодня: Research-вето+fail-closed repair+verifier против подделок). Утечка скрытого источника закрывается enforcement-слоями линии; done = посадка линии ролей после GO.
2026-08-16T09:33:44Z · backup-opusВолна web244priv 16.08 (worktree agent/web244-privacy-20260816): NO-FIX-NEEDED, ДОКАЗАНО кодом — все три пути чтения производного отчёта фильтруют citation-контент по видимости БАЗОВОГО источника НА МОМЕНТ ЧТЕНИЯ: GET /api/factcheck/run (route.ts:312-321), /status (:52-59), /export (:77-87) — каждый зовёт resolveFactcheckReportCitationAcl → filterViewableSourceIds (общий с direct-source ACL, src/lib/factcheck/reportCitationAcl.ts). Утечка R3-эры закрыта enforcement-слоями, севшими после аудита (условие из комментария 11.08 исполнено: GO линии ролей получен 16.08). Отчёт: WEB244-REPORT.md в worktree. → review: нужен приёмщик, проверить негативный кейс r3-money1 живьём на QA-аккаунте.
Воркер
не проверен
o244
M4
движение в панели: неизвестно
Подключиться и смотреть/перехватить руками. Колесо мыши листает; клавишами — Ctrl-b затем [, выход из прокрутки q. Отсоединиться — Ctrl-b затем d:
Прочитать историю панели без подключения — листается и ищется (/ поиск, q выход), воркеру не помешает:
Обновлён
2026-08-23T23:15:33.623Z