Files
progcode/editorial/reviews/2023-02-draft.md
T
huncode 6e664b3ca6
Build and deploy / deploy (push) Successful in 17s
revise February 2023 session articles
2026-07-31 14:34:09 +03:00

70 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# П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.