fix: восстановить потерянные guard-вызовы issue-роутов и обновить ownership-тесты [CL-SYNC-DRIFT] #175

Merged
andrei merged 1 commit from feature/claude-ownership-layer into master 2026-07-04 23:11:27 +00:00
Owner

Что сделано

Слой 8 партии PIX-13034 (см. #170): issue-agent-mutation-ownership-routes 11/62 красных. Разделено методом «git show двух ревизий»:

Код — три потерянных при merge v2026.626.0 upstream-вызова (helper-функции оставались определёнными, но мёртвыми):

  1. issue list: visibility-фильтр actorCanReadCompanyScope/filterIssuesForActor — без него любой участник компании видел полный список issue (security).
  2. work products create/update: resolveWorkProductCreatedByRunId + sourceTrust — forged/foreign run id не отклонялись, подлинный run id не записывался (security).
  3. accepted-plan decompositions: pre-generated id у children — watchdog-сериализация лесенкой blockedByIssueIds молча не срабатывала.

Тесты — отстали от наших живых форк-фич: мок issueService без count (PIX-12722) и без exports blockedByMapForIssues (PIX-12684); ассерты на старый не-пагинированный ответ; фикстуры без обязательного projectId (bb9906e2); watchdog blocked-переход без blockedByIssueIds (PIX-12986); db-мок без tx.select/.limit.

Зачем

Suite после порт-фикса CI (PR #169) слой за слоем вскрывает partition PIX-13034; два security-пропуска здесь — реальные дыры прод-поведения.

План тестирования

  • Локально: файл 62/62; regression по 5 ранее чиненным файлам 103/103; typecheck exit 0.
  • Красное воспроизведено на чистом master (11/62) в отдельном worktree.
  • CI PR прогонит suite дальше.

Где могу ошибаться

  • Минимальный порт work-products без canonicalizePaperclipArtifactMetadata (у нас отсутствует вся её цепочка) — если suite дойдёт до атачмент-тестов, доведу отдельным слоем.
  • total в списке остаётся нефильтрованным для low-trust актёров — верхняя оценка, upstream счётчика не имеет вовсе; отмечено комментарием в коде.
## Что сделано Слой 8 партии PIX-13034 (см. #170): `issue-agent-mutation-ownership-routes` 11/62 красных. Разделено методом «git show двух ревизий»: **Код — три потерянных при merge v2026.626.0 upstream-вызова (helper-функции оставались определёнными, но мёртвыми):** 1. issue list: visibility-фильтр `actorCanReadCompanyScope`/`filterIssuesForActor` — без него любой участник компании видел полный список issue (security). 2. work products create/update: `resolveWorkProductCreatedByRunId` + `sourceTrust` — forged/foreign run id не отклонялись, подлинный run id не записывался (security). 3. accepted-plan decompositions: pre-generated `id` у children — watchdog-сериализация лесенкой blockedByIssueIds молча не срабатывала. **Тесты — отстали от наших живых форк-фич:** мок issueService без `count` (PIX-12722) и без exports `blockedByMapForIssues` (PIX-12684); ассерты на старый не-пагинированный ответ; фикстуры без обязательного `projectId` (bb9906e2); watchdog blocked-переход без blockedByIssueIds (PIX-12986); db-мок без `tx.select`/`.limit`. ## Зачем Suite после порт-фикса CI (PR #169) слой за слоем вскрывает partition PIX-13034; два security-пропуска здесь — реальные дыры прод-поведения. ## План тестирования - Локально: файл 62/62; regression по 5 ранее чиненным файлам 103/103; typecheck exit 0. - Красное воспроизведено на чистом master (11/62) в отдельном worktree. - CI PR прогонит suite дальше. ## Где могу ошибаться - Минимальный порт work-products без `canonicalizePaperclipArtifactMetadata` (у нас отсутствует вся её цепочка) — если suite дойдёт до атачмент-тестов, доведу отдельным слоем. - `total` в списке остаётся нефильтрованным для low-trust актёров — верхняя оценка, upstream счётчика не имеет вовсе; отмечено комментарием в коде.
[CL-SYNC-DRIFT] fix(server): восстановить потерянные guard'ы issue-роутов + обновить ownership-тесты (PIX-13034)
Some checks failed
security/pr-scan No security concerns detected
PR Quality Gates / PR Quality Gates (pull_request_target) Successful in 5s
Agents CI / Typecheck and Build (pull_request) Successful in 4m54s
Agents CI / API Tests (pull_request) Failing after 11m9s
96bef5f671
Код (все три — upstream-вызовы, потерянные при merge v2026.626.0 при живых
определениях helper'ов):
- issue list: возвращён visibility-фильтр (actorCanReadCompanyScope fast path /
  filterIssuesForActor) — без него любой участник компании видел полный список
  issue в пагинированном ответе PIX-12722. Security.
- work products create/update: возвращены resolveWorkProductCreatedByRunId
  (отказ forged/foreign run id, запись подлинного) и sourceTrust. Security.
- accepted-plan decompositions: children снова получают pre-generated id —
  без него watchdog-сериализация (blocked за предыдущим ребёнком) молча не
  срабатывала.

Тесты (отстали от наших живых форк-фич):
- мок issueService: + count (PIX-12722) и exports blockedByMapForIssues/
  readAcceptedPlanConfirmationTarget (PIX-12684);
- list-ассерты на пагинированный конверт {data,total};
- create/decompose фикстуры с обязательным projectId (bb9906e2);
- watchdog blocked-переход с blockedByIssueIds (PIX-12986 disposition);
- db-мок: tx с select и .limit у where-результата.

Красное: run 35650 и локально на чистом master (11/62). После: 62/62,
regression по 5 затронутым файлам 103/103, typecheck exit 0.
andrei merged commit f8f4e5a145 into master 2026-07-04 23:11:27 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
europa-tech-srl/europa-tech-agents!175
No description provided.