Files
progcode/editorial/reviews/2026-11-draft.md
T
huncode 508158ae1c
Build and deploy / deploy (push) Successful in 18s
deduplicate November technology evaluation example
2026-07-31 19:59:51 +03:00

11 KiB
Raw Blame History

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, Revision 1, September 2012, DOI 10.6028/NIST.SP.800-30r1. Использован как первичный источник терминов о risk assessment и uncertainty. Он не задаёт наши weights, не сравнивает технологии и не подтверждает benchmark.
  2. RFC 2119, BCP 14, March 1997, DOI 10.17487/RFC2119. Использован только для дисциплины слов требования. Он не создаёт policy сравнения и не делает hand-off решением.
  3. RFC 8174, 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/:

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: [].