Record the D39.17 errata: the runWave parent-cancellation bug my rubezh-2 missed, caught by an independent second review and fixed
This commit is contained in:
parent
5fc4860d64
commit
1db62d41a3
2 changed files with 12 additions and 0 deletions
|
|
@ -9,6 +9,10 @@
|
|||
> - **Ждём от владельца:** тачпойнты exp16 (карта подписи/пол · мини-голд алиасов · precision@30, `books/gu-zhenren/exp16/`, ~30–40 мин — для сид-дельты к пере-прогону) · развилки плана §10 (W1.5-UX · DC5-стих-политика · Edit-ceiling · и др.) · реплика ja→ru (тест общности §B5) · **ре-чек прайса DeepSeek у катовера слагов 24.07** (до него платных deepseek-прогонов нет) · чтение пере-прогона (после R1+resnapshot) · старые висящие: планка запуска (лучше-фана/гибрид/издательский) · билингв-якорь пилота (D25.9-Q1) · контаминация пилот-корпуса (D27.4) · publishable/waiver (D25.1) · FN-bound L3 (D25.4) · юр-пакет · провенанс 12-*-доков.
|
||||
> - Архивы хроники: `archive/PROGRESS-2026-07-04-10.md` (D31) · `archive/PROGRESS-2026-07-10-13.md` (D39.6-гигиена). Записи ниже — живая эра D39.
|
||||
|
||||
## Оркестратор №7 — D39.17-errata: 2-я ревью-сессия поймала runWave parent-cancel баг (мой рубеж-2 пропустил), фикс залендён, 19.07
|
||||
|
||||
Владелец запустил ВТОРУЮ независимую ревью-сессию (4 ревьюера+трейс) по волновой фиче ПОСЛЕ моего лендинга R1. Поймала **реальный MEDIUM-HIGH баг, который мой рубеж-2 дал clean bill:** `runWave` возвращал nil при parent-cancel (Ctrl-C), когда воркеры не ошиблись ($0-resume-воркер не трогает cancellable ctx → firstErr nil при недоделанных items) → nil-deref паника (edit) / exit-0 на неполной книге (draft-only). Денег/данных не теряется (durable-store корректен), ущерб = крэш/ложный успех. **Фикс залендён (`5fc4860`):** `parent.Err()` при firstErr==nil. **Верификация оркестратора red/green исполнением:** реверт к HEAD → регресс-тест ПАДАЕТ; фикс → PASS; suite -race + golden зелёные. **Честно: мой clean bill D39.17 был НЕПОЛОН** — линза runWave была, но агенты не дотрейсили $0-resume-cancel-путь; вторая независимая сессия поймала (валидирует независимые ревью). Ядро R1 (деньги/переоплата-ОДНА/память/снапшот) — 3 ревьюера+трейс подтвердили, держится. Осталось владельцу/препу: **product-решение edit-unit blast-radius** (флагнутый member бланкает всю единицу-главу → accept/export-good-flagged/split-on-bad, эскалировано) + R1-FL-A/B/C + ниты (jobs.status/read-model-naming/escMu/dead-minedToCandidates/HTTP-concurrency-smoke) → пере-прогон-преп.
|
||||
|
||||
## Оркестратор №7 — R1 драйвер-свитч ПРИНЯТ и залендён (D39.17), ПАК-11 ЗАВЕРШЁН, 19.07
|
||||
|
||||
Бэкенд-сессия сдала волновой исполнитель (`waverun.go`/`mining.go` нов): precompute→черновик∥→банк-майнинг-стоп→редактура∥; редактор читает concat-черновик по final_hash, НИКОГДА не пере-рендерит draft; `translateChunk` удалён. + wiring майнера (langpack fail-loud/nil + pack.Version-фолд + mined-write) + Ш-2 (unicode.Version) + Ш-1 (masked-diff) + golden-рерайт (8 глав→8 единиц) + read-модели per-unit + именование без W0-W2. **Приёмка: прямая (build/race сам, 8 волновых пинов вкл. кусачий регресс-пин переоплаты-ОДНА, golden байт-стабилен, построчное чтение waverun=план §1/research19 §B3-бис) + ПОЛНЫЙ рубеж-2** (5 линз вкл. явную синк-с-ресёрчем — владелец просил; refute-by-default, $0): **4 находки / 1 refuted / 3 выжили — ВСЕ MINOR/NOTE, 0 CRIT/MAJOR; все несущие линзы (деньги/секвенирование/детерминизм/СИНК/снапшот) ПУСТЫ.** Сессия сама поймала MAJOR (инъекция черновика над enriched вместо base → тихий re-bill при mined-подписи; фикс r.baseMemory + регресс-пин). **Фикс-лист (3, стенд-only mining / трипваер — не блокируют, ГЕЙТ до живого mining пере-прогона):** R1-FL-A (CLI не даёт WaveSignatureStop distinct exit-код → exit 1; коммент/отчёт оверклейм) · R1-FL-B (mining-стоп очищается только при пустой дельте, reject-механизма нет → отклонённый терм livelock'ит стоп; связано с W1.5-UX §10-1) · R1-FL-C (NOTE: x/text/norm своя Unicode-редакция не фолдится — расширить Ш-2). Девиации приняты (сургичный per-wave resnapshot, escMu-сериализация эскалаций). **ПАК-11 ЗАВЕРШЁН** (Block A+continuation+арх-проход+R1); `BACKEND_PLAN11` отработан→архив. **Очередь:** пере-прогон-преп (R1-FL-A/B/C + единый resnapshot D30.9 §8) → пере-прогон 3–10 глав (армы + live mining с подписью) → чтение (планка 2 претензии).
|
||||
|
|
|
|||
|
|
@ -563,6 +563,14 @@ exp14b (D37-мандат) прогнал батарею DET-смысл-трап
|
|||
|
||||
**Ратифицированные девиации/флаги (приняты):** пер-волновой `--resnapshot` СУРГИЧЕН (не all-or-nothing — прямое следствие пер-волнового снапшота §1(в); `TestRunnerSnapshotPinning` 4→3) · `escMu` сериализует эскалации через LLM-вызов (осознанный трейд: точность soft-cap > параллелизм редких эскалаций) · Ш-2 расширен на chunker/estimator (тот же silent-drift класс). **Пак-11 ЗАВЕРШЁН** (Block A + continuation + арх-проход + R1); промт `BACKEND_PLAN11` отработан → архив. **Очередь:** пере-прогон-преп (R1-FL-A/B/C mining-wiring + единый resnapshot §8 D30.9) → пере-прогон 3–10 глав (армы glm/mistral/deepseek-pro; live mining-раунд с подписью) → чтение владельца (планка 2 претензии).
|
||||
|
||||
## D39.17-errata — MEDIUM-HIGH баг `runWave` (parent-cancellation), ПРОПУЩЕННЫЙ рубежом-2 оркестратора, пойман 2-й ревью-сессией и залендён фиксом (`5fc4860`) (19.07, оркестратор №7). ✅
|
||||
|
||||
**Честная фиксация промаха.** После лендинга R1 (D39.17) владелец запустил ВТОРУЮ независимую ревью-сессию (4 адверсариальных ревьюера + трейс) по волновой фиче. Она нашла **реальный MEDIUM-HIGH баг, который мой рубеж-2 дал clean bill и пропустил:** `runWave` (`waverun.go`) ставил `firstErr` ТОЛЬКО из ошибки воркера и возвращал его после `wg.Wait()`. При parent-cancellation (Ctrl-C/SIGTERM — CLI вешает `signal.NotifyContext`, `main.go:55`) фидер бросает оставшиеся items на `ctx.Done()`, НО воркер не обязан ошибиться, чтобы завершиться — **$0-resume-воркер резолвится через свой `opContext` store-ридами, не трогая cancellable ctx**, → `firstErr` остаётся nil при недоделанных items → `runWave` возвращает nil. Дальше: edit-пайплайн (прод C1 дефолт) → `unitOutcomes[i]==nil` → **nil-deref паника** (`waverun.go:169`); draft-only → zero-value fake-`DispOK ""` → **exit 0 на неполной книге** (скриптовый `translate && export` шипит усечённую книгу как успех). Надёжно бьёт на Ctrl-C'нутом резюме — первоклассный путь. Durable-store был ВСЕГДА корректен (недоделанные items не чекпойнтились → ре-прогон их резюмит) — потери денег/данных НЕТ; ущерб = крэш / ложный сигнал успеха.
|
||||
|
||||
**Фикс (session, залендён):** после `wg.Wait()` при `firstErr==nil` вернуть `parent.Err()` (nil на чистом прогоне, `context.Canceled` на прерванном — стандартная errgroup-дисциплина). **Верификация оркестратора — РЕД/ГРИН исполнением:** реверт `waverun.go` к залендённому HEAD → регресс-пин `TestRunWaveSurfacesParentCancellation` ПАДАЕТ («runWave returned nil on a cancelled parent ctx»); фикс восстановлен → PASS; полный suite -race зелёный, golden байт-стабилен, ровно 2 файла.
|
||||
|
||||
**Урок (честно):** мой рубеж-2 имел линзу «runWave race-safety: lost error / cancel-path» — но агенты не дотрейсили путь «$0-resume-воркер никогда не ошибается → firstErr nil при parent-cancel». 5-линзовый адверсариал МОЖЕТ пропустить тонкий concurrency-путь; вторая независимая сессия его поймала — это валидирует практику независимых ревью, но **мой clean bill на D39.17 был НЕПОЛОН**, фиксирую явно. Остальное R1-ядро подтверждено 3 ревьюерами+трейсом (деньги атомарны, переоплата-ОДНА на обоих уровнях, память immutable, снапшот-пиннинг) — держится. Прочие находки 2-й сессии: **product-решение владельцу** (edit-unit blast-radius: один флагнутый member-черновик бланкает ВСЮ единицу-главу, отбрасывая оплаченные драфты хороших соседей — опции accept / export-good-raw-flagged / split-on-bad → §пере-прогон-преп, эскалировано) + подтверждение R1-FL-A/B/C + ниты (jobs.status-трэш advisory, read-model naming-debt, escMu-throughput, minedToCandidates dead-code, HTTP-адаптер concurrency неотестирован — в фикс-лист/гигиену пере-прогон-препа).
|
||||
|
||||
## D39.16 — Приёмка арх-прохода D39.15 ЗАЛЕНДЕНА: язык-данные майнера вынесены в `internal/lang`+`configs/langpacks`, байт-точно (парити EXACT); три дивергенции от предложения оркестратора ратифицированы (19.07, оркестратор №7). ✅
|
||||
|
||||
Бэкенд-сессия исполнила `BACKEND_ARCH_CLEANUP_SESSION_PROMPT` (5 фаз-воркфлоу: ресёрч 2×3 → синтез → фикс-лист do/defer/don't → исполнение → ревью). **Залендено:** zh/Палладий-данные майнера (百家姓 single/compound, титул/топо/rank-инвентари, частицы `aliasParticle`, таблица Палладия) вынесены из Go-констант `internal/pipeline/` в **`configs/langpacks/zh|zh-ru/` (10 файлов)**, грузятся новым leaf-пакетом **`internal/lang`** (данные+загрузчик+`Version()` content-hash; **НЕ импортит pipeline → граница компиль-enforced**); движок читает резолвнутый `*lang.Pack` через DI (как `contrast`). Плюс риды-along: **FL-1** (`bankTokenBudget`→`banknoteSnap.TokenBudget`), **FL-2** (банкнота-телеметрия репопулируется на резюме из `prev.NBanknote*`, guard `FromResume && Enabled`), **FL-3** (`emitRankCap=200` перед emission-фильтрами, зеркало `a3[:200]`), тест-путь (env-override `TM_MINER_PARITY_{CONTRAST,RECORDS,SEED}`, skip-if-absent).
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue