revise December 2021 architecture review articles
Build and deploy / deploy (push) Successful in 16s
Build and deploy / deploy (push) Successful in 16s
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 620" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Контекст учебного решения о публикации рабочих заметок</title>
|
||||
<desc id="desc">Автор сохраняет каноническую заметку. Локальная учебная граница записывает заметку и publication intent. Relay по ключу noteId и revision обновляет независимое публичное чтение. Evidence и assumption отделены.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 Z" fill="#335e8a"/></marker>
|
||||
<style>
|
||||
.bg { fill: #f7f6f1; }
|
||||
.title { fill: #17212b; font: 700 28px system-ui, -apple-system, sans-serif; }
|
||||
.sub { fill: #52616d; font: 400 16px system-ui, -apple-system, sans-serif; }
|
||||
.card-title { fill: #17212b; font: 700 20px system-ui, -apple-system, sans-serif; }
|
||||
.card-text { fill: #334452; font: 400 16px system-ui, -apple-system, sans-serif; }
|
||||
.mini { fill: #52616d; font: 600 14px system-ui, -apple-system, sans-serif; letter-spacing: .3px; }
|
||||
.line { stroke: #335e8a; stroke-width: 3; marker-end: url(#arrow); }
|
||||
.key { fill: #e9f0f7; stroke: #335e8a; stroke-width: 2; }
|
||||
.write { fill: #e8f5ef; stroke: #25734f; stroke-width: 2; }
|
||||
.read { fill: #f1edf9; stroke: #7253a6; stroke-width: 2; }
|
||||
.evidence { fill: #eaf2fb; stroke: #2e6da4; stroke-width: 2; }
|
||||
.assumption { fill: #fff5dd; stroke: #b67813; stroke-width: 2; stroke-dasharray: 7 6; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect class="bg" width="960" height="620" rx="24"/>
|
||||
<text class="title" x="52" y="58">Контекст: публикация рабочей заметки</text>
|
||||
<text class="sub" x="52" y="86">Схема фиксирует владельцев состояния; она не является схемой production-инфраструктуры.</text>
|
||||
|
||||
<rect x="52" y="150" width="182" height="150" rx="16" fill="#fff" stroke="#7f8b96" stroke-width="2"/>
|
||||
<text class="mini" x="76" y="182">ВНЕШНИЙ АКТОР</text>
|
||||
<text class="card-title" x="76" y="218">Автор</text>
|
||||
<text class="card-text" x="76" y="248">передаёт версию</text>
|
||||
<text class="card-text" x="76" y="272">рабочей заметки</text>
|
||||
|
||||
<line class="line" x1="234" y1="225" x2="310" y2="225"/>
|
||||
<rect class="write" x="310" y="126" width="276" height="198" rx="18"/>
|
||||
<text class="mini" x="338" y="160">УЧЕБНАЯ ЛОКАЛЬНАЯ ГРАНИЦА</text>
|
||||
<text class="card-title" x="338" y="201">canonical note</text>
|
||||
<text class="card-text" x="338" y="230">id + revision</text>
|
||||
<line x1="338" y1="247" x2="558" y2="247" stroke="#8bbda4" stroke-width="2"/>
|
||||
<text class="card-title" x="338" y="280">publication intent</text>
|
||||
<text class="card-text" x="338" y="307">не delivery и не effect</text>
|
||||
|
||||
<line class="line" x1="586" y1="225" x2="674" y2="225"/>
|
||||
<rect class="key" x="651" y="164" width="160" height="120" rx="16"/>
|
||||
<text class="mini" x="675" y="195">RELAY</text>
|
||||
<text class="card-title" x="675" y="229">key</text>
|
||||
<text class="card-text" x="675" y="257">noteId:revision</text>
|
||||
|
||||
<line class="line" x1="811" y1="225" x2="850" y2="225"/>
|
||||
<rect class="read" x="798" y="150" width="120" height="150" rx="16"/>
|
||||
<text class="mini" x="818" y="182">READ</text>
|
||||
<text class="card-title" x="818" y="218">public</text>
|
||||
<text class="card-title" x="818" y="244">projection</text>
|
||||
<text class="card-text" x="818" y="272">может</text>
|
||||
<text class="card-text" x="818" y="294">отставать</text>
|
||||
|
||||
<rect class="evidence" x="92" y="402" width="364" height="144" rx="16"/>
|
||||
<text class="mini" x="120" y="435">FIXTURE EVIDENCE</text>
|
||||
<text class="card-title" x="120" y="470">claim: requirements явны</text>
|
||||
<text class="card-text" x="120" y="504">и вариант проверен против brief</text>
|
||||
|
||||
<rect class="assumption" x="504" y="402" width="364" height="144" rx="16"/>
|
||||
<text class="mini" x="532" y="435">ASSUMPTION</text>
|
||||
<text class="card-title" x="532" y="470">локальная пара Map возможна</text>
|
||||
<text class="card-text" x="532" y="504">не доказательство storage atomicity</text>
|
||||
<path d="M456 474 C470 474 486 474 504 474" fill="none" stroke="#52616d" stroke-width="2" stroke-dasharray="5 5"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
@@ -0,0 +1,67 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 650" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Проверка архитектурного решения через требования и доказательства</title>
|
||||
<desc id="desc">Brief с пятью требованиями сравнивается с тремя вариантами. Синхронная запись с проекцией и синхронное чтение имеют gaps. Transactional outbox закрывает учебный brief. Evidence и assumption идут отдельными ветками.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 Z" fill="#335e8a"/></marker>
|
||||
<style>
|
||||
.bg { fill: #f7f6f1; }
|
||||
.title { fill: #17212b; font: 700 28px system-ui, -apple-system, sans-serif; }
|
||||
.sub { fill: #52616d; font: 400 16px system-ui, -apple-system, sans-serif; }
|
||||
.label { fill: #17212b; font: 700 18px system-ui, -apple-system, sans-serif; }
|
||||
.text { fill: #334452; font: 400 15px system-ui, -apple-system, sans-serif; }
|
||||
.mini { fill: #52616d; font: 600 13px system-ui, -apple-system, sans-serif; letter-spacing: .3px; }
|
||||
.line { stroke: #335e8a; stroke-width: 3; marker-end: url(#arrow); }
|
||||
.brief { fill: #eaf2fb; stroke: #2e6da4; stroke-width: 2; }
|
||||
.option { fill: #fff; stroke: #8a969f; stroke-width: 2; }
|
||||
.selected { fill: #e8f5ef; stroke: #25734f; stroke-width: 3; }
|
||||
.decision { fill: #f1edf9; stroke: #7253a6; stroke-width: 3; }
|
||||
.evidence { fill: #eaf2fb; stroke: #2e6da4; stroke-width: 2; }
|
||||
.assumption { fill: #fff5dd; stroke: #b67813; stroke-width: 2; stroke-dasharray: 7 6; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect class="bg" width="960" height="650" rx="24"/>
|
||||
<text class="title" x="48" y="54">Решение: requirements → gaps → выбранная граница</text>
|
||||
<text class="sub" x="48" y="82">Нет score и «лучшего паттерна»: есть соответствие конкретному учебному brief.</text>
|
||||
|
||||
<rect class="brief" x="48" y="126" width="248" height="326" rx="16"/>
|
||||
<text class="mini" x="74" y="158">BRIEF</text>
|
||||
<text class="label" x="74" y="191">5 requirements</text>
|
||||
<text class="text" x="74" y="225">• canonical write</text>
|
||||
<text class="text" x="74" y="255">• recorded intent</text>
|
||||
<text class="text" x="74" y="285">• independent read</text>
|
||||
<text class="text" x="74" y="315">• explicit delay</text>
|
||||
<text class="text" x="74" y="345">• replay key</text>
|
||||
<text class="mini" x="74" y="404">NON-GOALS</text>
|
||||
<text class="text" x="74" y="430">не distributed transaction</text>
|
||||
|
||||
<line class="line" x1="296" y1="285" x2="356" y2="285"/>
|
||||
|
||||
<rect class="option" x="356" y="118" width="250" height="96" rx="14"/>
|
||||
<text class="label" x="380" y="151">sync write + projection</text>
|
||||
<text class="text" x="380" y="184">gaps: intent, delay</text>
|
||||
|
||||
<rect class="selected" x="356" y="252" width="250" height="118" rx="14"/>
|
||||
<text class="label" x="380" y="288">transactional outbox</text>
|
||||
<text class="text" x="380" y="320">all declared requirements</text>
|
||||
<text class="text" x="380" y="346">relay has explicit key</text>
|
||||
|
||||
<rect class="option" x="356" y="408" width="250" height="96" rx="14"/>
|
||||
<text class="label" x="380" y="441">synchronous query</text>
|
||||
<text class="text" x="380" y="474">gap: independent read</text>
|
||||
|
||||
<line class="line" x1="606" y1="311" x2="678" y2="311"/>
|
||||
<rect class="decision" x="678" y="241" width="238" height="142" rx="16"/>
|
||||
<text class="mini" x="704" y="275">DECISION</text>
|
||||
<text class="label" x="704" y="310">accepted</text>
|
||||
<text class="text" x="704" y="340">brief + option +</text>
|
||||
<text class="text" x="704" y="363">reversibility</text>
|
||||
|
||||
<rect class="evidence" x="88" y="520" width="370" height="86" rx="14"/>
|
||||
<text class="mini" x="114" y="550">EVIDENCE</text>
|
||||
<text class="text" x="114" y="579">claim связан с brief и fixture</text>
|
||||
<path d="M458 563 C535 563 596 473 680 378" fill="none" stroke="#2e6da4" stroke-width="2.5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect class="assumption" x="532" y="520" width="364" height="86" rx="14"/>
|
||||
<text class="mini" x="558" y="550">ASSUMPTION</text>
|
||||
<text class="text" x="558" y="579">condition for later review, not evidence</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
@@ -0,0 +1,63 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 690" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Безопасная диагностика публикации заметки</title>
|
||||
<desc id="desc">Диагностика последовательно проверяет decision, каноническую заметку, publication intent и projection. Pending intent ведёт к наблюдению relay. Совпадающая projection передаёт работу в read contract. Ни одна ветка не удаляет source.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 Z" fill="#335e8a"/></marker>
|
||||
<style>
|
||||
.bg { fill: #f7f6f1; }
|
||||
.title { fill: #17212b; font: 700 28px system-ui, -apple-system, sans-serif; }
|
||||
.sub { fill: #52616d; font: 400 16px system-ui, -apple-system, sans-serif; }
|
||||
.label { fill: #17212b; font: 700 19px system-ui, -apple-system, sans-serif; }
|
||||
.text { fill: #334452; font: 400 15px system-ui, -apple-system, sans-serif; }
|
||||
.mini { fill: #52616d; font: 600 13px system-ui, -apple-system, sans-serif; letter-spacing: .3px; }
|
||||
.line { stroke: #335e8a; stroke-width: 3; marker-end: url(#arrow); }
|
||||
.check { fill: #eaf2fb; stroke: #2e6da4; stroke-width: 2; }
|
||||
.state { fill: #fff; stroke: #7f8b96; stroke-width: 2; }
|
||||
.pending { fill: #fff5dd; stroke: #b67813; stroke-width: 2; }
|
||||
.ready { fill: #e8f5ef; stroke: #25734f; stroke-width: 2; }
|
||||
.stop { fill: #fbe9e7; stroke: #b84b3c; stroke-width: 2; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect class="bg" width="960" height="690" rx="24"/>
|
||||
<text class="title" x="48" y="54">Диагностика: не пересоздавать source до evidence</text>
|
||||
<text class="sub" x="48" y="82">Каждая ветка называет границу и следующее недеструктивное действие.</text>
|
||||
|
||||
<rect class="check" x="354" y="116" width="252" height="78" rx="14"/>
|
||||
<text class="mini" x="380" y="145">СИМПТОМ</text>
|
||||
<text class="label" x="380" y="174">public read не подтвердил note</text>
|
||||
|
||||
<line class="line" x1="480" y1="194" x2="480" y2="244"/>
|
||||
<rect class="state" x="354" y="244" width="252" height="82" rx="14"/>
|
||||
<text class="label" x="380" y="278">Есть decision?</text>
|
||||
<text class="text" x="380" y="305">context + evidence + option</text>
|
||||
<line class="line" x1="354" y1="285" x2="206" y2="285"/>
|
||||
<rect class="stop" x="48" y="238" width="158" height="94" rx="14"/>
|
||||
<text class="mini" x="72" y="268">НЕТ</text>
|
||||
<text class="label" x="72" y="297">record decision</text>
|
||||
<text class="text" x="72" y="320">не писать новую note</text>
|
||||
|
||||
<line class="line" x1="480" y1="326" x2="480" y2="376"/>
|
||||
<rect class="state" x="354" y="376" width="252" height="82" rx="14"/>
|
||||
<text class="label" x="380" y="410">Есть canonical note?</text>
|
||||
<text class="text" x="380" y="437">id + revision</text>
|
||||
<line class="line" x1="354" y1="417" x2="206" y2="417"/>
|
||||
<rect class="stop" x="48" y="370" width="158" height="94" rx="14"/>
|
||||
<text class="mini" x="72" y="400">НЕТ</text>
|
||||
<text class="label" x="72" y="429">check write</text>
|
||||
<text class="text" x="72" y="452">сохранить source evidence</text>
|
||||
|
||||
<line class="line" x1="480" y1="458" x2="480" y2="508"/>
|
||||
<rect class="state" x="354" y="508" width="252" height="82" rx="14"/>
|
||||
<text class="label" x="380" y="542">Есть intent key?</text>
|
||||
<text class="text" x="380" y="569">noteId:revision</text>
|
||||
<line class="line" x1="606" y1="549" x2="732" y2="549"/>
|
||||
<rect class="pending" x="732" y="498" width="180" height="102" rx="14"/>
|
||||
<text class="mini" x="758" y="528">PENDING</text>
|
||||
<text class="label" x="758" y="557">observe relay</text>
|
||||
<text class="text" x="758" y="581">не менять source</text>
|
||||
|
||||
<line class="line" x1="480" y1="590" x2="480" y2="635"/>
|
||||
<rect class="ready" x="320" y="618" width="320" height="58" rx="14"/>
|
||||
<text class="label" x="348" y="646">projection current</text>
|
||||
<text class="text" x="348" y="669">передать проверку read contract</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
Reference in New Issue
Block a user