rewrite 2026-09 and 2027 articles for reader-facing quality
Build and deploy / deploy (push) Successful in 18s

This commit is contained in:
2026-07-31 22:26:56 +03:00
parent 3bfc3f21c4
commit 440c8721dc
69 changed files with 4424 additions and 3533 deletions
@@ -1,33 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 720" role="img" aria-labelledby="title desc">
<title id="title">Граф решения перед техническим советом</title>
<desc id="desc">Три входа: вопрос, проверяемый источник и граница вывода. Только точные literals ведут к синтетической передаче плана. Неизвестный источник или заявленный результат ведут к остановке.</desc>
<defs>
<linearGradient id="bg" x1="0" x2="1" y1="0" y2="1"><stop stop-color="#10233F"/><stop offset="1" stop-color="#183B5C"/></linearGradient>
<marker id="arrow" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0 0L12 6L0 12z" fill="#8ED1C0"/></marker>
<marker id="stop" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0 0L12 6L0 12z" fill="#FF897A"/></marker>
</defs>
<rect width="1200" height="720" rx="36" fill="url(#bg)"/>
<text x="70" y="78" fill="#F6FAFF" font-family="Arial, sans-serif" font-size="34" font-weight="700">Совет начинается с карточки решения</text>
<text x="70" y="116" fill="#B8CCE1" font-family="Arial, sans-serif" font-size="22">P118: форма вопроса, а не история будущего выпуска</text>
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="720" viewBox="0 0 1200 720" role="img" aria-labelledby="title desc">
<title id="title">Граф настройки CSP и HSTS</title>
<desc id="desc">Карта security headers связывает список ресурсов с CSP, HTTPS-ответ с HSTS, а неизвестный ресурс ведёт к блокировке или отдельной проверке.</desc>
<defs><marker id="a" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0 0L12 6L0 12z" fill="#8ed1c0"/></marker><marker id="s" markerWidth="12" markerHeight="12" refX="10" refY="6" orient="auto"><path d="M0 0L12 6L0 12z" fill="#ff897a"/></marker></defs>
<rect width="1200" height="720" rx="36" fill="#10233f"/>
<text x="70" y="78" fill="#f6faff" font-family="Arial, sans-serif" font-size="34" font-weight="700">Security headers: два независимых слоя</text>
<text x="70" y="116" fill="#b8cce1" font-family="Arial, sans-serif" font-size="22">CSP ограничивает ресурсы, HSTS закрепляет HTTPS</text>
<g font-family="Arial, sans-serif">
<rect x="70" y="190" width="270" height="150" rx="20" fill="#224E71" stroke="#83D3C0" stroke-width="3"/>
<text x="102" y="238" fill="#FFFFFF" font-size="26" font-weight="700">1. Вопрос</text>
<text x="102" y="276" fill="#CFE5F4" font-size="21">Какое решение</text><text x="102" y="305" fill="#CFE5F4" font-size="21">нельзя принять?</text>
<rect x="70" y="430" width="270" height="150" rx="20" fill="#224E71" stroke="#83D3C0" stroke-width="3"/>
<text x="102" y="478" fill="#FFFFFF" font-size="26" font-weight="700">2. Источник</text>
<text x="102" y="516" fill="#CFE5F4" font-size="21">Дата, URL, версия</text><text x="102" y="545" fill="#CFE5F4" font-size="21">и предел применения</text>
<rect x="430" y="310" width="300" height="160" rx="20" fill="#176B67" stroke="#A9E5D4" stroke-width="4"/>
<text x="466" y="360" fill="#FFFFFF" font-size="27" font-weight="700">Exact literal</text>
<text x="466" y="400" fill="#D7FFF4" font-size="22">граница вывода</text><text x="466" y="430" fill="#D7FFF4" font-size="22">без review и outcome</text>
<rect x="820" y="250" width="305" height="170" rx="20" fill="#1D785A" stroke="#B9EDCE" stroke-width="4"/>
<text x="851" y="304" fill="#FFFFFF" font-size="25" font-weight="700">synthetic-plan-</text><text x="851" y="337" fill="#FFFFFF" font-size="25" font-weight="700">hand-off</text>
<text x="851" y="378" fill="#D4F7E3" font-size="20">productionEffect:</text><text x="851" y="405" fill="#D4F7E3" font-size="20">not-attempted</text>
<rect x="820" y="505" width="305" height="112" rx="20" fill="#823B46" stroke="#FF9A8A" stroke-width="4"/>
<text x="852" y="552" fill="#FFFFFF" font-size="26" font-weight="700">STOP</text><text x="852" y="584" fill="#FFE1DC" font-size="20">unknown / declared</text>
<rect x="70" y="210" width="270" height="150" rx="20" fill="#224e71" stroke="#83d3c0" stroke-width="3"/><text x="102" y="260" fill="#fff" font-size="26" font-weight="700">Ресурсы страницы</text><text x="102" y="300" fill="#cfe5f4" font-size="21">scripts · styles · frames</text><text x="102" y="332" fill="#cfe5f4" font-size="20">self + nonce</text>
<rect x="465" y="210" width="270" height="150" rx="20" fill="#176b67" stroke="#a9e5d4" stroke-width="4"/><text x="497" y="260" fill="#fff" font-size="27" font-weight="700">CSP</text><text x="497" y="300" fill="#d7fff4" font-size="21">default-src self</text><text x="497" y="332" fill="#d7fff4" font-size="20">object none · base-uri</text>
<rect x="860" y="210" width="270" height="150" rx="20" fill="#1d785a" stroke="#b9edce" stroke-width="4"/><text x="892" y="260" fill="#fff" font-size="27" font-weight="700">HSTS</text><text x="892" y="300" fill="#d4f7e3" font-size="21">HTTPS only</text><text x="892" y="332" fill="#d4f7e3" font-size="20">max-age + subdomains</text>
<path d="M340 285H465M735 285H860" fill="none" stroke="#8ed1c0" stroke-width="6" marker-end="url(#a)"/>
<rect x="360" y="505" width="480" height="100" rx="20" fill="#823b46" stroke="#ff9a8a" stroke-width="4"/><text x="600" y="550" text-anchor="middle" fill="#fff" font-size="25" font-weight="700">unknown resource → block/report</text><text x="600" y="582" text-anchor="middle" fill="#ffe1dc" font-size="20">не отключать verify ради «зелёного» ответа</text>
<path d="M600 360V505" fill="none" stroke="#ff897a" stroke-width="6" marker-end="url(#s)"/>
</g>
<path d="M340 265H405Q425 265 425 310" fill="none" stroke="#8ED1C0" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M340 505H390Q425 505 425 470" fill="none" stroke="#8ED1C0" stroke-width="6" marker-end="url(#arrow)"/>
<path d="M730 390H790" fill="none" stroke="#8ED1C0" stroke-width="7" marker-end="url(#arrow)"/>
<path d="M580 470V560Q580 590 810 590" fill="none" stroke="#FF897A" stroke-width="6" stroke-dasharray="12 12" marker-end="url(#stop)"/>
<text x="488" y="530" fill="#FFB2A7" font-family="Arial, sans-serif" font-size="19">unknown source / claim</text>
</svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB