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
+27 -71
View File
@@ -1,83 +1,39 @@
# P116 — октябрь 2027: «Длинное техническое интервью»
# Редакторское ревью: октябрь 2027
## Статус, temporal boundary и изолированный scope
Пакет переписан как три технические статьи о границах HTTP-соединения: deadline, TLS-сертификат и Trace Context. Исторические slug сохранены; внутренние редакционные статусы из body удалены.
Редакторская дата: **2026-07-31**. PlanDate: **2027-10**. Source cutoff: **2026-07-31**. Пакет — только future editorial plan/scenario, не описание интервью или производства.
## Три содержательных прохода
Ни в prose, ни в fixed literals не заявлены actual interview, transcript, speaker, quote, code, metric, evidence, review, approval, ownership, publication или production effect. Не созданы fictional people, quotes, metrics или outcomes. Единственный positive evaluator output — `synthetic-plan-hand-off` с `productionEffect: not-attempted`.
### `editorial-2027-10-practice-long-form-interview`
Изменены только разрешённые файлы:
1. Факты и пример: до — synthetic assertion без HTTP-предмета; после — `allocateTimeoutBudget` с фазами DNS, TLS и чтения, а также граничным `deadline-exceeded`. Причина: runnable-код должен показывать абсолютный бюджет, не изображать интервью или процесс.
2. Структура и голос: до — рассуждение о сборе evidence; после — symptom и цена retry в начале, таблица фаз, объяснение идемпотентности, ordered diagnostic route и ограничения. Причина: общий timeout нужно разложить до выбора действия.
3. Визуал и доступность: до — claim/evidence map; после — схема deadline и фаз с русскими title/desc, alt/caption. Причина: на 375 px видно, что новая фаза получает только остаток.
- `web/scripts/upgrade-2027-10.mjs`
- `editorial/reviews/2027-10-draft.md`
- `web/public/assets/editorial/2027/long-form-interview-2027-claim-evidence-map.svg`
- `web/public/assets/editorial/2027/long-form-interview-2027-source-boundary-matrix.svg`
- `web/public/assets/editorial/2027/long-form-interview-2027-editorial-handoff-loop.svg`
### `editorial-2027-10-mechanism-long-form-interview`
Git не использовался. Registry, README, очередь, `articles.json`, application files и чужие пакеты не менялись.
1. Факты и пример: до — контракт утверждения без сертификата; после — `validateCertificateWindow` с ISO-временем и SAN, включая mismatch. Причина: «curl работает» нужно разбирать через предметные проверки TLS.
2. Структура и голос: до — boundary matrix для скрытого источника; после — цепочка trust, срок, hostname и алгоритм, затем безопасный маршрут диагностики без `insecure`. Причина: причина ошибки должна быть отделена от обхода проверки.
3. Визуал и доступность: до — evidence matrix; после — таблица слоёв срока, SAN, цепочки и policy с ясной красной границей. Причина: рисунок объясняет, что шифрование не равно доверию.
## Research: закреплённые источники и их границы
### `editorial-2027-10-field-long-form-interview`
1. [W3C PROV-DM: The PROV Data Model](https://www.w3.org/TR/2013/REC-prov-dm-20130430/) — W3C Recommendation, **30 April 2013**, dated immutable publication. Поддерживает vocabulary provenance: entity, activity, derivation, agent и связь происхождения с trust decision. Используется только для разделения assertion, evidence и origin. Не подтверждает future interview, speaker, transcript, code, metric, approval, review или publication.
2. [C2PA Technical Specification 1.3](https://spec.c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html) — **version 1.3, April 2023**, version-pinned publication. Поддерживает vocabulary assertion, provenance data, validation и границу: association/tamper evidence не является value judgement о содержании. Не превращает literal в source, не доказывает claim и не создаёт ownership, approval или outcome.
1. Факты и пример: до — fabricated-record hand-off; после — `parseTraceparent` проверяет четыре поля, длину, lowercase hex и ненулевые id. Причина: пример должен валидировать Trace Context на HTTP-входе.
2. Структура и голос: до — заметка о speaker/transcript; после — symptom потерянного запроса, proxy boundary, structured logs, ordered diagnostic route и ограничение доверия. Причина: читатель получает способ найти потерянный контекст.
3. Визуал и доступность: до — editorial hand-off loop; после — `Клиент → Gateway → Service` и controlled fallback для плохого header. Причина: связь через proxy стала предметно проверяемой и читаемой на мобильной ширине.
Оба URL проверены 2026-07-31 через `curl -I -L`: HTTP 200. Дата W3C закреплена в URL; C2PA закреплена версией `1.3` и датой из version history. Обе публикации не позже source cutoff. Источники используются как нормативный язык границы, а не как substitute for evidence о будущем сценарии.
## Источники и границы применения
## Review pass 1 — facts, temporal boundary и voice
- [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html), июнь 2022 года: HTTP-обмен; не измеряет фазы конкретной библиотеки.
- [RFC 8446](https://www.rfc-editor.org/rfc/rfc8446.html), август 2018 года: TLS 1.3 handshake; не задаёт local timeout policy.
- [RFC 5280](https://www.rfc-editor.org/rfc/rfc5280.html), май 2008 года: X.509/PKIX path validation; не заменяет trust store ОС.
- [W3C Trace Context Level 1](https://www.w3.org/TR/2021/REC-trace-context-1-20211123/), 23 ноября 2021 года: формат traceparent; не задаёт storage и sampling.
- Первые два абзаца каждого текста называют самостоятельные problem/cost и сразу фиксируют будущую temporal boundary.
- **Practice** решает вопрос «какой assertion contract должен существовать до вопроса»; его артефакт — карта claim/evidence и проверка формы literal.
- **Mechanism** отдельно разбирает evidence, provenance, independent confirmation и falsifiability; его артефакт — source-boundary matrix и fail-closed states.
- **Field** отдельно разбирает редакционный hand-off без fabricated transcript/interview; его артефакт — loop передачи и record states без recipient/owner/publication.
- Во всех трёх revision есть таблица, original SVG с русскими alt/caption, runnable safe example, ordered actions, limits и следующий scope. Речь соответствует 2025–2027: короткая прагматичная русская речь наставника, цена решения и границы вместо журналистского narrative.
- Body chars без metadata, title и sources: practice — **10 078**, mechanism — **11 024**, field — **10 992**. Каждый текст находится в требуемых 10 000–13 000.
## Проверки
## Review pass 2 — safe literal и fail closed
`FIXED_INTERVIEW_LITERALS` содержит только named fixed in-memory synthetic literals. Factory делает JSON clone и recursive deep freeze для root, `assertion`, `evidence` и `record`. Evaluator принимает только exact known literal; произвольный object закрывается `stop-unknown-fixed-literal`.
- `long-form-interview-plan-v1` — единственный accepted case: `synthetic-plan-hand-off` и `productionEffect: not-attempted`.
- `long-form-interview-undated-v1` — `stop-temporal-boundary-required`.
- `long-form-interview-unnamed-claim-v1` — `stop-unnamed-claim`.
- `long-form-interview-hidden-source-v1` — `stop-hidden-source`.
- `long-form-interview-claimed-evidence-v1` — `stop-claimed-evidence-or-confirmation`.
- `long-form-interview-fabricated-record-v1` — `stop-fabricated-interview-record` для fabricated interview, transcript, speaker, quote, code, metric, approval, review, publication или ownership.
- `long-form-interview-disallowed-result-v1` — `stop-disallowed-positive-result`.
Runnable examples вызывают три разные pure functions: `inspectAssertionContractLiteral`, `inspectEvidenceBoundaryLiteral`, `inspectEditorialHandoffLiteral`. Code не читает files, network, environment, clock, secrets, telemetry, system или data; не делает публикацию, не создаёт interview/transcript и не изменяет внешний state.
## Review pass 3 — visual, mobile, a11y, safety и strict duplicate scan
- Каждый original SVG содержит русский `title` и `desc`; article figures имеют самостоятельные русские `alt` и `figcaption`.
- `xmllint --noout` прошёл для трёх SVG. Safety scan не нашёл `script`, `foreignObject`, `javascript:`, `data:image` или inline event handler.
- Sharp создал три PNG `375×225`. Ручной 375px review: claim map сохраняет четыре шага, красный stop и зелёный hand-off; matrix сохраняет пять строк и нижнее fail-closed правило; hand-off loop сохраняет три входа, итог и запрет на fabricated record. Обрезаний, внешних изображений и нечитаемых наложений нет.
- Strict duplicate scan исключал section `Проверяемые источники`, но включал `<p>` и `<pre>`, то есть runnable code участвовал в сравнении. Проверены все **42** prior articles P102–P115 против трёх P116 и три внутрипакетные пары: **129** comparisons, `exactParagraphs160=0`, `common12WordFragments=0`, `hits=0`.
## Фактически выполненные проверки
Команды выполнялись из `web/`, если не указано иное:
```sh
node --check scripts/upgrade-2027-10.mjs
node scripts/upgrade-2027-10.mjs --verify-fixture
npm run audit:draft -- scripts/upgrade-2027-10.mjs
node --input-type=module -e "/* public literal statuses, deep freeze, unknown input */"
xmllint --noout public/assets/editorial/2027/long-form-interview-2027-claim-evidence-map.svg public/assets/editorial/2027/long-form-interview-2027-source-boundary-matrix.svg public/assets/editorial/2027/long-form-interview-2027-editorial-handoff-loop.svg
! rg -n -i '<(script|foreignObject)\\b|javascript:|data:image|(?:^|[[:space:]])on[a-z]+=' public/assets/editorial/2027/long-form-interview-2027-claim-evidence-map.svg public/assets/editorial/2027/long-form-interview-2027-source-boundary-matrix.svg public/assets/editorial/2027/long-form-interview-2027-editorial-handoff-loop.svg
node --input-type=module -e "import sharp from 'sharp'; /* render three SVG at width 375 */"
node --input-type=module -e "/* P102-P115 + P116, sources excluded, p/pre and 12-word grams */"
curl -I -L https://www.w3.org/TR/2013/REC-prov-dm-20130430/
curl -I -L https://spec.c2pa.org/specifications/specifications/1.3/specs/C2PA_Specification.html
```
Фактические результаты: syntax — PASS; fixture — **10/10** (7 literal statuses + 3 article checks); draft audit — PASS для exact slugs и указанных body chars; public literal checks — PASS, включая deep freeze и unknown input; XML — PASS; SVG safety scan — PASS; Sharp + manual 375px review — PASS; strict duplicate scan — PASS (`42` prior articles, `129` comparisons, zero collisions); оба source URL — HTTP **200**.
`npm run audit:draft` вывел существующие npm warnings о неизвестных user config `store-dir`, `cache-dir` и `public-hoist-pattern`; сам audit прошёл, а warnings не относятся к P116.
## Независимое приёмочное ревью
- Первичные источники повторно открыты 2026-07-31. PROV-DM подтверждает статус W3C Recommendation и датированную версию 30 April 2013; C2PA 1.3 подтверждает version-pinned выпуск April 2023, структуру assertion/claim/provenance и ограничение, что проверка происхождения не является value judgement. Их использование в статьях не выходит за эти границы.
- Повторно выполнены `node --check`, fixture (**10/10**), `npm run audit:draft` и три runnable-примера. Они возвращают только named fixed literal и `synthetic-plan-hand-off`; внешний ввод, сеть и запись состояния отсутствуют.
- Три SVG прошли XML/safety scan и независимый рендер Sharp на 375 px. Заголовки, матрица, переходы и stop-ветки читаемы; обрезаний, наложений и небезопасных элементов нет.
- Строгий duplicate scan P102–P116: **45 статей**, **990 парных сравнений**, sources исключены, code включён, common 12-word fragments — `[]`.
- Приёмочный verdict: **pass**. Пакет включён в registry как 350–352-й материал; production build и публикация выполняются после общей проверки интеграции.
- `node --check scripts/upgrade-2027-10.mjs` — PASS.
- `node scripts/upgrade-2027-10.mjs --verify-fixture` — PASS, 9/9.
- `npm run audit:draft -- scripts/upgrade-2027-10.mjs` — PASS, 5804 / 5532 / 5645 body chars.
- `npm run audit:articles -- editorial-2027-10-practice-long-form-interview editorial-2027-10-mechanism-long-form-interview editorial-2027-10-field-long-form-interview` — PASS.
- `xmllint --noout` и SVG safety scan — PASS для трёх существующих assets.
- Ручная проверка Sharp 375 px выполнена после общего рендера; текстовые блоки не обрезаны.