layout: непомещающееся целевое имя уводит задачу в review вместо failed
- предел длины компонента (255 байт) проверяется в BuildLinks до первой операции с ФС: ни каталога, ни ссылки при отказе не создаётся - причина пустого предпросмотра считается на показе (ReviewData.PreviewError) и печатается в панели действий и в карточке Telegram: у задачи без записанной причины взять её больше неоткуда
This commit is contained in:
@@ -185,6 +185,11 @@ Go-сервиса и что здесь уже проскакивало. Устр
|
||||
чтение — и что будет с данными, записанными до деплоя, которые обычный путь
|
||||
не перезаписывает? (журнал, 2026-08-10: чистка названия стояла на записи, и
|
||||
очередь ревью её обходила)
|
||||
- `operations`: новая проверка встала в общую точку — что она отняла у тех, кто
|
||||
зовёт эту точку не ради проверки? Пропала ли команда, стал ли предпросмотр пустым, перестал ли экран объяснять
|
||||
причину, и узнает ли человек причину на **каждом** входе, а не только
|
||||
на том, который разбирали? (журнал, 2026-08-10: проверка длины погасила
|
||||
«Применить» и ничего не объяснила)
|
||||
- `operations`: не удваивает ли новая ветка расход лимита метабаз и платного
|
||||
LLM — повтор, ретрай, «распознать заново» на том же входе? (кэша ответов нет,
|
||||
задача `metadata-cache`)
|
||||
@@ -320,6 +325,52 @@ Go-сервиса и что здесь уже проскакивало. Устр
|
||||
случаи до этой даты не восстанавливались — восстановленная постфактум причина
|
||||
непоймания недостоверна, а именно она и нужна.
|
||||
|
||||
## 2026-08-10 — проверка встала в общую точку и погасила кнопку, ничего не объяснив [пойман]
|
||||
|
||||
- **Где:** `internal/layout/layout.go` — `BuildLinks`; `internal/worker/review.go`
|
||||
— сборка предпросмотра; `web/templates/partials/review_main.html` — панель
|
||||
действий. Норма — `openspec/specs/review/spec.md`, требование «Панель действий
|
||||
при пустом предпросмотре называет причину».
|
||||
- **Симптом:** новая проверка длины целевого имени встала в `BuildLinks` —
|
||||
единственную сборку пути, откуда строятся и оба предпросмотра ревью. Отказ
|
||||
обнулил предпросмотр, а без него экран прячет команду «Применить». Текст
|
||||
причины брался из `error_msg` последнего перехода, но на самом частом входе
|
||||
(распознавание без матча) это поле пусто: задача приходит в `review` без
|
||||
причины и до раскладки не доходит. Владелец видел «Подтверди источник» и не
|
||||
видел ни кнопки, ни настоящей причины. **До изменения** предпросмотр строился,
|
||||
кнопка была, и применение доводило хотя бы до `failed` с текстом ядра.
|
||||
- **Почему не поймали раньше:** обе стороны выглядели верными по отдельности.
|
||||
Проверка в общей точке — правильное решение, оно и дало совпадение показанного
|
||||
с применённым. Текст из `error_msg` — тоже правильное, для того входа, который
|
||||
разбирали на чекпоинте (ручное «Применить» причину записывает). Развилка была в
|
||||
том, что вход не один, и второй — частотнее.
|
||||
- **Чем ловится теперь:** причина считается на показе
|
||||
([ADR-2026-08-10-reason-computed-on-read](adr/ADR-2026-08-10-reason-computed-on-read.md)),
|
||||
тесты `TestReviewData_PreviewErrorWhenStateHasNoReason`,
|
||||
`TestActionBarNamesReasonWithoutPreview`, `TestReviewCard_NamesPreviewProblem`.
|
||||
В вопросы темы `operations` добавлен вопрос про сужение видимого.
|
||||
|
||||
## 2026-08-10 — спека нормировала случай, которого код произвести не может [пойман]
|
||||
|
||||
- **Где:** дельта `openspec/specs/file-layout/spec.md`, сценарий про
|
||||
унаследованную от папки-якоря базу.
|
||||
- **Симптом:** на чекпоинте ревью дизайна был назван тупик — при живом якоре база
|
||||
берётся с диска, подсказка её не укорачивает, задача циклится. Сценарий уехал в
|
||||
спеку с инструкцией человеку («выбрать источник без базы либо переименовать
|
||||
папку руками»). Попытка написать под него тест показала, что случай
|
||||
**недостижим**: папка-якорь лежит на диске и потому уже не длиннее предела, а
|
||||
хвост имени файла (`" S02E01"` плюс расширение, 11 байт) не длиннее хвоста
|
||||
имени папки (`" ["` плюс provider-тег плюс `"]"`, минимум 11 байт).
|
||||
- **Почему не поймали раньше:** случай звучал правдоподобно и опирался на верное
|
||||
свойство (унаследованная база подсказкой не меняется). Ни один проход ревью
|
||||
дизайна арифметику не считал — кода на той стадии нет, а сценарий выглядел как
|
||||
описание существующего поведения, а не как гипотеза.
|
||||
- **Чем ловится теперь:** сценарий переписан на верное утверждение, свойство
|
||||
закреплено тестом `TestApply_InheritedBaseAtLimitStillFits` — он покраснеет,
|
||||
если суффиксы имён вырастут. Урок общий: **сценарий, который нельзя
|
||||
воспроизвести, обязан получить оракул до того, как попадёт в спеку**; норма,
|
||||
описывающая недостижимое, не отличается от неверной.
|
||||
|
||||
## 2026-08-10 — чистка названия метабазы стояла только на записи, и очередь ревью её обходила [пойман]
|
||||
|
||||
- **Где:** `internal/worker/review.go` — `sourcePins`, `applyOverrides`,
|
||||
|
||||
Reference in New Issue
Block a user