# P78 — август 2024: feature flags — draft review ## Граница пакета P78 заменяет только три августовских черновика через overlay `web/scripts/upgrade-2024-08.mjs`: - `editorial-2024-08-practice-feature-flags` — «Фича-флаг как контракт выпуска: как не оставить переключатель навсегда»; - `editorial-2024-08-mechanism-feature-flags` — «Где принимать решение флага: server, client и журнал exposure»; - `editorial-2024-08-field-feature-flags` — «Выключить флаг — не значит удалить риск: rollout, rollback и cleanup». Скрипт экспортирует только `revisions`; `web/data/articles.json` не менялся. В пакете нет registry, README, статуса, staged changes, commit или push. Фикстура работает только с versioned fixed synthetic objects в памяти: она не читает и не пишет flag store, файлы, сеть, часы, CI, telemetry, user data или production. ## Source report и историческая граница | Источник | Закрепление и факт, используемый в тексте | Ограничение | | --- | --- | --- | | [OpenFeature Specification v0.6.0 release, 16.05.2023](https://github.com/open-feature/spec/releases/tag/v0.6.0) | Датированный versioned release, доступный к августу 2024; включает provider events, initialization и shutdown. | Не доказывает одинаковую реализацию provider и не задаёт exactly-once для какого-либо события. | | [OpenFeature v0.6.0 — Flag Evaluation API](https://github.com/open-feature/spec/blob/v0.6.0/specification/sections/01-flag-evaluation.md) | Раздел versioned release: typed evaluation с flag key, default value и optional evaluation context; abnormal execution возвращает default. | API-контракт, не policy TTL, секретов, rollout или удаления флага. | | [OpenFeature v0.6.0 — Evaluation Context](https://github.com/open-feature/spec/blob/v0.6.0/specification/sections/03-evaluation-context.md) | Раздел versioned release: targeting key идентифицирует subject, а context имеет определённый merge order. | Раздел experimental; не обещает distributed snapshot или непрерывную консистентность когорты. | | [OpenFeature v0.6.0 — Events](https://github.com/open-feature/spec/blob/v0.6.0/specification/sections/05-events.md) | Раздел versioned release: provider readiness, error, configuration changed и stale events. | Раздел experimental; это не бизнес-exposure и не delivery contract. | | [Unleash Feature Toggles — immutable commit `341703978af887a364a9d872d9e3a906ae4dbbcb`, 21.08.2024](https://github.com/Unleash/unleash/blob/341703978af887a364a9d872d9e3a906ae4dbbcb/website/docs/reference/feature-toggles.mdx) | Неизменяемый первичный Git-снимок в пределах августа 2024: type и description, activation strategies по environment, disabled toggle evaluates false. | Не задаёт owner, expiry, наблюдение, метрики или cleanup process произвольной команды. | | [Unleash Front-end API — immutable commit `4ae65d6d5e095d5c056ae63c60afcb09dd6cfe5b`, 24.05.2024](https://github.com/Unleash/unleash/blob/4ae65d6d5e095d5c056ae63c60afcb09dd6cfe5b/website/docs/reference/front-end-api.md) | Неизменяемый первичный Git-снимок до августа 2024: Front-end API, FRONTEND token, CORS и refresh interval с random offset для Unleash 4.18+. | Не является переносимой гарантией момента refresh, client-side evaluation или единой конфигурации у всех клиентов. | Исторические меняющиеся документы закреплены либо датированным релизом `v0.6.0`, либо точным immutable Git commit. Архивные URL и старый домен документации Unleash из P78 удалены. ### Обязательная проверка ссылок Перед выпуском выполнен обычный HTTPS GET для всех шести URL выше: ```sh curl -L --fail --silent --show-error --output /dev/null \ --write-out '%{http_code} %{url_effective}\n' URL ``` Команда запускалась без `-k`/`--insecure`, без TLS bypass, без заголовка авторизации, credentials или cookie jar. Результат для каждого URL — `200`; redirect ведёт на тот же публичный GitHub URL. Проверка выполнена 31.07.2026 для доступа к закреплённым историческим источникам, а не как утверждение об их текущем содержимом. ## Проход 1 — факты и техника - У каждого материала первые два абзаца называют проблему и цену: долговая ветвистость release-флага; неясный authoritative evaluator и лишний context; false/100% без удаления runtime dependency. - Цепочка в текстах одинаковая и проверяемая: «симптом → причина → проверка → действие». Это не рекламный нарратив и не runbook, притворяющийся production-инструментом. - В mechanism-материале строго разделены evaluation, exposure candidate, render confirmation и domain effect. Provider events OpenFeature не выданы за бизнес-события. Ни одна статья не обещает exactly-once; при необходимости назван idempotency key на стороне потребителя. - В practice-материале owner, expiry и deletion path честно названы командной policy, а не возможностью OpenFeature или Unleash. - В field-материале 0/5/25/100, сигналы и сценарии — `fixed synthetic model`. Это не трафик, SLO, incident, пользовательские данные, интервью или production-метрики. - Фикстура принимает только канонический fixed synthetic input. Она отвергает unknown keys, file/network/clock/telemetry/production markers, неверную версию и scope, разрежённые массивы, подменённые карточки/решения, циклический input/report и forged cleanup draft. Отдельная проверка доказывает, что некорректный input не меняет frozen fixed record. ## Проход 2 — редактирование и голос Автор августа 2024 — системный практик: короткие технические абзацы, конкретный контекст и явная граница вывода. В каждом тексте есть постановка проблемы в первых двух абзацах, таблица решения, компактный воспроизводимый код или конфиг, ограничения и один следующий проверяемый шаг. | Slug | Основное тело | Редакторский контроль | | --- | ---: | --- | | `editorial-2024-08-practice-feature-flags` | 9 586 знаков | Контракт флага проходит от owner и audience к наблюдению и removal; сигнал не назван доказательством эффекта. | | `editorial-2024-08-mechanism-feature-flags` | 11 878 знаков | Граница server/client, cohort key и event semantics разобраны без магических гарантий provider. | | `editorial-2024-08-field-feature-flags` | 12 045 знаков | Rollout, rollback и cleanup разведены; 100% и disabled явно не названы завершением удаления. | Диапазон 5 000–15 000 знаков соблюдён для всех трёх тел. Английские термины оставлены только там, где они обозначают API, контракт или артефакт; рядом дано техническое значение, а не рекламная формулировка. ## Проход 3 — визуал и выпуск Три SVG нарисованы вручную; в них нет `