Files
progcode/editorial/reviews/2027-01-draft.md
T
huncode 32837c91e4
Build and deploy / deploy (push) Successful in 15s
revise January 2027 debugging plan articles
2026-07-31 20:09:30 +03:00

13 KiB
Raw Blame History

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, W3C Recommendation, 23 November 2021. Использован только для терминологической границы стандартизированного propagation trace context. Не подтверждает trace, carrier, связь или причинность в P107.
  2. RFC 5424: The Syslog Protocol, March 2009, DOI 10.17487/RFC5424. Использован только для различения формата protocol message и фактической записи. Не создаёт log record, report или history.
  3. NIST SP 800-92: Guide to Computer Security Log Management, 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/:

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(/<h2>Проверяемые источники<\\/h2>[\\s\\S]*/, '').replace(/<[^>]+>/g,' ').replace(/&(?:quot|amp|lt|gt|#039);/g,' ').toLowerCase().replace(/[^a-zа-яё0-9]+/giu,' ').trim().split(/\\s+/); const grams=a=>new Set(a.slice(0,-11).map((_,i)=>a.slice(i,i+12).join(' '))); for (let i=0;i<revisions.length;i++) for(let j=i+1;j<revisions.length;j++){const left=text(revisions[i].contentHtml), right=text(revisions[j].contentHtml), common=[...grams(left)].filter(x=>grams(right).has(x)); console.log(revisions[i].slug+' <> '+revisions[j].slug, 'shared-12-word-fragments='+common.length); if(common.length) console.log(common.join('\\n'));}"

Results:

  • Syntax: PASS (node --check exit 0).
  • Fixture and article guard: PASS 9/9; fixture 6/6; all three article checks true.
  • Article volumes: practice 9,066, mechanism 9,041, field 9,238 body characters; all are within the required 5,000–15,000 range and the 9–13k target.
  • npm run audit:draft: three PASS lines, one per exact required slug.
  • Public literal exports: PASS. Six status results exactly matched their expected branches; exports-frozen true true not-attempted.
  • xmllint: PASS with no output. SVG safety: PASS, rg found no forbidden content. Sharp render: PASS for all three outputs; all three 375 px PNG files were visually inspected.
  • Pairwise duplicate scan: PASS, shared-12-word-fragments=0 for all three pairs, with code included and sources excluded.

The only non-failing command output was the existing npm warning about unknown user config (store-dir, cache-dir, public-hoist-pattern); it did not affect the audit result.

Независимая приёмка основного редактора — 31.07.2026

Принято только как плановый выпуск на январь 2027. Названы 2027-01 и cutoff 2026-07-31; нет вымышленной декады, incident, log, trace, repro или production-вывода. Positive output не сильнее synthetic-plan-hand-off c productionEffect: not-attempted.

W3C Trace Context заменён на датированную Recommendation 23.11.2021, чтобы ссылка не указывала на изменяемую current-страницу. RFC 5424 и NIST SP 800-92 остаются первичными источниками формата и log-management vocabulary; все три источника используются только для терминов, не для доказательства route, carrier, записи или причинности P107.

Повторные проверки: syntax; fixture/guard 9/9 (fixture 6/6); draft audit с объёмами 9 266 / 9 041 / 9 238; XML и SVG safety-scan. Literal exports подтвердили все six expected branches, включая stop-unnamed-signal, stop-unnamed-symptom-or-hypothesis, stop-evidence-stronger-than-input и stop-disallowed-positive-conclusion. Sharp PNG трёх SVG осмотрены на 375 px: подписи, строки таблицы, arrows и stop labels читаемы. После замены формата practice snippet строгий cross-package scan 18 статей августа 2026 — января 2027 дал collisions: [].

В registry добавлены только три январские ревизии. Пользовательские application-файлы, articles.json, production queue и прочая незакоммиченная работа не входят в приёмку.