revise February 2023 session articles
Build and deploy / deploy (push) Successful in 17s

This commit is contained in:
2026-07-31 14:34:09 +03:00
parent b78758dd3d
commit 6e664b3ca6
7 changed files with 656 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Производство редакционных партий
На 31 июля 2026 года строгий аудит проходит 184 из 358 созданных материалов. Остальные 174 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
На 31 июля 2026 года строгий аудит проходит 187 из 358 созданных материалов. Остальные 171 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
## Одна партия
+69
View File
@@ -0,0 +1,69 @@
# П60 · 2023-02 · Аутентификация и сессии — три независимых self-review
## Рамка партии
- Slug: `editorial-2023-02-practice-sessions-auth`, `editorial-2023-02-mechanism-sessions-auth`, `editorial-2023-02-field-sessions-auth`.
- Голос: М6, февраль 2023. Системный практик называет владельца состояния, цену ошибки, условие отказа и отдельный способ проверки; без выдуманных инцидентов, метрик и опыта эксплуатации.
- Общая модель: browser cookie переносит непрозрачный ID; server record и lineage pointer решают, какой ID current. Rotation переводит predecessor в `rotated`; logout-current переводит current record в `revoked` и возвращает clear cookie. Другой scope (`logout-lineage`, `logout-all`) намеренно не подменяется этим правилом.
- Граница: sidecar не делает HTTP, browser storage/network trace, browser cookie-jar, криптографию, random ID, clock, базу, конкурентный доступ, authz, CSRF или production проверку. Все ID, время и cookie policy заданы в памяти; `fixture-s-*` не являются образцом production secret.
- Созданы ровно пять файлов этой партии: этот review, `web/scripts/upgrade-2023-02.mjs` и три SVG с префиксом `sessions-auth-2023-`. Registry, README, `articles.json`, очередь, Git, существующие материалы и чужие untracked-файлы не менялись.
## Проход 1 — факты и модель
| Статья | Главный тезис | Первичные или официальные источники | Ограничение модели | Fixture |
| --- | --- | --- | --- | --- |
| `editorial-2023-02-practice-sessions-auth` | Cookie — носитель ID, а server record — источник валидности; rotation и logout меняют оба слоя по одному контракту. | IETF RFC 6265 (04.2011); IETF draft-ietf-httpbis-rfc6265bis-11 (07.11.2022, work in progress); NIST SP 800-63B (06.2017, updates through 02.03.2020). | Нет браузера, сети, таймера, crypto, secret store и гонок. | да |
| `editorial-2023-02-mechanism-sessions-auth` | Secure, HttpOnly, SameSite, Path и `__Host-` задают узкий scope доставки; server status/current остаются отдельной проверкой. | Те же три датированных первичных/официальных документа. | Flags не доказывают authz, CSRF-защиту, реальный TTL или browser compatibility. | да |
| `editorial-2023-02-field-sessions-auth` | Для stale ID надо различать unknown, rotated и revoked, а logout scope назвать до изменения endpoint. | Те же три датированных первичных/официальных документа. | Нет incident/browser trace, production HTTP response или данных о конкретном сервисе. | да |
- Фактологические оговорки сверены с официальными страницами: RFC 6265 — Standards Track от апреля 2011; draft-11 опубликован 7 ноября 2022 и везде назван work in progress, а не финальным RFC; PDF NIST SP 800-63B датирован июнем 2017 с обновлениями до 2 марта 2020. Все источники существовали не позднее 2023-02.
- `createTeachingSessionState()` создаёт один active record, а `rotateTeachingSession()` принимает только current ID, переводит predecessor в `rotated`, создаёт successor и двигает pointer lineage. Fixture проверяет 15 invariants, включая отсутствие `fixture-s-3` после stale rotation и сохранение `fixture-s-2` active после stale logout.
- `logoutTeachingSession()` в выбранной политике принимает только current active ID, revoke-ит server record, удаляет pointer и создаёт clear cookie той же формы с `Expires` в прошлом. Stale logout старого ID не заявлен как универсальное правило: статьи явно отделяют `logout-current` от `logout-lineage` и `logout-all`.
- Не заявлены browser trace, запуск endpoint, настоящая конкуренция, эффект в production, измерение, инцидент или безопасность конкретной системы. Код и текст прямо ограничивают in-memory fixture.
Вердикт: пройти. Источники, статусы документов, переходы модели и границы утверждений совпадают.
## Проход 2 — язык, полнота и объём
| Статья | Знаки основного текста по `audit:draft` | Проблема и цена в первых 2 абзацах | Артефакты | Голос и анахронизмы |
| --- | ---: | --- | --- | --- |
| `editorial-2023-02-practice-sessions-auth` | 8 903 | да | таблица, JS fixture, lifecycle SVG, ordered route, ограничения, 3 источника | М6: контракт state/cookie, без метрик и выдуманного опыта |
| `editorial-2023-02-mechanism-sessions-auth` | 8 547 | да | таблица слоёв, JS example, cookie-contract SVG, ordered route, ограничения, 3 источника | М6: условия и границы flags, draft назван draft |
| `editorial-2023-02-field-sessions-auth` | 8 158 | да | диагностическая таблица, JS fixture, stale-events SVG, ordered route, ограничения, 3 источника | М6: не выдана гипотеза о вкладках за trace |
- Все три текста находятся в требуемом узком диапазоне 8–10 тыс. знаков основного текста и в общем стандарте 5–15 тыс.; источники не учитываются в объёме.
- В каждой статье есть упорядоченный маршрут «симптом → причина → проверка → действие», а также отдельный шаг отката, который не оживляет stale ID.
- Каждый обязательный артефакт присутствует: доступная таблица, воспроизводимый фрагмент/fixture, содержательная figure с `alt` и caption, ограничения модели и минимум две ссылки на первичные/официальные источники.
- Удалены общие оценки и шаблонные обороты. Термины `current`, `lineage`, `stale`, `rotation` привязаны к полям и переходам, а `__Host-`, Secure, HttpOnly, SameSite и Path объяснены через конкретную область действия и то, что они не решают.
Вердикт: пройти. Тон соответствует системному практику 2022–2024: короткая прагматичная техническая речь, проверяемый следующий шаг и честные ограничения.
## Проход 3 — SVG, безопасность и выпуск
| Asset | Назначение | `alt` и caption | XML и safety scan | Sharp 375 px |
| --- | --- | --- | --- | --- |
| `sessions-auth-2023-lifecycle.svg` | active → rotated → successor → revoked lifecycle | да | PASS | PASS, 375×238 |
| `sessions-auth-2023-cookie-contract.svg` | browser delivery против server validation | да | PASS | PASS, 375×238 |
| `sessions-auth-2023-stale-events.svg` | stale rotation/logout не меняют successor | да | PASS | PASS, 375×238; заголовок сокращён после первого просмотра, обрезания нет |
- `node --check web/scripts/upgrade-2023-02.mjs` — PASS.
- `node web/scripts/upgrade-2023-02.mjs --verify-fixture` — PASS, 15/15 assertions.
- `cd web && npm run audit:draft -- scripts/upgrade-2023-02.mjs` — PASS для всех трёх slug. `npm` вывел три предупреждения о существующих unsupported user config, но аудит завершился успешно.
- Import-safe export — PASS: ровно 3 revisions, у каждой отсутствуют поля `date` и `author`.
- `xmllint --noout` — PASS для всех SVG. Safety scan не нашёл `script`, `foreignObject`, event attributes, `href`, `javascript:`, `data:` или `<image>`.
- Sharp отрендерил все SVG на ширине 375 px; выполнен ручной просмотр PNG. В SVG нет внешних URL, интерактивного поведения, пользовательского ввода или raster content.
Вердикт: пройти. Проверки подтверждают только sidecar-пакет и статические visual assets; публикация, registry update, production build, commit и push не выполнялись.
## Интеграционная приёмка
- Основной редактор заменил учебное удаление cookie с `Max-Age=0` на `Expires` в прошлом: это соответствует примеру RFC 6265 для удаления и не выдаёт спорную производительскую форму за универсальный шаблон. Fixture после изменения — PASS 15/15.
- Ревизии добавлены в `web/data/editorial-revisions.mjs` поверх трёх исходных slug. `web/data/articles.json`, даты и авторы не изменялись; в registry 178 уникальных ревизий без дубликатов.
- Строгий аудит `npm run audit:articles -- editorial-2023-02-practice-sessions-auth editorial-2023-02-mechanism-sessions-auth editorial-2023-02-field-sessions-auth` — PASS: у каждой статьи 1 figure, 1 table и 1 code example.
- Production-сборка `cd web && npm run build` — PASS: 374 статические страницы. README обновлён с 184/358 до 187/358 принятых материалов; осталось 171.
## Итог
Статус: готово к отдельному коммиту.
Изменения после self-review: уменьшен основной текст до 8–10 тыс. знаков; после Sharp-проверки сокращены title/subtitle третьей SVG, чтобы они не обрезались на 375 px.