This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
# Автономное тройное ревью П44 · октябрь 2021 · «Runtime D в сервисе»
|
||||
|
||||
Статус: **готово к независимой интеграции**. Это автономный пакет для трёх
|
||||
существующих slug. Он не подключён к registry: README, <code>articles.json</code>,
|
||||
общие audit-скрипты, очередь, правила и Git не менялись.
|
||||
|
||||
Созданы ровно пять файлов:
|
||||
|
||||
- <code>web/scripts/upgrade-2021-10.mjs</code>;
|
||||
- <code>web/public/assets/editorial/2021/d-runtime-request-path-2021.svg</code>;
|
||||
- <code>web/public/assets/editorial/2021/d-runtime-allocation-profile-2021.svg</code>;
|
||||
- <code>web/public/assets/editorial/2021/d-runtime-diagnosis-2021.svg</code>;
|
||||
- этот документ.
|
||||
|
||||
Revision-модуль экспортирует только overlay-поля
|
||||
<code>slug</code>, <code>title</code>, <code>categories</code>,
|
||||
<code>cover</code>, <code>excerpt</code>, <code>readingMinutes</code> и
|
||||
<code>contentHtml</code>. Отдельная проверка подтвердила отсутствие
|
||||
<code>date</code> и <code>author</code> во всех трёх revision. Базовый архив
|
||||
сохраняет их исходными.
|
||||
|
||||
## Проход 1. Тон, структура и объём — пройдено
|
||||
|
||||
| Revision | Проблема и цена в первых двух абзацах | M4 и практическая граница | Body |
|
||||
| --- | --- | --- | --- |
|
||||
| Practice | Endpoint объявляют «тормозящим из-за runtime D» без входа, result и границы; цена — случайная глобальная правка | Один request, явный result, budget и owner следующей проверки | **8 109** знаков |
|
||||
| Mechanism | Слово «быстро» скрывает decode, validation, compute, encode и внешние границы; цена — оптимизация ломает error route или объясняет FFI GC-ом | Trace одного handler, одинаковый result двух вариантов, структура до измерения | **8 544** знака |
|
||||
| Field | Heavy-ветка пересекает учебный budget и оставляет GC boundary; цена — назвать его паузой или обвинить dependency без вызова | Evidence → contract → units → отдельная граница → обратимый change | **9 633** знака |
|
||||
|
||||
- Во всех текстах есть ситуация и стоимость ошибки в начале, таблица,
|
||||
содержательный <code>figure</code> с <code>alt</code>/<code>figcaption</code>,
|
||||
исполнимый JS-фрагмент, нумерованный маршрут «симптом → причина → проверка
|
||||
→ действие», ограничения и отдельный раздел источников.
|
||||
- Голос М4 октября 2021: короткая техническая речь, одна граница на абзац,
|
||||
условные выводы вместо выдуманного опыта. Новое умение логично продолжает
|
||||
предыдущие материалы о данных и событиях: автор изолирует request path и
|
||||
его контракт, прежде чем рассуждать о runtime.
|
||||
- На первом автоматическом проходе draft gate указал, что practice и mechanism
|
||||
не называли проблему буквальным словом в первых 800 знаках. Формулировки
|
||||
исправлены. В том же self-review обнаружено расхождение: в prose и графике
|
||||
было написано 11 work units при фактических 9. Все упоминания исправлены,
|
||||
затем полный draft audit повторён с итогом PASS.
|
||||
|
||||
Вердикт: **пройдено**. Нет SLA, production-метрик, benchmark results,
|
||||
реального профиля или заявления, что runtime сам по себе делает endpoint
|
||||
быстрее.
|
||||
|
||||
## Проход 2. Техника, историческая точность и fixture — пройдено
|
||||
|
||||
Сквозная <code>runDRuntimeServiceFixture()</code> выполняется в одном
|
||||
Node-процессе. Один valid in-memory request проходит
|
||||
<code>decode → validation → compute → encode</code>; между compute и encode
|
||||
trace явно сохраняет FFI/I/O boundaries c
|
||||
<code>invocation: "not-performed"</code>. Invalid request проходит
|
||||
<code>decode → validation-error → encode-error</code> и не доходит до
|
||||
compute, FFI или I/O.
|
||||
|
||||
| Инвариант | Фактический результат fixture |
|
||||
| --- | --- |
|
||||
| Handler result одинаков | обе valid-ветки вернули status 200 и один body с <code>total:42</code> |
|
||||
| Allocation budget видим | heavy: 12 units при budget 6, вне budget; reuse: 3 units, внутри budget |
|
||||
| Работа handler не подменена оптимизацией | у valid-веток одинаковые 9 work units |
|
||||
| GC не выдан за замер | heavy пересекает порог 8 и получает <code>gc-boundary</code> с <code>not-a-runtime-pause</code> |
|
||||
| FFI/I/O boundary видимы | обе success-ветки содержат две boundaries, но ни одна не выполняет внешний вызов |
|
||||
| Error route не скрыт | invalid input возвращает status 400 и имеет <code>validation-error</code>/<code>encode-error</code> |
|
||||
|
||||
Финальный запуск подтвердил **12 из 12** истинных assertions. Fixture не
|
||||
запускает D compiler, D runtime, GC, HTTP, file, network, FFI, foreign code,
|
||||
profiler, benchmark или внешний процесс. Его units не называются bytes,
|
||||
CPU, latency, временем или паузой.
|
||||
|
||||
Исторические и технические claims ограничены первичными/официальными
|
||||
источниками:
|
||||
|
||||
- [D 2.097.2: Automatic Memory Management source snapshot](https://github.com/dlang/dlang.org/blob/d5798c666479e8c4c918221e10ebf997b1f5f89f/spec/garbage.dd) —
|
||||
неизменяемая терминология automatic memory management и ограничений
|
||||
collector; в статьях это не превращается в профиль request;
|
||||
- [D 2.097.2: @nogc function source snapshot](https://github.com/dlang/dlang.org/blob/d5798c666479e8c4c918221e10ebf997b1f5f89f/spec/function.dd) —
|
||||
историческая граница проверяемого D-кода; атрибут не объявлен
|
||||
доказательством свойств неизвестной внешней операции;
|
||||
- [D 2.097.2: ABI source snapshot](https://github.com/dlang/dlang.org/blob/d5798c666479e8c4c918221e10ebf997b1f5f89f/spec/abi.dd) —
|
||||
историческая граница D/C ABI целевой системы, не договор ownership или
|
||||
стоимость particular foreign call;
|
||||
- [D 2.097.2 release record](https://dlang.org/changelog/2.097.2.html) —
|
||||
официальный выпуск от 9 августа 2021 года, существовавший до всех
|
||||
октябрьских дат партии;
|
||||
- [DRuntime core/memory.d at the 2.097.2 snapshot](https://github.com/dlang/druntime/blob/f978df34a48613492240e8398227419b14002bef/src/core/memory.d) —
|
||||
immutable исходник для исторической проверки терминов.
|
||||
|
||||
Все пять ссылок получили HTTP 200 в link preflight. Первые три зафиксированы
|
||||
на commit <code>d5798c666479e8c4c918221e10ebf997b1f5f89f</code>, на который
|
||||
указывает тег D 2.097.2; снимок DRuntime отдельно зафиксирован на commit
|
||||
<code>f978df34a48613492240e8398227419b14002bef</code>. Ни release number, ни
|
||||
документация не используются как источник несуществующего benchmark,
|
||||
прошлой pause или поведения воображаемого сервиса.
|
||||
|
||||
Вердикт: **пройдено**. Технические результаты относятся ровно к
|
||||
детерминированной модели, а исторические формулировки не переносят текущую
|
||||
документацию на незафиксированный запуск 2021 года.
|
||||
|
||||
## Проход 3. SVG, ссылки и preflight — пройдено
|
||||
|
||||
- В каждом SVG есть <code>title</code>, <code>desc</code> и
|
||||
<code>role="img"</code>. Visuals поясняют разные вопросы: путь request,
|
||||
сравнение units и маршрут rollback-safe диагностики.
|
||||
- Первый mobile render выявил неясные боковые стрелки в request/diagnosis,
|
||||
переполнение длинных footer-подписей и пересечение колонок в allocation
|
||||
profile. Стрелки заменены последовательным маршрутом, подписи разбиты на
|
||||
строки, столбцы разведены; финальный 375 px render просмотрен повторно.
|
||||
- Static safety scan не нашёл <code>script</code>, <code>foreignObject</code>,
|
||||
внешних <code>href/src</code> или raster <code>data:image</code>. Все три
|
||||
файла проходят XML-проверку.
|
||||
|
||||
### Фактически выполненные команды
|
||||
|
||||
Проверки выполнены 31 июля 2026 года:
|
||||
|
||||
<pre><code>cd web && node --check scripts/upgrade-2021-10.mjs
|
||||
cd web && npm run audit:draft -- scripts/upgrade-2021-10.mjs
|
||||
cd web && node scripts/upgrade-2021-10.mjs --verify-fixture
|
||||
cd web && xmllint --noout \
|
||||
public/assets/editorial/2021/d-runtime-request-path-2021.svg \
|
||||
public/assets/editorial/2021/d-runtime-allocation-profile-2021.svg \
|
||||
public/assets/editorial/2021/d-runtime-diagnosis-2021.svg
|
||||
cd web && rg -n -i '<script|<foreignObject|(?:href|src)="https?://|data:image' \
|
||||
public/assets/editorial/2021/d-runtime-request-path-2021.svg \
|
||||
public/assets/editorial/2021/d-runtime-allocation-profile-2021.svg \
|
||||
public/assets/editorial/2021/d-runtime-diagnosis-2021.svg</code></pre>
|
||||
|
||||
| Проверка | Реальный результат |
|
||||
| --- | --- |
|
||||
| <code>node --check</code> | PASS, code 0 |
|
||||
| <code>audit:draft</code> | PASS: **8 109 / 8 544 / 9 633** знака; у всех трёх revision есть sections, table, figure, code, route, sources и локальный asset |
|
||||
| Fixture | PASS, 12 из 12 assertions истинны |
|
||||
| <code>xmllint --noout</code> | PASS, code 0 для всех трёх SVG |
|
||||
| SVG safety scan | PASS: совпадений нет; <code>rg</code> завершился code 1 именно потому, что опасные конструкции отсутствуют |
|
||||
| Link preflight | PASS: пять официальных/первичных ссылок вернули HTTP 200 |
|
||||
| Sharp 375 px | PASS: три SVG отрендерены в PNG шириной 375 px и просмотрены вручную после исправления overflow/стрелок/пересечения |
|
||||
| Overlay scope | PASS: у revision только разрешённые изменяемые поля; <code>date</code> и <code>author</code> отсутствуют |
|
||||
|
||||
<code>npm run audit:draft</code> завершилась с code 0. npm вывел
|
||||
существующие предупреждения о пользовательских <code>store-dir</code>,
|
||||
<code>cache-dir</code> и <code>public-hoist-pattern</code>; пакет их не
|
||||
меняет.
|
||||
|
||||
Намеренно не запускались strict registry audit, production build, browser,
|
||||
screen reader, D compiler/runtime, реальный profiler, HTTP, I/O, FFI, CI,
|
||||
deployment, Git add/commit/push или публикация. Эти действия вне автономной
|
||||
П44. Mascot PNG не добавлялись и не изменялись.
|
||||
|
||||
Выпусковой вердикт автономной партии:
|
||||
**READY FOR INDEPENDENT INTEGRATION**.
|
||||
|
||||
## Независимое редакторское ревью и интеграция
|
||||
|
||||
Статус: **принято и подключено в editorial overlay 31 июля 2026 года**.
|
||||
|
||||
### 1. Факты и техника
|
||||
|
||||
- Независимая проверка выявила один исторический риск: первые три source URL
|
||||
в исходной партии вели на текущую, изменяемую документацию D. Они заменены
|
||||
на точные исходники официального репозитория <code>dlang/dlang.org</code>
|
||||
в commit <code>d5798c666479e8c4c918221e10ebf997b1f5f89f</code>. Команда
|
||||
<code>git ls-remote</code> подтвердила, что на этот commit указывает тег
|
||||
<code>v2.097.2</code>. Это сохраняет доступное до октября 2021 состояние
|
||||
терминов automatic memory management, <code>@nogc</code> и ABI.
|
||||
- Отдельно подтверждено, что commit
|
||||
<code>f978df34a48613492240e8398227419b14002bef</code> — dereferenced тег
|
||||
<code>v2.097.2</code> репозитория DRuntime. Таким образом версия и оба
|
||||
снимка не подменяются текущими исходниками.
|
||||
- Повторный <code>node --check</code> прошёл. Draft audit подтвердил основной
|
||||
объём: 8 109, 8 544 и 9 633 знака. Fixture выдал 12 из 12 истинных
|
||||
assertions: оба valid-варианта вернули status 200 и один body; heavy имеет
|
||||
12 units при budget 6, reuse — 3; у обоих 9 work units; invalid input
|
||||
возвращает status 400 и не доходит до compute/FFI/I/O.
|
||||
- После подключения overlay строгий адресный audit прошёл для всех трёх slug:
|
||||
practice — 1 figure / 1 table / 1 code, mechanism — 1 / 1 / 1, field —
|
||||
1 / 2 / 1. В registry 127 revision, в том числе ровно три октябрьские;
|
||||
дубликатов slug нет. Overlay по-прежнему не содержит полей
|
||||
<code>date</code> или <code>author</code>.
|
||||
|
||||
### 2. Редактура и голос
|
||||
|
||||
- Прочитаны все три текста после source correction. Они начинают с конкретной
|
||||
ошибочной формулировки и стоимости, сохраняют различие между учебной
|
||||
моделью и фактическим profile, дают отдельные error-path и rollback-safe
|
||||
шаги. Нет заявлений о production latency, pause, benchmark, реальном D
|
||||
runtime или выполненном внешнем вызове.
|
||||
- Язык соответствует октябрю 2021: автор уже работает с границами handler,
|
||||
конфигурации и внешнего договора, но не присваивает себе зрелый опыт
|
||||
platform/incident leadership. Английские технические слова привязаны к
|
||||
trace, коду или таблице; следующий шаг остаётся воспроизводимым.
|
||||
|
||||
### 3. Визуал и выпуск
|
||||
|
||||
- Три SVG повторно проверены через <code>xmllint --noout</code>, safety scan
|
||||
не нашёл <code>script</code>, <code>foreignObject</code>, внешних URL или
|
||||
<code>data:image</code>. Каждый SVG отрендерен Sharp в ширину 375 px и
|
||||
просмотрен вручную: линии, подписи, контраст, последовательность блоков и
|
||||
нижние предупреждения остаются читаемыми.
|
||||
- <code>npm run build</code> завершилась с code 0: Next.js сгенерировал 374
|
||||
статические страницы. <code>git diff --check</code> также прошёл. Обычные
|
||||
предупреждения npm о пользовательских <code>store-dir</code>,
|
||||
<code>cache-dir</code> и <code>public-hoist-pattern</code> не относятся к
|
||||
этой партии и не повлияли на exit code.
|
||||
|
||||
Итог: октябрьские три статьи заменяют исходные архивные тексты через overlay;
|
||||
после этой интеграции строгий аудит проходит **136 из 358**, остаётся **222**.
|
||||
Reference in New Issue
Block a user