Files
huncode 63719beb32
Build and deploy / deploy (push) Successful in 17s
revise December 2026 portfolio case articles
2026-07-31 20:06:02 +03:00

62 lines
10 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.
# 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 и остальная незакоммиченная работа не включены в приёмку.