revise November 2023 postmortem articles
Build and deploy / deploy (push) Successful in 16s

This commit is contained in:
2026-07-31 15:20:08 +03:00
parent 6da24704e1
commit 9610ad68c1
7 changed files with 771 additions and 1 deletions
@@ -0,0 +1,60 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 720" role="img" aria-labelledby="title desc">
<title id="title">Учебная карточка решения для postmortem</title>
<desc id="desc">Три synthetic fact records входят в карточку решения в моменте. Из карточки выходит только профилактический эксперимент с критерием и rollback. Имя человека перечёркнуто как ложное поле объяснения.</desc>
<defs>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0 0L12 6L0 12Z" fill="#5368cf"/></marker>
<style>
.bg { fill: #f7f8ff; }
.fact { fill: #e7f6ff; stroke: #1389b7; stroke-width: 3; }
.decision { fill: #fff1d9; stroke: #d87b00; stroke-width: 4; }
.experiment { fill: #e9f8ef; stroke: #198355; stroke-width: 3; }
.card { fill: #fff; stroke: #d7def6; stroke-width: 3; }
.line { fill: none; stroke: #5368cf; stroke-width: 5; marker-end: url(#arrow); }
.title { font: 700 44px Arial, sans-serif; fill: #14213d; }
.head { font: 700 30px Arial, sans-serif; fill: #14213d; }
.body { font: 500 23px Arial, sans-serif; fill: #3e4d6b; }
.mono { font: 600 21px Menlo, Consolas, monospace; fill: #1b3150; }
.small { font: 500 19px Arial, sans-serif; fill: #53627d; }
.cross { stroke: #d5424d; stroke-width: 8; stroke-linecap: round; }
</style>
</defs>
<rect class="bg" width="1200" height="720" rx="30"/>
<text x="58" y="70" class="title">Решение читаем в его времени</text>
<text x="58" y="108" class="body">Факты слева, выбор в середине, проверка впереди</text>
<rect x="58" y="162" width="274" height="108" rx="20" class="fact"/>
<text x="84" y="208" class="head">fact 01</text>
<text x="84" y="244" class="mono">10:00 / evidence</text>
<rect x="58" y="306" width="274" height="108" rx="20" class="fact"/>
<text x="84" y="352" class="head">fact 02</text>
<text x="84" y="388" class="mono">10:03 / evidence</text>
<rect x="58" y="450" width="274" height="108" rx="20" class="fact"/>
<text x="84" y="496" class="head">fact 03</text>
<text x="84" y="532" class="mono">10:06 / evidence</text>
<path d="M333 216H425" class="line"/>
<path d="M333 360H425" class="line"/>
<path d="M333 504H425" class="line"/>
<rect x="438" y="206" width="343" height="300" rx="26" class="decision"/>
<text x="470" y="255" class="head">decision-at-the-time</text>
<text x="470" y="296" class="mono">10:08</text>
<text x="470" y="336" class="body">action:</text>
<text x="470" y="370" class="mono">pause review</text>
<text x="470" y="414" class="body">available fact IDs:</text>
<text x="470" y="448" class="mono">01 · 02 · 03</text>
<text x="470" y="482" class="small">evaluation: not-judged</text>
<path d="M782 356H873" class="line"/>
<rect x="886" y="222" width="258" height="267" rx="24" class="experiment"/>
<text x="916" y="270" class="head">experiment</text>
<text x="916" y="310" class="body">hypothesis</text>
<text x="916" y="345" class="body">criterion</text>
<text x="916" y="380" class="body">rollback</text>
<text x="916" y="430" class="mono">not-evaluated</text>
<rect x="828" y="554" width="316" height="96" rx="20" class="card"/>
<text x="856" y="595" class="mono" fill="#d5424d">actor ≠ explanation</text>
<text x="856" y="626" class="small">системное условие требует evidence</text>
<path d="M1036 566L1116 633M1116 566L1036 633" class="cross"/>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

@@ -0,0 +1,60 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 720" role="img" aria-labelledby="title desc">
<title id="title">Учебный цикл postmortem от unknown к обратимой проверке</title>
<desc id="desc">Synthetic факты ведут к решению в моменте, неизвестное переводится в профилактический эксперимент с критерием, а rollback возвращает только synthetic snapshot. Поиск виновника отмечен как запрещённая ветка.</desc>
<defs>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0 0L12 6L0 12Z" fill="#5368cf"/></marker>
<style>
.bg { fill: #f7f8ff; }
.fact { fill: #e7f6ff; stroke: #1389b7; stroke-width: 3; }
.decision { fill: #fff1d9; stroke: #d87b00; stroke-width: 3; }
.unknown { fill: #f2edff; stroke: #875bd2; stroke-width: 3; }
.experiment { fill: #e9f8ef; stroke: #198355; stroke-width: 3; }
.rollback { fill: #fff; stroke: #5368cf; stroke-width: 3; }
.line { fill: none; stroke: #5368cf; stroke-width: 5; marker-end: url(#arrow); }
.return { fill: none; stroke: #198355; stroke-width: 5; stroke-dasharray: 11 9; marker-end: url(#arrow); }
.title { font: 700 44px Arial, sans-serif; fill: #14213d; }
.head { font: 700 30px Arial, sans-serif; fill: #14213d; }
.body { font: 500 23px Arial, sans-serif; fill: #3e4d6b; }
.mono { font: 600 21px Menlo, Consolas, monospace; fill: #1b3150; }
.small { font: 500 19px Arial, sans-serif; fill: #53627d; }
.cross { stroke: #d5424d; stroke-width: 8; stroke-linecap: round; }
</style>
</defs>
<rect class="bg" width="1200" height="720" rx="30"/>
<text x="58" y="70" class="title">Unknown должен стать проверкой</text>
<text x="58" y="108" class="body">Не verdict, а короткий обратимый feedback loop</text>
<rect x="58" y="205" width="240" height="132" rx="22" class="fact"/>
<text x="88" y="255" class="head">facts</text>
<text x="88" y="292" class="mono">time + evidence</text>
<text x="88" y="319" class="small">not a cause claim</text>
<rect x="364" y="205" width="240" height="132" rx="22" class="decision"/>
<text x="394" y="255" class="head">decision</text>
<text x="394" y="292" class="mono">known facts only</text>
<text x="394" y="319" class="small">not judged later</text>
<rect x="670" y="205" width="240" height="132" rx="22" class="unknown"/>
<text x="700" y="255" class="head">unknown</text>
<text x="700" y="292" class="mono">what is missing?</text>
<text x="700" y="319" class="small">source or question</text>
<rect x="976" y="205" width="168" height="132" rx="22" class="experiment"/>
<text x="997" y="252" class="head">test</text>
<text x="997" y="288" class="body">criterion</text>
<text x="997" y="316" class="small">rollback</text>
<path d="M299 271H352" class="line"/>
<path d="M605 271H658" class="line"/>
<path d="M911 271H964" class="line"/>
<rect x="430" y="472" width="340" height="118" rx="24" class="rollback"/>
<text x="463" y="519" class="head">review criterion</text>
<text x="463" y="555" class="mono">pass / revise / rollback</text>
<path d="M1060 339C1042 456 841 528 782 530" class="return"/>
<path d="M430 530C315 525 199 442 179 350" class="return"/>
<text x="75" y="642" class="small">rollback возвращает synthetic snapshot; production effect: not-attempted</text>
<text x="872" y="145" class="mono" fill="#d5424d">поиск виновника</text>
<path d="M1062 123L1123 165M1123 123L1062 165" class="cross"/>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

@@ -0,0 +1,52 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 720" role="img" aria-labelledby="title desc">
<title id="title">Учебная timeline для postmortem без поиска виноватого</title>
<desc id="desc">Три synthetic fact records расположены до решения в моменте и профилактического эксперимента. Схема разделяет факт, решение и эксперимент и не утверждает причину, вину или эффект реального инцидента.</desc>
<defs>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0 0L12 6L0 12Z" fill="#5368cf"/></marker>
<style>
.bg { fill: #f7f8ff; }
.card { fill: #fff; stroke: #d7def6; stroke-width: 3; }
.fact { fill: #e7f6ff; stroke: #1389b7; stroke-width: 3; }
.decision { fill: #fff1d9; stroke: #d87b00; stroke-width: 3; }
.experiment { fill: #e9f8ef; stroke: #198355; stroke-width: 3; }
.line { fill: none; stroke: #5368cf; stroke-width: 5; marker-end: url(#arrow); }
.dashed { fill: none; stroke: #198355; stroke-width: 5; stroke-dasharray: 11 9; marker-end: url(#arrow); }
.title { font: 700 44px Arial, sans-serif; fill: #14213d; }
.head { font: 700 31px Arial, sans-serif; fill: #14213d; }
.body { font: 500 24px Arial, sans-serif; fill: #3e4d6b; }
.mono { font: 600 22px Menlo, Consolas, monospace; fill: #1b3150; }
.note { font: 500 20px Arial, sans-serif; fill: #53627d; }
.cross { stroke: #d5424d; stroke-width: 8; stroke-linecap: round; }
</style>
</defs>
<rect class="bg" width="1200" height="720" rx="30"/>
<text x="58" y="70" class="title">Сначала record, затем вывод</text>
<text x="58" y="108" class="body">Учебная timeline: fixed synthetic records в памяти</text>
<line x1="154" y1="195" x2="154" y2="590" class="line"/>
<circle cx="154" cy="195" r="14" fill="#1389b7"/>
<circle cx="154" cy="350" r="14" fill="#d87b00"/>
<circle cx="154" cy="525" r="14" fill="#198355"/>
<rect x="218" y="145" width="885" height="137" rx="22" class="fact"/>
<text x="254" y="192" class="head">1. Fact records: что зафиксировано</text>
<text x="254" y="230" class="mono">10:00 · 10:03 · 10:06</text>
<text x="254" y="260" class="body">statement + evidence reference</text>
<text x="770" y="230" class="note">inference: not-a-cause-claim</text>
<rect x="218" y="300" width="885" height="137" rx="22" class="decision"/>
<text x="254" y="347" class="head">2. Decision at the time: что выбрали</text>
<text x="254" y="385" class="mono">10:08 · pause-synthetic-change-review</text>
<text x="254" y="415" class="body">только facts, доступные до действия</text>
<text x="770" y="385" class="note">evaluation: not-judged</text>
<rect x="218" y="475" width="885" height="151" rx="22" class="experiment"/>
<text x="254" y="522" class="head">3. Preventive experiment: что проверить дальше</text>
<text x="254" y="560" class="mono">10:15 · criterion + rollback</text>
<text x="254" y="593" class="body">гипотеза ограничена и обратима</text>
<path d="M818 540H1044" class="dashed"/>
<text x="776" y="609" class="note">effect: not-evaluated</text>
<text x="905" y="125" class="mono" fill="#d5424d">не «виновник»</text>
<path d="M1075 102L1124 133M1124 102L1075 133" class="cross"/>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB