Mark an item that went stale two minutes after it was written, give a retired prompt its outcome, and name the halves a row was deferring
This commit is contained in:
parent
3de5b22d3b
commit
ff14901ac7
5 changed files with 20 additions and 5 deletions
|
|
@ -363,7 +363,7 @@
|
|||
| 292 | ⛔ **ЧЕСТНОСТЬ ТРЁХ СТРОК НАБЛЮДАЕМОСТИ — ЖИВАЯ ПОЛОВИНА (б) ЗАКРЫТОЙ СТРОКИ 105, заведена 05.09 отдельным носителем.** Закрытие 105 сняло только половину (а) — предикат `isBankRole`; половину (б) чинить никто не заказывал, а на неё ссылались ДВА носителя как на «до фикса 105». Три дефекта, все воспроизведены: **(1)** строка `VOICE` берёт `rules=` из конфига ВРЕМЕНИ ОТЧЁТА (`backend/internal/pipeline/quality.go`, греп `rules=`), поэтому включение `gates.voice` ПОСЛЕ прогона печатает «измерено, чисто» для книги, которую никто не мерил; **(2)** та же строка печатается при ВЫКЛЮЧЕННОМ гейте, если `SpoilerLeaks>0` — поведение верное, неверна формулировка отчёта; **(3)** знаменатель `BANKNOTE` = `len(states)` вместе с призрачными строками `retrieval_state`, тогда как соседний агрегатор их фильтрует ⇒ после пере-чанковки покрытие ЗАНИЖАЕТСЯ. ⚠ Цена молчания прямая: отчёт говорит «измерено», когда не мерили, — это ложь читателю в том самом месте, куда смотрят, решая, готова ли книга. Печатает `cmd/tmctl/render.go` (греп `rules=`), пин — `render_observability_test.go`. | бэкенд | скоро | правка формулировки + знаменателя + тест на «включил гейт после прогона» | D39.86, D39.200; археология — `architecture/13-tech-debt-anchors.md` §Б-105 п.(б) |
|
||||
| 293 | ⛔ **ФАЙЛ ПОД ЛЮБЫМ КАТАЛОГОМ `books/` НЕВИДИМ ДЛЯ GIT — `git status` его не показывает, `git add` молча не берёт, и сдающая зона теряет работу, не заметив.** Предъявлено 05.09 платформенной сессией и проверено оркестратором до лендинга: `git check-ignore -v platform/internal/books/counter_test.go` → `<git-common-dir>/info/exclude:9:books`. **Причина: правило `books` в `.git/info/exclude` НЕЯКОРЕНО**, а gitignore без ведущего `/` ловит каталог с этим именем на ЛЮБОЙ глубине. ⚠ Неякорность ОСМЫСЛЕННА и снимать её нельзя не думая: `books` в связанном рабочем дереве — СИМЛИНК, а трекнутое правило `/books/` матчит только каталоги (комментарий стоит там же). ⚠ **Почему это не поймал никто:** тронутые файлы того же каталога в `git status` ВИДНЫ (игнор действует лишь на неотслеживаемое), поэтому пропажа не читается глазами; а `git commit -- <путь>` untracked роняет и без игнора. Замер: без `git add -f` уехал бы 31 файл из 32. **Лечение — не «поправить exclude»:** файл ОБЩИЙ для всех рабочих деревьев клона, включая полигонное, и менять семантику игнора под живыми сессиями нельзя. Формы, между которыми выбирать: (а) якорить правило под КОНКРЕТНЫЙ симлинк (`/books` в корне дерева) и проверить, что симлинк по-прежнему игнорируется во ВСЕХ деревьях; (б) оставить как есть и завести проверку лендинга — `git status --ignored --short <зона>` перед каждым актом. | оркестратор | скоро (гигиена лендинга, $0) | выбор формы + проверка во всех воркtree | предъявлено платформенной сессией 05.09; проверено исполнением при лендинге `7e2226a` |
|
||||
| 294 | ⭐ **ФОРМА «СКОЛЬКО ДОБАВИТЬ» — решение владельца 05.09, ратифицировано `D39.203`.** Наружу вместо «сколько не хватило на ЭТОТ вызов» едет **«сколько добавить, чтобы прошёл ЛЮБОЙ следующий»** = `max(shortfall, step_max − headroom)`: сегодняшняя недостача закрывает текущий вызов, а следующий может быть крупнее, и человек доплачивает дважды. ⚠ **НЕ однострочник, и объявлять его дешёвым было бы ошибкой** (зона дешевизну не подтвердила): новая величина · **ПЕРЕИМЕНОВАНИЕ поля** — `shortfall_micro_usd` станет ложным именем, кандидат `top_up_micro_usd` · минор `StreamVersion` 1.3→1.4 · зеркало словаря у платформы · пере-снятие пина белого списка кадра `ceiling`. ⚠ Построенное поле НЕ ложно, оно у́же: закрывает вызов, а не следующий шаг | бэкенд+платформа | скоро | новая величина + переименование + минор потока | **D39.203**; тензия п.(3) против п.(4) заказа найдена зоной движка |
|
||||
| 295 | ⛔ **СНАЧАЛА ПОДАТЬ ПОДПИСАННЫЙ КАНОН В ПРОГОН — только потом мерить точность чекера и решать про гейт.** Живая дыра приоритета №1 владельца («100% консистентность») — НЕ порог и НЕ флаг: канон из 53 подписанных терминов **не подключён к стенду**, весь замеренный дрейф — дрейф С ОТКЛЮЧЁННЫМ каноном, а там, где его подключали, консистентность 99.3–100%. ⇒ мерить полноту чекера на прогоне без канона значит мерить не то. **Порядок:** (1) канон в прогон · (2) пере-замер точности/полноты (строка **12**, прежний замер порочен — класс одного иероглифа не имел ни одного положительного примера) · (3) решение владельца по `gates.glossary.postcheck_gate`. ⚠ Владелец 05.09: «если он ложно положительно будет стрелять это плохо, очень плохо» | полигон+бэкенд | скоро | подача канона + замер | **D39.205**, D39.198 п.3-4, строка 12 |
|
||||
| 295 | ⛔ **СНАЧАЛА ПОДАТЬ ПОДПИСАННЫЙ КАНОН В ПРОГОН — только потом мерить точность чекера и решать про гейт.** Живая дыра приоритета №1 владельца («100% консистентность») — НЕ порог и НЕ флаг: канон из 53 подписанных терминов **не подключён к стенду**, весь замеренный дрейф — дрейф С ОТКЛЮЧЁННЫМ каноном, а там, где его подключали, консистентность 99.3–100%. ⇒ мерить полноту чекера на прогоне без канона значит мерить не то. **Порядок:** (1) канон в прогон · (2) пере-замер точности/полноты (строка **12**, прежний замер порочен — класс одного иероглифа не имел ни одного положительного примера) · (3) решение владельца по `gates.glossary.postcheck_gate`. ⚠ Владелец 05.09: «если он ложно положительно будет стрелять это плохо, очень плохо» ⚠ **ПОЛОВИНЫ НАЗВАНЫ 06.09 по ревью напарника — прежде тут стояло «назвать или отдать», и это переезжало бы следующей смене той же инерцией.** **(а) Полигон/владелец:** подать канон в стенд-книгу — это ДАННЫЕ (сид-YAML либо решения `bank-apply`) ПЛЮС платный прогон под санкцией; у бэкенд-сессии нет ни книги, ни стенда, ни денег, поэтому половина её не является. **(б) Бэкенд — только ВОПРОСОМ, а не задачей:** умеет ли сид-путь нести подписанный статус; если нет — это пинг оркестратору, и тогда появляется бэкендовая работа. ⇒ зона ведущая — полигон. | полигон (бэкенд — по вопросу) | скоро | подача канона + замер | **D39.205**, D39.198 п.3-4, строка 12 |
|
||||
| 296 | **ТОЧЕЧНАЯ ПЕРЕГЕНЕРАЦИЯ ПО ПРОМАХУ ГЛОССАРИЯ — направление владельца 05.09 («или флагать, или перегенерировать проблемный участок»), работы сегодня НЕТ.** Актуаторы ремонта — только `RepairLatinResidue` и `RepairBrokenWord` (`backend/internal/pipeline/repair.go`, греп `defaultRepairClasses`); `glossary_miss` нет ни там, ни в `knownRepairClasses`. Сегодняшние лекарства не точечные и обе дороги: удержать ВЕСЬ фрагмент (гейт) либо править глоссарий с `--resnapshot`, то есть ПЕРЕ-ОПЛАТИТЬ книгу. ⇒ заказ: `glossary_miss` как класс-актуатор — перегенерация участка с подписанной формой. ⚠ Гейтится строкой **295**: без замера точности перегенерация по ложному срабатыванию перепишет верный текст | бэкенд | когда-нибудь (после 295) | новый класс актуатора + пост-инвариант | **D39.205** |
|
||||
| 297 | ✅ **ПЕРВАЯ ПОЛОВИНА ИСПОЛНЕНА ЛЕНДИНГОМ 06.09 (`2f65d1d`, акт `D39.210`): словарь получил четвёртое значение `delimited`**, и spine-EPUB вместе с `\f` в txt больше не выдаются за слово формата. ⛔ **ВТОРАЯ ПОЛОВИНА ТЕПЕРЬ ОБЯЗАТЕЛЬНА, А НЕ ЖЕЛАТЕЛЬНА:** временное правило платформы «`declared` вести как `none`» после лендинга начинает ОТНИМАТЬ ползунок глав у книг, чья структура объявлена настоящим `nav`/NCX — то есть молча недодавать продукт. ⚠ **Якоря прежней редакции этой строки указывали на текст, который пак УДАЛИЛ, а якорный линт этого НЕ ВИДЕЛ** — они были без токена, файл длинный, адрес «разрешался». Живая рабочая строка протухла молча; класс несёт строка **306**, и это его первый пойманный случай в рабочей строке, а не в архиве. ⚠ **Тело прежней редакции СНЯТО 06.09, а не оставлено под шапкой** — оно цитировало рекламу «how much the chapter cut can be trusted» как живую улику, а пак её УДАЛИЛ (`grep -c` → 0), и три его якоря целили в текст, которого нет: словарь уехал, а `:94-95` попал в структуру, введённую дофиксом. То есть строка утверждала про себя, что она первый пойманный случай «якорь протух молча», и одновременно продолжала им БЫТЬ; поймал это строитель пака грепом, линт был зелён. **Что стало вместо снятого:** словарь живёт на `backend/internal/chunk/ingest.go:125-149`=`WHICH PATH drew the chapter boundaries` — четыре значения, и первая же строка комментария теперь говорит про ПУТЬ, а не про доверие. Прежняя двусмысленность («поле отвечает на провенанс, а рекламирует доверие») **устранена паком, а не описана** | бэкенд+платформа | скоро (структурный пак) | недостающее значение на проводе, и `declared` означает ТОЛЬКО объявленную форматом структуру глав | **D39.202**, D39.205 |
|
||||
| 298 | ⛔ **`unit_resolutions` КЛЮЧЕВАНЫ ПОЗИЦИЕЙ, И ЛЮБОЙ ПЕРЕКРОЙ ИХ СНОСИТ ЦЕЛИКОМ.** Ключ `(book_id, chapter, unit, wave)` позиционен по построению, и миграция это прямо объявляет: «keyed by the ENGINE's own ordinals» (`platform/internal/pgstore/migrations/00015_seam_ceiling_and_units.sql:50-56`); событие `unit_done` несёт номер главы и ординал юнита, синк пишет их как есть (`platform/internal/pgstore/sink.go:249`). Потому при перекрое платформа ОБЯЗАНА удалять решения — иначе они перевесятся на чужую главу. Сегодня цена нулевая: решения есть только у стенд-книги, и это окно закрывается с каждой новой платной книгой. ⇒ разрешать `(chapter, unit)` в идентификатор ПРИ ПРИЁМЕ события, пока дерево у платформы на руках, и хранить идентификатор. Платформенная половина структурного пака: миграция плюс синк. ⚠ Этой строкой НЕ закрывается одноразовая перечеканка всех id при смене смысла `cutTag` — это другой предмет и другая цена | бэкенд+платформа | скоро (структурный пак) | решения переживают перекрой, не переклеиваясь на чужую главу | **D39.202** |
|
||||
|
|
|
|||
|
|
@ -2719,12 +2719,16 @@ $2.00» не мерил никто), **а утверждение о ПРОШЛО
|
|||
|
||||
**3. ⛔ КЛАСС, КОТОРЫЙ СРАБОТАЛ ЗА СМЕНУ НЕ МЕНЬШЕ ВОСЬМИ РАЗ У ВСЕХ РОЛЕЙ: «прибор ответил на свой вопрос, а прочитали его как ответ на твой».** Форма разная, корень один: гейт версии сверял ЧИСЛА, а формы расходились · постчек банка молчит ровно тогда, когда сбылся названный им страх владельца · батарея печатала «every test ran» при пяти скипах, потому что грепу нечего было читать · линт печатал «0 проблемных» при 1776 несверяемых якорях · «0 совпадений» означало «нет такой таблицы». ⚠ Ловило это НЕ внимание, а **расхождение с чужим числом** и **другой прибор**.
|
||||
|
||||
**4. ⛔ ЧЕМ ВРАЛ Я, чтобы преемник не наследовал это как факт.** Канон за сутки принял от меня **не меньше шести** ложных утверждений, и ещё три — в текстах ПРО эти шесть (эрраты 06.09-в…к). Классы: писал по КОММЕНТАРИЯМ кода, а не по тестам · брал числа из ПИСЕМ зон, не пересчитав · объявлял «исправлено» и «записано» без грепа · **дважды судил по ЗАГОЛОВКУ, не прочитав содержимое** — и вторым разом едва не вынес в архив реестр из 36 живых решений платформы, приняв его за хронику. ⇒ **исполнимые шаги против всего этого записаны в ролевой промт; они дороже, чем выглядят.**
|
||||
**4. ⛔ ЧЕМ ВРАЛ Я, чтобы преемник не наследовал это как факт.** Канон за сутки принял от меня **не меньше шести** ложных утверждений, и ещё три — в текстах ПРО эти шесть (эрраты 06.09-в…ж); ⚠ четвёртая, 06.09-к, — уже в ТЕЛЕ ноты `D39.215` п.7, то есть в акте, а не в эррате. **Испр. по ревью: прежняя редакция писала «в…к» и складывала разное** — неточность в пункте про точность. Классы: писал по КОММЕНТАРИЯМ кода, а не по тестам · брал числа из ПИСЕМ зон, не пересчитав · объявлял «исправлено» и «записано» без грепа · **дважды судил по ЗАГОЛОВКУ, не прочитав содержимое** — и вторым разом едва не вынес в архив реестр из 36 живых решений платформы, приняв его за хронику. ⇒ **исполнимые шаги против всего этого записаны в ролевой промт; они дороже, чем выглядят.**
|
||||
|
||||
**5. Что заландено содержательно.** Канон `0.12.0` с честной формой заказа по размеру · прибор приёмки платформы перестал выдавать справку о неизмеренном · заявленное нечитаемое оглавление больше не тонет молча · ресёрч `research/33` по техдолгу бэкенда (11 долгов, 20 снято, **ни один не требует переписывания**) · мандат чистоты владельца `D39.216`, у которого не было носителя вовсе · строки бэклога 306–327.
|
||||
|
||||
**6. ⚠ Обязательства, переходящие на №23.** Дизайн-пак 161 не написан. Строка 295 снята из бэкенд-пака и нуждается в разделении зон. **Датированный риск: замерный судья на модели с отключением 16.10.2026** (строка 327) — шесть недель от передачи, и до 06.09 носителя у него не было. Триаж зонного журнала платформы (5029 строк) заказан пунктом 0 её пака, прибор — `docs/scripts/carriers.py`. Ревью-шапки с датами поправок для `PLATFORM_DIRECTION` и `ENGINEERING_STANDARDS` — не сделаны.
|
||||
**6. ⚠ Обязательства, переходящие на №23.** Дизайн-пак 161 не написан. Строка 295 снята из бэкенд-пака и нуждается в разделении зон. **Датированный риск: замерный судья на модели с отключением 16.10.2026** (строка 327) — шесть недель от передачи, и до 06.09 носителя у него не было. Триаж зонного журнала платформы (5029 строк) заказан пунктом 0 её пака, прибор — `docs/scripts/carriers.py`. Ревью-шапки с датами поправок для `PLATFORM_DIRECTION` и `ENGINEERING_STANDARDS` — ✅ **СДЕЛАНЫ `3de5b22`** (⚠ пункт протух через ДВЕ МИНУТЫ после написания ноты и был помечен по ревью напарника: нота передачи читается преемником ПЕРВЫМ действием, и незакрытая пометка отправила бы его делать заново).
|
||||
|
||||
**6а. ⛔ ПРАВИЛО ВЛАДЕЛЬЦА О ПАРЕ — НОСИТЕЛЯ НЕ ИМЕЛО, записано здесь по ревью напарника.** Слово владельца 06.09: **работать постоянно ПАРОЙ и при сомнениях обращаться к контролёру; ни одно изменение оркестратора не считается принятым, пока напарник не сказал «окей»**. Механизм окупился в этот же день многократно: им пойманы почти все ошибки из п.4, включая обе, где я судил по заголовку. ⚠ **Без носителя он умирает вместе с сессией** — преемник о нём не узнает ни из кода, ни из доков. ⇒ записан здесь и подлежит переносу в ролевой промт следующим касанием. ⚠ Границу назвать честно: контролёр тоже ошибается — за смену он принёс три опровержения, из которых одно сам же отозвал, и дважды судил по обрезанному выводу своей команды. **Пара ловит не потому, что второй умнее, а потому, что у него ДРУГОЙ прибор.**
|
||||
|
||||
**7. Вопросы ВЛАДЕЛЬЦА, ждущие его слова.** Определение беты (консьерж против самообслуживания; критерия впуска в дереве НЕТ, строка 326) · дата повтору сравнения «черновик→редактор против банка из оригинала + сильного прямого» — ⚠ фрагментный замер БЫЛ и вывод его ОТОЗВАН (эррата 06.09-к), «не измерен ни разу» неверно · окно перекроя глав держится решением владельца о впуске, а не календарём · `f1e9226` записан отступлением и ратификации не получил · коэффициент холда `k` выведен, а не измерен.
|
||||
|
||||
**7а. Состояние трёх выданных промтов на минуту передачи: НИ ОДНА сессия по ним НЕ СТАРТОВАЛА.** Это меняет форму правки: промт можно править ФАЙЛОМ. Если к моменту чтения сессия уже запущена — правка идёт дельтой по каналу, а файл под работающей сессией не переписывается.
|
||||
|
||||
**8. ⭐ Что я сделал бы иначе.** Промты выдал мимо ДВУХ обязательных рубежей собственного ролевого промта, и поймал это не я. Замер границы беты настроил так, что опровергатели сняли все 14 блокеров — прибор отвечал на «есть ли обход?», а не на вопрос владельца. **Оба раза цена одна: я проверял чужое усерднее, чем своё.**
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
### [CONFIRMED_LOST] Строка 85 — пилот-преп добор: Bertalign GOLD-пары (D29.2в) · R2 shadow (D25.2) · exp08 v3 (D21.8)
|
||||
|
||||
Bertalign: grep -rni bertalign по eval/ и backend/ — 0 вхождений (нет ни кода, ни данных). exp08 v3: в docs/experiments/ существует только 08-cost-model-v2.md; его шапка (греп `Пере-съём заказан как exp08 v3`) прямо говорит «Пере-съём заказан как exp08 v3 (D21.8 … D25.8 …)» — т.е. заказан, не исполнен; в eval/ есть только cost_model_v2.py (v3-скрипта нет). Подтверждается и D-логом (D21): «→ exp08 v3 … до фиксации budget_usd-дефолтов Ф2» — висящее поручение, и `docs/architecture/02-mvp-plan.md:37`=`пере-съём exp08 v3` — как открытый. Скоуп — пилот-преп-промт Ф2.5, дельта вписана в `docs/archive/prompts/POLYGON_PACKAGE4_SESSION_PROMPT_2026-09-06.md:4`=`exp08 v3 (D21.8)`.
|
||||
Bertalign: grep -rni bertalign по eval/ и backend/ — 0 вхождений (нет ни кода, ни данных). exp08 v3: в docs/experiments/ существует только 08-cost-model-v2.md; его шапка (греп `Пере-съём заказан как exp08 v3`) прямо говорит «Пере-съём заказан как exp08 v3 (D21.8 … D25.8 …)» — т.е. заказан, не исполнен; в eval/ есть только cost_model_v2.py (v3-скрипта нет). Подтверждается и D-логом (D21): «→ exp08 v3 … до фиксации budget_usd-дефолтов Ф2» — висящее поручение, и `docs/architecture/02-mvp-plan.md:37`=`пере-съём exp08 v3` — как открытый. Скоуп — пилот-преп-промт Ф2.5, дельта вписана в `docs/archive/prompts/POLYGON_PACKAGE4_SESSION_PROMPT_2026-09-06.md:11`=`exp08 v3 (D21.8)`.
|
||||
|
||||
|
||||
### [CONFIRMED_LOST] Дописка к строке 59 — GLM context-overflow гард (finish=model_context_window_exceeded)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,12 @@
|
|||
# Промт: полигон-сессия, пакет №4 — сид этапа B + fix-лист D22.8 + задачи D25 (2026-07-11)
|
||||
|
||||
> ✅ **РЕТИРОВАН 06.09 (`508384b`) — ИСХОД.** Как отдельная сессия НЕ запускался ни разу; три месяца стоял
|
||||
> «частично отработан, residual ЖИВ», и остаток жил ВНУТРИ промта, а не в трекере. **Остаток вынесен строкой 327**
|
||||
> бэклога шестью пунктами, включая ДАТИРОВАННЫЙ риск: замерный судья на модели с отключением **16.10.2026**,
|
||||
> у которого носителя не было вовсе. ⛔ **Инструкции отсюда НЕ исполняются** — читать только как улику на дату.
|
||||
> Урок, ради которого файл сохранён: носителем работы служил ПРОМТ, а не трекер, и в трекере работы видно не было.
|
||||
|
||||
|
||||
> **⚠ СТАТУС (оркестратор №4, D36.1, 12.07) — НЕ архивирован, ЧАСТИЧНО отработан, residual ЖИВ.**
|
||||
> **Дельта 01.08 №2 (свип полноты D39.66):** при переупаковке в пилот-преп-промт добрать строку 85 бэклога — Bertalign GOLD-пары + spot-check (D29.2в) · fidelity-каскад R2 shadow (D25.2) · exp08 v3 (D21.8); echo-калибровка D25.7 остаётся здесь residual-ом (не потеряна).
|
||||
> **Что уже отработано:** как отдельная сессия пакет №4 НЕ запускался; исполнена только **Задача 1** (сид-мн.ч. → сид v2 внутри exp13, D32), а **Задача 4 в части P4 fidelity-хвоста ЗАКРЫТА D39.61 — не исполнять**.
|
||||
|
|
|
|||
|
|
@ -6,7 +6,11 @@
|
|||
|
||||
> ✅ **РЕВЬЮ-ШАПКА (оркестратор №22, 06.09) — ДОКУМЕНТ ЖИВОЙ И НЕСУЩИЙ, РЕЗАТЬ НЕЧЕГО.** Прочитан целиком:
|
||||
> нормы зоны плюс критерии приёмки (§3 Definition of Done), почти каждое утверждение с замером и ценой.
|
||||
> ⚠ **Единственная крупная поправка, внесённая на месте:** §1 — **`D39.84` больше НЕ запрещает деньги на
|
||||
> ⚠ **Поправки, внесённые на месте позже 04.08 — перечнем, потому что слово «единственная» в первой редакции
|
||||
> этой шапки было неверно (испр. по ревью 06.09):** §3 — норма изоляции мутаций `D39.113` (копия дерева ВМЕСТЕ с
|
||||
> каноном контракта) · §3 — вердикт посадки судится по ДЕЛЬТЕ против чистой базы той же копии (`PD-395`) · §3 —
|
||||
> греп открытых строк регистра по ПОЛНЫМ путям, не по именам (замер 27.08, `D39.159` п.7) · §3 — дисциплина
|
||||
> доказательства грепом: обрезанный вывод читается как отсутствие совпадения (перенесено 02.09). И крупнейшая: §1 — **`D39.84` больше НЕ запрещает деньги на
|
||||
> проводе**, половину запрета отозвал владелец 05.09 (`D39.196` п.2, эррата 05.09-а). Живой остаток запрета
|
||||
> назван там же четырьмя пунктами; отдельная и НЕ отозванная норма — **денег нет в INFO-логах** (`PD-99`).
|
||||
> ⚠ Ссылка на этот файл обязана стоять в КАЖДОМ платформенном промте: из семи прежних сослались пять.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue