rewrite 2026-09 and 2027 articles for reader-facing quality
Build and deploy / deploy (push) Successful in 18s

This commit is contained in:
2026-07-31 22:26:56 +03:00
parent 3bfc3f21c4
commit 440c8721dc
69 changed files with 4424 additions and 3533 deletions
+30 -76
View File
@@ -1,88 +1,42 @@
# P118 — декабрь 2027: «Манифест инженерного письма»
# Редакторское ревью: декабрь 2027
## Статус и временная граница
Пакет переписан как три самостоятельных технических материала о web security, web performance и эксплуатационной документации. Исторические slug сохранены, но никакая статья не рассказывает о внутреннем создании текста или о развитии человека.
Редакторская дата: **2026-07-31**. Декабрь 2027 ещё не наступил, поэтому P118 — только **plan/scenario** с `planDate: 2027-12` и source cutoff **2026-07-31**. Пакет не сообщает о будущих статьях, архиве, редакторе, review, feedback, corrections, публикации, author development, команде, метриках или production effect.
## Три содержательных прохода
Модуль использует только named fixed in-memory literals. Доменный evaluator не читает filesystem, network, environment, clock, secrets, telemetry, system или data; CLI-вывод существует только для локальной проверки экспортированного JSON. Единственный accepted positive output — `synthetic-plan-hand-off`; на positive и stop-ветках `productionEffect` всегда `not-attempted`.
### `editorial-2027-12-practice-author-manifesto`
## Проход 1 — evidence / temporal / voice
1. Факты и пример: до — карточка решения без web-объекта; после — `buildSecurityHeaders` с CSP nonce, `object-src none`, `base-uri self` и HSTS. Причина: runnable-пример должен показать реальную конфигурацию security headers и её границу.
2. Структура и голос: до — рассуждение о качестве текста; после — XSS/downgrade symptom, цена ошибки, карта ресурсов, таблица директив, порядок Report-Only → enforce и ограничения. Причина: reader должен понять, что именно защищает заголовок.
3. Визуал и доступность: до — граф редакционного решения; после — два слоя `CSP` и `HSTS` с веткой неизвестного ресурса. Причина: рисунок разделяет защиту ресурсов и схему соединения.
| Статья | Body chars без sources | Независимый угол | Временная граница | Источники: применение и boundary |
| --- | ---: | --- | --- | --- |
| `editorial-2027-12-practice-author-manifesto` | 10 874 | decision record до technical advice | 2026-07-31 / 2027-12 / cutoff 2026-07-31 | RFC 2119, March 1997, immutable URL; модальные границы совета, не доказательство статьи или решения. W3C PROV-DM, 30 April 2013, dated URL; происхождение claim, не история локального архива или результата. |
| `editorial-2027-12-mechanism-author-manifesto` | 11 177 | rubric: evidence levels, claims, falsifiability и три прохода | та же | RFC 8174, May 2017, immutable URL; точное чтение требований, не review или verdict. W3C PROV-DM, 30 April 2013; различение claim и provenance, не evidence P118. |
| `editorial-2027-12-field-author-manifesto` | 10 831 | corrective hand-off без invented feedback или author history | та же | RFC 2119 и RFC 8174; область действия нормативной формулировки, не owner, reviewer, publication, correction или author development. |
### `editorial-2027-12-mechanism-author-manifesto`
Проверяемые первичные/нормативные источники до cutoff:
1. Факты и пример: до — rubric без performance API; после — `classifyWebVitals` для LCP, INP и CLS с валидным и отрицательным входом. Причина: пример должен проверять предмет статьи, а не редакционный статус.
2. Структура и голос: до — три абстрактных прохода; после — три пользовательских вопроса, официальные пороги, p75 по сегменту, lab/field distinction и маршрут поиска причины. Причина: порог не должен подменять причинность.
3. Визуал и доступность: до — quality matrix; после — матрица LCP/INP/CLS с вопросом, порогом и диагностическим разрезом. Причина: мобильный читатель видит различия без длинного абзаца.
- [RFC 2119 — Key words for use in RFCs to Indicate Requirement Levels](https://www.rfc-editor.org/rfc/rfc2119.html), IETF RFC 2119, March 1997, immutable RFC publication. Использован для явного различения требования и рекомендации. Не подтверждает событие, review, публикацию, коррекцию или effect P118.
- [RFC 8174 — Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words](https://www.rfc-editor.org/rfc/rfc8174.html), IETF RFC 8174, May 2017, immutable RFC publication. Использован для границы сильной формулировки. Не создаёт будущий редакционный процесс или результат.
- [PROV-DM: The PROV Data Model](https://www.w3.org/TR/2013/REC-prov-dm-20130430/), W3C Recommendation, 30 April 2013, dated immutable Recommendation. Использован как vocabulary происхождения утверждений. Не доказывает provenance будущего архива, review, feedback или outcome.
### `editorial-2027-12-field-author-manifesto`
`curl -I` вернул HTTP 200 для всех трёх URL. Первые два абзаца каждой статьи называют конкретную проблему и цену ошибки. Каждая статья имеет собственные таблицу, SVG с русскими `alt`/подписью, безопасный runnable example, ordered process, ограничения и следующий шаг. Голос М10 держит прагматичную рамку «условие → риск → проверка → действие»; словарь local editorial standards и voice trajectory используется только как future contract vocabulary, не как свидетельство будущего прохода.
1. Факты и пример: до — revision hand-off без операции; после — `validateRunbookCard` с шестью полями, явным rollback и observable verification. Причина: техническая документация должна проверять вход и выход действия.
2. Структура и голос: до — текст о корректирующем процессе; после — симптом, scope, precondition, action, rollback, verification, таблица решений и порядок эксплуатации. Причина: статья стала инструкцией для reader-facing работы.
3. Визуал и доступность: до — петля revision; после — `Symptom → Precondition → Action → Verify` с отдельной веткой rollback. Причина: схема показывает, что команда не равна восстановлению без метрики.
Текущий evidence/temporal/voice review plan-files: **pass**. Это результат проверки формы в 2026-07-31, не заявление о будущем редакционном результате.
## Источники и границы применения
## Проход 2 — literal safety и fail closed
- [W3C Content Security Policy Level 3](https://www.w3.org/TR/CSP3/), Working Draft: директивы CSP, nonce и режимы отчёта; статус draft требует проверки совместимости.
- [RFC 6797](https://www.rfc-editor.org/rfc/rfc6797.html), ноябрь 2012 года: HSTS; не защищает первый HTTP-переход.
- [W3C Largest Contentful Paint](https://www.w3.org/TR/largest-contentful-paint/), Working Draft, страница проверена 31 июля 2026 года: объект измерения LCP; не описывает весь UX.
- [W3C Performance Timeline](https://www.w3.org/TR/2025/CRD-performance-timeline-20250521/), Candidate Recommendation Draft, 21 мая 2025 года: PerformanceObserver и entries.
- [Web Vitals](https://web.dev/articles/vitals), опубликовано 4 мая 2020 года, обновлено 31 октября 2024 года: пороги LCP/INP/CLS и p75 по сегментам.
- [NIST SP 800-61r2](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-61r2.pdf), revision 2, май 2012 года: общая структура incident handling; не задаёт локальные команды.
- [RFC 2119](https://www.rfc-editor.org/rfc/rfc2119.html), март 1997 года: уровни обязательности в техническом языке; не даёт разрешение выполнять операцию.
`author-manifesto-plan-v1` — единственный accepted fixed literal. Factory делает JSON-clone и recursive deep freeze. Evaluator принимает literal только при exact JSON equality с закрытым named набором; неизвестный object не нормализуется и не получает fallback.
## Проверки
| Fixture literal | Ожидаемый статус | Фактический статус |
| --- | --- | --- |
| `author-manifesto-plan-v1` | `synthetic-plan-hand-off` | pass |
| `author-manifesto-undated-v1` | `stop-temporal-boundary-required` | pass |
| `author-manifesto-unknown-source-v1` | `stop-unknown-source-set` | pass |
| `author-manifesto-unknown-question-v1` | `stop-unknown-question` | pass |
| `author-manifesto-hidden-review-v1` | `stop-hidden-review-input` | pass |
| `author-manifesto-declared-quality-v1` | `stop-declared-quality-pass-publication-correction-or-outcome` | pass |
| `author-manifesto-disallowed-output-v1` | `stop-disallowed-positive-result` | pass |
| ad-hoc unknown object | `stop-unknown-fixed-literal` | pass |
- Exact editor date, plan date и source cutoff обязательны; unknown source/date/question fail closed.
- `reviewInputs.evidence`, `temporal` и `voice` обязаны остаться `not-provided`; hidden review input останавливает путь.
- `quality`, `pass`, `publication`, `correction` и `outcome` обязаны остаться `not-declared`; объявленный future result останавливает путь.
- Fixture: **11/11** — 8 literal statuses и 3 article checks. `productionEffect: not-attempted` сохраняется в каждом output.
## Проход 3 — visual / mobile / a11y / safety и duplicate scan
- SVG имеют русские `<title>` и `<desc>`; в каждой статье есть отдельные русские `alt` и `figcaption`. Граф решения, matrix рубрики и loop hand-off объясняют разные механизмы, а не иллюстрируют выдуманную публикационную историю.
- `xmllint --noout` прошёл для всех трёх SVG. Safety scan для `<script>`, `<foreignObject>`, `javascript:`, `data:image` и inline event-handler attributes вернул пустой output: pass.
- Sharp отрендерил 3 PNG шириной **375 px**. Ручной просмотр фактических рендеров: граф решения сохраняет входы, positive и stop path; matrix сохраняет три читаемые строки проходов; hand-off loop сохраняет разрыв перед выдуманным review. Обрезаний и наложений не обнаружено.
- `npm run audit:draft -- scripts/upgrade-2027-12.mjs` прошёл для трёх exact slug и body lengths 10 874 / 11 177 / 10 831. npm вывел существующие предупреждения об unknown user config `store-dir`, `cache-dir`, `public-hoist-pattern`; audit завершился успешно.
- Strict duplicate scan исключал section `Проверяемые источники`, но включал `<p>` и `<pre>`, поэтому runnable code участвовал. P102–P115 взяты из `upgrade-2026-08.mjs` … `upgrade-2027-09.mjs`; P116–P117 — из существующих body в `articles.json` только для read-only comparison. Сканированы **48** prior articles; выполнено **147** comparisons: 144 P118-to-prior и 3 внутренних. Exact paragraphs длиной 160+ и common 12-word fragments: `hits: []`.
## Фактически выполненные команды
```sh
node --check web/scripts/upgrade-2027-12.mjs
node web/scripts/upgrade-2027-12.mjs --verify-fixture
cd web && npm run audit:draft -- scripts/upgrade-2027-12.mjs
xmllint --noout public/assets/editorial/2027/author-manifesto-2027-editorial-decision-graph.svg public/assets/editorial/2027/author-manifesto-2027-quality-rubric-matrix.svg public/assets/editorial/2027/author-manifesto-2027-revision-handoff-loop.svg
rg -n -i '<(script|foreignObject)\b|javascript:|data:image|(?:^|[[:space:]])on[a-z]+=' public/assets/editorial/2027/author-manifesto-2027-editorial-decision-graph.svg public/assets/editorial/2027/author-manifesto-2027-quality-rubric-matrix.svg public/assets/editorial/2027/author-manifesto-2027-revision-handoff-loop.svg
node --input-type=module -e 'import sharp from "./web/node_modules/sharp/lib/index.js"; /* SVG → 375 px PNG */'
curl -I https://www.rfc-editor.org/rfc/rfc2119.html
curl -I https://www.rfc-editor.org/rfc/rfc8174.html
curl -I https://www.w3.org/TR/2013/REC-prov-dm-20130430/
node --input-type=module -e '/* P102–P117 source-excluded, code-included duplicate scan */'
```
## Disposition
Изменены только разрешённые P118-файлы:
- `web/scripts/upgrade-2027-12.mjs`
- `editorial/reviews/2027-12-draft.md`
- `web/public/assets/editorial/2027/author-manifesto-2027-editorial-decision-graph.svg`
- `web/public/assets/editorial/2027/author-manifesto-2027-quality-rubric-matrix.svg`
- `web/public/assets/editorial/2027/author-manifesto-2027-revision-handoff-loop.svg`
Git не использовался. Registry, README, очередь, `articles.json`, app и чужие пакеты не изменялись. P118 остаётся плановым пакетом: будущая review, publication, correction или effect потребуют собственного authorised scope и не могут быть добавлены к этому сценарию задним числом.
## Независимое приёмочное ревью
- RFC 2119 и RFC 8174 повторно сверены как BCP-публикации March 1997 и May 2017; PROV-DM — как dated W3C Recommendation 30 April 2013. В финальной серии они используются только для точности модальных требований и терминологии происхождения, не как доказательство авторского развития или будущего выпуска.
- Повторно выполнены `node --check`, fixture (**11/11**), `npm run audit:draft` и все три runnable-примера. Каждый возвращает только named fixed literal с `synthetic-plan-hand-off`; никакой review, публикация, correction или outcome не создаются.
- Три SVG прошли XML/safety scan и независимый рендер Sharp на 375 px. Все диаграммы содержат читаемые заголовки, входы, hand-off и stop-ветки; обрезаний, наложений и внешнего содержимого нет.
- Независимый strict scan сначала обнаружил общий 12-словный фрагмент с P116 в первом абзаце practice-статьи. Формулировка переписана, затем скан P102–P118 повторён: **51 статья**, **1 275 парных сравнений**, sources исключены, code включён, common 12-word fragments — `[]`.
- Приёмочный verdict: **pass**. Пакет включён в registry как 356–358-й материал; production build и публикация выполняются после общей проверки интеграции.
- `node --check scripts/upgrade-2027-12.mjs` — PASS.
- `node scripts/upgrade-2027-12.mjs --verify-fixture` — PASS, 9/9.
- `npm run audit:draft -- scripts/upgrade-2027-12.mjs` — PASS, 5710 / 5476 / 5686 body chars.
- `npm run audit:articles -- editorial-2027-12-practice-author-manifesto editorial-2027-12-mechanism-author-manifesto editorial-2027-12-field-author-manifesto` — PASS.
- `xmllint --noout` и SVG safety scan — PASS для трёх существующих assets.
- Ручная проверка Sharp 375 px выполнена после общего рендера; title, подписи и стрелки не обрезаны.