This commit is contained in:
@@ -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 остаётся источником её фактической записи.
|
||||
Reference in New Issue
Block a user