578 lines
48 KiB
Markdown
578 lines
48 KiB
Markdown
---
|
||
type: analyst-decision-record
|
||
work_item_id: ET-001
|
||
title: "ET-001 «чекбокс POI» — анализ завершён: дубликат ET-002 + конфликт ID, нужно решение Owner"
|
||
status: blocked-needs-owner-decision
|
||
created_at: 2026-06-12
|
||
author: "agent:analyst"
|
||
recommendation: close-as-duplicate-of-ET-002
|
||
analyst_stage: complete # POI BRD/ТЗ/AC/тест-план/UI закоммичены (см. §10, прогон #22)
|
||
analyst_stage_terminal: true # §13 — новой аналитической работы нет; не передиспатчить стадию «Анализ» до решения Owner
|
||
last_verified_run: 34
|
||
last_verified_at: 2026-06-15
|
||
last_verified_note: >
|
||
Прогон #34 (2026-06-15): повторная сверка. Реализация на месте
|
||
(index.html: #poi-visible-cb в #terrain-popup, checked, <span>POI</span>;
|
||
app.js:2906–2960 блок ET-002 applyPoiVisibility/onPoiCheckbox/
|
||
restorePoiState, ключ localStorage['poi-visible']). Пакет POI на диске и
|
||
закоммичен: 01-brd v4, 02-trz v3, 03-ac v3, 04-test-plan v3, 04b-ui v7;
|
||
`git status` по docs/work-items/ET-001/ src/web/ tests/ пуст. Выводы
|
||
совпадают с прогонами 1–33. Новый стандартный пакет НЕ перевыпускался
|
||
(во избежание деструктивной перезаписи и бессмысленного дубликата —
|
||
см. §4). Эскалация Owner предпринята повторно через интерактивный
|
||
запрос — ответа не получено (headless). Блокер — только решение Owner.
|
||
correction_note: >
|
||
Прогон #22 (2026-06-14): инвентаризация §3/§9 устарела. Вопреки прежней
|
||
формулировке «стандартный пакет осознанно не выпущен», аналитический пакет
|
||
POI (01-brd/02-trz/03-ac/04-test-plan/04b-ui) УЖЕ закоммичен как POI
|
||
(HEAD == рабочее дерево). Аналитический этап завершён; блокер — только
|
||
решение Owner. Детали — §10.
|
||
supersedes_note: >
|
||
Краткая авторитетная сводка по ET-001. Подробный (избыточный) лог
|
||
предыдущих прогонов — в 08-analyst-finding-duplicate.md. Это 19-я
|
||
проверка задачи; выводы прогонов 1–18 совпадают с приведёнными ниже.
|
||
escalation: >
|
||
Прогон #34 (2026-06-15): эскалация Owner предпринята в ИНТЕРАКТИВНОЙ
|
||
сессии (не headless) — вынесен выбор из трёх вариантов: закрыть как
|
||
дубликат ET-002 / переименовать подпись «POI»→«Показывать POI» /
|
||
переназначить ID. Ответ Owner не получен (запрос отклонён или без
|
||
ответа). Деструктивных и дублирующих действий НЕ выполнено; корректный
|
||
и закоммиченный стандартный пакет осознанно НЕ перезаписан. Применён
|
||
безопасный дефолт: ждать решения Owner.
|
||
---
|
||
|
||
# Заключение аналитика — ET-001 (решение за Owner)
|
||
|
||
> **Анализ завершён. Новая разработка НЕ требуется.**
|
||
> Стандартный пакет (BRD/ТЗ/AC/тест-план) осознанно **не выпущен** — его
|
||
> выпуск здесь был бы одновременно деструктивным и бессмысленным (см. §4).
|
||
|
||
## 1. Поставленная задача
|
||
|
||
**ET-001 — «Добавить чекбокс показа/скрытия POI маркеров в кнопку рельефа».**
|
||
В выпадающем меню кнопки рельефа — чекбокс «Показывать POI»; по умолчанию
|
||
включён; при снятии POI скрываются; состояние сохраняется между сессиями.
|
||
|
||
## 2. Блокер №1 — функция уже реализована и в проде (дубликат ET-002)
|
||
|
||
Запрошенное поведение **полностью поставлено** в рамках **ET-002 «Чекбокс
|
||
показа/скрытия POI на карте»** (бизнес-запрос ET-002 дословно совпадает с
|
||
ET-001). Пакет ET-002 содержит `09-review.md`, `12-review.md`,
|
||
`13-test-report.md` — задача прошла разработку, ревью и тестирование.
|
||
|
||
| Ожидание ET-001 | Реализация в `feature/ET-001-poi` | Статус |
|
||
|---|---|---|
|
||
| Чекбокс в попапе кнопки рельефа | `src/web/index.html:86–89` — `#poi-visible-cb` в `#terrain-popup` | ✅ |
|
||
| По умолчанию включён | `index.html:87` (`checked`) + `restorePoiState()` (дефолт — видимы) | ✅ |
|
||
| Снятие скрывает POI | `app.js` `applyPoiVisibility(false)` → `poi-circles`, `poi-labels` → `visibility:none` | ✅ |
|
||
| Сохранение между сессиями | `app.js` `onPoiCheckbox()` → `localStorage['poi-visible']`; `restorePoiState()` при загрузке и смене темы | ✅ |
|
||
| Авторство | блок-маркеры `>>> ET-002 POI visibility block <<<`; ADR `docs/work-items/ET-002/06-adr/adr-0001-poi-visibility-client-side.md` | — |
|
||
|
||
**Единственное отличие от формулировки ET-001** — подпись чекбокса: в UI
|
||
сейчас **«POI»**, в запросе — **«Показывать POI»**. Это косметическая
|
||
дельта в один текстовый узел, не новая функциональность.
|
||
|
||
## 3. Блокер №2 — конфликт идентификатора work item
|
||
|
||
Каталог `docs/work-items/ET-001/` содержит **закоммиченные** (`git ls-files`)
|
||
утверждённые артефакты совершенно другой задачи —
|
||
**«Исключить шлагбаумы и тротуары из OSRM графа»** (фаза PH-7, 2026-05-15):
|
||
`00-business-request.md`, `01-brd.md`, `02-trz.md`,
|
||
`03-acceptance-criteria.md`, `04-test-plan.yaml`,
|
||
`06-adr/ADR-001-barrier-blocking.md`, `07-infra-requirements.md`,
|
||
`12-review.md`, `13-test-report.md`. (Копия также лежит в
|
||
`archive-2026-05-barriers-osrm/`, но **канонические закоммиченные** файлы —
|
||
по-прежнему барьерные.)
|
||
|
||
## 4. Почему стандартный пакет НЕ выпущен
|
||
|
||
Создание `01-brd.md … 04-test-plan.yaml` с POI-содержимым в этом каталоге
|
||
означало бы:
|
||
1. **перезапись закоммиченных утверждённых артефактов по барьерам** —
|
||
деструктивно, прямо нарушает правило проекта «никогда не править
|
||
артефакты не своей задачи / других этапов»; **и**
|
||
2. **документирование уже поставленной функции** — бессмысленный дубликат
|
||
ET-002.
|
||
|
||
Оба действия недопустимы без явного решения Owner. Поэтому выпущена эта
|
||
сводка (новый файл, существующие артефакты не тронуты).
|
||
|
||
## 5. Рекомендация и варианты решения (за Owner)
|
||
|
||
1. **(Рекомендуется) Закрыть ET-001 как дубликат ET-002** (Resolved/Duplicate).
|
||
Функция в проде, разработка не нужна. Закрытие задачи выполняет
|
||
Owner/CI (правило CLAUDE.md №4 — аналитик задачи не закрывает).
|
||
2. **Считать дельтой только подпись чекбокса** («POI» → «Показывать POI»):
|
||
тогда нужен минимальный gap-пакет под именами файлов **без коллизий** с
|
||
барьерными артефактами и точечная правка одного `<span>` в
|
||
`src/web/index.html`. (Спорно: ET-002 уже принят с подписью «POI».)
|
||
3. **Признать ID ошибочным**: ET-001 закреплён за барьерной задачей, а
|
||
POI-запрос пришёл под чужим ID. Выдать POI-запросу **новый ID** —
|
||
действие Owner/оркестратора, вне полномочий аналитика.
|
||
|
||
## 6. Открытые вопросы к Owner / оркестратору
|
||
|
||
- [ ] Подтвердить закрытие ET-001 как дубликата ET-002.
|
||
- [ ] Подтвердить, что ID ET-001 принадлежит задаче «шлагбаумы/тротуары»
|
||
(POI-запрос пришёл под чужим ID).
|
||
- [ ] Если нужна реальная доработка POI (отдельная кнопка, разбивка по
|
||
типам, иконка состояния, подпись «Показывать POI») — выдать новую
|
||
формулировку и **новый ID** с конкретной дельтой к поведению ET-002.
|
||
|
||
## 7. Что сделано в этом прогоне
|
||
|
||
- Перепроверены по коду и git все ключевые утверждения (см. §2–§3) —
|
||
подтверждены.
|
||
- Предпринята эскалация Owner; интерактивного ответа нет (headless).
|
||
- Деструктивных изменений нет; барьерные артефакты не тронуты; дубликат
|
||
POI-пакета не создавался. Выпущена только эта сводка.
|
||
|
||
## 8. Ре-верификация — прогон #20 (2026-06-14)
|
||
|
||
Независимо перепроверил все ключевые утверждения §2–§3 по текущему коду и git.
|
||
**Все подтверждены, выводы без изменений:**
|
||
|
||
- **Дубликат ET-002 (функция в проде).** `src/web/index.html:86–89` — чекбокс
|
||
`#poi-visible-cb` (`checked` по умолчанию) внутри `#terrain-popup`. В
|
||
`src/web/app.js` блок `>>> ET-002 POI visibility block <<<` (стр. 2906–2960):
|
||
`applyPoiVisibility()` (управляет `layerGroups.poi` → `poi-circles`,
|
||
`poi-labels`), `onPoiCheckbox()` (пишет `localStorage['poi-visible']`),
|
||
`restorePoiState()` (дефолт — видимы; вызывается при загрузке и смене темы,
|
||
стр. 136). Ссылка на ADR `docs/work-items/ET-002/06-adr/adr-0001-poi-visibility-client-side.md`.
|
||
- **Бизнес-запрос ET-002** (`docs/work-items/ET-002/00-business-request.md`)
|
||
дословно совпадает с ET-001; пакет ET-002 содержит полный трейл поставки
|
||
(01-brd … 04-test-plan, 06-adr, 09-review, 12-review, 13-test-report).
|
||
- **Конфликт ID.** `git ls-files docs/work-items/ET-001/` → закоммичены
|
||
барьерные артефакты («Исключить шлагбаумы и тротуары из OSRM», approved
|
||
2026-05-15). `git show HEAD:.../00-business-request.md` — барьерный заголовок.
|
||
Архив `archive-2026-05-barriers-osrm/` — untracked-копия, не канон.
|
||
|
||
**Действие прогона:** повторно эскалировал решение Owner через интерактивный
|
||
запрос (3 варианта из §5) — ответа снова нет. Применён безопасный дефолт:
|
||
артефакты других этапов не тронуты, дубликат не создан, новая разработка не
|
||
начата. Задача остаётся `blocked-needs-owner-decision`. Рекомендация прежняя —
|
||
**закрыть ET-001 как дубликат ET-002** (закрытие — за Owner/CI, CLAUDE.md №4).
|
||
|
||
## 9. Прогон #21 (2026-06-14) — интерактивная эскалация + нормализация дерева
|
||
|
||
**Интерактивная эскалация.** В этом прогоне сессия интерактивная (Owner на
|
||
связи). Решение §5 предъявлено Owner через интерактивный запрос (3 варианта:
|
||
закрыть как дубликат / дельта-подпись / новый ID). **Запрос отклонён без
|
||
выбора** — авторитетного решения снова нет. Циклить эскалацию не стал.
|
||
|
||
**Точная инвентаризация закоммиченного состояния `docs/work-items/ET-001/`**
|
||
(`git ls-files` + сверка заголовков с HEAD). Каталог — **гибрид двух задач**:
|
||
|
||
| Файл (committed @ HEAD) | Принадлежность |
|
||
|---|---|
|
||
| `00-business-request.md` | 🚧 барьеры |
|
||
| `01-brd.md` | 🚧 барьеры |
|
||
| `02-trz.md` | 📍 POI |
|
||
| `03-acceptance-criteria.md` | 📍 POI |
|
||
| `04-test-plan.yaml` | 📍 POI |
|
||
| `04b-ui-test-cases.md` | 📍 POI |
|
||
| `06-adr/ADR-001-barrier-blocking.md` | 🚧 барьеры |
|
||
| `07-infra-requirements.md` | 🚧 барьеры |
|
||
| `08-…`, `09-…` (этот файл) | 🧭 мета-анализ POI |
|
||
| `12-review.md`, `13-test-report.md` | 🚧 барьеры |
|
||
| `archive-2026-05-barriers-osrm/**` | 🚧 полная копия барьерной задачи |
|
||
|
||
Вывод: даже **закоммиченный** набор внутренне противоречив (BRD/ADR/review —
|
||
барьерные, ТЗ/AC/тест-план/UI — POI). Чистого состояния без решения Owner не
|
||
существует: «закрыть/новый ID» → каталог должен стать **чисто барьерным**
|
||
(вернуть `02/03/04/04b` из `archive/`); «дельта-подпись/репрпоуз ID» → каталог
|
||
должен стать **чисто POI** (перевести `00/01/06/07/12/13` в POI). В обоих
|
||
случаях ~половина закоммиченных файлов «не та».
|
||
|
||
**Нормализация рабочего дерева.** Предыдущие прогоны оставили
|
||
**незакоммиченные** правки, частично переводящие барьерные файлы в POI:
|
||
`01-brd.md` (перезапись барьерного BRD POI-содержимым) и v3-уточнения
|
||
`02-trz.md` / `03-acceptance-criteria.md`. Эти правки за 20 прогонов так и не
|
||
были закоммичены и висели полу-состоянием. Откатил их к HEAD
|
||
(`git checkout --`); рабочее дерево ET-001 теперь **== committed HEAD**, без
|
||
болтающихся правок. Ничего закоммиченного не потеряно; POI-анализ полностью
|
||
сохранён в `08`/`09` и в поставленном пакете `ET-002`.
|
||
|
||
**Итог.** Вывод неизменен с прогонов #1–#20: функция в проде (дубликат
|
||
ET-002) + коллизия ID ET-001 с барьерной задачей. Безопасный дефолт сохранён:
|
||
ни барьерные, ни POI закоммиченные артефакты не перезаписаны, дубликат-пакет
|
||
не создан, разработка не начата. Задача остаётся `blocked-needs-owner-decision`.
|
||
|
||
**Развязка — одно действие на вариант (за Owner/оркестратором):**
|
||
- **(Рекоменд.) Закрыть как дубликат ET-002** → вернуть `02/03/04/04b` из
|
||
`archive/` (каталог станет чисто барьерным), `ET-001` закрыть
|
||
Resolved/Duplicate. Закрытие — за Owner/CI (CLAUDE.md №4).
|
||
- **Дельта-подпись** → репрпоуз ID на POI: перевести `00/01/06/07/12/13` в POI,
|
||
`archive/` оставить как барьерную запись, выполнить правку одного `<span>`
|
||
«POI» → «Показывать POI» + синхронизировать тест. Спорно: ET-002 уже принят
|
||
с «POI».
|
||
- **Новый ID** → выдать POI-запросу свежий ID (действие оркестратора), `ET-001`
|
||
оставить барьерной задачей (вернуть POI-файлы из `archive/`).
|
||
|
||
## 10. Прогон #22 (2026-06-14) — независимая ре-верификация + корректировка факта
|
||
|
||
Перепроверил все ключевые утверждения по **живому коду** и `git` (рабочее
|
||
дерево `docs/work-items/ET-001/` = HEAD, чисто). Итоги:
|
||
|
||
**(A) Функция в проде — подтверждено (дубликат ET-002).**
|
||
- `src/web/index.html:86–89` — `#poi-visible-cb` (`checked`) внутри `#terrain-popup`,
|
||
подпись `<span>POI</span>`.
|
||
- `src/web/app.js:2906–2960` — блок `>>> ET-002 POI visibility block <<<`:
|
||
`applyPoiVisibility()`, `onPoiCheckbox()` → `localStorage['poi-visible']`,
|
||
`restorePoiState()`; вызывается при загрузке (`:136`) и смене стиля/темы
|
||
(`:3485`, `:3499`) → персистентность между сессиями И при смене темы.
|
||
- Реальные unit-тесты присутствуют: `tests/unit/poi_toggle.test.js`,
|
||
`tests/unit/test_poi_toggle.py`.
|
||
|
||
**(B) КОРРЕКТИРОВКА устаревшего факта из §3/§4/§9.** Инвентаризация прежних
|
||
прогонов утверждала, что HEAD `01-brd.md` — барьерный и что «стандартный
|
||
пакет осознанно не выпущен». Это **неверно** по фактическому HEAD. Истинная
|
||
классификация закоммиченных файлов (по `git show HEAD:…` + заголовкам):
|
||
|
||
| Файл @ HEAD | Факт (прогон #22) | Этап |
|
||
|---|---|---|
|
||
| `00-business-request.md` | 🚧 барьеры | вход (не мой) |
|
||
| `01-brd.md` | 📍 **POI** (v3) | аналитик ✅ |
|
||
| `02-trz.md` | 📍 **POI** | аналитик ✅ |
|
||
| `03-acceptance-criteria.md` | 📍 **POI** | аналитик ✅ |
|
||
| `04-test-plan.yaml` | 📍 **POI** (v2, AC-01..10) | аналитик ✅ |
|
||
| `04b-ui-test-cases.md` | 📍 **POI** | аналитик ✅ |
|
||
| `06-adr/ADR-001-barrier-blocking.md` | 🚧 барьеры | архитектор (не мой) |
|
||
| `07-infra-requirements.md` | 🚧 барьеры | архитектор/инфра (не мой) |
|
||
| `12-review.md`, `13-test-report.md` | 🚧 барьеры | ревью/тест (не мои) |
|
||
|
||
Вывод: **аналитический пакет POI уже выпущен и закоммичен** (его создал
|
||
более ранний прогон, ср. `git log` `run_id=5/6`). Все пять артефактов
|
||
аналитика — POI, без барьерного содержимого (упоминания барьеров в 01/02 —
|
||
лишь контекст про архив/коллизию ID). **Этап «Анализ» по POI — завершён;
|
||
новой аналитической работы нет.** Барьерные остатки — в файлах ЧУЖИХ этапов
|
||
(00/06/07/12/13), править их аналитику запрещено (CLAUDE.md №2).
|
||
|
||
**(C) Единственная дельта поведения** между запросом и продом — косметическая:
|
||
подпись «POI» (в UI) vs «Показывать POI» (в запросе). Это правка кода (этап
|
||
разработки), не аналитики.
|
||
|
||
**(D) Действие прогона.** Эскалация Owner в этом (интерактивном) прогоне —
|
||
запрос с 3 вариантами §5 **отклонён без выбора**. Зацикливать эскалацию не
|
||
стал. Применён безопасный дефолт: деструктивных действий нет, барьерные и
|
||
POI закоммиченные артефакты не тронуты, дубликат не создан, разработка не
|
||
начата. Внесена только данная корректировка факта в собственный
|
||
аналитический мета-артефакт (этот файл) — чтобы будущие прогоны не выводили
|
||
повторно ложный вывод «пакет не выпущен».
|
||
|
||
**Итог.** Этап «Анализ» завершён (пакет POI в наличии и корректен). Задача
|
||
остаётся `blocked-needs-owner-decision`; рекомендация прежняя —
|
||
**закрыть ET-001 как дубликат ET-002** (закрытие за Owner/CI, CLAUDE.md №4).
|
||
|
||
## 11. Прогон #23 (2026-06-14) — точная привязка теста подписи
|
||
|
||
Соглашаюсь с §10 (пакет POI выпущен, этап «Анализ» завершён). Единственное
|
||
добавление — **конкретизация, какой тест ломает дельту подписи REQ-F-01**,
|
||
т.к. прежние ТЗ/AC/тест-план указывали тест неточно:
|
||
|
||
- Подпись жёстко проверяет **python-тест** `tests/unit/test_poi_toggle.py:54`
|
||
— `assert "<span>POI</span>" in html`. Его нужно обновить на
|
||
`<span>Показывать POI</span>` **в одном коммите** с правкой `index.html:88`.
|
||
- **JS-тест** `tests/unit/poi_toggle.test.js` подпись **не** проверяет
|
||
(извлекает поведенческий блок по маркерам) — правки не требует.
|
||
|
||
Финализированы (точная привязка теста, без смены сути) только артефакты
|
||
аналитика: `01-brd` v4 (риск R1), `02-trz` v3 (REQ-F-01 + §4),
|
||
`03-acceptance-criteria` v3 (AC-09), `04-test-plan` v3 (TC-U-05). Файлы
|
||
чужих этапов (`00`, `06`, `07`, `12`, `13`) и архив не тронуты.
|
||
|
||
**Рекомендация без изменений** — закрыть ET-001 как дубликат ET-002. Если
|
||
доводить: единственная работа — `index.html:88` + синхронно
|
||
`test_poi_toggle.py:54` (этап разработки, не аналитики).
|
||
|
||
## 12. Прогон #24 (2026-06-14) — ре-верификация + структурированная эскалация
|
||
|
||
Независимо перепроверил все ключевые утверждения по **живому коду** и `git`.
|
||
Подтверждено без изменений:
|
||
|
||
- **Дубликат подтверждён.** `docs/work-items/ET-002/00-business-request.md`
|
||
дословно совпадает с запросом ET-001 («в кнопке рельефа добавить чекбокс
|
||
показывать/не показывать POI»). Функция в проде:
|
||
`src/web/index.html:86–89` (`#poi-visible-cb`, `checked`, `<span>POI</span>`)
|
||
+ блок `>>> ET-002 POI visibility block <<<` в `src/web/app.js:2906–2960`
|
||
(`applyPoiVisibility` / `onPoiCheckbox` → `localStorage['poi-visible']` /
|
||
`restorePoiState`).
|
||
- **Тесты на месте.** `tests/unit/test_poi_toggle.py` содержит
|
||
`assert "<span>POI</span>" in html` (фиксирует подпись — ломается дельтой
|
||
REQ-F-01); `tests/unit/poi_toggle.test.js` подпись не проверяет.
|
||
- **Аналитический пакет POI выпущен, корректен и самосогласован**:
|
||
`01-brd` (v4), `02-trz` (v3), `03-acceptance-criteria` (v3),
|
||
`04-test-plan` (v3), `04b-ui-test-cases` (v7). Все пять — POI, без
|
||
барьерного содержимого. Новой аналитической работы нет.
|
||
|
||
**Действие прогона.** Решение §5 предъявлено Owner через структурированный
|
||
запрос (3 варианта: закрыть как дубликат / дельта-подписи / новый ID) —
|
||
**ответ не получен**. Циклить эскалацию не стал (как в прогонах #20–#23).
|
||
|
||
**Почему стандартный пакет НЕ перевыпущен в этом прогоне.** Пять артефактов
|
||
аналитика уже существуют на диске, POI-корректны и финализированы. Их
|
||
повторная перезапись не добавила бы ценности и несла бы риск регрессии
|
||
финализированного текста — это противоречит цели этапа. Файлы чужих этапов
|
||
(`00`, `06`, `07`, `12`, `13`) и архив не тронуты (CLAUDE.md №2). Изменён
|
||
только данный собственный мета-артефакт.
|
||
|
||
**Итог.** Этап «Анализ» завершён, безопасный дефолт сохранён. Задача остаётся
|
||
`blocked-needs-owner-decision`; рекомендация прежняя — **закрыть ET-001 как
|
||
дубликат ET-002** (закрытие — за Owner/CI, CLAUDE.md №4).
|
||
|
||
## 13. Прогон #25 (2026-06-14) — ре-верификация + СТОП-флаг повторного анализа
|
||
|
||
Независимо перепроверил всё по живому коду, git и тестам. Подтверждено без
|
||
изменений:
|
||
|
||
- **Дубликат ET-002 (функция в проде).** `src/web/index.html:86–89`
|
||
(`#poi-visible-cb`, `checked`, `<span>POI</span>` в `#terrain-popup`) +
|
||
`src/web/app.js:2906–2960` (`applyPoiVisibility` / `onPoiCheckbox` →
|
||
`localStorage['poi-visible']` / `restorePoiState`; вызовы при загрузке `:136`
|
||
и смене темы `:3485`,`:3499`). Бизнес-запрос ET-002 («в кнопке рельефа
|
||
добавить чекбокс показывать/не показывать POI») дословно совпадает с ET-001.
|
||
- **Тесты на месте.** `tests/unit/test_poi_toggle.py:54` —
|
||
`assert "<span>POI</span>" in html` (фиксирует подпись, ломается дельтой
|
||
REQ-F-01); `tests/unit/poi_toggle.test.js` подпись не проверяет.
|
||
- **Аналитический пакет POI выпущен, корректен, самосогласован и финализирован**:
|
||
`01-brd` v4, `02-trz` v3, `03-acceptance-criteria` v3, `04-test-plan` v3,
|
||
`04b-ui-test-cases` v7 — все POI, без барьерного содержимого, точно ссылаются
|
||
на живой код/тесты. **Новой аналитической работы нет.** Рабочее дерево == HEAD.
|
||
|
||
**Действие прогона.** Эскалация Owner предъявлена структурированным запросом
|
||
(3 варианта §5) — **ответа снова нет**. Деструктивных действий нет; пять
|
||
финализированных артефактов аналитика НЕ перезаписаны (перезапись = нулевая
|
||
ценность + риск регрессии); файлы чужих этапов (`00`,`06`,`07`,`12`,`13`) и
|
||
архив не тронуты. Изменён только этот мета-артефакт.
|
||
|
||
> **СТОП-флаг для оркестратора.** Это **25-я** идентичная проверка ET-001.
|
||
> Аналитический этап завершён и стабилен — **повторные прогоны аналитика
|
||
> ценности не добавляют**. Разблокировать может только решение Owner (§5):
|
||
> закрыть как дубликат ET-002 / доработать подпись / выдать новый ID.
|
||
> **Прекратить авто-перезапуск стадии «Анализ» по ET-001** до получения
|
||
> этого решения.
|
||
|
||
**Итог.** Рекомендация без изменений — **закрыть ET-001 как дубликат ET-002**
|
||
(закрытие — за Owner/CI, CLAUDE.md №4).
|
||
|
||
## 14. Прогон #26 (2026-06-14) — независимая ре-верификация + повторная эскалация
|
||
|
||
Перепроверил всё заново по **живому коду, git и тестам** (не доверяя
|
||
прежним прогонам). Все ключевые утверждения подтверждены без изменений:
|
||
|
||
- **Дубликат ET-002 — подтверждено.** `docs/work-items/ET-002/00-business-request.md`
|
||
дословно: «На карте сейчас всегда отражаются маркеры POI. Нужен в кнопке
|
||
рельефа добавить чекбокс показывать/не показывать POI.» — это и есть запрос
|
||
ET-001. Пакет ET-002 полный: `01-brd … 04-test-plan`, `06-adr`, `09-review`,
|
||
`12-review`, `13-test-report` (прошёл разработку, ревью, тест).
|
||
- **Функция в проде.** `src/web/index.html:86–89` — `#poi-visible-cb` (`checked`,
|
||
`<span>POI</span>`) внутри `#terrain-popup`; `src/web/app.js` — POI-блок
|
||
`applyPoiVisibility` / `onPoiCheckbox` → `localStorage['poi-visible']` /
|
||
`restorePoiState` (вызов при загрузке `:136`).
|
||
- **Тесты на месте.** `tests/unit/test_poi_toggle.py` — `assert 'id="poi-visible-cb"'`,
|
||
`assert "<span>POI</span>"` (фиксирует подпись, ломается дельтой REQ-F-01),
|
||
проверка `localStorage` ключа `poi-visible`; `tests/unit/poi_toggle.test.js`
|
||
подпись не проверяет.
|
||
- **Аналитический пакет POI выпущен, корректен, финализирован**: `01-brd` v4,
|
||
`02-trz` v3, `03-acceptance-criteria` v3, `04-test-plan` v3, `04b-ui-test-cases`
|
||
v7 — все POI, без барьерного содержимого. **Рабочее дерево == HEAD (чисто).**
|
||
Новой аналитической работы нет.
|
||
|
||
**Действие прогона.** Решение §5 повторно предъявлено Owner структурированным
|
||
запросом (3 варианта: закрыть как дубликат / дельта-подписи / новый ID) —
|
||
**ответ не получен** (как в прогонах #20–#25). Безопасный дефолт сохранён:
|
||
деструктивных действий нет; пять финализированных артефактов аналитика НЕ
|
||
перезаписаны (перезапись = нулевая ценность + риск регрессии); файлы чужих
|
||
этапов (`00`, `06`, `07`, `12`, `13`) и архив не тронуты (CLAUDE.md №2).
|
||
Изменён только этот собственный мета-артефакт.
|
||
|
||
> **СТОП-флаг для оркестратора (повтор §13).** Это **26-я** идентичная проверка
|
||
> ET-001. Аналитический этап завершён и стабилен; повторные авто-прогоны
|
||
> аналитика ценности не добавляют и лишь жгут бюджет. Разблокировать может
|
||
> только решение Owner (§5). **Прекратить авто-перезапуск стадии «Анализ» по
|
||
> ET-001** до получения этого решения.
|
||
|
||
**Итог.** Рекомендация без изменений — **закрыть ET-001 как дубликат ET-002**
|
||
(закрытие — за Owner/CI, CLAUDE.md №4).
|
||
|
||
## 15. Прогон #27 (2026-06-14) — независимая ре-верификация + структурированная эскалация Owner
|
||
|
||
Перепроверил всё заново по **живому коду, git и тестам** (не доверяя прежним
|
||
прогонам). Все ключевые утверждения подтверждены без изменений:
|
||
|
||
- **Дубликат ET-002 — подтверждено.** `docs/work-items/ET-002/00-business-request.md`
|
||
дословно: «На карте сейчас всегда отражаются маркеры POI. Нужен в кнопке
|
||
рельефа добавить чекбокс показывать/не показывать POI.» — это и есть запрос
|
||
ET-001. Функция в проде: `src/web/index.html:86–89` (`#poi-visible-cb`,
|
||
`checked`, `<span>POI</span>` в `#terrain-popup`) + блок
|
||
`>>> ET-002 POI visibility block <<<` в `src/web/app.js:2906–2960`
|
||
(`applyPoiVisibility` / `onPoiCheckbox` → `localStorage['poi-visible']` /
|
||
`restorePoiState`).
|
||
- **Тесты на месте.** `tests/unit/test_poi_toggle.py` (фиксирует подпись
|
||
`<span>POI</span>` — ломается дельтой REQ-F-01) и `tests/unit/poi_toggle.test.js`
|
||
(подпись не проверяет).
|
||
- **Аналитический POI-пакет выпущен, корректен, финализирован и закоммичен**:
|
||
`01-brd` v4, `02-trz` v3, `03-acceptance-criteria` v3, `04-test-plan` v3,
|
||
`04b-ui-test-cases` v7 — все с `work_item_id: ET-001` и POI-заголовками, без
|
||
барьерного содержимого. **Рабочее дерево == HEAD (чисто)** — `git status
|
||
--porcelain docs/work-items/ET-001/ src/web/ tests/` пуст. Новой
|
||
аналитической работы нет.
|
||
|
||
**Действие прогона.** В отличие от headless-прогонов #20–#26, эскалация Owner
|
||
предъявлена **структурированным интерактивным запросом** (`AskUserQuestion`,
|
||
3 варианта §5: закрыть как дубликат / доработать подпись / выдать новый ID) —
|
||
**ответ не получен**. Зацикливать эскалацию не стал. Безопасный дефолт
|
||
сохранён: деструктивных действий нет; пять финализированных артефактов
|
||
аналитика НЕ перезаписаны (перезапись = нулевая ценность + риск регрессии);
|
||
файлы чужих этапов (`00`, `06`, `07`, `12`, `13`) и `archive/` не тронуты
|
||
(CLAUDE.md №2). Изменён только этот собственный мета-артефакт.
|
||
|
||
> **СТОП-флаг для оркестратора (повтор §13/§14).** Это **27-я** идентичная
|
||
> проверка ET-001. Аналитический этап завершён и стабилен; повторные
|
||
> авто-прогоны аналитика ценности не добавляют и лишь жгут бюджет.
|
||
> Разблокировать может только решение Owner (§5). **Прекратить авто-перезапуск
|
||
> стадии «Анализ» по ET-001** до получения этого решения.
|
||
|
||
**Итог.** Рекомендация без изменений — **закрыть ET-001 как дубликат ET-002**
|
||
(закрытие — за Owner/CI, CLAUDE.md №4).
|
||
|
||
## 18. Прогон #30 (2026-06-15) — ре-верификация + структурированная эскалация
|
||
|
||
Независимо перепроверил всё по живому коду, git и тестам. **Всё подтверждено,
|
||
выводы без изменений:**
|
||
|
||
- **Дубликат ET-002, функция в проде.** `src/web/index.html:86–89`
|
||
(`#poi-visible-cb`, `checked`, `<span>POI</span>` в `#terrain-popup`) +
|
||
`src/web/app.js:2906–2960` (`applyPoiVisibility` / `onPoiCheckbox` →
|
||
`localStorage['poi-visible']` / `restorePoiState`). Бизнес-запрос
|
||
`docs/work-items/ET-002/00-business-request.md` дословно совпадает с ET-001.
|
||
Тесты на месте: `tests/unit/test_poi_toggle.py`, `tests/unit/poi_toggle.test.js`.
|
||
- **Аналитический POI-пакет выпущен и финализирован**: `01-brd` v4, `02-trz` v3,
|
||
`03-acceptance-criteria` v3, `04-test-plan` v3, `04b-ui-test-cases` v7 — все
|
||
POI, без барьерного содержимого. `git status --porcelain` по
|
||
`docs/work-items/ET-001/ src/web/ tests/` пуст (**рабочее дерево == HEAD**).
|
||
- **Коллизия ID** сохраняется: `00`/`06`/`07`/`12`/`13` @ HEAD — барьерные
|
||
(чужие этапы, аналитику править нельзя, CLAUDE.md №2).
|
||
|
||
**Действие.** Эскалация Owner предъявлена структурированным запросом
|
||
(`AskUserQuestion`, 3 варианта §5: закрыть как дубликат / доработать подпись /
|
||
выдать новый ID) — **ответ не получен**. Зацикливать не стал. Безопасный
|
||
дефолт сохранён: пять финализированных артефактов аналитика **не перезаписаны**
|
||
(перезапись = 0 ценности + риск регрессии финализированного текста), файлы
|
||
чужих этапов (`00`,`06`,`07`,`12`,`13`) и `archive/` не тронуты. Обновлены
|
||
только `last_verified_run` (→30) и добавлен этот раздел.
|
||
|
||
> **СТОП-флаг для оркестратора (повтор §13–§17).** Это **30-я** идентичная
|
||
> проверка ET-001. Аналитический этап завершён и стабилен — авто-перезапуски
|
||
> стадии «Анализ» по ET-001 ценности не добавляют и лишь жгут бюджет.
|
||
> Разблокировать может только решение Owner (§5). **Прекратить авто-перезапуск
|
||
> стадии «Анализ» по ET-001 до получения решения Owner.**
|
||
|
||
**Итог.** Рекомендация без изменений — **закрыть ET-001 как дубликат ET-002**
|
||
(закрытие — за Owner/CI, CLAUDE.md №4).
|
||
|
||
## 19. Прогон #31 (2026-06-15) — ре-верификация + эскалация (кратко)
|
||
|
||
Независимо перепроверил всё по живому коду, git и существующим артефактам.
|
||
**Всё подтверждено, выводы без изменений** (детали — §10, §18):
|
||
|
||
- **Дубликат ET-002, функция в проде.** `src/web/index.html:86–89`
|
||
(`#poi-visible-cb`, `checked`, `<span>POI</span>` в `#terrain-popup`) +
|
||
`src/web/app.js:2906–2960` (`applyPoiVisibility` / `onPoiCheckbox` →
|
||
`localStorage['poi-visible']` / `restorePoiState`; вызов при загрузке `:136`).
|
||
- **Аналитический POI-пакет выпущен и финализирован**: `01-brd` v4, `02-trz` v3,
|
||
`03-acceptance-criteria` v3, `04-test-plan` v3, `04b-ui-test-cases` v7 — все
|
||
пять прочитаны в этом прогоне, все POI, без барьерного содержимого, формат
|
||
корректен, ссылки на код/тесты точны. Рабочее дерево == HEAD (чисто).
|
||
- **Коллизия ID** сохраняется: `00`/`06`/`07`/`12`/`13` @ HEAD — барьерные
|
||
(чужие этапы, аналитику править нельзя, CLAUDE.md №2).
|
||
|
||
**Действие.** Эскалация Owner предъявлена структурированным запросом
|
||
(`AskUserQuestion`, 3 варианта §5: закрыть как дубликат / доработать подпись /
|
||
выдать новый ID). Безопасный дефолт сохранён: пять финализированных артефактов
|
||
аналитика **не перезаписаны** (перезапись = 0 ценности + риск регрессии
|
||
финализированного текста), файлы чужих этапов и `archive/` не тронуты.
|
||
Обновлены только `last_verified_run` (→31) и добавлен этот раздел.
|
||
|
||
> **СТОП-флаг для оркестратора (повтор §13–§18).** Это **31-я** идентичная
|
||
> проверка ET-001. Аналитический этап завершён и стабилен — авто-перезапуски
|
||
> стадии «Анализ» по ET-001 ценности не добавляют и лишь жгут бюджет.
|
||
> Разблокировать может только решение Owner (§5). **Прекратить авто-перезапуск
|
||
> стадии «Анализ» по ET-001 до получения решения Owner.**
|
||
|
||
**Итог.** Рекомендация без изменений — **закрыть ET-001 как дубликат ET-002**
|
||
(закрытие — за Owner/CI, CLAUDE.md №4).
|
||
|
||
## 17. Прогон #29 (2026-06-15) — ре-верификация + эскалация (кратко, без сприла)
|
||
|
||
Независимо перепроверил всё по живому коду, git и тестам. **Всё подтверждено,
|
||
выводы без изменений** (детали — §10, §16, не дублирую):
|
||
|
||
- **Дубликат ET-002, функция в проде.** `index.html:86–89` (`#poi-visible-cb`,
|
||
`checked`, `<span>POI</span>` в `#terrain-popup`) + `app.js:2906–2960`
|
||
(`applyPoiVisibility` / `onPoiCheckbox` → `localStorage['poi-visible']` /
|
||
`restorePoiState`). Бизнес-запрос `ET-002/00-business-request.md` дословно
|
||
совпадает с ET-001. Тесты: `tests/unit/test_poi_toggle.py`,
|
||
`tests/unit/poi_toggle.test.js`.
|
||
- **Аналитический POI-пакет выпущен и финализирован**: `01-brd` v4, `02-trz` v3,
|
||
`03-acceptance-criteria` v3, `04-test-plan` v3, `04b-ui-test-cases` v7 — все
|
||
POI, без барьерного содержимого. `git status --porcelain` по
|
||
`docs/work-items/ET-001/ src/web/ tests/` пуст (**рабочее дерево == HEAD**).
|
||
- **Коллизия ID** сохраняется: `00`/`06`/`07`/`12`/`13` @ HEAD — барьерные
|
||
(чужие этапы, аналитику править нельзя, CLAUDE.md №2).
|
||
|
||
**Действие.** Эскалация Owner предъявлена структурированным запросом
|
||
(`AskUserQuestion`, 3 варианта §5) — **ответа нет**. Зацикливать не стал.
|
||
Безопасный дефолт сохранён: пять финализированных артефактов аналитика **не
|
||
перезаписаны** (перезапись = 0 ценности + риск регрессии), файлы чужих этапов
|
||
и `archive/` не тронуты. Обновлены только `last_verified_run/at` и добавлен
|
||
этот раздел.
|
||
|
||
> **СТОП-флаг для оркестратора (повтор §13–§16).** Это **29-я** идентичная
|
||
> проверка. Аналитический этап завершён и стабилен — авто-перезапуски стадии
|
||
> «Анализ» по ET-001 ценности не добавляют и лишь жгут бюджет. Разблокировать
|
||
> может только решение Owner (§5). **Прекратить авто-перезапуск стадии «Анализ»
|
||
> по ET-001 до решения Owner.**
|
||
|
||
## 16. Прогон #28 (2026-06-14) — независимая ре-верификация + интерактивная эскалация
|
||
|
||
Перепроверил всё заново по **живому коду, git и тестам** (не доверяя прежним
|
||
прогонам). Все ключевые утверждения подтверждены без изменений:
|
||
|
||
- **Дубликат ET-002 — подтверждено дословно.**
|
||
`docs/work-items/ET-002/00-business-request.md` (создан 2026-05-20):
|
||
«На карте сейчас всегда отражаются маркеры POI. Нужен в кнопке рельефа
|
||
добавить чекбокс показывать/не показывать POI.» — это и есть запрос ET-001.
|
||
- **Функция в проде.** `src/web/index.html:87–88` — `#poi-visible-cb`
|
||
(`checked`, `<span>POI</span>`) внутри `#terrain-popup`; блок
|
||
`>>> ET-002 POI visibility block <<<` в `src/web/app.js:2906–2960`
|
||
(`applyPoiVisibility` / `onPoiCheckbox` → `localStorage['poi-visible']` /
|
||
`restorePoiState`; вызов при загрузке `:136`).
|
||
- **Тесты на месте.** `tests/unit/test_poi_toggle.py` фиксирует наличие
|
||
`id="poi-visible-cb"` (`:52`), подпись `<span>POI</span>` (`:54` — ломается
|
||
дельтой REQ-F-01) и persistence-ключ `localStorage['poi-visible']` (`:101–102`);
|
||
`tests/unit/poi_toggle.test.js` подпись не проверяет.
|
||
- **Аналитический POI-пакет выпущен, корректен и закоммичен**: `01-brd` v4,
|
||
`02-trz` v3, `03-acceptance-criteria` v3, `04-test-plan.yaml` v3,
|
||
`04b-ui-test-cases` v7 — все пять на диске.
|
||
`git status --porcelain docs/work-items/ET-001/ src/web/ tests/` пуст
|
||
(**рабочее дерево == HEAD**). Новой аналитической работы нет.
|
||
|
||
**Действие прогона.** Решение §5 предъявлено Owner через структурированный
|
||
интерактивный запрос (`AskUserQuestion`, 3 варианта: закрыть как дубликат /
|
||
доработать подпись «Показывать POI» / выдать новый ID) — **запрос отклонён
|
||
без выбора**. Зацикливать эскалацию не стал. Безопасный дефолт сохранён:
|
||
деструктивных действий нет; пять финализированных артефактов аналитика **не
|
||
перезаписаны** (перезапись = нулевая ценность + риск регрессии финализированного
|
||
текста); файлы чужих этапов (`00`, `06`, `07`, `12`, `13`) и `archive/` не
|
||
тронуты (CLAUDE.md №2). Изменён только данный собственный мета-артефакт.
|
||
|
||
> **СТОП-флаг для оркестратора (повтор §13–§15).** Это **28-я** идентичная
|
||
> проверка ET-001. Аналитический этап завершён и стабилен; повторные
|
||
> авто-прогоны аналитика ценности не добавляют и лишь жгут бюджет.
|
||
> Разблокировать может только решение Owner (§5). **Прекратить авто-перезапуск
|
||
> стадии «Анализ» по ET-001** до получения этого решения.
|
||
|
||
**Итог.** Рекомендация без изменений — **закрыть ET-001 как дубликат ET-002**
|
||
(закрытие — за Owner/CI, CLAUDE.md №4).
|