# P80 — октябрь 2024: ёмкость и стоимость ## Граница пакета Пакет заменяет только три overlay-ревизии: - editorial-2024-10-practice-capacity-cost; - editorial-2024-10-mechanism-capacity-cost; - editorial-2024-10-field-capacity-cost. Все workload, request, limit, quota, p95, проценты, риски и суммы в статьях принадлежат synthetic-capacity-cost-model/2024-10-v1. Это фиксированные литералы JavaScript в памяти и их детерминированные производные; в пакете нет счёта, тарифа, имени продукта, клиентского объёма, метрики, интервью или утверждения об actual saving. ## Проход 1 — факты и техника ### Источники и историческая граница Все четыре URL проверены обычным TLS-запросом без авторизации и без обхода сертификатов: каждый вернул HTTP 200. | Источник | Версия / дата | Что подтверждает | Чего не подтверждает | | --- | --- | --- | --- | | [Kubernetes: Manage Resources for Containers](https://github.com/kubernetes/website/blob/0666011822b3ebbec179d6b3a2e6832977daa3bc/content/en/docs/concepts/configuration/manage-resources-containers.md) | Immutable commit 0666011822b3ebbec179d6b3a2e6832977daa3bc, 06.05.2024 | Scheduler использует request; CPU/memory limits имеют отдельную семантику исполнения. | Цену, invoice, тариф provider или безопасный размер instance. | | [Kubernetes: ResourceQuota](https://github.com/kubernetes/website/blob/c87b19193d8b1e96de03d76ec7eece02262580f0/content/en/docs/concepts/policy/resource-quotas.md) | Immutable commit c87b19193d8b1e96de03d76ec7eece02262580f0, 30.05.2024 | Абсолютные quota для requests/limits; сумма quota может превышать cluster capacity. | Связь quota с расходом, claim об экономии или доступная capacity. | | [Kubernetes: LimitRange](https://github.com/kubernetes/website/blob/c889d9b2510bba78dbb527a79b8e2099b16f3d67/content/en/docs/concepts/policy/limit-range.md) | Immutable commit c889d9b2510bba78dbb527a79b8e2099b16f3d67, 14.03.2024 | Admission defaults, minimum, maximum и ratio request/limit. | Прогноз saturation, стоимости или изменение уже работающего workload. | | [Google Cloud Billing Catalog v1 proto](https://github.com/googleapis/googleapis/blob/0fe653872eca3ece391a0b4ec2f8ace64634419f/google/cloud/billing/v1/cloud_catalog.proto) | Immutable commit 0fe653872eca3ece391a0b4ec2f8ace64634419f, 18.06.2024 | Форму SKU/pricing expression: usage unit, base unit и tiered rates. | Реальную цену, скидку, валюту, billing account или счёт читателя. | Все снимки существовали до конца октября 2024. В текстах эти источники использованы только для словаря и границ модели, не для переноса поведения конкретной платформы на synthetic cards. ### Проверка арифметики и модели - steady-slo-cost-drift: 0,36 + (1,2 × 0,08) + (2 × 0,01) = 0,476 u/h; за 24 часа — 11,424 u. - next-limit-balanced: 0,36 + (1,4 × 0,08) + (2,2 × 0,01) = 0,494 u/h; за 24 часа — 11,856 u; разница от 1,4 до 1,6 CPU — 0,384 u/24h. - saturation-stop: 0,512 u/h, 12,288 u/24h; p95 headroom — 4 ms, поэтому branch останавливается до выбора следующего предела. - large-instance-unjustified: 0,74 u/h, 17,76 u/24h; низкий synthetic utilisation не выдаётся за реальный bill или доказательство безопасного уменьшения capacity. Fixture имеет закрытые контракты input/report/draft/return card. Он проверяет точные ключи, dense arrays, unknown keys, cyclic JSON и canonical comparison. В нём нет чтения файлов, Git, облака, billing export, telemetry, CI, сети или production state; return card не выполняет rollback. **Вердикт:** фактические утверждения ограничены источниками и fixed model; арифметика и негативные ветки согласованы с кодом. ## Проход 2 — редактура и голос Автор октября 2024 звучит как системный практик: не обещает «оптимизацию», а ведёт от симптома к причине, проверке и действию. В первых двух абзацах каждой статьи есть исходная ситуация и цена ошибки: | Статья | Исходная проблема | Цена ошибки | Практический артефакт | | --- | --- | --- | --- | | Practice | SLO проходит, а model cost растёт. | SLO ошибочно принимают за доказательство стоимости. | Capacity-card и формула workload → resource → unit → stop. | | Mechanism | Процент загрузки принимают за цену. | Fixed base, unit и quota исчезают из причинной цепочки. | Causal diagram, таблица терминов и negative fixture. | | Field | Большой instance выбирают по одной latency-точке. | Предел, risk и return boundary остаются неявными. | Матрица трёх cases, limit curve и маршрутизированный чек-лист. | Из текста удалены общие обещания, real savings и production advice. Термины раскрыты через конкретную роль: request/limit/quota для формы ресурса, usage/base unit и tiered rate для billing expression, saturation для stop condition. Финалы оставляют проверяемый tabletop-шаг, а не лозунг. Проверенный объём основного текста, без списка источников: - practice — **9 930** знаков; - mechanism — **10 997** знаков; - field — **10 037** знаков. **Вердикт:** каждый текст находится в диапазоне 5 000–15 000 знаков, держит тон 2024 года и не подменяет границу модели универсальным советом. ## Проход 3 — визуал и выпуск | Asset | Смысл | Проверка на 375 px | | --- | --- | --- | | capacity-cost-2024-load-resource-cost.svg | Связь workload, resource, billing unit и stop boundary. | Рендер 375×233, карточки и стрелки различимы. | | capacity-cost-2024-scenario-matrix.svg | Causal split utilisation, allocation, saturation и billing expression. | Рендер 375×233, короткая нижняя легенда не обрезается. | | capacity-cost-2024-limit-curve.svg | Три synthetic точки: performance, model cost и operational risk. | Рендер 375×233, title и stop line читаемы. | У каждой статьи есть figure с meaningful alt и caption, HTML table с thead, компактный code example, ordered route и раздел ограничений. Для SVG проверены XML и отсутствие script, foreignObject, javascript:, data:image и event handlers. Запущенные проверки: ~~~text node --check scripts/upgrade-2024-10.mjs PASS fixture: 33/33 assertions npm run audit:draft -- scripts/upgrade-2024-10.mjs PASS editorial-2024-10-practice-capacity-cost: 9930 body chars PASS editorial-2024-10-mechanism-capacity-cost: 10997 body chars PASS editorial-2024-10-field-capacity-cost: 10037 body chars xmllint --noout SVG safety scan: 0 matches Sharp 375 px: 375x233, 375x233, 375x233 ~~~ Общий production build намеренно не запускался: пакет изолирован, а задача запрещает registry/README/queue/Git/staging/commit/push. Выпускной вердикт для draft-пакета: **готов к независимому подключению и отдельной сборке владельцем пакета**. ## Выпуск после трёх независимых проходов 1. **Факты и техника.** Редактор повторно прочитал четыре immutable sources. Kubernetes snapshots подтвердили request/limit semantics, aggregate ResourceQuota и admission-only LimitRange; Google Cloud proto — SKU, usage/base unit и tiered rates. Формулировка о quota уточнена: сумма quota может превышать ёмкость кластера, поэтому quota не является доказательством доступной capacity. `node --check` и fixture — **PASS 33/33**. 2. **Редактура и голос.** Три статьи держат разные вопросы: capacity-card, причинная модель стоимости и выбор следующего предела. После уточнения источника объёмы — **9 995**, **11 013**, **10 047** знаков; synthetic values не выданы за тариф или advice. В каждом тексте есть problem/cost, таблица, пример и один проверяемый следующий шаг. 3. **Визуал и выпуск.** Первый мобильный просмотр нашёл недопустимо узкую карточку «предел» в схеме workload → resource → cost. Схема переработана в четыре крупные последовательные карточки, заново прошла XML/safety scan и Sharp-render на 375 px; остальные две диаграммы также просмотрены. После подключения overlay `audit:articles` подтвердил figure/table/code example на каждый slug; registry содержит **235** уникальных ревизий. `npm run build` успешно построил **374** страницы. В выпуск входят только пять файлов октября, обновления registry/production README и эта приёмка. Пользовательские изменения, черновики ноября/декабря/января и исходный `articles.json` исключены.