From dee7d51c19aa42124c2e19b1be04df852ffe9b42 Mon Sep 17 00:00:00 2001 From: creator Date: Wed, 22 Apr 2026 00:25:35 +0000 Subject: [PATCH] =?UTF-8?q?fix(1c-analyst):=20DELETE=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=20/issue/items=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D0=B4=D0=BB=D1=8F=20=D0=BB=D1=8E=D0=B1?= =?UTF-8?q?=D1=8B=D1=85=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B5=D0=B9=20Req?= =?UTF-8?q?uest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit На пути /request/items/{id} DELETE действительно заблокирован (возвращает Unable access entity), но тот же Id можно убрать через DELETE /issue/items/{id} — он универсален и работает как для U-записей (созданных через /issue/items), так и для I-записей (созданных через /request/items). Эмпирически подтверждено чисткой 33 зомби-записей I-6122..I-6176 в test-api-claude за один проход. Поправлены разделы: - devprom-alm-api.md §4 «Удаление» — таблица расширена комментарием про универсальность /issue/items DELETE - devprom-alm-api.md §6 «Что НЕ работает» — DELETE request/items отмечен как «не препятствие» - SKILL.md §«Критически важно» — корректное правило про DELETE - meeting-wishes-extraction.md антипаттерн №7 — UI больше не нужен --- 1c-analyst/SKILL.md | 5 +++-- 1c-analyst/references/devprom-alm-api.md | 15 ++++++++------- .../references/meeting-wishes-extraction.md | 4 +++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/1c-analyst/SKILL.md b/1c-analyst/SKILL.md index bdccc18..5105176 100644 --- a/1c-analyst/SKILL.md +++ b/1c-analyst/SKILL.md @@ -219,8 +219,9 @@ description: > - `IssueAuthor` (автор) через API создать нельзя — если нужен новый автор (например, представитель заказчика), заводить через UI. До этого момента временно использовать автора-себя. -- DELETE через API работает только для записей, созданных через - `/issue/items`. Зомби с префиксом `I-` чистятся только в UI. +- DELETE через API работает на эндпоинте `/issue/items/{id}` — и для + пожеланий (U-), и для заявок (I-, созданных через `/request/items`). + `DELETE /request/items/{id}` заблокирован, но в нём нет нужды. --- diff --git a/1c-analyst/references/devprom-alm-api.md b/1c-analyst/references/devprom-alm-api.md index 328d698..aaa4bda 100644 --- a/1c-analyst/references/devprom-alm-api.md +++ b/1c-analyst/references/devprom-alm-api.md @@ -117,13 +117,14 @@ Egress-прокси периодически роняет запросы с HTTP ## 4. Удаление -| Эндпоинт | DELETE работает? | Поведение | -|-----------------------|------------------|-----------| -| `/issue/items/{id}` | **ДА** | HTTP 200, запись пропадает из листинга и GET возвращает пустые поля | -| `/request/items/{id}` | **НЕТ** | HTTP 200 с `{"error":"Unable access entity"}`, запись остаётся в БД в битом виде (зомби) | -| `/requirement/items/{id}` | Не проверялось | — | +| Эндпоинт | DELETE работает? | Поведение | +|------------------------------|------------------|-----------| +| `DELETE /issue/items/{id}` | **ДА — универсальный** | HTTP 200, запись пропадает. Работает для ЛЮБОЙ записи — и для U- (созданных через `/issue/items`), и для I- (созданных через `/request/items`). Сущности `issue` и `request` указывают на один класс `pm_ChangeRequest` в БД, но DELETE разрешён только на пути `issue/items`. | +| `DELETE /request/items/{id}` | **НЕТ** | HTTP 200 с `{"error":"Unable access entity"}`, запись не удаляется. Сервер возвращает эту ошибку даже для записей, созданных через `/request/items`. | +| `DELETE /requirement/items/{id}` | _Не гарантировано_ | Возвращает HTTP 200 с `{"error":"Unable access entity"}`, но GET после этого иногда показывает запись пустой (UID='', Caption=''). Эффект — неявное удаление / повреждение записи. Использовать с осторожностью. | -**Практический вывод:** если пожелание создано через `/issue/items` — его можно удалить API. Если случайно создано через `/request/items` — чистить только через UI. +**Практический вывод:** для удаления любой записи Request/Issue — +всегда `DELETE /issue/items/{id}`, независимо от того, как она была создана. ## 5. Справочные эндпоинты (read-only для нашего ключа) @@ -144,7 +145,7 @@ Egress-прокси периодически роняет запросы с HTTP |---------------------------------------|------------------------------------|-------| | POST `/issueauthor/items` | HTTP 200 + `{"error":"Lack of permissions to create object of IssueAuthor"}` | Только UI: `/pm//issueauthor` или inline-форма в карточке пожелания | | POST `/user/items` | То же | Только UI | -| DELETE `/request/items/{id}` | `{"error":"Unable access entity"}` | Только UI | +| DELETE `/request/items/{id}` | `{"error":"Unable access entity"}` | **Не препятствие:** удалять через `DELETE /issue/items/{id}` — он работает для любой записи Request (см. раздел 4). | Пытаться обойти через write-only ключ проекта, `api/v1`, `api/v2`, инстанс-путь без `/pm//` — **бесполезно**, все варианты дают тот же отказ. diff --git a/1c-analyst/references/meeting-wishes-extraction.md b/1c-analyst/references/meeting-wishes-extraction.md index 7ece711..be3f5f1 100644 --- a/1c-analyst/references/meeting-wishes-extraction.md +++ b/1c-analyst/references/meeting-wishes-extraction.md @@ -208,7 +208,9 @@ for wish in WISHES: 4. **Цитаты в пересказе** — обезличивают пожелание, делают его неотличимым от прочих. _Только прямые цитаты в blockquote._ 5. **Смешение в одном Пожелании двух разных требований** — потом невозможно оценить объём и трассировать. _Один атомарный запрос — одно Пожелание._ 6. **Создание IssueAuthor через API** — заблокировано на уровне прав. _Только через UI._ -7. **Попытка удалить DELETE-ом запись с префиксом I-** — сервер отвечает 200 + error, запись остаётся зомби. _Чистить через UI._ +7. **Попытка удалить запись через `DELETE /request/items/{id}`** — сервер + отвечает 200 + `Unable access entity`. _Удалять через `DELETE /issue/items/{id}` + — он работает для любой записи, в том числе для I- (созданных через `/request/items`)._ ---