This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 820 1040" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Разрешённые направления и публичные поверхности учебных модулей</title>
|
||||
<desc id="desc">Модули catalog, checkout, payments и notifications разделены на API и internal. Стрелки разрешают checkout обращаться к API catalog и payments, а payments к API notifications. Пунктирная красная стрелка к catalog internal запрещена.</desc>
|
||||
<defs>
|
||||
<marker id="arrow-green" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 Z" fill="#39D49A"/></marker>
|
||||
<marker id="arrow-red" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0,0 L10,5 L0,10 Z" fill="#FB7185"/></marker>
|
||||
</defs>
|
||||
<rect width="820" height="1040" rx="28" fill="#0B1220"/>
|
||||
<rect x="24" y="24" width="772" height="992" rx="20" fill="#111C30" stroke="#263653" stroke-width="2"/>
|
||||
<text x="54" y="78" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="31" font-weight="700">Разрешённые направления</text>
|
||||
<text x="54" y="112" fill="#B9C8DE" font-family="Arial, sans-serif" font-size="19">Каждая стрелка заканчивается на public API, не на весь модуль.</text>
|
||||
|
||||
<g font-family="Arial, sans-serif">
|
||||
<rect x="58" y="184" width="276" height="176" rx="18" fill="#172740" stroke="#5D79A5" stroke-width="2"/>
|
||||
<text x="82" y="222" fill="#F8FAFC" font-size="26" font-weight="700">catalog</text>
|
||||
<rect x="80" y="242" width="232" height="43" rx="9" fill="#1E5A4E"/>
|
||||
<text x="96" y="270" fill="#C9F7E1" font-size="19" font-weight="700">public: catalog.api</text>
|
||||
<rect x="80" y="298" width="232" height="40" rx="9" fill="#263247"/>
|
||||
<text x="96" y="324" fill="#B5C4D8" font-size="18">internal: catalog.internal</text>
|
||||
|
||||
<rect x="474" y="144" width="276" height="176" rx="18" fill="#172740" stroke="#5D79A5" stroke-width="2"/>
|
||||
<text x="498" y="182" fill="#F8FAFC" font-size="26" font-weight="700">checkout</text>
|
||||
<rect x="496" y="202" width="232" height="43" rx="9" fill="#1E5A4E"/>
|
||||
<text x="512" y="230" fill="#C9F7E1" font-size="19" font-weight="700">public: checkout.api</text>
|
||||
<rect x="496" y="258" width="232" height="40" rx="9" fill="#263247"/>
|
||||
<text x="512" y="284" fill="#B5C4D8" font-size="18">internal: checkout.internal</text>
|
||||
|
||||
<rect x="474" y="498" width="276" height="176" rx="18" fill="#172740" stroke="#5D79A5" stroke-width="2"/>
|
||||
<text x="498" y="536" fill="#F8FAFC" font-size="26" font-weight="700">payments</text>
|
||||
<rect x="496" y="556" width="232" height="43" rx="9" fill="#1E5A4E"/>
|
||||
<text x="512" y="584" fill="#C9F7E1" font-size="19" font-weight="700">public: payments.api</text>
|
||||
<rect x="496" y="612" width="232" height="40" rx="9" fill="#263247"/>
|
||||
<text x="512" y="638" fill="#B5C4D8" font-size="18">internal: payments.internal</text>
|
||||
|
||||
<rect x="58" y="748" width="276" height="176" rx="18" fill="#172740" stroke="#5D79A5" stroke-width="2"/>
|
||||
<text x="82" y="786" fill="#F8FAFC" font-size="26" font-weight="700">notifications</text>
|
||||
<rect x="80" y="806" width="232" height="43" rx="9" fill="#1E5A4E"/>
|
||||
<text x="96" y="834" fill="#C9F7E1" font-size="19" font-weight="700">public: notifications.api</text>
|
||||
<rect x="80" y="862" width="232" height="40" rx="9" fill="#263247"/>
|
||||
<text x="96" y="888" fill="#B5C4D8" font-size="18">internal: notifications.internal</text>
|
||||
</g>
|
||||
|
||||
<path d="M474 230 C420 230 390 252 334 260" fill="none" stroke="#39D49A" stroke-width="5" marker-end="url(#arrow-green)"/>
|
||||
<text x="354" y="223" fill="#B6F4D8" font-family="Arial, sans-serif" font-size="17" font-weight="700">checkout → catalog.api</text>
|
||||
<path d="M612 320 L612 498" fill="none" stroke="#39D49A" stroke-width="5" marker-end="url(#arrow-green)"/>
|
||||
<text x="486" y="394" fill="#B6F4D8" font-family="Arial, sans-serif" font-size="17" font-weight="700">checkout →</text>
|
||||
<text x="486" y="418" fill="#B6F4D8" font-family="Arial, sans-serif" font-size="17" font-weight="700">payments.api</text>
|
||||
<path d="M474 606 C400 635 370 748 334 826" fill="none" stroke="#39D49A" stroke-width="5" marker-end="url(#arrow-green)"/>
|
||||
<text x="230" y="604" fill="#B6F4D8" font-family="Arial, sans-serif" font-size="17" font-weight="700">payments → notifications.api</text>
|
||||
|
||||
<path d="M474 276 C412 316 378 328 312 316" fill="none" stroke="#FB7185" stroke-width="4" stroke-dasharray="11 9" marker-end="url(#arrow-red)"/>
|
||||
<text x="350" y="351" fill="#FDA4AF" font-family="Arial, sans-serif" font-size="17" font-weight="700">запрещено: checkout → catalog.internal</text>
|
||||
<rect x="358" y="920" width="392" height="68" rx="12" fill="#0E1727" stroke="#2B3A54" stroke-width="2"/>
|
||||
<text x="378" y="950" fill="#B9C8DE" font-family="Arial, sans-serif" font-size="17">Не «весь модуль», а</text>
|
||||
<text x="378" y="974" fill="#B9C8DE" font-family="Arial, sans-serif" font-size="17">«его public API по правилу».</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1,56 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 820 1000" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Петля проверки границ в fixed synthetic модели</title>
|
||||
<desc id="desc">Шесть шагов: fixed input from-to-surface, проверка формы, сверка public API, сверка разрешённого направления и цикла, отчёт accepted или violations, ручной review карты. Боковая панель говорит, что файл, CI, сеть, trace и production не используются.</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="#7DD3FC"/></marker>
|
||||
<marker id="arrow-small" markerWidth="9" markerHeight="9" refX="7" refY="4.5" orient="auto"><path d="M0,0 L9,4.5 L0,9 Z" fill="#39D49A"/></marker>
|
||||
</defs>
|
||||
<rect width="820" height="1000" rx="28" fill="#0B1220"/>
|
||||
<rect x="24" y="24" width="772" height="952" rx="20" fill="#111C30" stroke="#263653" stroke-width="2"/>
|
||||
<text x="54" y="78" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="31" font-weight="700">Петля проверки boundary policy</text>
|
||||
<text x="54" y="112" fill="#B9C8DE" font-family="Arial, sans-serif" font-size="19">PASS подтверждает карту в памяти, затем человек решает, менять ли policy.</text>
|
||||
|
||||
<g font-family="Arial, sans-serif">
|
||||
<rect x="58" y="162" width="322" height="106" rx="16" fill="#193252" stroke="#4D7DB8" stroke-width="2"/>
|
||||
<text x="82" y="199" fill="#E5F0FF" font-size="23" font-weight="700">1. fixed synthetic input</text>
|
||||
<text x="82" y="231" fill="#B8D4F5" font-size="18">from · to · surface · map version</text>
|
||||
|
||||
<rect x="58" y="320" width="322" height="106" rx="16" fill="#172740" stroke="#526A91" stroke-width="2"/>
|
||||
<text x="82" y="357" fill="#E5F0FF" font-size="23" font-weight="700">2. форма и fixed map</text>
|
||||
<text x="82" y="389" fill="#B8C7DE" font-size="18">лишнее поле → reject</text>
|
||||
|
||||
<rect x="58" y="478" width="322" height="106" rx="16" fill="#172740" stroke="#526A91" stroke-width="2"/>
|
||||
<text x="82" y="515" fill="#E5F0FF" font-size="23" font-weight="700">3. public surface</text>
|
||||
<text x="82" y="547" fill="#B8C7DE" font-size="18">*.internal → violation</text>
|
||||
|
||||
<rect x="58" y="636" width="322" height="106" rx="16" fill="#172740" stroke="#526A91" stroke-width="2"/>
|
||||
<text x="82" y="673" fill="#E5F0FF" font-size="23" font-weight="700">4. direction и DAG</text>
|
||||
<text x="82" y="705" fill="#B8C7DE" font-size="18">forbidden link или cycle → violation</text>
|
||||
|
||||
<rect x="440" y="404" width="322" height="132" rx="16" fill="#164237" stroke="#39D49A" stroke-width="2"/>
|
||||
<text x="464" y="443" fill="#D7FCE7" font-size="23" font-weight="700">5. synthetic report</text>
|
||||
<text x="464" y="475" fill="#B6F4D8" font-size="18">accepted | violations | not-granted</text>
|
||||
<text x="464" y="504" fill="#B6F4D8" font-size="16">не CI result и не repository scan</text>
|
||||
|
||||
<rect x="440" y="628" width="322" height="132" rx="16" fill="#2C254D" stroke="#9B8AF7" stroke-width="2"/>
|
||||
<text x="464" y="667" fill="#EEEAFE" font-size="23" font-weight="700">6. ручной review карты</text>
|
||||
<text x="464" y="699" fill="#D3CCFF" font-size="18">scenario · owner · API · removal</text>
|
||||
<text x="464" y="728" fill="#D3CCFF" font-size="16">может изменить policy, не fixture</text>
|
||||
</g>
|
||||
|
||||
<path d="M219 268 L219 320" fill="none" stroke="#7DD3FC" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<path d="M219 426 L219 478" fill="none" stroke="#7DD3FC" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<path d="M219 584 L219 636" fill="none" stroke="#7DD3FC" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<path d="M380 689 C422 689 406 498 440 470" fill="none" stroke="#7DD3FC" stroke-width="4" marker-end="url(#arrow)"/>
|
||||
<path d="M601 536 L601 628" fill="none" stroke="#39D49A" stroke-width="4" marker-end="url(#arrow-small)"/>
|
||||
<path d="M440 720 C402 870 178 880 170 742" fill="none" stroke="#9B8AF7" stroke-width="3" stroke-dasharray="10 8" marker-end="url(#arrow)"/>
|
||||
<text x="75" y="895" fill="#C6BAFF" font-family="Arial, sans-serif" font-size="16">policy меняется после review; fixture остаётся fixed</text>
|
||||
|
||||
<rect x="440" y="162" width="322" height="172" rx="16" fill="#0E1727" stroke="#2B3A54" stroke-width="2"/>
|
||||
<text x="464" y="202" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="22" font-weight="700">Вне границы модели</text>
|
||||
<g fill="#B9C8DE" font-family="Arial, sans-serif" font-size="18">
|
||||
<text x="464" y="238">нет чтения filesystem или project</text>
|
||||
<text x="464" y="266">нет CI, network, HTTP или trace</text>
|
||||
<text x="464" y="294">нет production effect или release</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
@@ -0,0 +1,65 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 820 920" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Матрица разрешённых зависимостей учебного модульного монолита</title>
|
||||
<desc id="desc">Четыре модуля. Разрешены checkout к catalog API, checkout к payments API и payments к notifications API. Остальные направления заблокированы; internal поверхности не входят в матрицу разрешений.</desc>
|
||||
<rect width="820" height="920" rx="28" fill="#0B1220"/>
|
||||
<rect x="24" y="24" width="772" height="872" rx="20" fill="#111C30" stroke="#263653" stroke-width="2"/>
|
||||
<text x="56" y="78" fill="#F8FAFC" font-family="Arial, sans-serif" font-size="31" font-weight="700">Карта зависимостей: не папки, а правила</text>
|
||||
<text x="56" y="112" fill="#B9C8DE" font-family="Arial, sans-serif" font-size="19">Строка — consumer, столбец — owner. Зелёная клетка допускает только public API.</text>
|
||||
|
||||
<text x="56" y="182" fill="#8FA4C3" font-family="Arial, sans-serif" font-size="19" font-weight="700">from \ to</text>
|
||||
<g font-family="Arial, sans-serif" font-size="18" font-weight="700" text-anchor="middle">
|
||||
<text x="298" y="172" fill="#D7E3F5">catalog</text>
|
||||
<text x="440" y="172" fill="#D7E3F5">checkout</text>
|
||||
<text x="582" y="172" fill="#D7E3F5">payments</text>
|
||||
<text x="724" y="172" fill="#D7E3F5">notifications</text>
|
||||
</g>
|
||||
|
||||
<g fill="#18263E" stroke="#30425F" stroke-width="1.5">
|
||||
<rect x="190" y="198" width="130" height="108" rx="12"/>
|
||||
<rect x="332" y="198" width="130" height="108" rx="12"/>
|
||||
<rect x="474" y="198" width="130" height="108" rx="12"/>
|
||||
<rect x="616" y="198" width="130" height="108" rx="12"/>
|
||||
<rect x="190" y="320" width="130" height="108" rx="12"/>
|
||||
<rect x="332" y="320" width="130" height="108" rx="12"/>
|
||||
<rect x="474" y="320" width="130" height="108" rx="12"/>
|
||||
<rect x="616" y="320" width="130" height="108" rx="12"/>
|
||||
<rect x="190" y="442" width="130" height="108" rx="12"/>
|
||||
<rect x="332" y="442" width="130" height="108" rx="12"/>
|
||||
<rect x="474" y="442" width="130" height="108" rx="12"/>
|
||||
<rect x="616" y="442" width="130" height="108" rx="12"/>
|
||||
<rect x="190" y="564" width="130" height="108" rx="12"/>
|
||||
<rect x="332" y="564" width="130" height="108" rx="12"/>
|
||||
<rect x="474" y="564" width="130" height="108" rx="12"/>
|
||||
<rect x="616" y="564" width="130" height="108" rx="12"/>
|
||||
</g>
|
||||
|
||||
<g font-family="Arial, sans-serif" font-size="20" font-weight="700" fill="#D7E3F5">
|
||||
<text x="56" y="260">catalog</text>
|
||||
<text x="56" y="382">checkout</text>
|
||||
<text x="56" y="504">payments</text>
|
||||
<text x="56" y="626">notifications</text>
|
||||
</g>
|
||||
<g font-family="Arial, sans-serif" font-size="20" text-anchor="middle">
|
||||
<g fill="#6F849F"><text x="255" y="260">—</text><text x="397" y="260">—</text><text x="539" y="260">—</text><text x="681" y="260">—</text></g>
|
||||
<g fill="#6F849F"><text x="397" y="382">—</text><text x="681" y="382">—</text></g>
|
||||
<g fill="#6F849F"><text x="255" y="504">—</text><text x="397" y="504">—</text><text x="539" y="504">—</text></g>
|
||||
<g fill="#6F849F"><text x="255" y="626">—</text><text x="397" y="626">—</text><text x="539" y="626">—</text><text x="681" y="626">—</text></g>
|
||||
</g>
|
||||
<g fill="#163D38" stroke="#39D49A" stroke-width="2">
|
||||
<rect x="198" y="328" width="114" height="92" rx="10"/>
|
||||
<rect x="482" y="328" width="114" height="92" rx="10"/>
|
||||
<rect x="624" y="450" width="114" height="92" rx="10"/>
|
||||
</g>
|
||||
<g fill="#B6F4D8" font-family="Arial, sans-serif" font-size="18" font-weight="700" text-anchor="middle">
|
||||
<text x="255" y="367">✓ API</text><text x="255" y="394">catalog</text>
|
||||
<text x="539" y="367">✓ API</text><text x="539" y="394">payments</text>
|
||||
<text x="681" y="489">✓ API</text><text x="681" y="516">notifications</text>
|
||||
</g>
|
||||
|
||||
<rect x="56" y="718" width="708" height="130" rx="16" fill="#0E1727" stroke="#2B3A54" stroke-width="2"/>
|
||||
<circle cx="88" cy="759" r="9" fill="#39D49A"/>
|
||||
<text x="110" y="766" fill="#D7E3F5" font-family="Arial, sans-serif" font-size="19">разрешено: consumer обращается к названному owner.api</text>
|
||||
<circle cx="88" cy="801" r="9" fill="#7486A0"/>
|
||||
<text x="110" y="808" fill="#D7E3F5" font-family="Arial, sans-serif" font-size="19">— : нет declared direction; не добавлять без сценария и review</text>
|
||||
<text x="56" y="879" fill="#8FA4C3" font-family="Arial, sans-serif" font-size="17">internal поверхности не становятся допустимыми от того, что лежат в соседней папке.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
Reference in New Issue
Block a user