WEB-550 · Задача · — · web
SEC-033 [pending] Файловые ссылки переживают удаление владельца
Закрыт
P2
ведёт: —
эпик: WEB-515
Суть
Обычный PDF-производитель создаёт файл и ShortLink на 30 дней (src/lib/export/pdfDelivery.ts:173–188). ShortLink.userId — scalar без связи User (prisma/schema.prisma:3744–3755). Удаление аккаунта не удаляет эти строки (src/app/api/gdpr/delete/route.ts:279–303), а выдача файла проверяет token и expires, без существования владельца (src/app/api/s/[token]/route.ts:78–90,115–145). Истечение ссылки удаляет только строку (src/lib/shortlinks/index.ts:40–48). Следовательно, выданная ссылка сохраняет прежнее разрешение до TTL и файл может остаться после него. Это подтверждённое исходниками условие жизненного цикла; договорённость о судьбе ранее выданных ссылок требует явной приёмки. Работающий token, файл и последствия для пользователей не проверялись. CVSS 3.1 pending.
ДЛЯ ТИКЕТА: todo; бриф 2043-account-file-link-lifecycle-review.
KNOWN ISSUES / ТРАБЛШУТИНГ: source-only на 6930, runtime unknown; исполнение red/green ожидается. Исправление и посадка не заявлены.
## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Суть одной строкой:** SEC-033 [pending] Файловые ссылки переживают удаление владельца
- **Текущее состояние:** статус: todo; Обычный PDF-производитель создаёт файл и ShortLink на 30 дней (src/lib/export/pdfDelivery.ts:173–188). ShortLink.userId — scalar без связи User (prisma/schema.prisma:3744–3755). Удаление аккаунта не удаляет эти строки (src/app/api/gdpr/delete/route.ts:279–303), а выдача файла проверяет token и ex… | KNOWN ISSUES / ТРАБЛШУТИНГ: source-only на 6930, runtime unknown; исполнение red/green ожидается. Исправление и посадка не заявлены.
- **Кто работал:**
- нет данных в тикете
- **Ветки/бандлы/отчёты:** нет данных в тикете
- **KNOWN ISSUES / ТРАБЛШУТИНГ:**
- Обычный PDF-производитель создаёт файл и ShortLink на 30 дней (src/lib/export/pdfDelivery.ts:173–188). ShortLink.userId — scalar без связи User (prisma/schema.prisma:3744–3755). Удаление аккаунта не удаляет эти строки (src/app/api/gdpr/delete/route.ts:279–303), а выдача файла проверяет token и ex…
- KNOWN ISSUES / ТРАБЛШУТИНГ: source-only на 6930, runtime unknown; исполнение red/green ожидается. Исправление и посадка не заявлены.
- **Эволюция:**
- нет данных в тикете
- **Следующий шаг:** Обычный PDF-производитель создаёт файл и ShortLink на 30 дней (src/lib/export/pdfDelivery.ts:173–188). ShortLink.userId — scalar без связи User (prisma/schema.prisma:3744–3755). Удаление аккаунта не удаляет эти строки (src/app/api/gdpr/delete/route.ts:279–303), а выдача файла проверяет token и ex… | KNOWN ISSUES / ТРАБЛШУТИНГ: source-only на 6930, runtime unknown; исполнение red/green ожидается. Исправление и посадка не заявлены.
Связи
- связан → WEB-515 — ЭПИК: АУДИТ БЕЗОПАСНОСТИ проекта (Codex gpt-6-astra как security lead) — карта поверхности, threat model, ASVS L2, реестр находок, фиксы с adversarial-приёмкой на Claude
Лента
2026-09-06T00:19:13.806Z · astra-securitycont16-wave-2063-web-550 — 2026-09-06T00:19:13.806158+00:00 / IST=2026-09-06T05:49:13.806168+05:30
CONT16 fan-out: 2063 REVIEW, gpt-5.6-sol, priority NORMAL; задачи WEB-550.
Continue2043 as a concrete lifecycle review/design, no application patch without an established contract. PDF producer export/pdfDelivery.ts:173–188 creates owner ShortLink for30days; schema ShortLink.userId:3744–3755 has no User relation; gdpr/delete route:279–303 does not remove rows; s/[token] route:84–90,115–145 reads by token/expiry and file; shortlinks/index.ts:40–48 purges rows only. Determine intended lifetime of existing file links after owner deletion and current implementation on assigned head. Assess owner-row revocation inside deletion commit and durable cleanup only of uniquely owned unreferenced files. Do not promise revocation of downloaded copies, erase global/nullable-owner links or broadly delete shared files. Deliver the exact owner decision if policy is unresolved.
Бриф: /Users/poolpooly/audit/outbox/2063-account-file-link-lifecycle-contract-brief.md
SHA256 873d694f8ad0f00281ba817f39107891e54b96364bd29506929eaed1e04336cd
Статус: выдан в relay; запуск/результат не подтверждены. Full assigned l113/l113b SHA и prior-output dedupe обязательны. Координатор принимает пересекающиеся изменения и посадку.
2026-09-06T08:31:59.490Z · coordinator[06.09 08:31Z координатор] [2026-09-06T08:31Z координатор] Ревью Astra на текущей базе (M4 sol): WEB-534 GO и WEB-537 GO — дефекты на текущей линии не подтверждены → done; WEB-536 NO-GO → фикс-волна 2221. Блок 17 приёмки: WEB-559 b856b658 GO, WEB-567 877a7160 GO → l113d; WEB-538 df0399da NO-GO (item claim/settlement без fence) → 2223; WEB-541 ebecd7f2 NO-GO (2 нарушения контракта) → 2224. Фиксы по NO-GO ревью GO у авторов → приёмки: WEB-545 c4373797 (2216), WEB-550 819da84e (2217), WEB-552 9d47fdf4 (2218), WEB-553 ba3acc4b (2219), WEB-555 d7e486e9 (2220). A2: WEB-542 доработка 7318e002 GO → приёмка 2215; revive-бюджет v3 1fff536a PASS → приёмка 2222; большой PDF 66e56137 ПРИНЯТ (2202 GO) → l113d; Facebook guard c926d0f8 ПРИНЯТ (2176b GO), конфликтует с линией social в l113d → merge-волна 2225.
2026-09-06T09:30:03.916Z · coordinator[06.09 09:30Z координатор] [2026-09-06T09:29Z координатор] Приёмки M4 блока 17: WEB-553 ba3acc4b GO (2219), WEB-555 d7e486e9 GO (2220), WEB-538 fence 5895c8d0 GO (2228) → кандидаты l113e. Приёмки 545/550/552 умерли при переполнении диска M4 (PENDING) → повторы 2216b/2217b/2218b. Фиксы GO у авторов → приёмки: WEB-536 podcast 8942094e (2236), WEB-541 контракт 3fd18f21 (2237), WEB-542 atomic 1d87f676 (2234, real-PG), роли C5-C negation-scope 86afe601 (2235).
2026-09-06T10:05:08.800Z · coordinator[06.09 10:05Z координатор] [2026-09-06T10:05Z координатор] Приёмки M4 (повтор после диска): WEB-545 (SEC-028) = GO c4373797 → кандидат l113f. WEB-550 (SEC-033) = NO-GO 819da84e: journal suspension RED 0/1 — см. ACCWEB550 §«Блокирующий finding» → круг 2. WEB-536 = NO-GO High 8942094e: legacy URL по Podcast.id для отравленной строки раскрывает чужой файл (GET) и метаданные (HEAD) → круг 3 = 2258-web536-podcast3 (M4). WEB-552 (SEC-035) = NO-GO 9d47fdf4: поведение верно, 7 ошибок scoped tsc --checkJs → 2259-web552-tsc (M4). WEB-506: автор GO fc462e1d → приёмка 2257.
2026-09-06T10:05:44.013Z · coordinator[06.09 10:05Z координатор] [2026-09-06T10:05Z координатор] WEB-550 круг 2 = волна 2260-web550-journal (M4, sol): единый owner-state resolver (missing/dangling/suspended → одинаковый not-found) для loadSharedJournalSnapshot и всех bearer-резолверов ShortLink; harness приёмки ACCWEB550-independent.test.ts = критерий GREEN.
2026-09-06T11:50:20.944Z · coordinator[06.09 11:50Z координатор] [2026-09-06T11:50Z координатор] Авторы сдали GO → приёмки: WEB-531 круг 3 4ac68392 (2291) → 2296 (A1); WEB-550 круг 2 ed246cae (2260) → 2297 (M4, harness ACCWEB550); периметр 500/400-до-auth 5837dd0f (2288) → 2298 (A2). Astra: независимая приёмка client-completion (WEB-549/551) = GO — сверяю sha с фиксом 2093 для l113f.
2026-09-06T12:11:02.685Z · coordinator[06.09 12:11Z координатор] [2026-09-06T12:10Z координатор] ПРИНЯТО: WEB-550 (SEC-033) круг 2 — 2297 ACCWEB550B (M4) = GO ed246cae (единый owner-state resolver, harness приёмки зелёный) → кандидат l113g (l113f уже в сборке). WEB-531 слияние на кандидат = GO e8c97f1f (2302) → l113g. Batch-CLI ремонта карантина: автор 2289 сдал 81acd297 (GO) → приёмка 2304 (A2, sol xhigh, PG, историческая фикстура). WEB-568 круг 2: автор 2303 сдал faf26ab9 (GO) → приёмка 2305 (M4).
2026-09-06T13:17:08.413Z · coordinator[06.09 13:17Z координатор] [2026-09-06T13:15Z координатор] ПОСАЖЕНО: ПРОД = l113g 4c322c46 (flip 13:14:18Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×8; миграция WEB-550 file_link_lifecycle применена (188/193); hetzbk l113g-4c322c46 + env-pack, Pi standby → l113g). Состав (20 коммитов над l113f): большой PDF — финализация 3 круга (3c6a6f86, 76dcb114, 7779df11: короткая идемпотентная tx, hook вне tx, no-indexable-chunks для документов без текста), revive-identity 5 + WEB-499 doc_ner identity (a958df4b…42b61743), WEB-531 SEC-014 3 круга (ca35fbeb, ad7c0cfd, e8c97f1f — слияние), WEB-568 SEC-046 (84dce358, faf26ab9), WEB-550 SEC-033 (819da84e, ed246cae), WEB-552 SEC-035 (9d47fdf4, ecca7846), манифесты (188 миграций). Откат = l113f 221e8f39 (RUN l113f-221e8f39, REL arm64-l113f-20260906T123500Z). Дальше: revive документа cmtkm80jo… по инструкции приёмки; l113h = roles r3 (приёмка), WEB-560 build-fix (приёмка), WEB-507 8b155fc1.
2026-09-06T21:37:37.295Z · astra-securityblock22-wave-2177-web-550 — 2026-09-06T21:37:37.294655+00:00 / IST=2026-09-07T03:07:37.294682+05:30
ДЛЯ ТИКЕТА / BLOCK22 release closure. WEB550 deletion/tombstone link lineagecbb451a3+98c5cbee inherited.
Бриф /Users/poolpooly/audit/outbox/2177-file-owner-lifecycle-post-l113j-closure-brief.md; SHA256 d68d69dea7f81db268aef51b5e71ab4b24d9d1dabe61976752f923fd78fdb242. MODEL=gpt-5.6-sol, A2 cap11, M4 cap3 без автоматического переноса. WAITING_RELEASE_l113j: не запускать до полного deployed-SHA/artifact/backend receipt. Сейчас reportedprod i18f130938b8d2a8f4376811651ad21beb4e28838; M1 source checkout толькоh.
Три группы: exactrelease/source mapping; live: GET designated preseeded QA link active owner and separately preseeded absent-owner fixture; metadata/status only. Never delete/suspend live account or enumerate links.; companion: Local actual download/shortlink path enforces uniform missing-owner refusal before file access and preserves active owner, using harmless own files. Artifact/DB migration parity required.
KNOWN ISSUES: sent≠running, code/authorGO≠liveclosure. При отсутствующем fix в j — NOT_DEPLOYED. Никаких paid/provider effects, реальных удалений/отказов сервиса. Existing2455/2450/2460/2462/2458 и старые работы не дублируются. Историческиеanchors src/lib/shortlinks/index.ts:40–48; src/app/api/s/[token]/route.ts:78–145; src/app/api/gdpr/delete/route.ts:279–303. Fullreport future /home/ubuntu/waves/BLOCK22-FILE-OWNER-LIFECYCLE-POST-L113J-CLOSURE-REPORT.md. Evidence M1 /Users/poolpooly/audit/evidence/block22/fanout-jobs.json; checkpoint /Users/poolpooly/audit/reports/block22-checkpoint.md. Статус тикета не менялся.
2026-09-07T07:38:24.488Z · astra-securityBLOCK22-RELAY13-WEB-550 — 2026-09-07T07:38:24.487967+00:00 / IST=2026-09-07T13:08:24.487985+05:30
SEC-033 / WEB-550: NO_GO_FULL_CLOSURE_UNVERIFIED. Workflow done сохранён. Текущий m 8f4ba1d92cc15a8b64144674e35cce71fdfba43a подтверждён распиской; родитель не выполнял live.
Полный closure GO не установлен. NO-GO из-за недостающих входов не объявляется новым продуктовым дефектом. Исторический source/companion PASS сохраняется в исходном отчёте.
KNOWN ISSUES / ТРАБЛШУТИНГ
- target receipt mapping absent
- runtime and deployed DB parity unverified
- live lifecycle observation deferred
ДЛЯ ТИКЕТА
No new r3 wave: outside explicitly listed blockers; retain NO-GO/evidence gap for coordinator.
No additional release candidate asserted by this delta.
Полный ledger и parent adjudication: ~/audit/evidence/block22-relay13/ledger46.json; ~/audit/reports/block22-relay13-r3-plan.md.
Reports:
/Users/poolpooly/audit/evidence/block22-relay13/intake-originals/CONT19-RELAY-12/a1/BLOCK22-FILE-OWNER-LIFECYCLE-POST-L113J-CLOSURE-REPORT.md
2026-09-07T11:40:36.247Z · ЭВОЛЮЦИЯ ЗА 12 Ч (гигиена 2609, 11:25Z 07.09)
ХРОНОЛОГИЯ КРУГОВ
- волна 2177 → `46393080dd885f6ff25967f18639075564e12737`, `98c5cbeeb5b603de4cd664aa41be6cf1797f022d`, `da6799b2c7acd2d7da08ce4eeb36c55ee9ce8726` → VERDICT=NO-GO — **SEC-033 / WEB-550: NO-GO для полного post-l113j closure.** Exact l113j и Причина NO-GO: нет явной coordinator mapping строки для WEB-550, target Источник: `A1 waves/BLOCK22-FILE-OWNER-LIFECYCLE-POST-L113J-CLOSURE-REPORT.md`.
- Линии посадки: l113j 22:56Z → l113k 00:41Z → l113l 05:30Z → l113m 06:33Z → l113n 07:48Z → l113o 09:35Z → l113p 10:21:43Z. Текущий PROD: l113p `1c850d92876757812eab9ffa7f381bcea95aad86`; общий verify — green по release receipt.
ДЛЯ НУЛЕВОГО АГЕНТА
- Board показывает done, но строгий closure не доказан. Проверка относительно l113p `1c850d92876757812eab9ffa7f381bcea95aad86`: `46393080dd885f6ff25967f18639075564e12737`=предок; `98c5cbeeb5b603de4cd664aa41be6cf1797f022d`=предок; `da6799b2c7acd2d7da08ce4eeb36c55ee9ce8726`=предок. Это запись «ЛОЖНО ЗАКРЫТЫЙ»; статус не меняется автоматически.
- Следующий шаг / владелец: Координатор/Astra: закрыть названный в последнем отчёте mapping/runtime/live/landing gate, получить независимый GO по точному кандидату и затем post-QA (либо явно обоснованное code-only n/a).
KNOWN ISSUES / ТРАБЛШУТИНГ
- Дельта без домысла: **SEC-033 / WEB-550: NO-GO для полного post-l113j closure.** Exact l113j и Причина NO-GO: нет явной coordinator mapping строки для WEB-550, target Проверка/причина привязаны к отчётам выше; anchors: `src/lib/shortlinks/resolveBearerShortLink.ts:12-23`, `src/app/api/s/[token]/route.ts:79-150`, `src/app/api/gdpr/delete/route.ts:279-307`, `prisma/schema.prisma:3994-4009`. Лечение — только указанное в report disposition; отсутствующий live/receipt не объявляется продуктовой регрессией.
ЛОЖНО ЗАКРЫТЫЙ
- Последний полный trail не замкнут: done оставлен без обратного PATCH по прямому правилу owner; это ручная очередь closure.
СВЯЗИ / ИСТОЧНИКИ
- Release: `M4 waves/L113P-RELEASE-RECEIPT.md`; координаторский срез: `M4 waves/OPS-STATUS-HEAD-1120.md`; точные отчёты перечислены в хронологии/KNOWN ISSUES.
- Если сегодняшняя карточка уже содержит более ранний coordinator-комментарий с тем же фактом, эта запись является только дельтой 2609 и не отменяет тот trail.
2026-09-07T12:22:09.672Z · astra-securityRELAY16-R3P-FANOUT — 2026-09-07T12:22:09.671701+00:00 / IST=2026-09-07T17:52:09.671736+05:30
OWNER DECISION RELAY16: closure r3p выдан в пакете2623, ROUTING A1, MODEL gpt-5.5.
Бриф /Users/poolpooly/audit/outbox/2623-artifact-lifecycle-r3p-brief.md; SHA256 59088dcfbe16e5c60dfd73e625635a514acd3c4439669045b04387e719f6fbcd. Base l113p1c850d92876757812eab9ffa7f381bcea95aad86.
KNOWN ISSUES: ['target receipt mapping absent', 'runtime and deployed DB parity unverified', 'live lifecycle observation deferred']
Следующий gate: 2623 / A1: finish per-ticket exactp mapping, targetreceipt and independent companion; report blockedgroups individually. Issued, not running/GO.
Действие координатора: See current block22-owner-checklist and RELAY-9 execution addendum. Release gate satisfied; host, policy and per-candidate exclusions remain.
ТРАБЛШУТИНГ: три группы на этот тикет — exact accepted/semantic source→runtime mapping, specific target receipt/authorized QA proof, independent inert behavior. Policy accepted != fixed; historical NO-GO != newpdefect. Missinginput возвращать отдельно, без ожиданиявслоте.
ДЛЯ ТИКЕТА: ISSUED_OUTBOX, pickup/run/result пока не подтверждены; workflow не менялся. Таблица и exactmissingbundles: /Users/poolpooly/audit/outbox/CLOSURE-BATCH-PLAN-20260907.md.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-550","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-06T13:17:12.655Z