Land batch B1: four backlog rows were closed by the landings of 31 August and still stood open, two of them advertised to the next session as free work
This commit is contained in:
parent
2817d28665
commit
369dbf67f3
5 changed files with 62 additions and 11 deletions
|
|
@ -108,7 +108,7 @@
|
|||
|
||||
**Б1 — Блокеры бэклога + строка 240: ОДНА нота на четыре строки**
|
||||
Находки: N001, N002, N003, N021
|
||||
**Приёмка:** `grep -c '^| 194 \|^| 238 \|^| 239 \|^| 240 ' docs/PROGRESS.md` = 0; тело ноты несёт ВСЕ четыре номера, оба опровержения N001 (ось «сдвиг снапшота» И «не входят в число согласия»), экземпляры A6, A7+A12, обе половины улики 240 с оговоркой про `local`-заглушку; `docs/PROGRESS.md:282` больше не предлагает 238/239 как свободную работу; литералы очереди пере-считаны **скриптом** (`counts.py`), не руками; `counts.py --check` зелёный (голова сдвинется — сверить все три носителя).
|
||||
**Приёмка:** `grep -c '^| 194 \|^| 238 \|^| 239 \|^| 240 ' docs/PROGRESS.md` = 0; тело ноты несёт ВСЕ четыре номера, оба опровержения N001 (ось «сдвиг снапшота» И «не входят в число согласия»), экземпляры A6, A7+A12, обе половины улики 240 с оговоркой про `local`-заглушку; `docs/PROGRESS.md:277` (было :282) больше не предлагает 238/239 как свободную работу; литералы очереди пере-считаны **скриптом** (`counts.py`), не руками; `counts.py --check` зелёный (голова сдвинется — сверить все три носителя).
|
||||
|
||||
|
||||
**Б2 — Переезд ОТРАБОТАВШЕГО промта (git mv) — раньше Б4, т.к. N075 от него зависит**
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -246,3 +246,4 @@
|
|||
| D39.182 | 31.08 | **Бэкенд-пак «деньги и честность выдачи» ПРИНЯТ И ЗАЛЕНДЖЕН**: закон раскрытия (D39.181) применён к одиннадцати экземплярам. Приёмка — 5 линз, **3 блокера / 15 major / 12 minor**, доработка принята; батарея зелёная, тестов 1045 в 1083, удалённых ноль. ⚠ ДВА блокера — дефекты В САМОМ ЛЕКАРСТВЕ: разложение денег завышало потери на **+59.8%**, отвергая наивный срез за 29.2%; «дешёвый зонд» выключал починку на денежной поверхности. Три касания чужих тестов санкционированы явно (утверждение · предпосылка · сценарий) | жив | ЖИВОЕ: различение уровней теста — вопрос владельцу · §2.2 против `snapshotdiff` · строка 246 | движок деньги раскрытие приёмка |
|
||||
| D39.183 | 31.08 | **Слово владельца: запрет «не подгонять тесты под зелень» — про МОТИВ.** Правка *чтобы прошло* запрещена; правка от ЗАКАЗАННОЙ или ратифицированной смены поведения — обслуживание, протухший тест не держим. ⚠ Заказанность решает ЗАКАЗ, а не сессия. Условие — объявление в отчёте | жив | ЖИВОЕ: полноту объявления не проверяет ничто — строка бэклога 248 | тесты канон процесс |
|
||||
| D39.184 | 01.09 | **Передача роли оркестратора №21 → №22.** Смена приняла пак платформы P12 + контрактный минор 0.9.0, холодный прогон движка (закрыт словом владельца), закон раскрытия и его одиннадцать экземпляров; `arch-3` закрыт (89→127 сверяемых якорей). Девять названных ошибок оркестратора, включая объявление смены сданной ЧИСТО при мёртвом адресате в очереди. ⚠ Класс смены: **отсутствие в своей области видимости принято за отсутствие вообще — четырежды у трёх участников**; норма — отрицательный результат с ПОЛОЖИТЕЛЬНЫМ КОНТРОЛЕМ | жив | ЖИВОЕ: заказ владельца 01.09 — ревизия доков на протухшее, планы бэкенда и платформы, вынос в архив | передача процесс |
|
||||
| D39.185 | 01.09 | **Четыре строки бэклога закрыты лендингами 31.08, а в таблице стояли открытыми:** 194 (деньги банк-ролей в проекции, A10) · 238 (деньги слепы к правке исходника на месте, A6) · 239 (`checkWave` не видел исчезнувшую стадию, A7+A12) · 240 (оплаченный стоп подписи мог исчезнуть молча, обе ветви, P12). ⚠ 238 и 239 стояли в шапке секции «Бэкенд» как СВОБОДНАЯ РАБОТА ЗОНЫ. В ноте — два опровержения текста 194 (ось «сдвиг снапшота» → байты батча; «не входят в число согласия» ложно, слепа была только проекция) и честная граница: проекция стала НИЖНЕЙ. Найдено ревизией доков 01.09. | жив |
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Журнал решений оркестратора — контракт D1–D39.184 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
|
||||
# Журнал решений оркестратора — контракт D1–D39.185 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
|
||||
|
||||
> **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Работая с контрактом (греп номера: живой файл → слайсы, целиком НЕ читать — D39.125), держи под рукой, что чем перекрыто:
|
||||
> ⚠ **Эррата 09.08 (D39.125):** D39.111 п.1 предписывал промту S3 «максимум = баланс МИНУС открытые холды» — формула ОШИБОЧНА (вычитание дважды), исправлена D39.115 п.2(а): максимум = Balance КАК ЕСТЬ; тело D39.111 живёт ниже в этом файле (голова D39.106+).
|
||||
|
|
@ -1821,3 +1821,58 @@ head-1 это семнадцать бюджетируемых операций,
|
|||
6. **Предложение владельцу, не закрытое:** лейбл главы без заголовка (В-4/Ф-30) — холодный прогон впервые дал фактуру, дословные метки лежат в его отчёте.
|
||||
|
||||
⚠ **Что УМЕРЛО с сессией и восстановлению не подлежит:** ~161 находка класса minor из панелей приёмок 31.08. Блокеры и major отработаны, дофиксы ушли сессиям и легли в их отчёты; миноры системно НЕ триажировались. Заводить их строками я не стал сознательно — полторы сотни мелочей сделали бы бэклог нечитаемым, а это дороже потери. Но факт называю: часть мелкого утрачена, и я не знаю точно, что именно.
|
||||
|
||||
## D39.185 — ЧЕТЫРЕ СТРОКИ БЭКЛОГА ЗАКРЫТЫ ЛЕНДИНГАМИ 31.08, а в таблице стояли открытыми: 194 · 238 · 239 · 240 (01.09). ✅
|
||||
|
||||
**Одно событие — одна нота.** Все четыре закрыты не сегодняшней работой, а лендингами 31.08
|
||||
(`bb541a8` — пак «деньги и честность выдачи», D39.182; `0a680a3` — пак платформы P12, D39.180).
|
||||
Ревизия доков нашла их открытыми (находки `N001`, `N002`, `N003`, `N021`), лекарство в коде
|
||||
предъявлено командой по каждой. ⚠ **238 и 239 при этом стояли в шапке секции «Бэкенд» как
|
||||
СВОБОДНАЯ РАБОТА ЗОНЫ** — следующая бэкенд-сессия построила бы заново то, что уже построено и
|
||||
покрыто посадками.
|
||||
|
||||
**194 — деньги банковых ролей в проекции (экземпляр A10 закона раскрытия).**
|
||||
Лекарство: `projectBookUSD(...) + r.bankRoleCommittedUSD()` — `backend/internal/pipeline/status.go`,
|
||||
функция `bankRoleCommittedUSD` в `rebill.go`; посадка `bankrolemoney_test.go` называет строку 194
|
||||
номером в первой строке комментария.
|
||||
⚠ **В тексте строки было ДВА неверных утверждения, и оба записываются здесь, потому что строка
|
||||
уходит:**
|
||||
1. Ось «на сдвиге снапшота они реально пере-покупаются» — **ОПРОВЕРГНУТА живыми данными**:
|
||||
пере-покупка терминолога наступает от **БАЙТОВ БАТЧА**, а не от сдвига снапшота (пинг №2
|
||||
бэкенд-сессии в секции «Бэкенд» этого журнала).
|
||||
2. «Не входят НИ в число согласия» — **ЛОЖНО в первой половине**: `committed_usd` = `SUM(checkpoints)`
|
||||
не сдвинулся, потому что деньги банк-ролей были в нём ВСЕГДА (spend и checkpoints пишутся ОДНОЙ
|
||||
транзакцией). Слепа была только **ПРОЕКЦИЯ**.
|
||||
⚠ **Честная граница (§9.9 отчёта пака):** в проекцию добавлено УЖЕ ПОТРАЧЕННОЕ, а не прогноз
|
||||
контура ⇒ проекция стала **НИЖНЕЙ границей**, а не точной сметой.
|
||||
|
||||
**238 — деньги слепы к правке исходника НА МЕСТЕ (экземпляр A6).**
|
||||
Лекарство и посадка: `backend/internal/pipeline/rebillsource_test.go`, чей комментарий называет
|
||||
строку 238 номером; мутация, которую тест ловит, — возврат голого `if cs.SnapshotID == cur { continue }`,
|
||||
то есть ровно того кода, о слепоте которого писала строка. Механизм — `projectRebill` сверяет
|
||||
content-hash строки.
|
||||
|
||||
**239 — `Status.checkWave` не видел исчезнувшую из конфига стадию (экземпляры A7 + A12).**
|
||||
Правило `exportConfigDrift` не «перенесено», а сведено в ОДНО общее определение `orphanStageRows`
|
||||
(`backend/internal/pipeline/export.go` и `status.go` зовут его рядом с `checkWave`; комментарий
|
||||
называет строку 239 номером). Тест-половина заказа — `driftbasis_test.go`.
|
||||
|
||||
**240 — оплаченный стоп подписи банка мог исчезнуть МОЛЧА.** Исполнена **обеими** ветвями своей же
|
||||
диспозиции, лендингом P12 (`0a680a3`, D39.180):
|
||||
- **платформенная половина:** гард `LiftBankStop` СНЯТ (в `platform/` остались два комментария, оба
|
||||
говорят «removed with the workaround»), колонка `bank_released` снесена миграцией
|
||||
`00029_drop_bank_released.sql`, а защита переехала уровнем выше — ветка `awaiting_bank` в
|
||||
`internal/runs/reconcile.go` теперь ЗАКРЫВАЕТ прогон, а не рестартует сквозь оплаченный стоп;
|
||||
- **движковая половина:** отчёт холодного прогона §7 — ни одного `DELETE`/`DROP`/`TRUNCATE` у
|
||||
`bank_stop_presented`, память пережила границу процесса.
|
||||
⚠ **Записывается честно:** «живая проба на стенде» из диспозиции сделана на **`local`-заглушке**, а
|
||||
не на облачном провайдере — обещанная проба облаком не удалась (obstacle пака P12).
|
||||
|
||||
**Пинг зоне платформы (правит зона, не оркестратор):** ряд Д3 регистра
|
||||
(`platform/docs/platform-PROGRESS.md`) держит указатель на снятый гард по номерам строк
|
||||
`reconcile.go:1122-1126`; цель мёртвая — там `ReleaseUnspawned`/`MarkSettled`. По норме D39.179 п.4
|
||||
в живом файле зоны указатель обязан быть греп-формой без номера.
|
||||
|
||||
**Провенанс находок:** ревизия документации 01.09 (воркфлоу `docs-staleness-revision-A`, 15 срезов ×
|
||||
ревизор+опровергатель, 1432 утверждения проверены исполнением); реестр — `docs/DOC_REVISION_FINDINGS.md`,
|
||||
контроль исполнения — отдельный агент Fable 5.1 (решение владельца 01.09).
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
1. **Грант.** `Grant` — строка леджера `kind='grant'`, идемпотентная по `(аккаунт, source, source_id)`: `on conflict (user_id, source, source_id) do nothing` (`platform/internal/pgstore/credits.go`, греп `func (s *Store) Grant(`; сама идемпотентность после пака sqlc уехала В ЗАПРОС — `platform/internal/pgstore/queries/credits.sql`, греп `on conflict (user_id, source, source_id) do nothing`). Фри-тир — тот же механизм в ТОЙ ЖЕ транзакции, что создание аккаунта (`platform/internal/pgstore/identity.go`, греп `appendLedger(ctx, tx, userID, "grant"`; ⚠ **дефолт `SignupGrantMicroUSD` — НОЛЬ** (`platform/internal/config/config.go`, греп `SignupGrantMicroUSD:`), а не «5 × 1_000_000», как утверждала прежняя редакция: предложение «на бете дефолт в НОЛЬ» (D39.110 п.3) ИСПОЛНЕНО, `PD-104` в регистре стоит `fixed(P7, дерево сессии)`). ⚠ Испр. аудитом доков 28.08 (D39.167) — ложная сумма стояла в ЕДИНСТВЕННОМ месте, куда идут за деньгами; якоря переведены на греп-форму и закрыта висевшая скобка — 31.08.
|
||||
2. **Выбор потолка — шкала в ГЛАВАХ** (D39.110: от 1 до максимума, ноль не выбираем; потолок принадлежит ПРОГОНУ, в `book.yaml` не пишется). **Максимум = Balance КАК ЕСТЬ** (D39.115 п.2а; эррата в шапке D-лога — `docs/architecture/05-decisions-log.md:4`=`Balance КАК ЕСТЬ`): `Hold` — дебет в момент взятия, баланс уже не содержит открытых холдов, повторное вычитание вдвое укорачивает шкалу. Реализация: `pricing.Model.Scale` — `affordable = balance / PerChapter`, кламп по остатку глав, дефолт = верх шкалы (ратифицировано D39.123 п.2е; компромисс «весь баланс под одну книгу» принят осознанно) — `platform/internal/pricing/pricing.go`, греп `func (m Model) Scale(`.
|
||||
3. **Ставка $0.03/глава — конфиг-константа платформы:** `DefaultPerChapter = 30_000` micro-USD (`platform/internal/pricing/pricing.go`, греп `DefaultPerChapter`), переопределяется `PerChapterMicroUSD` (`platform/internal/config/config.go`, греп `PerChapterMicroUSD`). ⚠ **Провенанс ниже — ИСТОРИЯ, а не действующее обоснование (D39.165 §1, 28.08):** реальная цена главы замерена по движковым леджерам — средняя **$0.0115–$0.0190**, максимум одной главы $0.0375, то есть константа завышена в **1.6–2.6×** — ⚠ но НЕ покрывает максимум: источник (D39.165 §1) добавляет «и отдельные главы её уже пробивают» ($0.0375 против $0.03 = ×1.25), и прежняя редакция это теряла, и «купить 10 глав» отдаёт движку $0.30, покупающий ~16–26 глав («денежная ручка с подписью „главы"», `PD-410`). РЕШЕНО: цена — от ОБЪЁМА ИСХОДНИКА (носитель `chapters.units_total`, пишется интейком за $0), настоящий стоп — объёмный потолок В ДВИЖКЕ (см. §2). ⛔ Константу по сегодняшним числам НЕ калибровать (D39.165 ⛔г) — гейт строка 202 бэклога (`docs/PROGRESS.md:182`=`Живой перевод книги НАСКВОЗЬ через API платформы`). Исторический провенанс: exp08 v2 $0.0219/глава → ревизия D30.4 +15–25% → округление ВВЕРХ (низкая ставка опаснее высокой — прогон встанет на потолке посреди книги; `platform/internal/pricing/pricing.go`, греп `Provenance, so the number is auditable`). Временная мера беты — честная оценка движковая (строка 166 бэклога, `docs/PROGRESS.md:154`=`Движковая поверхность оценки`).
|
||||
3. **Ставка $0.03/глава — конфиг-константа платформы:** `DefaultPerChapter = 30_000` micro-USD (`platform/internal/pricing/pricing.go`, греп `DefaultPerChapter`), переопределяется `PerChapterMicroUSD` (`platform/internal/config/config.go`, греп `PerChapterMicroUSD`). ⚠ **Провенанс ниже — ИСТОРИЯ, а не действующее обоснование (D39.165 §1, 28.08):** реальная цена главы замерена по движковым леджерам — средняя **$0.0115–$0.0190**, максимум одной главы $0.0375, то есть константа завышена в **1.6–2.6×** — ⚠ но НЕ покрывает максимум: источник (D39.165 §1) добавляет «и отдельные главы её уже пробивают» ($0.0375 против $0.03 = ×1.25), и прежняя редакция это теряла, и «купить 10 глав» отдаёт движку $0.30, покупающий ~16–26 глав («денежная ручка с подписью „главы"», `PD-410`). РЕШЕНО: цена — от ОБЪЁМА ИСХОДНИКА (носитель `chapters.units_total`, пишется интейком за $0), настоящий стоп — объёмный потолок В ДВИЖКЕ (см. §2). ⛔ Константу по сегодняшним числам НЕ калибровать (D39.165 ⛔г) — гейт строка 202 бэклога (`docs/PROGRESS.md:181`=`Живой перевод книги НАСКВОЗЬ через API платформы`). Исторический провенанс: exp08 v2 $0.0219/глава → ревизия D30.4 +15–25% → округление ВВЕРХ (низкая ставка опаснее высокой — прогон встанет на потолке посреди книги; `platform/internal/pricing/pricing.go`, греп `Provenance, so the number is auditable`). Временная мера беты — честная оценка движковая (строка 166 бэклога, `docs/PROGRESS.md:154`=`Движковая поверхность оценки`).
|
||||
4. **Холд прироста ДО спавна.** `holdTx` пишет отрицательную строку `('hold', -amount)` и тем же знаком двигает кэш баланса (`platform/internal/pgstore/credits.go`, греп `func holdTx(` — строку леджера пишет `appendLedger(… "hold", -amount …)`, кэш баланса двигает `MoveBalance` внутри неё); нехватка — `ErrInsufficientCredit`. Холд + прогон + попытка + очередь — одна транзакция (`platform/internal/pgstore/runs.go`, греп `func (s *Store) StartRun(`; рестарт — греп `func (s *Store) RestartRun(`; форма D39.123 п.2д).
|
||||
5. **Аргумент движку: `bookCap = committed + прирост×ставка`, БЕЗ reserved — PD-158, дословно из кода: `return m.committed + increment`** (`platform/internal/runs/spawn.go`, греп `return m.committed + increment`). Обе фигуры читаются ОДНИМ вызовом `status --json` перед стартом (`bookMeter` — `platform/internal/runs/spawn.go`, греп `func (s *Service) bookMeter(`; отказы — греп `Absent is not zero`); отсутствие любой из них = отказ спавна («absent is not zero», PD-40). Почему без reserved: write-open движка занулит leftover до первой резервации, значит цифра из read-only status к моменту сравнения уже мертва; ратифицированная ранее формула с reserved переплачивала запасом ровно на leftover сверх холда — исполнено обеими формулами против гейта (D39.123 п.2б, поправка к D39.122(в)). Аргумент ≠ холд: он больше холда на committed (`docs/glossary.md:55`=`ЭТО НЕ ХОЛД`). Фактически ушедшее значение хранится в `run_attempts.ceiling_arg_micro_usd` (PD-144, миграция 00011); потолок уходит argv-шаблоном `{{usd}}` (шаблон — `platform/internal/config/config.go`, греп `CeilingArg`; подстановку делает `platform/internal/runner/engine.go`, греп `{{usd}}`; подстановку и рендер argv делает `platform/internal/runner/engine.go`, греп `func (t CeilingTemplate) Args(`; `platform/internal/runs/runs.go`, греп `func (s *Service) ceilingFor(` — однострочная делегация к нему — ⚠ прежняя редакция называла здесь `spawn.go`, который потолок только передаёт); строка 145 закрыта D39.122.
|
||||
6. **Baseline и списание.** `baseline = committed` книги на старте попытки (`platform/internal/runs/spawn.go`, греп `baseline, bookCap := m.committed`); списание попытки = разница счётчика с baseline; счётчик ниже baseline = подменённая БД, сеттлится в ноль с WARN — сами цифры в лог не идут (D39.84; `platform/internal/runs/reconcile.go`, греп `the book's meter reads below`).
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue