70 lines
11 KiB
Markdown
70 lines
11 KiB
Markdown
# P105 — November 2026: «Сравнение технологий без хайпа»
|
||
|
||
## Статус и временная граница
|
||
|
||
Редакторская дата: **31 июля 2026**. Ноябрь ещё не наступил. Все три текста — явно помеченные план/сценарий на **2026-11** с source cutoff **2026-07-31**. Это не отчёты о внедрении, benchmark, выборе, rollout, замере или field-работе; такие события не заявляются и не подразумеваются.
|
||
|
||
Исполняемый пример использует только named fixed in-memory literals, JSON clone и deep freeze. Он не читает сеть, browser, файлы, environment, часы, secrets, telemetry или внешние инструменты. У единственной положительной ветки статус `synthetic-plan-hand-off`, а `productionEffect: not-attempted`; выбор, winner, измерение и rollout кодом запрещены.
|
||
|
||
## Источники и boundary
|
||
|
||
1. [NIST SP 800-30 Rev. 1: Guide for Conducting Risk Assessments](https://doi.org/10.6028/NIST.SP.800-30r1), Revision 1, September 2012, DOI `10.6028/NIST.SP.800-30r1`. Использован как первичный источник терминов о risk assessment и uncertainty. Он не задаёт наши weights, не сравнивает технологии и не подтверждает benchmark.
|
||
2. [RFC 2119](https://www.rfc-editor.org/rfc/rfc2119), BCP 14, March 1997, DOI `10.17487/RFC2119`. Использован только для дисциплины слов требования. Он не создаёт policy сравнения и не делает hand-off решением.
|
||
3. [RFC 8174](https://www.rfc-editor.org/rfc/rfc8174), BCP 14, May 2017, DOI `10.17487/RFC8174`. Использован для уточнения контекста BCP 14. Он не подтверждает будущий rollout или измерение.
|
||
|
||
Все источники pinned, первичные и опубликованы не позже cutoff. Их факты отделены от собственной модели P105: fixed criteria, weights 40/35/25, trade-off frontier, статусы и safe hand-off — редакционные конструкции данного плана.
|
||
|
||
## Review pass 1 — проблема, голос, плотность, неповторяемость
|
||
|
||
- **Practice** открывается скрытой стоимостью adoption после выбора по демо; цена — обучение, миграция и поддержка, обнаруженные поздно. Угол: взвешенная матрица с отдельным cost of adoption.
|
||
- **Mechanism** открывается ложной численной точностью неполного наблюдения; цена — потерянная конфигурация и спор с готовым «итогом». Угол: вопрос, observation, uncertainty и weight как разные сущности.
|
||
- **Field** открывается передачей «доказанного преимущества» без evidence; цена — ложная операционная память и неотменяемая история. Угол: safe synthetic evidence hand-off, а не отчёт.
|
||
- Голос M9: короткие технические утверждения, прямые ограничения, нет маркетингового обещания или общего введения. В первых двух абзацах каждой статьи названы конкретная проблема и цена.
|
||
- Независимость проверена строго попарно без списков sources, но с code: общих точных абзацев — `0`; общих фрагментов из 12 слов — `0` для practice/mechanism, practice/field и mechanism/field.
|
||
|
||
## Review pass 2 — cutoff, факты и literal safety
|
||
|
||
- В каждом literal требуются `planDate: 2026-11` и `sourceCutoff: 2026-07-31`; недатированный сценарий закрывается `stop-undated-plan-or-cutoff`.
|
||
- Factory отдаёт JSON clone, затем deep freeze. Только named fixed cases принимаются evaluator, произвольный input закрывается `stop-unknown-fixed-input`.
|
||
- Отдельно покрыты опасные cases: отсутствующий criterion/weight → `stop-missing-criterion-or-weight`; скрытая measurement configuration → `stop-hidden-measurement-configuration`; заявленный winner/benchmark result → `stop-disallowed-positive-result`.
|
||
- Положительный case не выбирает альтернативу: `synthetic-plan-hand-off`, `productionEffect: not-attempted`, `nextAction: give-the-fixed-plan-to-a-future-evidence-owner`.
|
||
- В code snippets нет сетевых, файловых, environment, clock, browser, secret, telemetry или external-tool APIs. «Собственный benchmark» из очереди заменён только fixed synthetic configuration со значениями `not-run` и `not-estimated`.
|
||
|
||
## Review pass 3 — SVG mobile, XML/safety, команды
|
||
|
||
- Каждый SVG имеет русские title/desc, data-bearing content и соответствующие русские alt/caption в статье. Макет рассчитан на 720×500 viewBox, рабочий текст 14–24 px, без декоративной подмены механизма.
|
||
- Для 375 px Sharp render должен подтвердить: matrix читает три веса и четыре stop; frontier не обрезает область неопределённости; hand-off loop сохраняет направление зелёной и красной стрелок. PNG осматривается визуально, а не только по exit code.
|
||
- SVG проходят XML validation и safety scan: отсутствуют `script`, `foreignObject`, `javascript:`, `data:image` и event handlers. В SVG нет внешних ссылок.
|
||
|
||
## Команды проверки
|
||
|
||
Запускать из `web/`:
|
||
|
||
```sh
|
||
node --check scripts/upgrade-2026-11.mjs
|
||
node scripts/upgrade-2026-11.mjs --verify-fixture
|
||
npm run audit:draft -- scripts/upgrade-2026-11.mjs
|
||
node --input-type=module -e "import { createFixedTechnologyEvaluationCase, assessFixedTechnologyEvaluation } from './scripts/upgrade-2026-11.mjs'; for (const id of ['weighted-plan-v1','undated-plan-v1','missing-weight-v1','hidden-measurement-v1','claimed-benchmark-win-v1']) console.log(id, assessFixedTechnologyEvaluation(createFixedTechnologyEvaluationCase(id)).status);"
|
||
xmllint --noout public/assets/editorial/2026/technology-evaluation-2026-weighted-decision-matrix.svg public/assets/editorial/2026/technology-evaluation-2026-tradeoff-frontier.svg public/assets/editorial/2026/technology-evaluation-2026-evidence-handoff-loop.svg
|
||
rg -n -i "<(script|foreignObject)\\b|javascript:|data:image|(?:^|[[:space:]])on[a-z]+=" public/assets/editorial/2026/technology-evaluation-2026-weighted-decision-matrix.svg public/assets/editorial/2026/technology-evaluation-2026-tradeoff-frontier.svg public/assets/editorial/2026/technology-evaluation-2026-evidence-handoff-loop.svg
|
||
node --input-type=module -e "import sharp from 'sharp'; for (const n of ['technology-evaluation-2026-weighted-decision-matrix','technology-evaluation-2026-tradeoff-frontier','technology-evaluation-2026-evidence-handoff-loop']) await sharp('public/assets/editorial/2026/'+n+'.svg').resize({width:375}).png().toFile('/private/tmp/'+n+'-375.png');"
|
||
```
|
||
|
||
## Disposition
|
||
|
||
Проверки P105 должны зафиксировать: syntax; fixture `8/8`; audit всех трёх slugs; literal public exports; четыре опасных stop; XML; SVG safety; Sharp 375 px и ручной visual inspection; строгую pairwise uniqueness с включённым code и исключёнными sources. Этот draft не меняет registry, README, articles.json, очередь, application files, чужие draft-пакеты или Git-state.
|
||
|
||
## Независимая приёмка основного редактора — 31.07.2026
|
||
|
||
Принято только как **плановое сравнение на ноябрь 2026**. Тексты явно называют `2026-11` и source cutoff `2026-07-31`; fixture не выбирает технологию, не запускает benchmark и не допускает rollout. Единственный positive output — `synthetic-plan-hand-off` c `productionEffect: not-attempted`.
|
||
|
||
Проверен NIST SP 800-30 Rev. 1: документ действительно датирован September 2012, называет assessment неполным измерительным инструментом и описывает ограничения данных, методик и интерпретации. RFC 2119 и RFC 8174 подтверждают даты/контекст BCP 14. Источники оставлены только для терминов риска и силы требований; weights 40/35/25, frontier и статусы прямо отмечены как редакционная synthetic model, а не как рекомендация NIST или RFC.
|
||
|
||
Повторные проверки: syntax; fixture `8/8`; draft audit с объёмами 9 643 / 9 587 / 9 685; literal outputs `synthetic-plan-hand-off`, `stop-undated-plan-or-cutoff`, `stop-missing-criterion-or-weight`, `stop-hidden-measurement-configuration`, `stop-disallowed-positive-result`; XML и safety scan. Sharp PNG всех SVG осмотрены на 375 px: матрица, область неопределённости и hand-off loop читаемы и не обрезаются. Строгая проверка, включающая code и исключающая source lists, дала ноль совпадающих абзацев от 160 символов и ноль общих 12-словных фрагментов во всех трёх парах.
|
||
|
||
В registry добавлены только три ноябрьские ревизии. Пользовательские application-файлы, `articles.json`, production queue и остальная незакоммиченная работа не включены в приёмку.
|
||
|
||
## Post-publication de-dup — 31.07.2026
|
||
|
||
Дополнительный cross-package scan по всем 12 статьям августа–ноября нашёл один общий 12-словный code fragment между сентябрьским и ноябрьским field-примерами. Ноябрьский пример переписан на named `refusedPlan`/`gate` и JSON-массив результата; поведение и fail-closed status не изменились. Повторный scan после правки: `articles: 12`, collisions: `[]`.
|