Files
huncode 508158ae1c
Build and deploy / deploy (push) Successful in 18s
deduplicate November technology evaluation example
2026-07-31 19:59:51 +03:00

70 lines
11 KiB
Markdown
Raw Permalink 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.
# 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: `[]`.