This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="1240" viewBox="0 0 720 1240" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Контракт учебной резервной копии и восстановления</title>
|
||||
<desc id="desc">Вертикальная схема из пяти шагов: scope, archive, manifest с checksum, изолированный restore и доказательство результата. Hash проверяет байты, а проверки после restore — смысл результата.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="12" markerHeight="12" refX="6" refY="6" orient="auto">
|
||||
<path d="M1 1 L11 6 L1 11 Z" fill="#3566c8"/>
|
||||
</marker>
|
||||
<style>
|
||||
.title { fill: #14213d; font: 700 34px system-ui, -apple-system, sans-serif; }
|
||||
.subtitle { fill: #43536f; font: 400 21px system-ui, -apple-system, sans-serif; }
|
||||
.step { fill: #3566c8; font: 700 22px system-ui, -apple-system, sans-serif; }
|
||||
.label { fill: #14213d; font: 700 26px system-ui, -apple-system, sans-serif; }
|
||||
.body { fill: #34435c; font: 400 22px system-ui, -apple-system, sans-serif; }
|
||||
.note { fill: #51627d; font: 400 20px system-ui, -apple-system, sans-serif; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect width="720" height="1240" fill="#f7f9fc"/>
|
||||
<rect x="40" y="36" width="640" height="140" rx="24" fill="#e9f0ff"/>
|
||||
<text x="72" y="88" class="title">Backup contract</text>
|
||||
<text x="72" y="124" class="title">начинается со scope</text>
|
||||
<text x="72" y="154" class="subtitle">Учебный путь: archive не равен проверенному restore</text>
|
||||
|
||||
<line x1="360" y1="344" x2="360" y2="386" stroke="#3566c8" stroke-width="6" marker-end="url(#arrow)"/>
|
||||
<line x1="360" y1="524" x2="360" y2="566" stroke="#3566c8" stroke-width="6" marker-end="url(#arrow)"/>
|
||||
<line x1="360" y1="724" x2="360" y2="766" stroke="#3566c8" stroke-width="6" marker-end="url(#arrow)"/>
|
||||
<line x1="360" y1="934" x2="360" y2="976" stroke="#3566c8" stroke-width="6" marker-end="url(#arrow)"/>
|
||||
|
||||
<rect x="48" y="220" width="624" height="124" rx="20" fill="#ffffff" stroke="#8ba8e8" stroke-width="3"/>
|
||||
<circle cx="94" cy="282" r="25" fill="#3566c8"/>
|
||||
<text x="87" y="290" fill="#ffffff" font-family="system-ui, sans-serif" font-size="23" font-weight="700">1</text>
|
||||
<text x="140" y="271" class="label">Scope</text>
|
||||
<text x="140" y="304" class="body">catalog + reference</text>
|
||||
<text x="140" y="330" class="note">Роли, tablespaces и внешние файлы названы отдельно</text>
|
||||
|
||||
<rect x="48" y="400" width="624" height="124" rx="20" fill="#ffffff" stroke="#8ba8e8" stroke-width="3"/>
|
||||
<circle cx="94" cy="462" r="25" fill="#3566c8"/>
|
||||
<text x="87" y="470" fill="#ffffff" font-family="system-ui, sans-serif" font-size="23" font-weight="700">2</text>
|
||||
<text x="140" y="451" class="label">Archive</text>
|
||||
<text x="140" y="484" class="body">Логический dump в известном формате</text>
|
||||
<text x="140" y="510" class="note">Имя файла не заменяет описание содержимого</text>
|
||||
|
||||
<rect x="48" y="580" width="624" height="144" rx="20" fill="#ffffff" stroke="#8ba8e8" stroke-width="3"/>
|
||||
<circle cx="94" cy="652" r="25" fill="#3566c8"/>
|
||||
<text x="87" y="660" fill="#ffffff" font-family="system-ui, sans-serif" font-size="23" font-weight="700">3</text>
|
||||
<text x="140" y="635" class="label">Manifest + checksum</text>
|
||||
<text x="140" y="668" class="body">Hash сверяет bytes archive</text>
|
||||
<text x="140" y="696" class="note">Checks заранее называют ожидаемый результат restore</text>
|
||||
|
||||
<rect x="48" y="780" width="624" height="154" rx="20" fill="#ffffff" stroke="#8ba8e8" stroke-width="3"/>
|
||||
<circle cx="94" cy="857" r="25" fill="#3566c8"/>
|
||||
<text x="87" y="865" fill="#ffffff" font-family="system-ui, sans-serif" font-size="23" font-weight="700">4</text>
|
||||
<text x="140" y="840" class="label">Isolated restore</text>
|
||||
<text x="140" y="873" class="body">Только учебный кандидат</text>
|
||||
<text x="140" y="902" class="note">Источник не перезаписывается и не участвует в пробе</text>
|
||||
|
||||
<rect x="48" y="990" width="624" height="154" rx="20" fill="#ffffff" stroke="#5aa37b" stroke-width="3"/>
|
||||
<circle cx="94" cy="1067" r="25" fill="#26734d"/>
|
||||
<text x="87" y="1075" fill="#ffffff" font-family="system-ui, sans-serif" font-size="23" font-weight="700">5</text>
|
||||
<text x="140" y="1050" class="label">Evidence</text>
|
||||
<text x="140" y="1083" class="body">Relations, schema marker, safe counts</text>
|
||||
<text x="140" y="1112" class="note">Verdict фиксирует также непокрытые области</text>
|
||||
|
||||
<text x="48" y="1194" class="note">Checksum подтверждает bytes. Restore checks подтверждают смысл.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1,57 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="1510" viewBox="0 0 720 1510" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Диагностика учебного restore drill</title>
|
||||
<desc id="desc">Четыре вертикальные карточки связывают симптомы восстановления с причиной, проверкой и безопасным действием: неизвестный scope, несовпавший checksum, не изолированная цель и неверный результат после restore.</desc>
|
||||
<defs>
|
||||
<style>
|
||||
.title { fill: #162e2c; font: 700 34px system-ui, -apple-system, sans-serif; }
|
||||
.subtitle { fill: #46605c; font: 400 21px system-ui, -apple-system, sans-serif; }
|
||||
.number { fill: #ffffff; font: 700 24px system-ui, -apple-system, sans-serif; }
|
||||
.label { fill: #162e2c; font: 700 24px system-ui, -apple-system, sans-serif; }
|
||||
.body { fill: #35514c; font: 400 21px system-ui, -apple-system, sans-serif; }
|
||||
.action { fill: #186043; font: 700 21px system-ui, -apple-system, sans-serif; }
|
||||
.footer { fill: #506a65; font: 400 20px system-ui, -apple-system, sans-serif; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect width="720" height="1510" fill="#f6faf8"/>
|
||||
<rect x="40" y="36" width="640" height="142" rx="24" fill="#dff2ea"/>
|
||||
<text x="72" y="88" class="title">Диагностика drill</text>
|
||||
<text x="72" y="124" class="title">до и после restore</text>
|
||||
<text x="72" y="154" class="subtitle">Симптом не лечим следующей командой без проверки</text>
|
||||
|
||||
<rect x="48" y="220" width="624" height="250" rx="22" fill="#ffffff" stroke="#81bca3" stroke-width="3"/>
|
||||
<circle cx="94" cy="268" r="26" fill="#26734d"/>
|
||||
<text x="86" y="276" class="number">1</text>
|
||||
<text x="140" y="266" class="label">Scope не назван</text>
|
||||
<text x="140" y="302" class="body">Причина: archive выбран по имени,</text>
|
||||
<text x="140" y="330" class="body">а не по требуемому набору объектов.</text>
|
||||
<text x="140" y="370" class="body">Проверка: includes / excludes и archive list.</text>
|
||||
<text x="140" y="418" class="action">Действие: остановить restore, уточнить contract.</text>
|
||||
|
||||
<rect x="48" y="505" width="624" height="250" rx="22" fill="#ffffff" stroke="#81bca3" stroke-width="3"/>
|
||||
<circle cx="94" cy="553" r="26" fill="#26734d"/>
|
||||
<text x="86" y="561" class="number">2</text>
|
||||
<text x="140" y="551" class="label">Checksum не совпал</text>
|
||||
<text x="140" y="587" class="body">Причина: другие или изменённые bytes.</text>
|
||||
<text x="140" y="627" class="body">Проверка: SHA-256 фактического archive.</text>
|
||||
<text x="140" y="675" class="action">Действие: не использовать файл, получить доверенный.</text>
|
||||
|
||||
<rect x="48" y="790" width="624" height="250" rx="22" fill="#ffffff" stroke="#81bca3" stroke-width="3"/>
|
||||
<circle cx="94" cy="838" r="26" fill="#26734d"/>
|
||||
<text x="86" y="846" class="number">3</text>
|
||||
<text x="140" y="836" class="label">Target не изолирован</text>
|
||||
<text x="140" y="872" class="body">Причина: runbook не назвал безопасную цель.</text>
|
||||
<text x="140" y="912" class="body">Проверка: source overwrite запрещён до команды.</text>
|
||||
<text x="140" y="960" class="action">Действие: создать candidate; иначе drill не начинать.</text>
|
||||
|
||||
<rect x="48" y="1075" width="624" height="270" rx="22" fill="#ffffff" stroke="#81bca3" stroke-width="3"/>
|
||||
<circle cx="94" cy="1123" r="26" fill="#26734d"/>
|
||||
<text x="86" y="1131" class="number">4</text>
|
||||
<text x="140" y="1121" class="label">Restore прошёл, checks нет</text>
|
||||
<text x="140" y="1157" class="body">Причина: exit code приняли за evidence.</text>
|
||||
<text x="140" y="1197" class="body">Проверка: relation, schema marker, safe count.</text>
|
||||
<text x="140" y="1245" class="action">Действие: зафиксировать verdict и пробелы scope.</text>
|
||||
|
||||
<rect x="48" y="1372" width="624" height="98" rx="18" fill="#e8f5ef"/>
|
||||
<text x="78" y="1415" class="footer">RPO/RTO требуют отдельного</text>
|
||||
<text x="78" y="1444" class="footer">разрешённого учебного drill.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
@@ -0,0 +1,68 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="1280" viewBox="0 0 720 1280" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Путь учебного восстановления из archive</title>
|
||||
<desc id="desc">Вертикальный путь из шести этапов: scope, archive, checksum, список archive, изолированный кандидат, restore и смысловые проверки. У каждого этапа есть собственная причина остановить путь.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" markerWidth="12" markerHeight="12" refX="6" refY="6" orient="auto">
|
||||
<path d="M1 1 L11 6 L1 11 Z" fill="#8b5b18"/>
|
||||
</marker>
|
||||
<style>
|
||||
.title { fill: #27223a; font: 700 34px system-ui, -apple-system, sans-serif; }
|
||||
.subtitle { fill: #5f5870; font: 400 21px system-ui, -apple-system, sans-serif; }
|
||||
.tag { fill: #8b5b18; font: 700 21px system-ui, -apple-system, sans-serif; }
|
||||
.label { fill: #27223a; font: 700 26px system-ui, -apple-system, sans-serif; }
|
||||
.body { fill: #4e485a; font: 400 22px system-ui, -apple-system, sans-serif; }
|
||||
.note { fill: #675f73; font: 400 20px system-ui, -apple-system, sans-serif; }
|
||||
</style>
|
||||
</defs>
|
||||
<rect width="720" height="1280" fill="#fbfaf7"/>
|
||||
<rect x="40" y="36" width="640" height="142" rx="24" fill="#fff2d8"/>
|
||||
<text x="72" y="88" class="title">Restore path</text>
|
||||
<text x="72" y="124" class="title">с остановками по пути</text>
|
||||
<text x="72" y="154" class="subtitle">Каждый gate исключает один класс неверного действия</text>
|
||||
|
||||
<line x1="116" y1="247" x2="116" y2="1105" stroke="#d8b26f" stroke-width="8" stroke-linecap="round"/>
|
||||
|
||||
<circle cx="116" cy="248" r="30" fill="#8b5b18"/>
|
||||
<text x="106" y="256" fill="#ffffff" font-family="system-ui, sans-serif" font-size="22" font-weight="700">1</text>
|
||||
<rect x="170" y="194" width="500" height="110" rx="18" fill="#ffffff" stroke="#d8b26f" stroke-width="3"/>
|
||||
<text x="204" y="235" class="label">Прочитать scope</text>
|
||||
<text x="204" y="268" class="body">Что включено и что исключено?</text>
|
||||
<text x="204" y="292" class="note">Нет scope — нет разрешения на restore</text>
|
||||
|
||||
<circle cx="116" cy="420" r="30" fill="#8b5b18"/>
|
||||
<text x="106" y="428" fill="#ffffff" font-family="system-ui, sans-serif" font-size="22" font-weight="700">2</text>
|
||||
<rect x="170" y="366" width="500" height="110" rx="18" fill="#ffffff" stroke="#d8b26f" stroke-width="3"/>
|
||||
<text x="204" y="407" class="label">Сверить checksum</text>
|
||||
<text x="204" y="440" class="body">Manifest и фактические bytes</text>
|
||||
<text x="204" y="464" class="note">Не совпали — archive не используем</text>
|
||||
|
||||
<circle cx="116" cy="592" r="30" fill="#8b5b18"/>
|
||||
<text x="106" y="600" fill="#ffffff" font-family="system-ui, sans-serif" font-size="22" font-weight="700">3</text>
|
||||
<rect x="170" y="538" width="500" height="110" rx="18" fill="#ffffff" stroke="#d8b26f" stroke-width="3"/>
|
||||
<text x="204" y="579" class="label">Прочитать archive list</text>
|
||||
<text x="204" y="612" class="body">Expected relations присутствуют?</text>
|
||||
<text x="204" y="636" class="note">Нет — исправляем creation path</text>
|
||||
|
||||
<circle cx="116" cy="764" r="30" fill="#8b5b18"/>
|
||||
<text x="106" y="772" fill="#ffffff" font-family="system-ui, sans-serif" font-size="22" font-weight="700">4</text>
|
||||
<rect x="170" y="710" width="500" height="110" rx="18" fill="#ffffff" stroke="#d8b26f" stroke-width="3"/>
|
||||
<text x="204" y="751" class="label">Подтвердить candidate</text>
|
||||
<text x="204" y="784" class="body">Изолирован и не является источником</text>
|
||||
<text x="204" y="808" class="note">Нет — drill корректно останавливается</text>
|
||||
|
||||
<circle cx="116" cy="936" r="30" fill="#8b5b18"/>
|
||||
<text x="106" y="944" fill="#ffffff" font-family="system-ui, sans-serif" font-size="22" font-weight="700">5</text>
|
||||
<rect x="170" y="882" width="500" height="110" rx="18" fill="#ffffff" stroke="#d8b26f" stroke-width="3"/>
|
||||
<text x="204" y="923" class="label">Выполнить restore</text>
|
||||
<text x="204" y="956" class="body">Только в этот candidate</text>
|
||||
<text x="204" y="980" class="note">Exit code не становится финальным verdict</text>
|
||||
|
||||
<circle cx="116" cy="1108" r="30" fill="#26734d"/>
|
||||
<text x="106" y="1116" fill="#ffffff" font-family="system-ui, sans-serif" font-size="22" font-weight="700">6</text>
|
||||
<rect x="170" y="1054" width="500" height="118" rx="18" fill="#ffffff" stroke="#69af87" stroke-width="3"/>
|
||||
<text x="204" y="1095" class="label">Собрать evidence</text>
|
||||
<text x="204" y="1128" class="body">Relations, marker, safe counts</text>
|
||||
<text x="204" y="1152" class="note">И отдельно: что этот drill не проверял</text>
|
||||
|
||||
<text x="48" y="1230" class="tag">Правило: не перескакивать через gate ради «быстрого» restore.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
Reference in New Issue
Block a user