revise December 2026 portfolio case articles
Build and deploy / deploy (push) Successful in 17s

This commit is contained in:
2026-07-31 20:06:02 +03:00
parent 508158ae1c
commit 63719beb32
7 changed files with 300 additions and 1 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Производство редакционных партий
На 31 июля 2026 года строгий аудит проходит 319 из 358 созданных материалов. Остальные 39 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
На 31 июля 2026 года строгий аудит проходит 322 из 358 созданных материалов. Остальные 36 не считаются «почти готовыми»: их нужно заменить, а не косметически удлинить.
## Одна партия
+61
View File
@@ -0,0 +1,61 @@
# P106 — December 2026: «Инженерный кейс от проблемы до результата»
## Статус и временная граница
Редакторская дата: **31 июля 2026**. Декабрь ещё не наступил. Все три статьи прямо обозначены как план/сценарий на **2026-12** с source cutoff **2026-07-31**. Это не отчёты о проектном кейсе, ADR, benchmark, метрике, тесте, инциденте, change, rollout или результате: ни одно из таких событий не утверждается как произошедшее.
Модель работает только с named fixed synthetic case и fixed in-memory literals. Factory использует JSON clone и deep freeze; evaluator fail-closed. Единственный положительный output — `synthetic-plan-hand-off` с `productionEffect: not-attempted`. В коде нет сетевых, браузерных, файловых, environment, clock, secret, telemetry или external-tool API, а также нет действия над production.
## Источники и 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`. Первичный pinned источник терминов риска и неопределённости. Не подтверждает case, ADR, benchmark, metric, test, incident, change, rollout или результат P106.
2. [RFC 2119](https://www.rfc-editor.org/rfc/rfc2119), BCP 14, March 1997, DOI `10.17487/RFC2119`. Первичный pinned источник модальности требований. Не превращает scenario в принятое решение или доказательство.
3. [RFC 8174](https://www.rfc-editor.org/rfc/rfc8174), BCP 14, May 2017, DOI `10.17487/RFC8174`. Первичный pinned источник уточнения BCP 14. Не подтверждает future outcome или производственный эффект.
Все источники опубликованы до cutoff. Они отделены от собственной synthetic model P106: named case, options, rejected option, причинный ledger, статусы, deep freeze и safe hand-off — редакционные конструкции данного будущего сценария.
## Review pass 1 — проблема, тон, плотность, неповторяемость
- **Practice** открывается опасностью ретроспективно подогнать контекст под итог; цена — ложное основание для следующего действия. Угол: структура `контекст → варианты → решение → evidence → residual risk`.
- **Mechanism** открывается ложной причинной связью между изменением и желаемым исходом; цена — proof сильнее входов. Угол: причинность, provenance и контрфакты.
- **Field** открывается передачей фразы о собранных доказательствах без доказательств; цена — поиск несуществующих артефактов и ложная операционная память. Угол: synthetic evidence hand-off.
- Тон M9: краткая русская техническая речь, конкретные boundary и stop; нет рекламного кейса, обещания эффекта или «успеха» проекта. В первых двух абзацах каждой статьи есть проблема и цена.
- Строгая pairwise uniqueness исключила source lists, но включила code. Для practice/mechanism, practice/field и mechanism/field финальный scan дал: `exactParagraphs160: 0`, `common12WordFragments: 0`.
## Review pass 2 — source cutoff, факты, literal safety
- Для всех known literals обязательны `planDate: 2026-12` и `sourceCutoff: 2026-07-31`; `undated-scenario-v1` возвращает `stop-undated-scenario-or-cutoff`.
- Factory возвращает JSON clone и recursive deep freeze. Evaluator принимает только byte-identical named fixed cases; произвольный input закрывается `stop-unknown-fixed-input`.
- Опасные cases покрыты явно: пропущенный rejected option → `stop-missing-rejected-option`; claim сильнее scenario-only input → `stop-evidence-stronger-than-input`; попытка `case-complete` → `stop-disallowed-positive-result`.
- Разрешённый literal оставляет evidence `scenario-only`, `not-collected` и возвращает только `synthetic-plan-hand-off` с `productionEffect: not-attempted`.
- Очередь будущих артефактов не выдумана: нет ссылок на ADR, benchmark, metrics, tests, incidents, changes или rollouts. Официальные источники ниже применены только как терминология и явно отделены от модели.
## Review pass 3 — XML/safety, Sharp 375px и команды
- У каждого SVG есть русские `title`/`desc`, русские article alt/caption и data-bearing схема. Макет 720×500, шрифт 14–24 px, не содержит внешних ссылок, `script`, `foreignObject`, `javascript:`, `data:image` или event handlers.
- Sharp render на 375 px осмотрен визуально: causal timeline сохраняет пять смысловых полей и три stop; ledger сохраняет соотношение input/claim и контрфактический блок; hand-off loop сохраняет зелёную передачу и красный возврат. Обрезания текста не обнаружены.
- Команды ниже выполнены из `web/`. Экспорт literals подтвердил все пять status, audit проверил три точных slug, XML и safety scan прошли для трёх SVG.
```sh
node --check scripts/upgrade-2026-12.mjs
node scripts/upgrade-2026-12.mjs --verify-fixture
npm run audit:draft -- scripts/upgrade-2026-12.mjs
node --input-type=module -e "import { createFixedPortfolioCase, assessFixedPortfolioCase } from './scripts/upgrade-2026-12.mjs'; for (const id of ['portfolio-case-plan-v1','undated-scenario-v1','missing-rejected-option-v1','evidence-stronger-than-input-v1','disallowed-positive-result-v1']) console.log(id, assessFixedPortfolioCase(createFixedPortfolioCase(id)).status);"
xmllint --noout public/assets/editorial/2026/portfolio-case-2026-causal-timeline.svg public/assets/editorial/2026/portfolio-case-2026-tradeoff-ledger.svg public/assets/editorial/2026/portfolio-case-2026-evidence-boundary-loop.svg
rg -n -i "<(script|foreignObject)\\b|javascript:|data:image|(?:^|[[:space:]])on[a-z]+=" public/assets/editorial/2026/portfolio-case-2026-causal-timeline.svg public/assets/editorial/2026/portfolio-case-2026-tradeoff-ledger.svg public/assets/editorial/2026/portfolio-case-2026-evidence-boundary-loop.svg
node --input-type=module -e "import sharp from 'sharp'; for (const n of ['portfolio-case-2026-causal-timeline','portfolio-case-2026-tradeoff-ledger','portfolio-case-2026-evidence-boundary-loop']) await sharp('public/assets/editorial/2026/'+n+'.svg').resize({width:375}).png().toFile('/private/tmp/'+n+'-375.png');"
```
## Disposition
P106 фиксирует три выполненных review-прохода: проблема/тон/плотность/неповторяемость; source cutoff/факты/literal safety; XML/safety + Sharp visual review 375px + команды. `node --check` прошёл; fixture — `8/8`; draft audit — `10 547 / 10 518 / 11 022` знаков; public literal exports, XML и SVG safety прошли; строгая pairwise uniqueness дала нули во всех трёх парах; три 375px PNG осмотрены вручную. Этот draft не меняет registry, README, articles.json, app, production queue, чужие P102–P105 файлы или Git-state.
## Независимая приёмка основного редактора — 31.07.2026
Принято только как **декабрьский план/сценарий**. Все три текста сохраняют `2026-12` и cutoff `2026-07-31`; у кейса нет заявленного ADR, метрики, теста, incident, change, rollout или результата. Единственный positive branch — `synthetic-plan-hand-off` c `productionEffect: not-attempted`.
NIST SP 800-30 Rev. 1, RFC 2119 и RFC 8174 повторно сверены как устойчивые первичные источники до cutoff. NIST поддерживает только язык риска, ограничений методик и интерпретации; RFC — язык требований. Ни один источник не используется как доказательство причинности, проектной истории или будущего артефакта P106. Options, rejected option, ledger и statuses явно остаются synthetic model.
Повторно выполнены syntax, fixture `8/8`, draft audit с объёмами 10 547 / 10 518 / 11 022, XML и SVG safety-scan. Literal checks возвращают `synthetic-plan-hand-off`, `stop-undated-scenario-or-cutoff`, `stop-missing-rejected-option`, `stop-evidence-stronger-than-input` и `stop-disallowed-positive-result`. Три SVG отрендерены Sharp на 375 px и визуально приняты: текст, стрелки и stop labels не обрезаются. Строгий scan внутри тройки дал нули; дополнительный scan 15 статей августа–декабря также не нашёл совпадающих абзацев или общих 12-словных фрагментов.
В registry добавлены только три декабрьские ревизии. Пользовательские application-файлы, `articles.json`, production queue и остальная незакоммиченная работа не включены в приёмку.