This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 680" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Маршрут разбора запрещённого импорта</title>
|
||||
<desc id="desc">Четыре шага ведут от симптома domain type в utility к причине неописанного public API, проверке фиксированного synthetic edge и действию: вернуть смысл доменному owner-у, оставить root API и зафиксировать route. Красная стрелка показывает, что deep import в internal subpath останавливают до изменения.</desc>
|
||||
<rect width="960" height="680" fill="#F7F9FC"/>
|
||||
<rect x="44" y="36" width="872" height="72" rx="16" fill="#16325C"/>
|
||||
<text x="78" y="78" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="30" font-weight="700">Маршрут: симптом → причина → проверка → действие</text>
|
||||
<text x="78" y="98" fill="#DCE8FF" font-family="Arial, sans-serif" font-size="16">Разбор одного fixed synthetic edge до конфигурации настоящего инструмента</text>
|
||||
|
||||
<rect x="56" y="170" width="194" height="190" rx="16" fill="#FFF1F3" stroke="#C83349" stroke-width="4"/>
|
||||
<text x="78" y="216" fill="#8D1D31" font-family="Arial, sans-serif" font-size="22" font-weight="700">1. Симптом</text>
|
||||
<text x="78" y="252" fill="#A93649" font-family="Arial, sans-serif" font-size="17">utility imports</text>
|
||||
<text x="78" y="280" fill="#A93649" font-family="Arial, sans-serif" font-size="18" font-weight="700">InvoiceStatus</text>
|
||||
<text x="78" y="316" fill="#A93649" font-family="Arial, sans-serif" font-size="15">или consumer идёт</text>
|
||||
<text x="78" y="338" fill="#A93649" font-family="Arial, sans-serif" font-size="15">в internal subpath</text>
|
||||
|
||||
<rect x="282" y="170" width="194" height="190" rx="16" fill="#FFF8E5" stroke="#AA6A00" stroke-width="4"/>
|
||||
<text x="304" y="216" fill="#6A4200" font-family="Arial, sans-serif" font-size="22" font-weight="700">2. Причина</text>
|
||||
<text x="304" y="252" fill="#825607" font-family="Arial, sans-serif" font-size="17">не названы root</text>
|
||||
<text x="304" y="278" fill="#825607" font-family="Arial, sans-serif" font-size="17">API, owner и</text>
|
||||
<text x="304" y="304" fill="#825607" font-family="Arial, sans-serif" font-size="17">запрещённые</text>
|
||||
<text x="304" y="330" fill="#825607" font-family="Arial, sans-serif" font-size="17">направления</text>
|
||||
|
||||
<rect x="508" y="170" width="194" height="190" rx="16" fill="#E8F1FF" stroke="#2767BE" stroke-width="4"/>
|
||||
<text x="530" y="216" fill="#16325C" font-family="Arial, sans-serif" font-size="22" font-weight="700">3. Проверка</text>
|
||||
<text x="530" y="252" fill="#294B77" font-family="Arial, sans-serif" font-size="17">fixed synthetic</text>
|
||||
<text x="530" y="278" fill="#294B77" font-family="Arial, sans-serif" font-size="17">edge сверяется</text>
|
||||
<text x="530" y="304" fill="#294B77" font-family="Arial, sans-serif" font-size="17">с API record</text>
|
||||
<text x="530" y="330" fill="#294B77" font-family="Arial, sans-serif" font-size="15">не repository scan</text>
|
||||
|
||||
<rect x="734" y="170" width="170" height="190" rx="16" fill="#ECF9F0" stroke="#26834A" stroke-width="4"/>
|
||||
<text x="756" y="216" fill="#154B2A" font-family="Arial, sans-serif" font-size="22" font-weight="700">4. Действие</text>
|
||||
<text x="756" y="252" fill="#245B37" font-family="Arial, sans-serif" font-size="16">domain meaning</text>
|
||||
<text x="756" y="276" fill="#245B37" font-family="Arial, sans-serif" font-size="16">→ domain owner</text>
|
||||
<text x="756" y="310" fill="#245B37" font-family="Arial, sans-serif" font-size="16">consumer → root</text>
|
||||
<text x="756" y="334" fill="#245B37" font-family="Arial, sans-serif" font-size="16">API or review</text>
|
||||
|
||||
<path d="M250 265 L282 265" fill="none" stroke="#C83349" stroke-width="5" marker-end="url(#arrowRed)"/>
|
||||
<path d="M476 265 L508 265" fill="none" stroke="#AA6A00" stroke-width="5" marker-end="url(#arrowGold)"/>
|
||||
<path d="M702 265 L734 265" fill="none" stroke="#2767BE" stroke-width="5" marker-end="url(#arrowBlue)"/>
|
||||
|
||||
<path d="M154 420 C280 548 500 548 622 420" fill="none" stroke="#C83349" stroke-width="5" stroke-dasharray="12 10" marker-end="url(#arrowRed)"/>
|
||||
<rect x="268" y="510" width="430" height="68" rx="14" fill="#FFF0F2" stroke="#C83349" stroke-width="2"/>
|
||||
<text x="294" y="539" fill="#8D1D31" font-family="Arial, sans-serif" font-size="19" font-weight="700">Стоп: internal import не становится API молча</text>
|
||||
<text x="294" y="563" fill="#8D1D31" font-family="Arial, sans-serif" font-size="15">Нужен root export review или удаление зависимости.</text>
|
||||
|
||||
<rect x="44" y="624" width="872" height="28" rx="9" fill="#DCE8FF"/>
|
||||
<text x="62" y="643" fill="#274873" font-family="Arial, sans-serif" font-size="14">Результат fixture — decision draft only: real files, lint, CI, network и production не затрагиваются.</text>
|
||||
|
||||
<defs>
|
||||
<marker id="arrowRed" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#C83349"/></marker>
|
||||
<marker id="arrowGold" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#AA6A00"/></marker>
|
||||
<marker id="arrowBlue" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#2767BE"/></marker>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.7 KiB |
@@ -0,0 +1,50 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 680" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Граф границ пакета platform formatting</title>
|
||||
<desc id="desc">Orders feature и billing domain используют root API formatting package. Formatting package использует platform runtime. Пунктирная красная стрелка от formatting package к billing domain запрещена: utility не должна импортировать доменную модель.</desc>
|
||||
<rect width="960" height="680" fill="#F7F9FC"/>
|
||||
<rect x="44" y="36" width="872" height="72" rx="16" fill="#16325C"/>
|
||||
<text x="80" y="78" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="30" font-weight="700">Граница shared utility: направление зависимостей</text>
|
||||
<text x="80" y="98" fill="#DCE8FF" font-family="Arial, sans-serif" font-size="16">Учебная схема: public API меньше внутреннего устройства пакета</text>
|
||||
|
||||
<rect x="76" y="166" width="252" height="118" rx="14" fill="#E8F1FF" stroke="#2767BE" stroke-width="3"/>
|
||||
<text x="102" y="210" fill="#16325C" font-family="Arial, sans-serif" font-size="24" font-weight="700">orders feature</text>
|
||||
<text x="102" y="240" fill="#294B77" font-family="Arial, sans-serif" font-size="17">consumer</text>
|
||||
<text x="102" y="263" fill="#294B77" font-family="Arial, sans-serif" font-size="15">formatMoney from root API</text>
|
||||
|
||||
<rect x="76" y="410" width="252" height="118" rx="14" fill="#E8F1FF" stroke="#2767BE" stroke-width="3"/>
|
||||
<text x="102" y="454" fill="#16325C" font-family="Arial, sans-serif" font-size="24" font-weight="700">billing domain</text>
|
||||
<text x="102" y="484" fill="#294B77" font-family="Arial, sans-serif" font-size="17">owner InvoiceStatus</text>
|
||||
<text x="102" y="507" fill="#294B77" font-family="Arial, sans-serif" font-size="15">may use root API</text>
|
||||
|
||||
<rect x="386" y="276" width="286" height="150" rx="16" fill="#E8F7ED" stroke="#26834A" stroke-width="4"/>
|
||||
<text x="414" y="321" fill="#154B2A" font-family="Arial, sans-serif" font-size="23" font-weight="700">platform formatting</text>
|
||||
<text x="414" y="351" fill="#245B37" font-family="Arial, sans-serif" font-size="17">public: formatMoney</text>
|
||||
<text x="414" y="376" fill="#245B37" font-family="Arial, sans-serif" font-size="17">public: formatIsoDate</text>
|
||||
<text x="414" y="401" fill="#245B37" font-family="Arial, sans-serif" font-size="15">inputs: primitive values only</text>
|
||||
|
||||
<rect x="748" y="276" width="154" height="150" rx="14" fill="#FFF4D8" stroke="#AA6A00" stroke-width="3"/>
|
||||
<text x="772" y="328" fill="#6A4200" font-family="Arial, sans-serif" font-size="21" font-weight="700">platform</text>
|
||||
<text x="772" y="356" fill="#6A4200" font-family="Arial, sans-serif" font-size="21" font-weight="700">runtime</text>
|
||||
<text x="772" y="385" fill="#825607" font-family="Arial, sans-serif" font-size="15">Intl adapter</text>
|
||||
|
||||
<path d="M328 225 C354 225 358 292 386 316" fill="none" stroke="#2767BE" stroke-width="5" marker-end="url(#arrowBlue)"/>
|
||||
<text x="260" y="180" fill="#2767BE" font-family="Arial, sans-serif" font-size="15" font-weight="700">root import</text>
|
||||
<path d="M328 469 C358 469 358 413 386 385" fill="none" stroke="#2767BE" stroke-width="5" marker-end="url(#arrowBlue)"/>
|
||||
<text x="219" y="555" fill="#2767BE" font-family="Arial, sans-serif" font-size="15" font-weight="700">root import</text>
|
||||
<path d="M672 351 L748 351" fill="none" stroke="#AA6A00" stroke-width="5" marker-end="url(#arrowGold)"/>
|
||||
<text x="678" y="328" fill="#825607" font-family="Arial, sans-serif" font-size="14" font-weight="700">allowed runtime</text>
|
||||
|
||||
<path d="M442 426 C397 534 322 556 243 528" fill="none" stroke="#C83349" stroke-width="5" stroke-dasharray="12 10" marker-end="url(#arrowRed)"/>
|
||||
<rect x="380" y="526" width="294" height="74" rx="12" fill="#FFF0F2" stroke="#C83349" stroke-width="2"/>
|
||||
<text x="400" y="555" fill="#8D1D31" font-family="Arial, sans-serif" font-size="18" font-weight="700">запрещено: utility → domain</text>
|
||||
<text x="400" y="579" fill="#8D1D31" font-family="Arial, sans-serif" font-size="15">InvoiceStatus остаётся у billing owner</text>
|
||||
|
||||
<rect x="44" y="630" width="872" height="24" rx="8" fill="#DCE8FF"/>
|
||||
<text x="60" y="648" fill="#274873" font-family="Arial, sans-serif" font-size="14">Это fixed synthetic diagram: не import scan, не package.json и не production evidence.</text>
|
||||
|
||||
<defs>
|
||||
<marker id="arrowBlue" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#2767BE"/></marker>
|
||||
<marker id="arrowGold" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#AA6A00"/></marker>
|
||||
<marker id="arrowRed" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#C83349"/></marker>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,41 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 680" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Таблица публичного API formatting package</title>
|
||||
<desc id="desc">В зелёной колонке указаны root package specifier, formatMoney и formatIsoDate с примитивными входами. В красной колонке — запрещённые InvoiceStatus и internal subpath. Нижняя полоса поясняет, что public API является контрактом, а не каталогом файлов.</desc>
|
||||
<rect width="960" height="680" fill="#F7F9FC"/>
|
||||
<rect x="44" y="36" width="872" height="72" rx="16" fill="#16325C"/>
|
||||
<text x="78" y="78" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="30" font-weight="700">Public API: обещание, а не каталог файлов</text>
|
||||
<text x="78" y="98" fill="#DCE8FF" font-family="Arial, sans-serif" font-size="16">Одна utility знает формат, но не доменную модель счёта</text>
|
||||
|
||||
<rect x="56" y="148" width="416" height="430" rx="16" fill="#ECF9F0" stroke="#26834A" stroke-width="4"/>
|
||||
<rect x="56" y="148" width="416" height="68" rx="14" fill="#26834A"/>
|
||||
<text x="84" y="191" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="25" font-weight="700">Разрешённый public API</text>
|
||||
<text x="84" y="250" fill="#154B2A" font-family="Arial, sans-serif" font-size="18" font-weight="700">specifier</text>
|
||||
<text x="84" y="278" fill="#245B37" font-family="Arial, sans-serif" font-size="18">@synthetic/platform-formatting</text>
|
||||
<line x1="84" y1="301" x2="444" y2="301" stroke="#9CCCAE" stroke-width="2"/>
|
||||
<text x="84" y="338" fill="#154B2A" font-family="Arial, sans-serif" font-size="18" font-weight="700">names</text>
|
||||
<text x="84" y="366" fill="#245B37" font-family="Arial, sans-serif" font-size="18">formatMoney</text>
|
||||
<text x="84" y="393" fill="#245B37" font-family="Arial, sans-serif" font-size="18">formatIsoDate</text>
|
||||
<line x1="84" y1="416" x2="444" y2="416" stroke="#9CCCAE" stroke-width="2"/>
|
||||
<text x="84" y="453" fill="#154B2A" font-family="Arial, sans-serif" font-size="18" font-weight="700">formatMoney input → output</text>
|
||||
<text x="84" y="481" fill="#245B37" font-family="Arial, sans-serif" font-size="17">amountMinor, currencyCode, locale</text>
|
||||
<text x="84" y="509" fill="#245B37" font-family="Arial, sans-serif" font-size="17">→ formatted string</text>
|
||||
<text x="84" y="548" fill="#245B37" font-family="Arial, sans-serif" font-size="15">owner reviews every new root export</text>
|
||||
|
||||
<rect x="500" y="148" width="404" height="430" rx="16" fill="#FFF1F3" stroke="#C83349" stroke-width="4"/>
|
||||
<rect x="500" y="148" width="404" height="68" rx="14" fill="#C83349"/>
|
||||
<text x="528" y="191" fill="#FFFFFF" font-family="Arial, sans-serif" font-size="25" font-weight="700">Не является public API</text>
|
||||
<text x="528" y="251" fill="#8D1D31" font-family="Arial, sans-serif" font-size="18" font-weight="700">domain model</text>
|
||||
<text x="528" y="280" fill="#A93649" font-family="Arial, sans-serif" font-size="19">InvoiceStatus</text>
|
||||
<text x="528" y="306" fill="#A93649" font-family="Arial, sans-serif" font-size="15">utility не интерпретирует статус счёта</text>
|
||||
<line x1="528" y1="329" x2="876" y2="329" stroke="#E5A7B1" stroke-width="2"/>
|
||||
<text x="528" y="366" fill="#8D1D31" font-family="Arial, sans-serif" font-size="18" font-weight="700">consumer deep import</text>
|
||||
<text x="528" y="395" fill="#A93649" font-family="Arial, sans-serif" font-size="17">platform-formatting/internal/*</text>
|
||||
<text x="528" y="421" fill="#A93649" font-family="Arial, sans-serif" font-size="15">file layout is not a stable promise</text>
|
||||
<line x1="528" y1="444" x2="876" y2="444" stroke="#E5A7B1" stroke-width="2"/>
|
||||
<text x="528" y="481" fill="#8D1D31" font-family="Arial, sans-serif" font-size="18" font-weight="700">utility outgoing route</text>
|
||||
<text x="528" y="510" fill="#A93649" font-family="Arial, sans-serif" font-size="17">→ @synthetic/billing-domain</text>
|
||||
<text x="528" y="536" fill="#A93649" font-family="Arial, sans-serif" font-size="15">requires a separate adapter or domain owner</text>
|
||||
|
||||
<rect x="44" y="616" width="872" height="34" rx="10" fill="#DCE8FF"/>
|
||||
<text x="62" y="638" fill="#274873" font-family="Arial, sans-serif" font-size="15">Public API = specifier + names + input/output + owner. Это не реальная export map и не lint report.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
Reference in New Issue
Block a user