Write down that the product has two surfaces and only one of them exists, alongside where accounts actually come from today.
This commit is contained in:
parent
582fc43948
commit
74c533f87c
4 changed files with 23 additions and 4 deletions
File diff suppressed because one or more lines are too long
|
|
@ -1,6 +1,6 @@
|
|||
# Журнал прогресса
|
||||
|
||||
> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-10, голова D39.238 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №23** (единственный носитель — здесь; роль передана 06.09, №22 закрыт нотой передачи D39.217; ⚠ испр. 06.09: коммит передачи `c992ee5` бампнул голову и НЕ тронул номер — гейта на номер очереди нет вовсе, `counts.py` сверяет только голову, поэтому носитель разошёлся молча). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ИСПОЛНЕН, испр. 08.09 (висел как «первым» неделю после исполнения):** (0а) ревизия документации на протухшее ОТРАБОТАНА 01.09 воркфлоу `docs-staleness-revision-A` (15 срезов), провенанс находок — `D39.185`; (0б) планы доработок в бэкенд и платформу — исполняются ПАКАМИ, за 07–08.09 закрыты два движковых (`D39.225`, `D39.226`); (0в) вынос неактуального в архив идёт батчами `DOC_CLEANUP_PLAN.md` (Б14/Б15/Б17 живы). ⇒ строка ниже — не заказ, а история: (0а) ревизия документации на ПРОТУХШЕЕ — по всем зонам; (0б) планы доработок в БЭКЕНД и ПЛАТФОРМУ; (0в) вынос неактуального в АРХИВ (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **94** живых дока в `docs/` (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, 9 в `backend/docs` — ⚠ из 94 ВРЕМЕННЫЙ остался ОДИН (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 109 (major 1), всего рядов 465 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном).
|
||||
> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-10, голова D39.239 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №23** (единственный носитель — здесь; роль передана 06.09, №22 закрыт нотой передачи D39.217; ⚠ испр. 06.09: коммит передачи `c992ee5` бампнул голову и НЕ тронул номер — гейта на номер очереди нет вовсе, `counts.py` сверяет только голову, поэтому носитель разошёлся молча). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ИСПОЛНЕН, испр. 08.09 (висел как «первым» неделю после исполнения):** (0а) ревизия документации на протухшее ОТРАБОТАНА 01.09 воркфлоу `docs-staleness-revision-A` (15 срезов), провенанс находок — `D39.185`; (0б) планы доработок в бэкенд и платформу — исполняются ПАКАМИ, за 07–08.09 закрыты два движковых (`D39.225`, `D39.226`); (0в) вынос неактуального в архив идёт батчами `DOC_CLEANUP_PLAN.md` (Б14/Б15/Б17 живы). ⇒ строка ниже — не заказ, а история: (0а) ревизия документации на ПРОТУХШЕЕ — по всем зонам; (0б) планы доработок в БЭКЕНД и ПЛАТФОРМУ; (0в) вынос неактуального в АРХИВ (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **94** живых дока в `docs/` (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, 9 в `backend/docs` — ⚠ из 94 ВРЕМЕННЫЙ остался ОДИН (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 109 (major 1), всего рядов 465 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном).
|
||||
> ⛔ **ПЯТЬ ПОТОКОВ РАБОТЫ — состояние на 07.09 (пере-снято лендингами смены №23).**
|
||||
> **(1) ПОЛИГОН — «ремонт прибора»** (`docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md`, строки 319 · 300 · 265 · 143):
|
||||
> ⚠ **ЕДИНСТВЕННЫЙ ПОТОК, НЕ СДВИНУВШИЙСЯ ЗА СМЕНУ — сессия по промту так и не стартовала.** Блокирующая линза
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Реестр D-нот — карта актуальности v2 (D1–D39.238; титул — носитель головы, бампать при каждом аппенде)
|
||||
# Реестр D-нот — карта актуальности v2 (D1–D39.239; титул — носитель головы, бампать при каждом аппенде)
|
||||
|
||||
> ⚠ **Колонку «тело» `counts.py --check` НЕ сторожит по устройству:** он сверяет полноту НОМЕРОВ, а не
|
||||
> место тела, поэтому колонка держится дисциплиной лендинга. Не нашёл тело по колонке — иди в слайсы,
|
||||
|
|
@ -297,3 +297,4 @@
|
|||
| D39.236 | 10.09 | **ДИСПОЗИЦИИ ПО ЭХО-ПРОТОКОЛАМ обеих сессий пака «две остановки»: шесть возражений, шесть приняты, ТРИ — мои ошибки.** (1) счётчик оценки СИДИРУЕТСЯ из стора, а не копится с нуля — иначе пин равенства двух каналов зелен на пустом сценарии; (2) расширение правила присутствия `Money` формально МАЖОР, везём минором `1.3→1.4` как осознанное исключение (мажор читателем отвергается целиком); (3) «опора готова» для строки оператору — преувеличение, прогонного реестра летящих вызовов нет; (4) платформа поднимает `StreamVersion` и тем же движением пишет, каких полей 1.2/1.3 не читает; (5) «свип встанет на 20 минут» — неверный механизм, настоящий ущерб — ложная тревога `StalledAfter`; (6) 1240 с — свойство ПАРЫ, не константа платформы. ⭐ Все шесть пришли ПОСЛЕ двух кругов ревью: эхо-протокол — третий рубеж, а не формальность | стоп · шов · метод |
|
||||
| D39.237 | 10.09 | **ЗАПИСКА-ПЛАН ПЛАТФОРМЫ.** ⛔ Мой корректирующий минор контракта (`D39.235` п.6) положил гейт ЧУЖОЙ зоны — базовая линия была красной на входе сессии; носитель один (`platform/internal/httpapi/capabilities.go`), правку берёт сессия. **Норма: правка ратифицированного носителя сверяется с ГЕЙТАМИ на него тем же движением** (второй раз за две недели, ср. эрратy 08.09-б). ⭐ Сессия нашла сверх заказа: повторный `stop --no-block` по `deactivating` НЕ шлёт второй SIGTERM — иначе свип давал бы АВТОМАТИЧЕСКУЮ эскалацию в жёсткую остановку; свойство держалось на удаче, теперь пинится. Потолок ожидания — свойство каталога И бюджета: беcключевой `zai` перерастает 1240 с при `edit_ceiling_out` ≈ 9 900 против 8 000 сегодня. Нетухнущая форма — строка **383** | стоп · шов · метод |
|
||||
| D39.238 | 10.09 | ⛔ **ДВА SIGTERM ПОДРЯД GO-ПРОЦЕСС ВИДИТ КАК ОДИН** — замерено дважды независимо: `gap 0` → **0 из 20**, `gap 1 мс` → 20 из 20, контроль `gap 100 мс` → 5 из 5; коалесценция ниже канала (`runtime/sigqueue` держит БИТ, не счётчик), буфер не чинит. ⇒ ратифицированная форма «первый мягкий, второй жёсткий, третий дефолт» (`D39.234` п.1а) стояла на посылке «послать два = получить два», которой НЕТ: `mode: hard` первым нажатием давал бы МЯГКУЮ остановку молча, а пере-выпуск жёсткого сигнала свипом — ТРЕТИЙ SIGTERM, то есть смерть без кадра и сеттла. Контракт: сигналы упорядочены НАБЛЮДЕНИЕМ входа в фазу остановки, факт доставки долговечен. ⭐ Первый замер был неверен из-за прибора и дал противоположное число — сессия починила прибор и назвала это сама | стоп · шов · метод |
|
||||
| D39.239 | 10.09 | **СЛОВО ВЛАДЕЛЬЦА: у продукта ДВЕ поверхности — ЛЕНДИНГ и IDE** («модель как у любого ИИ-продукта»); лендинга нет ни кодом, ни строкой, а `frontend/` — это IDE, строка **384**. **Замер, где живут учётки:** логин настоящий (OIDC + dev), **учётка создаётся САМА при первом входе**, пригласительного гейта НЕТ вовсе, дверь закрыта только конфигурацией (пустой issuer ⇒ поверхность не монтируется), оплаты нет намеренно. ⚠ Исправление моего же ответа владельцу: **`sqlc` УЖЕ используется** (1232 строки из 5688 в `pgstore`), моё «генератор срезал бы» было ложью из формы файлов. **Мандат владельца: протухшую прозу можно СНОСИТЬ**, диффы окаются у старшего коллеги; границы сноса — п.4 | продукт · учётки · доки |
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Журнал решений оркестратора — контракт D1–D39.238 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
|
||||
# Журнал решений оркестратора — контракт D1–D39.239 (живой файл: карта · эрраты · живые тела · голова 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 — в слайсе `../archive/architecture/05-decisions-D39-106-123.md` (испр. 05.09: прежнее «живёт ниже в этом файле» протухло подрезкой D39.139) (голова D39.106+).
|
||||
|
|
@ -3371,3 +3371,20 @@ bought NOTHING». ⇒ **`tmctl manifest` есть НИЖНЯЯ граница,
|
|||
**5. ⭐ УРОК О ПРИБОРЕ, который дороже самого факта.** Первая серия платформенной сессии дала «2 из 2» и была НЕВЕРНОЙ: она слала `kill` из шелла, и запуск двух процессов сам создавал зазор в миллисекунды. Она починила прибор, число перевернулось на ПРОТИВОПОЛОЖНОЕ, и она это назвала сама. **На неверном приборе вопрос был бы закрыт как несуществующий, и обе половины пака ушли бы в лендинг на посылке, которой нет.** ⇒ норма: замер, чей результат подтверждает УДОБНОЕ, проверяется на прибор прежде, чем на предмет; и «слипание» ловится только тем прибором, который умеет создать нулевой зазор.
|
||||
|
||||
**6. Границы.** Пункты 1 и 5 — замерены, дважды и независимо. Пункт 2 — вывод из замера плюс ратифицированной формы, не отдельный замер. Пункт 3 — конструкция платформенной зоны, объявленная ею; путь до `deactivating` 0,014 с — её число, я его не воспроизводил. Ответ движковой половины на п.4 ещё не получен.
|
||||
|
||||
## D39.239 — СЛОВО ВЛАДЕЛЬЦА: продукт делится на ЛЕНДИНГ и IDE; плюс замер, где сегодня живут учётки, и мандат на СНОС протухшей прозы (10.09, оркестратор №23)
|
||||
|
||||
**1. ⭐ ПРОДУКТОВАЯ МОДЕЛЬ, названная владельцем 10.09 и до сих пор нигде не записанная.** «Фронт — это скорее IDE для переводов; к этому IDE нужна обёртка в виде ЛЕНДИНГА. Модель такая же, как у любого ИИ-продукта: лендинг с продуктом, и IDE отдельно — с аккаунтами, оплатой и всем таким». ⇒ **поверхностей у продукта ДВЕ, а не одна**, и та, что построена наполовину (`frontend/`), — это ВТОРАЯ из них. Лендинга нет вовсе: ни кода, ни строки в трекере, ни требования в реестре. ⚠ Это не «маркетинг потом»: разделение меняет то, ЧТО именно размораживать, когда владелец скажет размораживать фронт, — сегодняшняя витрина компонентов относится к IDE, а не к лендингу, и склеивать их в один поток было бы ошибкой. Носитель — строка **384**.
|
||||
|
||||
**2. Где живут учётки СЕГОДНЯ — замерено, потому что вопрос владельца был фактическим.**
|
||||
**(а) Логин настоящий, не заглушка:** OIDC-поток `/auth/login` → провайдер → `/auth/callback`, плюс `/auth/logout` и `/auth/logout-all` (`platform/internal/login/login.go`, греп `func (h *Handler) Routes`); отдельный dev-вход для стенда (`platform/internal/login/dev.go`, греп `/auth/dev-login`).
|
||||
**(б) Учётка СОЗДАЁТСЯ САМА при первом успешном входе** (`platform/internal/pgstore/identity.go`, греп `case errors.Is(err, pgx.ErrNoRows)`): нет опознанной личности — заводится `users` плюс `identities`. Отдельной формы регистрации нет и не нужно. ⚠ Адрес почты попадает на УЧЁТКУ только если провайдер объявил его подтверждённым; неподтверждённый остаётся на личности и не повышается.
|
||||
**(в) ⛔ ПРИГЛАСИТЕЛЬНОГО ГЕЙТА НЕТ:** ни списка допущенных, ни инвайтов — грепом по `platform/internal` вне тестов ни одного носителя (хиты слова `allowlist` относятся к другим предметам: список статусов, разрешённые redirect-URI, подмножества ингеста). ⇒ **всякий, кто пройдёт через провайдера входа, получает учётку.**
|
||||
**(г) Дверь закрыта КОНФИГУРАЦИЕЙ, а не кодом:** пустой `OIDCIssuer` означает, что поверхность логина не монтируется вовсе (`platform/internal/config/config.go`, греп `Empty issuer means no login surface`). Это единственный сегодняшний рубеж, и он бинарный: либо никого, либо все.
|
||||
**(д) Оплаты нет намеренно** (пополнение из админки, `D39.176` п.1); кредиты на пользователя есть.
|
||||
|
||||
**3. ⚠ ИСПРАВЛЕНИЕ МОЕГО ЖЕ ОТВЕТА ВЛАДЕЛЬЦУ, данного часом раньше.** Я сказал ему, что запросы платформы к базе написаны руками и «генератор вроде `sqlc` срезал бы значительную часть». **Неверно: `sqlc` УЖЕ используется** — `platform/sqlc.yaml`, пять сгенерированных файлов, **1 232** строки кода из **5 688** в `pgstore` (22 %). Рукописного, стало быть, около четырёх с половиной тысяч, и часть его рукописна законно — транзакционная логика, которую генератор не выражает. Верное утверждение: генератор взят и покрывает пятую часть стора; вопрос «что ещё можно на него перевести» открыт, но «мы не взяли генератор» — ложь. ⭐ Класс ошибки мой обычный: вывод из ФОРМЫ файлов (увидел рукописный код и обобщил), а не из вопроса дереву — `platform/sqlc.yaml` лежал в одной команде `find`.
|
||||
|
||||
**4. МАНДАТ НА СНОС, выданный владельцем прямым словом.** «Надо доактуализировать документацию… разрешаю СПИЛИТЬ прозу и воду, которая уже неактуальна — только аккуратно, окай диффы у Fable». ⇒ до сих пор протухшее ПОМЕЧАЛОСЬ (⚠-испр., баннер, эррата); теперь его можно УДАЛЯТЬ. ⛔ Границы, которые ставлю себе сам, потому что владелец сказал «аккуратно»: **(а)** тела D-нот не переписываются и не сносятся (D23.3) — только шапка и эрраты; **(б)** отчёты `docs/research/**` — улика, им баннер, не нож; **(в)** чужие зоны (`docs/experiments/**`, `backend/docs/`, `frontend/docs/`, `platform/docs/`) не трогаю ни при каком мандате; **(г)** каждый снос предъявляется диффом на ревью старшего коллеги ДО коммита — это условие владельца, а не моя осторожность; **(д)** сносится ПРОЗА, объявленная протухшей ЗАМЕРОМ, а не то, что мне кажется лишним.
|
||||
|
||||
**5. Границы.** Пункты 2 и 3 пере-сняты мной на дереве, с адресами. Пункт 1 — прямая речь владельца, не вывод. Пункт 4 — его же мандат, границы (а)–(д) мои и объявлены здесь, чтобы их можно было оспорить.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue