# P107 — January 2027: «Десять лет web-диагностики» ## Статус, граница времени и scope Редакторская дата: **31 июля 2026**. Январь 2027 ещё не наступил. Все три текста прямо обозначены как **план/сценарий на 2027-01** с source cutoff **2026-07-31**. Это не ретроспектива о завершённых десяти годах, не historical report и не описание реального incident. Для P107 нет bug reports, logs, traces, repro, tool output, production incidents, customer data или historical artifacts. Очередь ожидает такие артефакты, но этот пакет их не создаёт и не имитирует. Термины из официальных источников отделены от synthetic модели: source говорит о формате или словаре, но не подтверждает конкретную web-систему, carrier, запись, причинность либо результат расследования. Исполняемый пример принимает только named fixed in-memory literals. Factory выполняет JSON clone, затем deep freeze; evaluator принимает только JSON-равный известный literal и fail-closed закрывает всё остальное. Он не читает и не меняет сеть, browser, файлы, environment, clock, secrets, telemetry backend, external tools или production. Единственный допустимый положительный output — `synthetic-plan-hand-off` с `productionEffect: not-attempted`; root cause, fix, rollout, report, incident и любой положительный production conclusion запрещены. Изменены только следующие файлы: - `web/scripts/upgrade-2027-01.mjs` - `editorial/reviews/2027-01-draft.md` - `web/public/assets/editorial/2027/debugging-decade-2027-evolution-timeline.svg` - `web/public/assets/editorial/2027/debugging-decade-2027-signal-tool-limit-table.svg` - `web/public/assets/editorial/2027/debugging-decade-2027-hypothesis-evidence-loop.svg` Registry, README, `articles.json`, app, очередь, P102–P106 и Git-state не менялись. ## Pinned primary sources и границы 1. [W3C Trace Context](https://www.w3.org/TR/2021/REC-trace-context-1-20211123/), W3C Recommendation, 23 November 2021. Использован только для терминологической границы стандартизированного propagation trace context. Не подтверждает trace, carrier, связь или причинность в P107. 2. [RFC 5424: The Syslog Protocol](https://www.rfc-editor.org/rfc/rfc5424), March 2009, DOI `10.17487/RFC5424`. Использован только для различения формата protocol message и фактической записи. Не создаёт log record, report или history. 3. [NIST SP 800-92: Guide to Computer Security Log Management](https://doi.org/10.6028/NIST.SP.800-92), September 2006, DOI `10.6028/NIST.SP.800-92`. Использован как общий контекст дисциплины provenance и log management. Не подтверждает сбор, retention, incident или расследование. Все три источника первичные, pinned и не позднее cutoff. Имена fixed cases, статусы, правило «evidence не сильнее input», диаграммы, таблицы и safe hand-off — собственная synthetic модель P107, не вывод этих источников. ## Review pass 1 — три разных редакционных фокуса - **Practice**: аккуратная карта от synthetic симптома к именованной гипотезе и planned signals. В первых двух абзацах названы ранний прыжок к причине и ретроспективный вымысел; цена — обратные изменения, шум и ложная память. Статья не предлагает универсальный метод и не приписывает историю конкретной команде. - **Mechanism**: что не меняется между log, trace, metric и новым UI: named input, правило связи, альтернативное объяснение и предел силы вывода. В начале названа ложная причинность по id и цена — исключение не исключённых альтернатив. Отдельно разведены schema, поле, collector, время и evidence. - **Field**: synthetic debugging hand-off без field artifact. В начале названа передача «причина подтверждена» без материала и цена — ложная операционная память. Таблица и схема описывают лишь форму будущей передачи; они не называют project, tool, person, incident, время или production effect. - Голос M10: короткая прагматичная русская техническая речь наставника, с прямыми ограничениями и без обещания одного метода для всех систем. ## Review pass 2 — literal safety и temporal integrity - Положительный `planned-handoff-v1` требует `planDate: 2027-01`, `sourceCutoff: 2026-07-31`, named symptom/hypothesis/signals и `evidence: synthetic-contract/input/not-collected`. - `undated-scenario-v1` → `stop-undated-scenario-or-cutoff`. - `unnamed-signal-v1` → `stop-unnamed-signal`; `unnamed-hypothesis-v1` → `stop-unnamed-symptom-or-hypothesis`. - `evidence-stronger-than-input-v1` → `stop-evidence-stronger-than-input`: synthetic plan не может заявить `observed` или `claimed-collected` evidence. - `positive-conclusion-v1` → `stop-disallowed-positive-conclusion`: `root-cause-confirmed` запрещён. - Factory использует JSON clone и deep freeze, включая nested `signals`. Произвольный или изменённый input → `stop-unknown-fixed-input`. Допустимая ветка возвращает только `synthetic-plan-hand-off`, `productionEffect: not-attempted` и future evidence owner action. ## Review pass 3 — visuals, доступность, неповторяемость - У каждого SVG есть русские `title` и `desc`, а у соответствующей статьи — русские meaningful alt и caption. Изображения содержат механизм: timeline с двумя stop, сравнительную таблицу пределов inference и loop hand-off. - XML validation прошла для всех трёх SVG. Safety scan не нашёл `script`, `foreignObject`, `javascript:`, `data:image` или inline event handlers; внешних ссылок в SVG нет. - Sharp создал три PNG шириной 375 px. Ручной visual inspection подтвердил: заголовки и подписи не обрезаны; practice сохраняет все четыре узла и два stop; mechanism читает все четыре строки таблицы и красные запреты; field сохраняет направления синей и красных стрелок и читаемые stop-блоки. - Строгий pairwise scan исключал section sources, но включал code. Общих точных фрагментов по 12 слов: practice/mechanism `0`, practice/field `0`, mechanism/field `0`. ## Actual verification commands and results Запущено из `web/`: ```sh node --check scripts/upgrade-2027-01.mjs node scripts/upgrade-2027-01.mjs --verify-fixture npm run audit:draft -- scripts/upgrade-2027-01.mjs node --input-type=module -e "import { createFixedDiagnosticCase, assessFixedDiagnosticPlan } from './scripts/upgrade-2027-01.mjs'; const ids=['planned-handoff-v1','undated-scenario-v1','unnamed-signal-v1','unnamed-hypothesis-v1','evidence-stronger-than-input-v1','positive-conclusion-v1']; for (const id of ids) console.log(id, assessFixedDiagnosticPlan(createFixedDiagnosticCase(id)).status); const accepted=assessFixedDiagnosticPlan(createFixedDiagnosticCase()); console.log('exports-frozen', Object.isFrozen(createFixedDiagnosticCase()), Object.isFrozen(createFixedDiagnosticCase().signals), accepted.productionEffect);" xmllint --noout public/assets/editorial/2027/debugging-decade-2027-evolution-timeline.svg public/assets/editorial/2027/debugging-decade-2027-signal-tool-limit-table.svg public/assets/editorial/2027/debugging-decade-2027-hypothesis-evidence-loop.svg ! rg -n -i "<(script|foreignObject)\\b|javascript:|data:image|(?:^|[[:space:]])on[a-z]+=" public/assets/editorial/2027/debugging-decade-2027-evolution-timeline.svg public/assets/editorial/2027/debugging-decade-2027-signal-tool-limit-table.svg public/assets/editorial/2027/debugging-decade-2027-hypothesis-evidence-loop.svg node --input-type=module -e "import sharp from 'sharp'; for (const n of ['debugging-decade-2027-evolution-timeline','debugging-decade-2027-signal-tool-limit-table','debugging-decade-2027-hypothesis-evidence-loop']) await sharp('public/assets/editorial/2027/'+n+'.svg').resize({width:375}).png().toFile('/private/tmp/'+n+'-375.png');" node --input-type=module -e "import { revisions } from './scripts/upgrade-2027-01.mjs'; const text=h=>h.replace(/