revise February 2021 cache articles
Build and deploy / deploy (push) Successful in 14s

This commit is contained in:
2026-07-31 12:16:22 +03:00
parent 323d80b188
commit e67b416a81
7 changed files with 1048 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Производство редакционных партий
На 31 июля 2026 года строгий аудит проходит 109 из 358 созданных материалов. Остальные 249 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
На 31 июля 2026 года строгий аудит проходит 112 из 358 созданных материалов. Остальные 246 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
## Одна партия
+165
View File
@@ -0,0 +1,165 @@
# Автономное тройное ревью П36 · февраль 2021 · «Инвалидация кеша»
Статус: **принят независимым редактором в выпусковой набор**. В module ровно
три revision для стабильных slug:
- <code>editorial-2021-02-practice-cache-invalidation</code>;
- <code>editorial-2021-02-mechanism-cache-invalidation</code>;
- <code>editorial-2021-02-field-cache-invalidation</code>.
Revision не содержат <code>date</code> и <code>author</code>, не подключают
registry и не переписывают базовый архив. В этой авторской партии не менялись
<code>articles.json</code>, README, очередь, редакционный стандарт, package
config, Git и чужие незакоммиченные файлы.
## Проход 1. Факты, историческая рамка и техника — пройдено
| Утверждение или решение | Первичный / официальный источник | Зафиксированная граница |
| --- | --- | --- |
| В феврале 2021 RFC 7234 задавал HTTP cache key через method и target URI, а при content negotiation допускал selecting header fields | [RFC 7234, section 2 and 4.1](https://www.rfc-editor.org/rfc/rfc7234) | Текст использует это как дисциплину для key, но не называет <code>article:public:guide-42</code> HTTP key или API конкретного store. |
| После неошибочного ответа на unsafe request HTTP cache должен инвалидировать effective request URI; invalidation — удаление либо обязательная validation stored response | [RFC 7234, section 4.4](https://www.rfc-editor.org/rfc/rfc7234) | Статьи отдельно называют предел: запрос может пройти не через все caches, поэтому event не доказывает немедленную очистку каждого слоя. |
| <code>If-None-Match</code> делает request условным и для GET/HEAD может дать <code>304 Not Modified</code> при совпадении entity-tag | [RFC 7232, section 3.2](https://www.rfc-editor.org/rfc/rfc7232) | <code>sourceVersion</code> модели прямо отделена от ETag и HTTP header: это версия учебной записи одного owner. |
| HTTP freshness, validation и прикладная versioned invalidation отвечают на разные вопросы | [RFC 7234, sections 4.2–4.4](https://www.rfc-editor.org/rfc/rfc7234), [RFC 7232, sections 2.3 and 3.2](https://www.rfc-editor.org/rfc/rfc7232) | TTL не выдан за доказательство current source version; ни одна статья не обещает универсальную реализацию для Redis, CDN или framework. |
Во время независимой интеграционной вычитки смешанная буква в английском
глаголе осталась в таблице этого review; она исправлена на русское
«инвалидировать». Основной текст статьи уже разделял HTTP invalidation и
прикладной versioned contract.
### Техническая граница fixture
<code>runCacheInvalidationFixture()</code> создаёт один source object
<code>guide-42</code> и три последовательные версии только в <code>Map</code>:
1. public v1 строит <code>article:public:guide-42</code>;
2. public v2 записывается, но <code>ArticleChanged v2</code> намеренно не
применяется до следующего read;
3. этот read видит cached v1, сравнивает её с source v2 и возвращает rebuilt
public v2;
4. позднее event v2 оставляет уже current entry v2;
5. private v3 делает public read <code>not-visible</code> и удаляет old entry
ещё до delivery v3.
Проверены восемь assertions: initial v1 build, stale rebuild v2, сохранение
current entry поздним event, v2 hit, отсутствие <code>editorNote</code> в
public projection, deny private source до event, отсутствие public entry для
private event и использование только учебных объектов.
Fixture не открывает сеть, не вызывает broker, Redis, CDN, database, HTTP
stack или framework. Она не доказывает atomic write/event, retry, delivery,
cache eviction или production consistency. Это намеренное ограничение
соответствует формулировке статей.
Вердикт прохода: **пройден**. Нормы HTTP описаны с исторической датой, а
учебный contract не выдан за работу реальной инфраструктуры.
## Проход 2. Редактура, глубина и голос М4 — пройдено
| Revision | Симптом и цена в первых двух абзацах | Главный вопрос | Объём основного текста |
| --- | --- | --- | --- |
| Практика | Source уже обновлён, а читатель видит старую карточку; цена — показать не ту публичную проекцию или не вовремя скрыть материал | Как определить owner, public key, version, event и разрешённый hit | **8 882** знака body |
| Механизм | Source v2 известна, а cache v1 ещё не истекла по TTL; цена — отдать stale value после известного write | Почему version связывает source, event и entry, а TTL не заменяет этот contract | **9 903** знака body |
| Полевой разбор | Редактор видит новое значение, reader — старое; цена — очистить key вслепую и потерять evidence | Как отделить stale entry от wrong key, private source и другого read layer | **10 053** знака body |
- Отдельный ручной подсчёт после исключения code, figure и table дал
**7 321 / 8 239 / 7 492** знака чистой прозы. Значит, нижняя граница
выдержана не за счёт фрагментов кода и подписей к схемам.
- Во всех трёх материалах первые два абзаца дают симптом и цену, затем
держат порядок «симптом → причина → проверка → действие».
- У каждой revision больше пяти смысловых разделов, table с
<code>caption</code>/<code>thead</code>, figure с самостоятельными
<code>alt</code>/<code>figcaption</code>, минимум два технических примера,
нумерованный маршрут и две ссылки на RFC.
- Голос М4 / февраля 2021 прагматичен: owner, key, version, event, projection
и visibility всегда привязаны к конкретной операции. Автор уже связывает
данные с инфраструктурной границей, но не изображает себя владельцем
распределённой cache-платформы.
- Отдельно вычитаны анахронизмы и ложный опыт. В статьях нет выдуманного CDN,
cache hit-rate, данных пользователей, production-инцидента, real broker
delivery или универсального framework API.
- Каждый title и excerpt обещает ограниченный результат учебной модели, а не
«полное решение инвалидации» для любого стека.
Вердикт прохода: **пройден**. Объём и плотность соответствуют редакционному
стандарту; текст развивает автора от delivery и данных к одному проверяемому
contract чтения без техлидской позы 2027 года.
## Проход 3. Визуал, fixture и preflight — пройдено в границах пакета
- <code>cache-key-lifecycle-2021.svg</code> показывает полный порядок source
v2 → public key → delayed event → version guard → rebuilt public v2. В
первом рендере текст карточек соприкасался со стрелками; карточки были
увеличены, схема отрендерена и просмотрена повторно.
- <code>cache-consistency-matrix-2021.svg</code> сопоставляет пять состояний
source, cache и event с допустимым решением read, включая delayed v2 и
private v3.
- <code>cache-diagnosis-2021.svg</code> ведёт от stale title к evidence
packet и отделяет stale entry, wrong key, private source и renderer вне
кеша.
- У всех SVG есть <code>title</code>, <code>desc</code>, <code>role="img"</code>,
вертикальный viewBox, контрастные карточки и короткие строки. В них нет
JavaScript, <code>foreignObject</code>, external URL или raster data URI.
- После Sharp-рендера на ширине 375 px визуально просмотрены три финальные
PNG: <strong>375×719</strong>, <strong>375×641</strong> и
<strong>375×646</strong>. Clipping, наложения и горизонтальный overflow
внутри SVG не обнаружены.
### Фактически выполненные проверки
Команды запускались из <code>web/</code> после финальной редакторской правки:
<pre><code>node --check scripts/upgrade-2021-02.mjs
npm run audit:draft -- scripts/upgrade-2021-02.mjs
node scripts/upgrade-2021-02.mjs --verify-fixture
xmllint --noout \
public/assets/editorial/2021/cache-key-lifecycle-2021.svg \
public/assets/editorial/2021/cache-consistency-matrix-2021.svg \
public/assets/editorial/2021/cache-diagnosis-2021.svg</code></pre>
| Проверка | Реальный результат |
| --- | --- |
| <code>node --check</code> | PASS, code 0 |
| Import-safe export и draft gate | PASS: **8 882 / 9 903 / 10 053** знака body; найдены три slug, tables, figures, code, routes, sources и visual assets |
| In-memory fixture | PASS: все восемь assertions равны <code>true</code>; stale read пересобрал v2, late event v2 сохранил current entry, private v3 не выдан публичному reader |
| <code>xmllint --noout</code> | PASS, все три SVG — корректный XML |
| Sharp mobile preflight | PASS: финальные PNG 375 px просмотрены; первая схема исправлена после первоначального статического рендера |
| Scope/self-review | PASS: revision не меняют <code>date</code>/<code>author</code>; registry, archive, README, queue, standard, package config, Git и чужие untracked files не редактировались |
Не запускались настоящий source storage, cache store, Redis, CDN, broker,
database, HTTP server, browser, CI, production build, deployment, external
test stand или screen reader. Static SVG preflight не заменяет browser review,
accessibility audit и integration test выбранной инфраструктуры.
## Итог
Статус: **тройное авторское ревью пройдено; П36 принята к отдельной
публикации**.
Созданы ровно пять файлов:
1. <code>web/scripts/upgrade-2021-02.mjs</code>;
2. <code>editorial/reviews/2021-02-draft.md</code>;
3. <code>web/public/assets/editorial/2021/cache-key-lifecycle-2021.svg</code>;
4. <code>web/public/assets/editorial/2021/cache-consistency-matrix-2021.svg</code>;
5. <code>web/public/assets/editorial/2021/cache-diagnosis-2021.svg</code>.
## Независимая интеграционная приёмка
Основной редактор 31 июля 2026 года подключил три revision к
<code>web/data/editorial-revisions.mjs</code>, не меняя базовый
<code>articles.json</code>, даты или автора архивных записей. В registry стало
103 revision. RFC 7234 и RFC 7232 сверены независимо: в феврале 2021 они
задавали HTTP cache semantics, а учебная <code>sourceVersion</code> остаётся
прикладной моделью, не ETag и не API cache store.
| Проверка после интеграции | Реальный результат |
| --- | --- |
| Строгий audit трёх slug | PASS: 8 882 / 9 903 / 10 053 знака; у каждой статьи есть figure, table и code examples |
| Production build | PASS: Next.js собрал 374 статические страницы |
| Независимый mobile visual review | PASS: основной редактор повторно просмотрел три SVG после Sharp-рендера в 375 px; clipping, overlap и overflow не обнаружены |
Ни этот отчёт, ни интеграция не утверждают запуск source storage, cache store,
Redis, CDN, broker, HTTP server, browser или assistive technology.
Выпусковой вердикт: **ACCEPT**. Commit и push выполняются отдельной
публикационной операцией; Git остаётся источником её фактической записи.