This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="1540" viewBox="0 0 720 1540" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Дерево безопасной диагностики сохранённого, но не найденного документа</title>
|
||||
<desc id="desc">Диагностика начинает с source и version, затем проверяет ingest, pending index, refresh и контракт query. На всех ветках сначала сохраняется evidence, а source не удаляется без подтверждённой причины.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
|
||||
<path d="M0 0 L12 6 L0 12 Z" fill="#78dce8"/>
|
||||
</marker>
|
||||
<style>
|
||||
.title { font: 700 30px system-ui, sans-serif; fill: #f8fafc; }
|
||||
.subtitle { font: 400 20px system-ui, sans-serif; fill: #b6c4d6; }
|
||||
.question { font: 700 24px system-ui, sans-serif; fill: #f8fafc; }
|
||||
.body { font: 400 20px system-ui, sans-serif; fill: #d7e1ee; }
|
||||
.small { font: 600 18px system-ui, sans-serif; fill: #d7e1ee; }
|
||||
.yes { font: 700 19px system-ui, sans-serif; fill: #66d9a0; }
|
||||
.no { font: 700 19px system-ui, sans-serif; fill: #ffc857; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect width="720" height="1540" fill="#0b1220"/>
|
||||
<rect x="24" y="24" width="672" height="82" rx="18" fill="#121d31" stroke="#273755" stroke-width="2"/>
|
||||
<text x="48" y="58" class="title">Документ сохранён, но query пуст</text>
|
||||
<text x="48" y="86" class="subtitle">сначала evidence, затем обратимое действие</text>
|
||||
|
||||
<rect x="54" y="140" width="612" height="124" rx="18" fill="#172842" stroke="#4a85c5" stroke-width="3"/>
|
||||
<text x="86" y="184" class="question">0. Записать evidence</text>
|
||||
<text x="86" y="216" class="body">id · source version · event key · query · время</text>
|
||||
<text x="86" y="245" class="small">не удалять source до ответа на следующий вопрос</text>
|
||||
|
||||
<path d="M360 276 L360 319" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<rect x="54" y="333" width="612" height="107" rx="18" fill="#172842" stroke="#7a6ff0" stroke-width="3"/>
|
||||
<text x="86" y="376" class="question">1. Source существует по id?</text>
|
||||
<text x="86" y="408" class="body">и version совпадает с ожидаемой?</text>
|
||||
|
||||
<path d="M360 452 L360 495" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<text x="382" y="480" class="yes">да</text>
|
||||
<rect x="54" y="509" width="612" height="112" rx="18" fill="#172842" stroke="#7a6ff0" stroke-width="3"/>
|
||||
<text x="86" y="553" class="question">2. Есть ingest key id:version?</text>
|
||||
<text x="86" y="585" class="body">повтор должен быть различим как duplicate</text>
|
||||
|
||||
<path d="M360 633 L360 676" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<text x="382" y="661" class="yes">да</text>
|
||||
<rect x="54" y="690" width="612" height="112" rx="18" fill="#2d2530" stroke="#ffc857" stroke-width="3"/>
|
||||
<text x="86" y="734" class="question">3. Version лежит в pending index?</text>
|
||||
<text x="86" y="766" class="body">query может быть stale до перехода видимости</text>
|
||||
|
||||
<path d="M360 814 L360 857" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<text x="382" y="842" class="yes">да</text>
|
||||
<rect x="54" y="871" width="612" height="134" rx="18" fill="#2d2530" stroke="#ffc857" stroke-width="3"/>
|
||||
<text x="86" y="914" class="question">Действие: awaiting-refresh</text>
|
||||
<text x="86" y="946" class="body">измерить gap и применить project policy</text>
|
||||
<text x="86" y="976" class="small">controlled local test допустим, delete source — нет</text>
|
||||
|
||||
<path d="M360 1017 L360 1060" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<rect x="54" y="1074" width="612" height="112" rx="18" fill="#173b3a" stroke="#66d9a0" stroke-width="3"/>
|
||||
<text x="86" y="1118" class="question">4. Visible version актуальна?</text>
|
||||
<text x="86" y="1150" class="body">source.version равна visible.version?</text>
|
||||
|
||||
<path d="M360 1198 L360 1241" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<text x="382" y="1226" class="yes">да</text>
|
||||
<rect x="54" y="1255" width="612" height="140" rx="18" fill="#173b3a" stroke="#66d9a0" stroke-width="3"/>
|
||||
<text x="86" y="1298" class="question">5. Проверить контракт query</text>
|
||||
<text x="86" y="1330" class="body">scope · filter · поле · анализ текста · права</text>
|
||||
<text x="86" y="1361" class="small">точечная правка и повтор исходного query</text>
|
||||
|
||||
<rect x="54" y="1425" width="612" height="94" rx="16" fill="#3a2730" stroke="#f06b8a" stroke-width="3"/>
|
||||
<text x="86" y="1457" class="question">На любой ветке «нет»</text>
|
||||
<text x="86" y="1486" class="body">сохранить evidence; source не удалять</text>
|
||||
<text x="86" y="1514" class="body">не создавать копию до подтверждения причины</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,59 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="1420" viewBox="0 0 720 1420" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Учебная временная шкала задержки между сохранением и видимостью поиска</title>
|
||||
<desc id="desc">Диаграмма показывает четыре условные точки времени: source сохранён на 100, ingest поставлен на 110, pending index подготовлен на 125, refresh даёт видимость на 160. Наблюдаемая разница 60 условных миллисекунд не является SLA.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
|
||||
<path d="M0 0 L12 6 L0 12 Z" fill="#78dce8"/>
|
||||
</marker>
|
||||
<style>
|
||||
.title { font: 700 31px system-ui, sans-serif; fill: #f8fafc; }
|
||||
.subtitle { font: 400 20px system-ui, sans-serif; fill: #b6c4d6; }
|
||||
.card-title { font: 700 25px system-ui, sans-serif; fill: #f8fafc; }
|
||||
.body { font: 400 21px system-ui, sans-serif; fill: #d7e1ee; }
|
||||
.small { font: 600 19px system-ui, sans-serif; fill: #d7e1ee; }
|
||||
.label { font: 700 21px system-ui, sans-serif; fill: #0b1220; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect width="720" height="1420" fill="#0b1220"/>
|
||||
<rect x="24" y="24" width="672" height="82" rx="18" fill="#121d31" stroke="#273755" stroke-width="2"/>
|
||||
<text x="48" y="59" class="title">Как разложить наблюдаемую задержку</text>
|
||||
<text x="48" y="87" class="subtitle">четыре учебные точки времени, не обещание SLA</text>
|
||||
|
||||
<rect x="54" y="137" width="612" height="94" rx="16" fill="#283d5d"/>
|
||||
<text x="84" y="176" class="card-title">100 · savedAtMs</text>
|
||||
<text x="84" y="207" class="body">доменная version 7 сохранена</text>
|
||||
|
||||
<path d="M360 243 L360 286" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<rect x="54" y="300" width="612" height="94" rx="16" fill="#433a75"/>
|
||||
<text x="84" y="339" class="card-title">110 · enqueuedAtMs</text>
|
||||
<text x="84" y="370" class="body">один key id:version ждёт ingest</text>
|
||||
|
||||
<path d="M360 406 L360 449" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<rect x="54" y="463" width="612" height="94" rx="16" fill="#624d2a"/>
|
||||
<text x="84" y="502" class="card-title">125 · indexedAtMs</text>
|
||||
<text x="84" y="533" class="body">pending index готов, query ещё stale</text>
|
||||
|
||||
<rect x="74" y="594" width="572" height="162" rx="18" fill="#2d2530" stroke="#ffc857" stroke-width="3"/>
|
||||
<text x="104" y="636" class="card-title">Промежуток ожидания видимости</text>
|
||||
<text x="104" y="670" class="body">query «свежести» → 0 попаданий</text>
|
||||
<text x="104" y="701" class="body">диагноз: awaiting-refresh</text>
|
||||
<text x="104" y="732" class="small">собрать evidence, не удалять source</text>
|
||||
|
||||
<path d="M360 768 L360 811" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<rect x="54" y="825" width="612" height="94" rx="16" fill="#245449"/>
|
||||
<text x="84" y="864" class="card-title">160 · visibleAtMs</text>
|
||||
<text x="84" y="895" class="body">refresh делает version 7 видимой</text>
|
||||
|
||||
<path d="M360 931 L360 974" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<rect x="54" y="988" width="612" height="121" rx="16" fill="#1b4238" stroke="#66d9a0" stroke-width="3"/>
|
||||
<text x="84" y="1029" class="card-title">Query после refresh</text>
|
||||
<text x="84" y="1061" class="body">1 hit · current version 7</text>
|
||||
<text x="84" y="1091" class="small">дальше проверяем именно контракт query</text>
|
||||
|
||||
<rect x="54" y="1150" width="612" height="199" rx="18" fill="#142033" stroke="#4a85c5" stroke-width="3"/>
|
||||
<text x="84" y="1194" class="card-title">Как читать этот бюджет</text>
|
||||
<text x="84" y="1230" class="body">visibleAtMs − savedAtMs = 60</text>
|
||||
<text x="84" y="1261" class="body">60 — вход fixture для проверки арифметики</text>
|
||||
<text x="84" y="1292" class="body">проект сам выбирает policy и порог реакции</text>
|
||||
<text x="84" y="1323" class="small">не переносим число в production без измерения</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
@@ -0,0 +1,79 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="1480" viewBox="0 0 720 1480" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Учебный путь документа от source до поисковой выдачи</title>
|
||||
<desc id="desc">Вертикальная схема показывает сохранение документа version 7, идемпотентную постановку ingest, pending index, stale query до refresh, явный refresh и успешный query после перехода видимости.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto">
|
||||
<path d="M0 0 L12 6 L0 12 Z" fill="#78dce8"/>
|
||||
</marker>
|
||||
<style>
|
||||
.title { font: 700 31px system-ui, sans-serif; fill: #f8fafc; }
|
||||
.subtitle { font: 400 20px system-ui, sans-serif; fill: #b6c4d6; }
|
||||
.card-title { font: 700 25px system-ui, sans-serif; fill: #f8fafc; }
|
||||
.body { font: 400 21px system-ui, sans-serif; fill: #d7e1ee; }
|
||||
.small { font: 600 19px system-ui, sans-serif; fill: #d7e1ee; }
|
||||
.good { fill: #66d9a0; }
|
||||
.warn { fill: #ffc857; }
|
||||
.muted { fill: #a8b6c8; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect width="720" height="1480" fill="#0b1220"/>
|
||||
<rect x="24" y="24" width="672" height="82" rx="18" fill="#121d31" stroke="#273755" stroke-width="2"/>
|
||||
<text x="48" y="59" class="title">Путь одного учебного документа</text>
|
||||
<text x="48" y="87" class="subtitle">version 7 · локальная fixture · не схема кластера</text>
|
||||
|
||||
<rect x="54" y="136" width="612" height="158" rx="18" fill="#172842" stroke="#4a85c5" stroke-width="3"/>
|
||||
<circle cx="91" cy="183" r="20" fill="#4a85c5"/>
|
||||
<text x="84" y="190" class="small">1</text>
|
||||
<text x="126" y="179" class="card-title">Source-of-truth</text>
|
||||
<text x="126" y="213" class="body">id article-2021-07-42</text>
|
||||
<text x="126" y="244" class="body">version 7 сохранена в модели</text>
|
||||
<text x="126" y="275" class="small muted">сохранение не равно search visibility</text>
|
||||
|
||||
<path d="M360 306 L360 340" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
<text x="382" y="329" class="small muted">id + version</text>
|
||||
|
||||
<rect x="54" y="358" width="612" height="194" rx="18" fill="#172842" stroke="#7a6ff0" stroke-width="3"/>
|
||||
<circle cx="91" cy="406" r="20" fill="#7a6ff0"/>
|
||||
<text x="84" y="413" class="small">2</text>
|
||||
<text x="126" y="402" class="card-title">Ingest-постановка</text>
|
||||
<text x="126" y="436" class="body">key: article-2021-07-42:7</text>
|
||||
<text x="126" y="467" class="body">первый вызов: ingest-enqueued</text>
|
||||
<text x="126" y="498" class="body">повтор: duplicate-ingest-suppressed</text>
|
||||
<text x="126" y="529" class="small muted">в модели остаётся одна задача</text>
|
||||
|
||||
<path d="M360 564 L360 598" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="54" y="616" width="612" height="183" rx="18" fill="#172842" stroke="#d08c3f" stroke-width="3"/>
|
||||
<circle cx="91" cy="664" r="20" fill="#d08c3f"/>
|
||||
<text x="84" y="671" class="small">3</text>
|
||||
<text x="126" y="660" class="card-title">Pending index</text>
|
||||
<text x="126" y="694" class="body">event.version сверена с source.version</text>
|
||||
<text x="126" y="725" class="body">документ подготовлен, но не видим</text>
|
||||
<text x="126" y="756" class="small warn">query до refresh: 0 попаданий</text>
|
||||
|
||||
<path d="M360 811 L360 846" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="54" y="864" width="612" height="136" rx="18" fill="#173b3a" stroke="#3bbd9c" stroke-width="3"/>
|
||||
<circle cx="91" cy="912" r="20" fill="#3bbd9c"/>
|
||||
<text x="84" y="919" class="small">4</text>
|
||||
<text x="126" y="908" class="card-title">Refresh</text>
|
||||
<text x="126" y="942" class="body">явный переход pending → visible</text>
|
||||
<text x="126" y="973" class="small muted">в fixture нет HTTP, shard или interval</text>
|
||||
|
||||
<path d="M360 1012 L360 1048" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="54" y="1066" width="612" height="179" rx="18" fill="#173b3a" stroke="#66d9a0" stroke-width="3"/>
|
||||
<circle cx="91" cy="1114" r="20" fill="#66d9a0"/>
|
||||
<text x="84" y="1121" class="small">5</text>
|
||||
<text x="126" y="1110" class="card-title">Visible index</text>
|
||||
<text x="126" y="1144" class="body">version 7 получила visibleAt</text>
|
||||
<text x="126" y="1175" class="body">sourceSavedAt → visibleAt = 60</text>
|
||||
<text x="126" y="1206" class="small good">условные мс для assertion, не SLA</text>
|
||||
|
||||
<path d="M360 1257 L360 1292" stroke="#78dce8" stroke-width="5" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="54" y="1310" width="612" height="128" rx="18" fill="#162e29" stroke="#66d9a0" stroke-width="3"/>
|
||||
<text x="88" y="1360" class="card-title">Query «свежести»</text>
|
||||
<text x="88" y="1394" class="body">1 hit · current version 7</text>
|
||||
<text x="88" y="1422" class="small muted">дальше проверяем scope, filter и анализ текста</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
Reference in New Issue
Block a user