Files
progcode/editorial/reviews/2027-05-draft.md
T
huncode 733151116e
Build and deploy / deploy (push) Successful in 15s
revise May 2027 HTTP TLS plan articles
2026-07-31 20:31:36 +03:00

98 lines
12 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.
# P111 — May 2027: «Полевой справочник HTTP и TLS»
## Статус и временная граница
Редакторская дата: **31 июля 2026**. Май 2027 ещё не наступил. Три материала — строго **plan/scenario на 2027-05** с source cutoff **2026-07-31**. Они не описывают controlled handshake, HTTP trace, cURL/OpenSSL run, endpoint, client configuration, certificate, error или production result. Названия cURL/OpenSSL присутствуют только как будущие средства со state limit `command: not-run`; endpoint, client configuration и trace остаются `not-collected`.
Модуль принимает только named fixed synthetic cases и fixed in-memory literals. Factory выполняет JSON clone и recursive deep freeze; evaluator fail-closed сравнивает input с known literal. Положительный output ровно один: `synthetic-plan-hand-off` с `productionEffect: not-attempted`. Код не читает сеть, socket, browser, files, environment, clock, secrets, telemetry, external tools или production и не пытается получить HTTP/TLS-результат.
## Источники и boundary
1. [RFC 9110 — HTTP Semantics](https://www.rfc-editor.org/rfc/rfc9110), June 2022, DOI `10.17487/RFC9110`. Первичный pinned источник HTTP semantics. Он не подтверждает конкретное сообщение, header, endpoint, response или server state.
2. [RFC 9112 — HTTP/1.1](https://www.rfc-editor.org/rfc/rfc9112), June 2022, DOI `10.17487/RFC9112`. Первичный pinned источник HTTP/1.1 framing. Он не доказывает bytes, ошибку или transport поведение неизвестного соединения.
3. [RFC 9114 — HTTP/3](https://www.rfc-editor.org/rfc/rfc9114), June 2022, DOI `10.17487/RFC9114`. Первичный pinned источник HTTP/3/QUIC mapping. Он не утверждает доступность HTTP/3 в конкретном клиенте или service.
4. [RFC 8446 — TLS 1.3](https://www.rfc-editor.org/rfc/rfc8446), August 2018, DOI `10.17487/RFC8446`. Первичный pinned источник TLS 1.3 handshake vocabulary. Он не заменяет certificate chain, policy, negotiated parameters или trace.
Все источники датированы не позже cutoff. В P111 не заявляется current cURL/OpenSSL behavior: exact pinned release source для такой версии/build/option semantics не верифицирован, а command output не изобретался.
## Review pass 1 — фокус, проблема и форма
- **Practice** начинает с стоимости смешения HTTP semantics, framing, TLS и policy, затем строит versioned question map. Он не использует default «HTTPS» и передаёт только named protocol/version question.
- **Mechanism** начинает с цены неверного inference между уровнями. Угол — границы между semantic, framing, TLS negotiation и client-policy error classes без диагностики существующего error.
- **Field** начинает с стоимости выданного за отчёт вопроса. Угол — synthetic evidence hand-off с provenance и state limits, а не сетевой report.
- Во всех первых двух абзацах есть concrete issue/cost, дата, cutoff, запрет на реальные network facts и единственный allowed positive outcome. Тон M10: короткая прикладная русская техническая проза без generic protocol tips.
- В каждом revision есть механизм, accessible HTML table, own SVG с русскими alt/caption, safe runnable literal, ordered action sequence, limits и next step. Финальные body lengths: practice — `10 000`, mechanism — `10 216`, field — `10 058` знаков.
## Review pass 2 — literal safety и доказательная граница
- `undated-plan-or-cutoff-v1` получает `stop-undated-plan-or-cutoff`; редакционная дата и cutoff не подставляются по умолчанию.
- `unnamed-protocol-or-version-question-v1` получает `stop-unnamed-protocol-or-version-question`; protocol/version question не угадывается.
- `evidence-stronger-than-input-v1` получает `stop-evidence-stronger-than-input`; `claimed` result, header finding, certificate conclusion или иной stronger output не допускается из `not-collected/input-bounded` input.
- `hidden-command-endpoint-or-config-v1` получает `stop-hidden-command-endpoint-or-config`; команда, endpoint, client configuration и trace могут быть только `not-run/not-collected`.
- `disallowed-positive-network-conclusion-v1` получает `stop-disallowed-positive-network-conclusion`; handshake success, response success, remediation и production result запрещены.
- JSON clone + recursive deep freeze закрепляют nested `protocolQuestion` и `evidence`; unknown object получает `stop-unknown-fixed-input`. Runnable examples не импортируют network libraries и не вызывают cURL/OpenSSL.
## Review pass 3 — SVG, мобильный осмотр и фактические проверки
- Все SVG имеют русские `title` и `desc`, article alt/caption, data-bearing content. В них нет внешних ссылок, `script`, `foreignObject`, `javascript:`, `data:image` или event handlers.
- Sharp-рендеры в ширине 375px осмотрены вручную: handshake/header map сохраняет четыре границы и зелёный hand-off; matrix сохраняет четыре колонки и красные inference limits; evidence loop сохраняет три gates, stop и hand-off. Обрезания не обнаружены.
- Строгая попарная проверка исключает source section, но извлекает и `<p>`, и `<pre>` — runnable code участвует в scan. Результат для всех пар: `exactParagraphs160: 0`, `common12WordFragments: 0`.
Фактически выполненные команды из `web/`:
```sh
node --check scripts/upgrade-2027-05.mjs
node scripts/upgrade-2027-05.mjs --verify-fixture
npm run audit:draft -- scripts/upgrade-2027-05.mjs
node --input-type=module -e "import { createFixedHttpTlsCase, assessFixedHttpTlsPlan } from './scripts/upgrade-2027-05.mjs'; for (const id of ['planned-http-tls-question-v1','undated-plan-or-cutoff-v1','unnamed-protocol-or-version-question-v1','evidence-stronger-than-input-v1','hidden-command-endpoint-or-config-v1','disallowed-positive-network-conclusion-v1']) console.log(id, assessFixedHttpTlsPlan(createFixedHttpTlsCase(id)).status);"
xmllint --noout public/assets/editorial/2027/http-tls-guide-2027-handshake-header-map.svg public/assets/editorial/2027/http-tls-guide-2027-symptom-boundary-matrix.svg public/assets/editorial/2027/http-tls-guide-2027-evidence-handoff-loop.svg
rg -n -i "<(script|foreignObject)\\b|javascript:|data:image|(?:^|[[:space:]])on[a-z]+=" public/assets/editorial/2027/http-tls-guide-2027-handshake-header-map.svg public/assets/editorial/2027/http-tls-guide-2027-symptom-boundary-matrix.svg public/assets/editorial/2027/http-tls-guide-2027-evidence-handoff-loop.svg
node --input-type=module -e "import sharp from 'sharp'; for (const n of ['http-tls-guide-2027-handshake-header-map','http-tls-guide-2027-symptom-boundary-matrix','http-tls-guide-2027-evidence-handoff-loop']) { const out='/private/tmp/'+n+'-375.png'; const info=await sharp('public/assets/editorial/2027/'+n+'.svg').resize({width:375}).png().toFile(out); console.log(out, info.width+'x'+info.height); }"
```
Строгий pairwise scan (sources исключены, code включён) выполнен этим кодом:
```js
const source = /&lt;h2&gt;Проверяемые источники[\s\S]*$|<h2>Проверяемые источники<\/h2>[\s\S]*$/;
const clean = (html) => html.replace(source, '');
const plain = (html) => clean(html).replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
const paragraphs = (html) => clean(html).match(/<(?:p|pre)\b[^>]*>[\s\S]*?<\/(?:p|pre)>/g)?.map(plain).filter((x) => x.length >= 160) ?? [];
const grams = (text) => { const words = text.toLowerCase().replace(/[^a-zа-яё0-9]+/giu, ' ').trim().split(/\s+/); const out = new Set(); for (let i = 0; i <= words.length - 12; i++) out.add(words.slice(i, i + 12).join(' ')); return out; };
// Для каждой пары: exactParagraphs160 = пересечение paragraphs;
// common12WordFragments = пересечение grams(plain(contentHtml)).
```
Фактические результаты: syntax — pass; fixture — `9/9` (`6/6` literals + `3/3` article checks); audit — pass для трёх exact slug с lengths `10 000 / 10 216 / 10 058`; public exports дали один `synthetic-plan-hand-off` и пять ожидаемых stop-status; `xmllint` — pass; SVG safety scan — empty/pass; Sharp — три файла `375x225`; visual inspection — pass; strict pairwise duplicate scan — нули по обеим метрикам во всех трёх парах.
## Disposition
Изменены только пять файлов P111:
- `web/scripts/upgrade-2027-05.mjs`
- `editorial/reviews/2027-05-draft.md`
- `web/public/assets/editorial/2027/http-tls-guide-2027-handshake-header-map.svg`
- `web/public/assets/editorial/2027/http-tls-guide-2027-symptom-boundary-matrix.svg`
- `web/public/assets/editorial/2027/http-tls-guide-2027-evidence-handoff-loop.svg`
Registry, README, `articles.json`, app, queue, P102–P110 и Git-state не менялись. P111 заканчивается только synthetic plan hand-off; `productionEffect: not-attempted` не является наблюдением о сети или production.
## Независимая приёмка — 2026-07-31
### Проход 1 — источники, фактическая граница и голос
- RFC 9110, 9112, 9114 и 8446 проверены как первичные датированные спецификации. Они поддерживают только vocabulary для HTTP semantics/framing, HTTP/3 и TLS 1.3; текст не делает из них вывод о конкретном handshake, certificate, response, endpoint или client behavior.
- Три статьи не превращаются в общий справочник: practice строит карту вопроса, mechanism запрещает межуровневый inference, field описывает provenance hand-off. У каждого текста собственная цена ошибки, таблица, пример и следующий шаг.
- Указаны planDate 2027-05 и cutoff 2026-07-31; слова о cURL/OpenSSL удержаны на уровне будущего `not-run`, без неподтверждённого version/option claim.
### Проход 2 — исполнимый контракт и автоматический аудит
- `node --check`, fixture `9/9`, public literal check и `npm run audit:draft -- scripts/upgrade-2027-05.mjs` прошли. Длины body: 10 000, 10 216 и 10 058 знаков.
- Единственная accepted ветвь — `synthetic-plan-hand-off`; пять контрпримеров останавливаются fail-closed. Deep freeze охватывает nested protocol question и evidence, а accepted output оставляет `productionEffect: not-attempted`.
- `xmllint` проходит без output; safety scan не обнаружил active content в трёх SVG.
### Проход 3 — визуал, уникальность и выпуск
- SVG отрендерены и просмотрены в ширине 375 px: карта удерживает четыре диагностические границы, matrix — все колонки и пределы inference, loop — три gate, stop и hand-off.
- Строгий cross-package scan P102–P111 исключает sources, но включает code. Для 30 статей результат `collisions: []`.
- В реестр добавлены ровно три майские revisions; пользовательские app/data files не включены.