---
title: "אדריכלות הפלטפורמה: מה החלטנו, ועל מה היא מתבססת."
seo_title: "אדריכלות הפלטפורמה: החלטות והפניות | SazAI"
description: "כיצד נבנית SazAI: מנועים שלא תלויים בפורמט, שושלת, החלטות בגרסאות, וואלידציה בשיטה."
tags: [marketing]
icon: book
---

> **מסקנה: האוצר של הצוות הוא השליטה בתשתית; ואף החלטה כאן אינה טעם: הבחירה כתובה, עם מה שהודחק ומדוע.** הפירמידה למטה היא המפה; הפער נשאר מחוץ לה, כאמור.

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><path d="M24 8l16 8-16 8-16-8z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M8 24l16 8 16-8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M8 32l16 8 16-8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg></span></div>

## מה זאת SazAI

<h3 class="sub">מנועים, רכיבים ותיעוד, בשליטת מי שבנה אותם</h3>

SazAI היא הפלטפורמה: תשתית הבינה וההוכחה שעליה בנויים המוצרים. ריבוי דיירים, הזדהות, שושלת, אורכסטריה, שכבת סוכנים, מדידה מדויקת וההחלטות בגרסאות, נבנו פעם אחת. SazAI Corpus, הכספת והמערכת העיצוב הם המוצרים שיצאו כבר ממנה, וכל אחד משתמש באותו מנוע במקום לבנות אותו מחדש.

הפנלים יורדים לפי חוזק העגינה, וכל אחד מסתיים עם ההפניות שלו בבלוק שניתן להרחיב, למי שרוצה לבדוק. הציטוטים עוקבים אחרי ABNT NBR 6023 2018.

<figure class="viz" role="group" aria-label="הפירמידה בדף זה: ארבע חוזקי עגינה, מתלות הביצוע עד למיקום, והפער בחוץ">
<div class="duo" style="grid-template-columns:auto 1fr">
<div class="mid"><svg viewBox="0 0 220 170" aria-hidden="true" style="width:200px">
<polygon points="110,10 150,50 70,50" fill="var(--hue-analysis)" opacity=".85"/>
<polygon points="64,58 156,58 176,92 44,92" fill="var(--hue-output)" opacity=".65"/>
<polygon points="38,100 182,100 198,130 22,130" fill="var(--hue-upload)" opacity=".5"/>
<polygon points="16,138 204,138 214,160 6,160" fill="var(--hue-reprocess)" opacity=".35"/>
<rect x="180" y="8" width="34" height="34" rx="4" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-dasharray="4 3" style="color:var(--gray)"/>
</svg></div>
<div class="side" style="text-align:left">
<b style="color:var(--hue-analysis)">תלות ביצוע</b><span>המנוע לא רץ בלי התקן: שלב 1</span>
<b style="color:var(--hue-output);margin-top:.5rem">התקן יושם ונמדד</b><span>חוק בסכימה, קריטריון ברכיב, ניגוד לפי אסימון: שלבים 2 עד 4</span>
<b style="color:var(--hue-upload);margin-top:.5rem">החלטה מתועדת</b><span>בחירה כתובה, עם מה שהודחק ומדוע: שלבים 5 ו-6</span>
<b style="color:var(--hue-reprocess);margin-top:.5rem">מיקום</b><span>מחקרים עם האזהרה המצורפת: שלב 7</span>
<b style="color:var(--gray);margin-top:.5rem">הפער</b><span>מחוץ לפירמידה, וכאמור: פנל אחרון</span>
</div>
</div>
<figcaption>חוזק העגינה קובע את הגובה. מה שלא מחזיק שום דבר נשאר מחוץ לציור, מקוקו, עם פנל משלו.</figcaption>
</figure>

זה לא חבר וניגן למי שמגיע מבחוץ. **האוצר אינו התשתית; הוא השליטה של הצוות עליה.** למי שמכיר את המנועים, את הרכיבים ואת התיעוד יוצא מוצר SaaS חדש מזה שכבר קיים, וכל השאר בדף הזה היא מדידה של כמה זה מקצר את הדרך.

<figure class="viz duo" role="group" aria-label="מנועים, רכיבים ותיעוד; השליטה של הצוות במרכז; המוצרים שיוצאים">
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="10" y="10" width="28" height="28" rx="4" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="24" cy="24" r="6" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="24" y1="4" x2="24" y2="10" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="24" y1="38" x2="24" y2="44" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="4" y1="24" x2="10" y2="24" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="38" y1="24" x2="44" y2="24" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>התשתית</b>מנועים, רכיבים, תיעוד</div>
<div class="mid" style="color:var(--hue-upload)"><svg viewBox="0 0 120 72" aria-hidden="true"><line x1="6" y1="36" x2="40" y2="36" stroke="currentColor" stroke-width="1.5"/><path d="M34 31l6 5-6 5" fill="none" stroke="currentColor" stroke-width="1.5"/><circle cx="60" cy="36" r="14" fill="currentColor" opacity=".12" stroke="currentColor" stroke-width="1.5"/><path d="M54 36l4 4 8-8" fill="none" stroke="currentColor" stroke-width="1.5"/><line x1="80" y1="36" x2="114" y2="36" stroke="var(--hue-output)" stroke-width="1.5"/><path d="M108 31l6 5-6 5" fill="none" stroke="var(--hue-output)" stroke-width="1.5"/></svg><b>השליטה של הצוות</b>זה מה שמאיץ</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="8" y="12" width="32" height="24" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="8" y1="20" x2="40" y2="20" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="13" cy="16" r="1.4" fill="currentColor"/><circle cx="18" cy="16" r="1.4" fill="currentColor"/></svg><b>המוצרים</b>Corpus, כספת, מערכת עיצוב</div>
</figure>

הטריטוריה לרעיון הזה אינה חדשה, ולא מדף זה: היא השמונה מתוך תשע עמודים שבהם SazAI מתארת את עצמה, *פלטפורמה לפני מוצר*. מה שבא הלאה הוא ההוכחה שלה.

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-analysis)" name="file" size="36"></sz-icon></div>

## המנוע תלוי בתקני פורמט כדי להיות קיים

<h3 class="sub">שלב 1, תלות ביצוע, העגינה החזקה ביותר</h3>

אם התקן היה לא נכון בקוד, המנוע לא היה רץ. ההפניה לא מוזכרת; היא תלוי בה, וודאות יוצאת מזה.

**נתונים וממצאים:**

- מרחב שם OOXML במנוע: 237 הופעות על 37 צורות ברורות (2026-09-01).
- Dublin Core כתלות: 22 מרחבי שם. ISO 8601: התקן המצוטט ביותר במסד הנתונים, 60 הופעות.
- שרשרת בדיקה: סעיף מפורסם, הערה בטור DDL, מפת נתונים, טור יחסי. הפרפראזה אסורה בכלל כתוב; DDL ומפה נושאות את אותו סעיף, מילה למילה.

<figure class="viz duo four" role="group" aria-label="שרשרת הודאות: סעיף מפורסם, הערה DDL, שכבת מפה, טור יחסי">
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:40px;height:40px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="24" x2="32" y2="24" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>סעיף מפורסם</b>התקן, לפי מספר</div>
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:40px;height:40px"><rect x="8" y="10" width="32" height="28" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="14" y1="18" x2="34" y2="18" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-dasharray="3 2"/><line x1="14" y1="25" x2="30" y2="25" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="14" y1="31" x2="30" y2="31" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>הערה DDL</b>אותו סעיף, מילה למילה</div>
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:40px;height:40px"><circle cx="14" cy="14" r="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="34" cy="18" r="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="22" cy="34" r="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="17" y1="17" x2="31" y2="16" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="18" x2="20" y2="30" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>שכבת מפה</b>ללא הפרפראזה, לפי כלל</div>
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:40px;height:40px"><rect x="8" y="8" width="32" height="32" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="20" y1="8" x2="20" y2="40" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="8" y1="20" x2="40" y2="20" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>טור יחסי</b>קיים מכיוון שהסעיף קיים</div>
</figure>

### וההוצאה הבאה של הפורמט עולה פחות

הפורמט הראשון היה PowerPoint, וזה עלה את כל המנוע: קראתי, מדדתי, תרגמתי, כתבתי בחזרה, השוויתי, הכל בפעם הראשונה. השני, מסמך Word, עלה בסדר גודל אחד פחות. השלישי, הגיליון, עוד אחד. והרביעי, PDF, עלה אותו דבר כמו השלישי: הקו יציב. זה לא רשימה של הישגים; זה קו, והקו הוא הטיעון.

<figure class="viz curve" role="group" aria-label="עלות של כל פורמט במחזור המלא, בסקלה לוגריתמית: הראשון עלה את כל המנוע, כל הבא סדר גודל פחות, והרביעי יציב לאותו עלות כמו השלישי">
<div class="row ooxml"><b>PPTX</b><span class="track"><span class="bar" style="width:100%"></span></span><em>כל המנוע</em></div>
<div class="row ooxml"><b>DOCX</b><span class="track"><span class="bar" style="width:46%"></span></span><em>סדר גודל אחד פחות</em></div>
<div class="row ooxml"><b>XLSX</b><span class="track"><span class="bar" style="width:16%"></span></span><em>עוד אחד</em></div>
<div class="row other"><b>PDF</b><span class="track"><span class="bar" style="width:15%"></span></span><em>יציב</em></div>
<figcaption>סקלה לוגריתמית: כל שלב הוא סדר גודל. הנקודה הרביעית אינה רק הקטנה ביותר: היא בטבע שונה, וזה עלה אותו דבר כמו השלישית.</figcaption>
</figure>

<p class="claim">ה <b>PDF הוא התשתית הראשונה שאינה Office</b>: גרף בינרי של אובייקטים במקום zip בתוספת XML. אילו המנוע היה רק הופך טוב יותר ב-PowerPoint, הפורמט הרביעי היה עולה כמו הראשון. עלה כמו השלישי. <b>המנוע לא הפך מהיר יותר ב-PowerPoint; הוא הפך לא תלוי בפורמט</b>, ו <a href="documents">ארבע פורמטים</a> רצים היום על אותה ארכיטקטורה, כל אחד עם הערנטיה המוצהרת שלו. זו הסיבה שהחמישי יעלה מה שהרביעי עלה, וזה מה שהדף הזה קורא להאצה.</p>

<div class="bound">
<p><b>איפה זה מתועד, אמור לפני שתשאל.</b> בגיט, לא במתפקיד הוקו: הקו מבוסס על החלטות מתוארכות ובקומיטים, שהם המקור הנכון לקטע זמן, וזה מה שנחזק בהערכה. הזמנים המוחלטים של כל פורמט חיים במסמך הטכני, עם הפקודה שמייצרת אותם לצידה.</p>
</div>
<details class="refs"><summary>הפניות והחלטות מתועדות</summary>
<div>
<p><b>מה שנכתב, ומה שהודחק</b></p><ul><li>קרא כל פורמט לפי התקן, סעיף לסעיף; היוריסטיקה הודחקה מכיוון שהיא לא שורדת ביקורת.</li><li>תאריכים בתבנית ISO 8601 בכל מערכת; מטא דטה לפי Dublin Core.</li><li>PDF התקבל כתשתית הראשונה שאינה Office, המוזכרת לפי התקן שלו.</li></ul><p><b>הפניות (ABNT NBR 6023:2018)</b></p><ul><li>ECMA INTERNATIONAL. <b>ECMA-376</b>: פורמטי Office Open XML. זמין בכתובת: https://ecma-international.org/publications-and-standards/standards/ecma-376/.</li><li>ISO/IEC. <b>ISO/IEC 29500</b>: פורמטי Office Open XML.</li><li>ISO. <b>ISO 32000-1</b>: פורמט PDF. ISO. <b>ISO 19005</b>: PDF/A.</li><li>ISO. <b>ISO 15836-1</b>: Dublin Core. ISO. <b>ISO 8601</b>: תאריך וזמן.</li><li>IETF. <b>RFC 5646</b>: תגים לזיהוי שפות.</li><li>MICROSOFT. <b>MS-PPTX, MS-DOCX, MS-OE376, MS-ODRAWXML, MS-OFFCRYPTO</b>: הערות ליישום.</li><li>UNICODE CONSORTIUM. <b>Unicode CMap</b> מפרטים.</li></ul>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><circle cx="24" cy="24" r="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="10" cy="12" r="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="38" cy="10" r="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="12" cy="38" r="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="38" cy="36" r="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="13" y1="14" x2="20" y2="21" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="35" y1="12" x2="28" y2="21" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="14" y1="36" x2="20" y2="27" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="35" y1="34" x2="28" y2="27" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg></span></div>

## גוף הידע

<h3 class="sub">כל מה שהחלטנו, מדדנו וכתבנו, מקושר וניתן לנווט על ידי הצוות והוכנים</h3>

לשליטה של הצוות בתשתית יש מקום שבו היא חיה: כספת Obsidian שמשקפת את המאגר. החלטות, מפת הנתונים, חוזים לסוכנים, דמויות, אסטרטגיה, הפעלות עבודה: כל הערה מקשרת לאחרות, והמוקדים הם הדלתות שדרכן אדם או סוכן נכנסים. זה אותו גרף שהמוצר מסיים ללקוח בכספת שלו, בשימוש ראשון בעצמנו. מתחת, שלנו, בתנועה; עבור על חנייה כדי לראות מה היא קושרת, ולחץ כדי לפתוח אותה במלואה.

<figure class="viz graph" id="vault-graph" role="group" tabindex="0" aria-label="הגרף של הכספת SazAI: המוקדים להחלטות, סוכנים, מפת נתונים, מוצר, אסטרטגיה, פעולות, אנשים, טריטוריה וקרנות, מקושר אחד לשני ולהערות שלהם">
<div class="stage"><svg viewBox="0 0 800 520" aria-hidden="true"><g class="edges"></g><g class="nodes"></g></svg><div class="labels" aria-hidden="true"></div></div>
<figcaption>הכספת SazAI, כפי שהצוות רואה אותה כל יום. כל נקודה היא הערה; כל קו, קישור שמישהו כתב. למוקדים יש שמות; השאר זה מה שהם קושרים. קבוצת צמתים צילמתי בידיים בתאריך 2026-08-28; כשהגזירה האוטומטית של הכספת נחתת, השורה הזו יוצאת.</figcaption>
</figure>

<div class="bound">
<p><b>עד כמה המפה מגיעה, נמדדה, וזו החלק שמשוות ביותר.</b> הגרף של הכספת מגיע 55 מ 158 טבלאות של מפת הנתונים וגרם של חמישה מפות של פורמטים; המאגר מגיע 158 מ 158. דמות שהראתה הכל מקושר היתה הטענה היחידה של דף זה ללא קבלה מאחוריו, בדף שנושאו כל זה הוא שהטענות שלנו יש קבלה. מה שאומת לא זה שהכל מתחבר: זה שאנחנו יודעים בדיוק מה מתחבר ומה לא. איפה המפה שותקת, המאגר עונה.</p>
</div>

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-reprocess)" name="info" size="36"></sz-icon></div>

## הגנת נתונים היא עיצוב, ועיצוב מתבדק

<h3 class="sub">שלב 2, החוק הפך לסכימה, והסכימה ניתנת לבדיקה</h3>

מה שהחוק שואל בכתב, מסד הנתונים מתגמל דרך מבנה. אימות אינו קריאת הפוליסי שלנו; זה ביקורת של הסכימה.

**נתונים וממצאים:**

- אחסון קבוע לא נושא תוכן מסמך; תוכן חיה בסיס נתונים נפרד, רגיש ניתן למחיקה.
- בידוד לפי דייר כעמודה, לא כהבטחה: פרוסות לעולם לא חוצות דיירים.
- הסמכה היום: כלום. ביקורות המעוצבות כדי לשמש כהוכחה כשהיא מחפשת.

<figure class="viz duo" role="group" aria-label="שתי מסדות נתונים: הקבוע ללא תוכן, והרגיש, נפרד וניתן למחיקה">
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><ellipse cx="24" cy="12" rx="14" ry="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M10 12v24c0 3 6 5 14 5s14-2 14-5V12" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="22" x2="32" y2="22" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="29" x2="28" y2="29" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>קבוע</b>מבנה, מדידה, שושלת; תוכן, לעולם לא</div>
<div class="mid" style="color:var(--gray)"><svg viewBox="0 0 120 72" aria-hidden="true"><line x1="60" y1="10" x2="60" y2="62" stroke="currentColor" stroke-width="1.5" stroke-dasharray="4 3"/></svg><b>מופרד לפי עיצוב</b>ביקורת בסכימה</div>
<div class="side" style="color:var(--hue-reprocess)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><ellipse cx="24" cy="12" rx="14" ry="5" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M10 12v24c0 3 6 5 14 5s14-2 14-5V12" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-dasharray="4 3"/><line x1="18" y1="26" x2="30" y2="34" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="30" y1="26" x2="18" y2="34" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>רגיש</b>התוכן, באמת ניתן למחיקה</div>
</figure>

<details class="refs"><summary>הפניות והחלטות מתועדות</summary>
<div>
<p><b>מה שנכתב, ומה שהודחק</b></p><ul><li>פרטיות לפי עיצוב ולפי ברירת מחדל כארכיטקטורה; שכבת כיווץ על מסד נתונים משותף הודחקה.</li><li>הסרה נקראת <b>משיכה</b>, לא מחיקה: המילה החזקה יותר הודחקה מכיוון שהיא הבטיחה טווח שגיבוי לא שומר.</li></ul><p><b>הפניות (ABNT NBR 6023:2018)</b></p><ul><li>EUROPEAN UNION. <b>תקנה (EU) 2016/679</b> (GDPR), סעיף 25.</li><li>BRAZIL. <b>חוק מס. 13,709, מ-14 באוגוסט 2018</b> (LGPD).</li><li>CAVOUKIAN, Ann. <b>פרטיות לפי עיצוב</b>: שבע עקרונות היסוד. תורונטו: IPC, 2009.</li><li>ISO/IEC. <b>ISO/IEC 27001</b>. OWASP FOUNDATION. זמין בכתובת: https://owasp.org/.</li></ul>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-output)" name="eye" size="36"></sz-icon></div>

## נגישות נמדדת, לא מוצהרת

<h3 class="sub">שלב 3, תקן מצוטט הוא ציות; מספר נמדד הוא עיצוב</h3>

הקריטריון חיה ברכיב, עם המספר לצידו של הקוד, וניגוד נמדד לפני שצבע נכנס למערכת.

**נתונים וממצאים:**

- WCAG 2.2 AA על פני 51 קבצי מערכת עיצוב, עם קריטריונים המצוטטים לפי מספר (1.4.1, 3.1) (2026-09-01).
- ניגוד נמדד לפי אסימון: `--hue-lineage` בשיעור 4.00:1 עם הערה *מדריך, לעולם לא קובץ* כתוב בתוך האסימון עצמו; `--text-faint` **נכשל** למדידה 2.56:1 על לבן, וההיפך תועד.
- עיוורון צבעים נמדד: הסגול הוערך תחת דיוטרנופיה, מרחק צבע ΔE 29.1.
- אפס החלטות ארכיטקטורה מתעדות WCAG; העוגן הגישה החזק ביותר של הבית אינו נראה בתיעוד החלטה, ותיעוד זה הוא עבודה שעדיין צריך.

<figure class="viz" role="group" aria-label="שלוש מדידות צבע: אחד אסימון מאושר כמדריך, אחד נכשל, והסגול נמדד תחת דיוטרנופיה">
<div class="duo" style="grid-template-columns:1fr 1fr 1fr">
<div class="side"><div class="ev proof" style="margin:0"><span class="n">4.00:1</span><span class="t"><b>מאושר כמדריך</b>עם הערה <i>מדריך, לעולם לא טקסט</i> כתוב בתוך האסימון עצמו</span></div></div>
<div class="side"><div class="ev open" style="margin:0"><span class="n">2.56:1</span><span class="t"><b>נכשל</b>נמדד על לבן, והנכשל תועד</span></div></div>
<div class="side"><div class="ev proof" style="margin:0"><span class="n">ΔE 29.1</span><span class="t"><b>דיוטרנופיה</b>הסגול נמדד תחת הליקוי הצבע הנפוץ ביותר</span></div></div>
</div>
<figcaption>תקן מצוטט הוא ציות; מספר נמדד הוא עיצוב. שלוש המספרים חיים באסימונים, לא בפוליסי.</figcaption>
</figure>

### מערכת העיצוב היא מוצר, בנוי על תקן פתוח

<h3 class="sub">שלב 4, האוצר למשטחים אחרים, ב-W3C תקן</h3>

מערכת העיצוב היא מוצר SazAI לפי הנחיית (2026-08-26), עם הפונקציה של האצת האחרים: הרכיבים השירותיים לשיווק, הכספת וההצגה הם אותו דבר, והם תקן פתוח, לא מסגרת כקניינית.

**נתונים וממצאים:**

- רכיבים בנויים על אלמנטים מותאמים W3C ותכונות CSS מותאמות; ללא תלות מסגרת.
- ספרייה אחת, שלושה משטחים משירות; ערכות בהירות וכהות ועורות לבן על ידי אותי מנגנון אסימון.
- האסימונים נושאים את הביקורות והערות השימוש שלהם (שלב 3), כך הכלל נוסע עם הצבע.

<figure class="viz duo" role="group" aria-label="ספרייה אחת משירות שלושה משטחים">
<div class="side" style="color:var(--verb-see)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="8" y="8" width="14" height="14" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="26" y="8" width="14" height="14" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="8" y="26" width="14" height="14" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="26" y="26" width="14" height="14" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>ספרייה אחת</b>רכיבים, אסימונים, עורות</div>
<div class="mid" style="color:var(--gray)"><svg viewBox="0 0 120 72" aria-hidden="true"><line x1="10" y1="36" x2="55" y2="36" stroke="currentColor" stroke-width="1.5"/><line x1="55" y1="36" x2="105" y2="14" stroke="currentColor" stroke-width="1.5"/><line x1="55" y1="36" x2="105" y2="36" stroke="currentColor" stroke-width="1.5"/><line x1="55" y1="36" x2="105" y2="58" stroke="currentColor" stroke-width="1.5"/></svg><b>אותו מנגנון</b>ערכות בהירות ולבן בתוספת לפי אסימון</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="6" y="8" width="36" height="10" rx="2" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="6" y="22" width="36" height="10" rx="2" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><rect x="6" y="36" width="36" height="6" rx="2" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>שלושה משטחים</b>שיווק, כספת, הצגה</div>
</figure>

<details class="refs"><summary>הפניות והחלטות מתועדות</summary>
<div><p><b>מה שנכתב, ומה שהודחק</b></p><ul><li>קריטריון לפי מספר ברכיב שמוגשם אותו; דף פוליסי מרכזי הודחק.</li><li>מילה מחוץ לעיצוב: טקסט ב-HTML, גיאומטריה ב-SVG.</li></ul><p><b>הפניות (ABNT NBR 6023:2018)</b></p><ul><li>W3C. <b>WCAG 2.2</b>: הנחיות נגישות תוכן אינטרנט, רמה AA. הנ"מ, 2023. זמין בכתובת: https://www.w3.org/TR/WCAG22/.</li></ul><p><b>מה שנכתב, ומה שהודחק</b></p><ul><li>רכיבים אינטרנט תקן; המסגרת הקניינית הודחקה כדי שלבן לבן לא היה תלוי בהיתר שלנו.</li><li>נערך לאותה רמה כמו כל משטח: חבילה שרץ, שומרים שמסרבים בבניה.</li></ul><p><b>הפניות (ABNT NBR 6023:2018)</b></p><ul><li>W3C. <b>אלמנטים מותאמים</b> (HTML Living Standard). W3C. <b>תכונות CSS מותאמות לערכים מדורגים</b>.</li></ul></div>
</details>

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-analysis)" name="globe" size="36"></sz-icon></div>

## ערוצים הם יכולת: API ו-MCP משנים מה המוצר יכול להיות

<h3 class="sub">שלב 5, תקנים פתוחים בדלת, ומה הם מאפשרים</h3>

API פתוח ו-MCP אינם צינורות: הם מה שמאפשר ממשקי משתמש אחרים וחיבורים לבנות על אותה תשתית, ללא אנחנו בחדר. סוכן של צד שלישי, לוח בשל שלך, שילוב זרימת עבודה: המוצר הופך יכול להיות דברים אלה מכיוון שהערוצים קיימים.

**נתונים וממצאים:**

- ערוץ הסוכן הוא שרת משאב OAuth תקן: 401 ללא כניסה, גילוי מפורסם.
- שיוויון כחוזה: **MCP ⊆ OpenAPI**, כל מה ש-MCP חשוף קיים בנוגע API הפתוח. תשתית אחת, קוראים מרובים.
- אורכסטריה על ידי כלי ביצוע זרימת עבודה עמיד, אומץ עבור מה שהוא מבטיח, והערנטיה נמדדת: עבודה מתה לא משאיר מצב חלקי; עומס מדרדר לתוך בדיקה, זה לא שוברת; שום דבר לא כושל בשקט.

<figure class="viz duo" role="group" aria-label="תשתית אחת, שני ערוצים, והממשקי היוצרים">
<div class="side" style="color:var(--hue-analysis)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><rect x="10" y="10" width="28" height="28" rx="4" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="24" cy="24" r="6" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>תשתית אחת</b>המנוע והכספת</div>
<div class="mid" style="color:var(--hue-upload)"><svg viewBox="0 0 120 72" aria-hidden="true"><rect x="38" y="14" width="44" height="18" rx="9" stroke="currentColor" stroke-width="1.5" fill="currentColor" opacity=".12"/><rect x="38" y="40" width="44" height="18" rx="9" stroke="currentColor" stroke-width="1.5" fill="none"/><line x1="10" y1="36" x2="38" y2="24" stroke="currentColor" stroke-width="1.5"/><line x1="10" y1="36" x2="38" y2="48" stroke="currentColor" stroke-width="1.5"/><line x1="82" y1="24" x2="110" y2="16" stroke="var(--hue-output)" stroke-width="1.5"/><line x1="82" y1="48" x2="110" y2="40" stroke="var(--hue-output)" stroke-width="1.5"/><line x1="82" y1="36" x2="110" y2="60" stroke="var(--hue-output)" stroke-width="1.5"/></svg><b>API ו-MCP</b>MCP ⊆ OpenAPI, לפי חוזה</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:48px;height:48px"><path d="M24 6l4 12 12 4-12 4-4 12-4-12-12-4 12-4z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>מה זה יכול להיות</b>סוכנים שלך, לוחות שלך, זרימות עבודה שלך</div>
</figure>

<details class="refs"><summary>הפניות והחלטות מתועדות</summary>
<div>
<p><b>מה שנכתב, ומה שהודחק</b></p><ul><li>הזדהות וגילוי לפי RFC; קונוונציה מותאמת הודחקה.</li><li>ערוץ חדש לא ממציא משטח חדש: כלל השוויון מונע מ-MCP להפוך ל-API שני.</li></ul><p><b>הפניות (ABNT NBR 6023:2018)</b></p><ul><li>IETF. <b>RFC 8414</b>: OAuth 2.0 היתרת שרת מטא-דטה. 2018.</li><li>IETF. <b>RFC 9728</b>: OAuth 2.0 משאב מוגן מטא-דטה. 2025.</li><li>IETF. <b>RFC 8707</b>: מחווני משאבים עבור OAuth 2.0. 2020.</li><li>OPENAPI INITIATIVE. <b>פתיחת OpenAPI מפרט</b>. זמין בכתובת: https://spec.openapis.org/.</li><li>ANTHROPIC. <b>פרוטוקול הקשר המודל</b> (MCP). זמין בכתובת: https://modelcontextprotocol.io/.</li></ul>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><path d="M24 6l14 5v12c0 9-6 15-14 19-8-4-14-10-14-19V11z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M17 24l5 5 9-10" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg></span></div>

## איך אנחנו מוודאים

<h3 class="sub">בדיקות שמסרבות, ביקורת עם שיטה, וכשלים מפורסמים לצד מה שעבר</h3>

לאימות יש ארבע שכבות, והסדר חשוב. **בדיקות:** 505 קבצי בדיקה במאגר, עם חבילת מערכת העיצוב שרצה בכל בנייה. **שומרים:** בדיקות שמסרבות בזמן בנייה במקום רק דיווח; בנייה המפרה כלל לא משלחת. **עומס:** הבדיקה של 2026-07-20, על עותק יליד עמיתי, עם 50 קריאות מקבילות שענו בתוך 0.77 שנ., משימה כבדה שיא בגובה 4.71 GiB כנגד תקרה של 5, וגלים של חמישה ועשר משימות עם אפס כשלים, אפס שרידות זיכרון, אפס קרימפט. תחת עומס יתר המערכת נכנסת לבדיקה; היא לא שוברת. **ביקורת פנימית:** דוחות מתוארכים של מתח, הרס וביטחון, עם פסק דין לפי פריט.

<figure class="viz duo four" role="group" aria-label="ארבע שכבות אימות: בדיקות, שומרים שמסרבים, ביקורת עם שיטה, כשלים מפורסמים">
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:44px;height:44px"><rect x="8" y="8" width="32" height="32" rx="3" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M15 24l6 6 12-12" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>505 בדיקות</b>החבילה רצה בכל בנייה</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:44px;height:44px"><path d="M8 12h32v10H8z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M8 26h32v10H8z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="30" y1="14" x2="36" y2="20" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="36" y1="14" x2="30" y2="20" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M28 31l3 3 5-6" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>שומרים שמסרבים</b>בנייה המפרה לא משלחת</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:44px;height:44px"><circle cx="21" cy="21" r="11" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="29" y1="29" x2="40" y2="40" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="19" x2="26" y2="19" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="16" y1="24" x2="23" y2="24" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>ביקורת עם שיטה</b>מתח, הרס, ביטחון</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:44px;height:44px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="24" cy="28" r="6" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="24" y1="25" x2="24" y2="29" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><circle cx="24" cy="31.5" r=".9" fill="currentColor"/></svg><b>כשלים מפורסמים</b>לצד מה שעבר</div>
</figure>

<p class="claim">אנחנו לא SOC2 או ISO המאומתים. מה שיש לנו הוא <b>ביקורת פנימית מתועדת, עם שיטה מוצהרת ועם הכשלים שהיא מצאה מפורסמים לצד של שהיא עברה</b>. אחד מהדוחות שלנו נושא, כחלקים משלו, <i>כשלים שנמצאו</i>, <i>חיובי שקר שאני כמעט פירסמתי</i> ו <i>מה שלא יכול להקים</i>. חותם היא מילת צד שלישי; שיטה מוצהרת, הקורא הטכני שופט לבדו. והחלטות הכתובות מעוצבות כדי לשמש כהוכחת שליטה כאשר זה צריך.</p>

<div class="bound">
<p><b>מה דף זה מצטט ומה זה לא.</b> כאן היא קיום הדוחות ושלהם שיטה. הפסקים פריט על פריט חיים במסמך טכני שלווה הערכה, מכיוון פרסום רשימת חוקר עם תוצאה בחלק העליון של הליכי יד דרך מפה למי שלא צריך אחד. הביטוי שהעומס <i>לא</i> משכנע: <i>חמישים בו-זמנית</i>. הם חמישים מושבים ומשימה כבדה אחת בזמן; ערבוב שני היא השגיאה שדף זה קיים לא לעשות.</p>
</div>

</div>

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="22" x2="32" y2="22" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="28" x2="32" y2="28" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="34" x2="26" y2="34" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="15" y1="25" x2="35" y2="25" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2"/></svg></span></div>

## איך אנחנו מחליטים

<h3 class="sub">החלטות כתובות מתוארכות, וסופרסד היוגה שתי משפטים ותו לא</h3>

כל החלטת ארכיטקטורה SazAI היא מסמך מתוארך, עם ההקשר, החלופה שנדחתה והסיבה. יש 61 כרגע, ומספר זה קיים מתוארך מכיוון שהוא גדל; הפקודה שמייצרת אותו נמצא בהפניות של לוח זה. מה הופך את זה לקבלה ולא קובץ מת היא הסופרסד: כשהחלטה חדשה מתנגדת לישנה, היא קובעת בדיוק איזה משפט של הזקנה מפסיק להחזיק, וזקנה מקבלת את הסימן בגוף שלה, במשפט, ולא בכותרת.

הדוגמה האחרונה היא מאתמול. החלטה 023 קבועה, בין דברים אחרים, אוצר שהמשתמש שמות יכולות המוצר עם. החלטה 061 סופרסד **שני משפטים** של זה, שני על אוצר, והשאיר שלם הכל על מנוע, כולל סעיף שאמין היה מופר ולא היה. שלוש קוראים יכולים היו קוראים סעיף ש באותו דרך, והחלטה מתעדת שלוש שמות, מכיוון החלטה ששמרה רק מסקנה מפסיד הסיבה שלוש אנשים קיבלו זה לא בחד.

<figure class="viz duo" role="group" aria-label="החלטה זקנה עם שני משפטים מחוקי והשאר שלם, קשור להחלטה חדשה">
<div class="side" style="color:var(--hue-reprocess)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:52px;height:52px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="22" x2="32" y2="22" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="28" x2="32" y2="28" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="18" y1="34" x2="26" y2="34" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><line x1="15" y1="25" x2="35" y2="25" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none" stroke-width="2"/></svg><b>החלטה זקנה</b>שני משפטים מחוקי, השאר שלם</div>
<div class="mid" style="color:var(--hue-reprocess)"><svg viewBox="0 0 120 72" aria-hidden="true"><line x1="10" y1="36" x2="106" y2="36" stroke="currentColor" stroke-width="1.5"/><path d="M100 31l6 5-6 5" fill="none" stroke="currentColor" stroke-width="1.5"/><rect x="42" y="26" width="36" height="20" rx="10" fill="currentColor" opacity=".12" stroke="currentColor" stroke-width="1.5"/></svg><b>סופרסד</b>שמות המשפט, וזה לבדו</div>
<div class="side" style="color:var(--hue-output)"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:52px;height:52px"><path d="M12 6h18l8 8v28H12z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M30 6v8h8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M18 28l4 4 8-8" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg><b>החלטה חדשה</b>עם שלוש שמות שקיבלו זה לא בחד</div>
</figure>

<div class="bound">
<p><b>מספר שדף זה לא פורסם.</b> כמה מ 61 הם <i>מקובל</i> תלוי באילו מילים הספר מודה בשדה מצב, וחמישה סופרים יכולים הגיעו לחמישה מספרים שונים השבוע. אף אחד לא היה לא נכון: שדה לעולם לא הצהיר אוצר שלו. אנחנו פורסמים 61, שהוא יציב; המספר מקובל רק הולך לפומבי כאשר זה בא עם הפקודה שמייצרת אותו לצידה, את הדרך 158 טבלות כבר עשה.</p>
</div>

### וזה איך אנחנו כותבים: חוזה פנימי, שלב אחד למטה עבור כנות

<h3 class="sub">שלב 6, כנסות פנימי מתועד, שלב אחד מתחת לתקן חיצוני</h3>

סגנון כתיבה, שמות ועמדות בית חיות בחוזה בגרסה שסוכנים מצטטים. העוגן שלה היא כנסות פנימי עם החלטה מתועדת, לא תקן חיצוני מונה; זה שלב אחד מתחת להקודמים, וחגיגה למטה מוכיח שהכלכלה בדף הזה חל אפילו כאשר זה עלות משהו.

**נתונים וממצאים:**

- תקן כתיבה אחד, בגרסה לפי תיקון, מצוטט לפי החלטות וסוכנים כחוזה.
- שמות ואמדות שם אחיד על פני כל המערכת; תקן מצוטט לעולם אינו הפרפרז.
- עיצוב, lint וסריקה סודיות אוטומטיות, הצהיר בתקן עם המקור לצידן.

<figure class="viz" role="group" aria-label="כנסות פנימי מתועד: שלב אחד מתחת לתקן חיצוני, משורטט בעמוד בעמוד בעמוד">
<div class="ev open"><span class="n">כנסות פנימי</span><span class="t"><b>שלב אחד למטה, וציור באופן זה</b>העוגן של הפנל הזה היא החלטה מתועדת, לא תקן מספור. המסגרת מקוקו היא אותה אחת הבית משתמש בהכל זה אינו קבלה, ופנל שחגיגה למטה מוכיח שההיררכיה חל אפילו כאשר זה עלות משהו.</span></div>
</figure>

<details class="refs"><summary>הפניות והחלטות מתועדות</summary>
<div>
<p><b>מה שנכתב, ומה שהודחק</b></p><ul>
<li>המספר: <code>ls docs/corpus/pptx/tech_specs/ADR | grep -c '^ADR-'</code> חוזרת 61 בתאריך 2026-09-01. המספר גדל; הפקודה לא.</li><li>חלופות השמות הודחקו לפי התכנסות על שלוש משטחים, והדחייה מתועדת עם הסיבה.</li></ul><p><b>הפניות</b></p><p>החוזה הפנימי (`code_standards`, בגרסה) שומות המקורות שלו; דף זה אינו הפרפרז אותו.</p><p>החוזה הפנימי (<i>code_standards</i>, בגרסה) שומות המקורות שלו; דף זה אינו הפרפרז אותו.</p>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><sz-icon style="color:var(--hue-output)" name="check" size="36"></sz-icon></div>

## מה זאת קבלה, ומה עדיין תרגול

<h3 class="sub">ארבע יכולות עם הוכחה; שלוש מוצהרות, ללא פועל בזמן הווה</h3>

כל יכולת בפלטפורמה זו הוחנכה דרך שלוש שאלות: האם יש החלטה כתובה שמנהלת אותה? האם יש מדידה? או רק זה עובד, ללא אחד שכתב מדוע? מה עובר השתיים הראשונות אנחנו קוראים <dfn data-hint="יכולת עם החלטה כתובה ומדידה שמישהו יכול לשחזר: לא הבטחה, תיעוד.">קבלה</dfn>. השאר היא תרגול, וזה נשאר מוצהר כדו"ח כיווני, באותו דרך ש [מפת הדרכים](#roadmap) למטה מוצהרת מה לא קיים עדיין. עמוד המציג שבע יכולות איפה שלוש קבלות חלשה מאחד שמציג ארבע.

<figure class="viz ledger" role="group" aria-label="ארבע קבלות עם הוכחה שלהם ושלוש תרגולים מוצהרות כדו"ח כיווני">
<div class="col receipts">
<h4>קבלה</h4>
<div class="item"><b>חבר וניגן</b><span>4 החלטות והתכנית, הקו ארבע-נקודה, חלוקת 158-טבלה, נגזר מחדש</span></div>
<div class="item"><b>בקרת בדיקה</b><span>5 החלטות, בדיקת עומס עם אפס כשלים, אפס OOM, אפס קרימפט</span></div>
<div class="item"><b>ארכיטקטורה, שושלת וריבוי דיירים</b><span>עם גבול הספק מוצהר כחור נקוב</span></div>
<div class="item"><b>גרסאות החלטה</b><span>החלטות מתוארכות, סופרסד כירורגי</span></div>
</div>
<div class="col practices">
<h4>תרגול מוצהר</h4>
<div class="item"><b>גרסאות סכימה</b><span>דו"ח כיווני מוצהר</span></div>
<div class="item"><b>גרסאות חנות</b><span>דו"ח כיווני מוצהר</span></div>
<div class="item"><b>תקשורת סוכן לסוכן</b><span>דו"ח כיווני מוצהר, עם כשלים נמדד</span></div>
</div>
</figure>
<p class="claim">הארבע בשמאל להם מקום להיות מבוקרים, והפרקים הבאים אומרים איפה. השלוש בימין הם איפה הפלטפורמה הולכת, ואף אחד מ-ריבים שלהם בזמן הווה.</p>

### וההשוק: מחקרים עם הסייגים המצורפים

<h3 class="sub">שלב 7, עוגנים איפה אנחנו משחקים, לא איך אנחנו בונים</h3>

שלב זה תומך בעמדה, לא הנדסה, וזו הסיבה שהוא אחרון: זה העוגן החלש ביותר בדף, וזה כאמור כזה.

**נתונים וממצאים:**

- שבע בתים: Gartner, BCG, McKinsey, Deloitte, Menlo Ventures, MIT NANDA, Stanford HAI.
- סייגים בנויים לתוך הרשומות עצמן: קדם-פרסום בשם קדם-פרסום (MIT NANDA, n=52); פרסום מחדש בשם מחדש (Stanford/McKinsey); פרוסה אזורית בשם אזורית (Deloitte, EMEA).
- 79% של BCG הוכיח את החסם, נתונים לא מובנים לא מנוהלים; זה לא הוכיח את הגשר.
- מחקר סקר ניהול היא תפיסה, לא יתרונות כספיים מבוקרים.

<details class="refs"><summary>הפניות והחלטות מתועדות</summary>
<div>
<p><b>מה שנכתב, ומה שהודחק</b></p><ul><li>פלטפורמה לפני מוצר; קנה לפני בנייה.</li><li>על Shadow AI, רק הצורה המובנה: הפחתה דרך שביל ארגוני מנוהל. "SazAI פותרת Shadow AI" הודחקה מחוסר מדידה לתמוך בה.</li></ul><p><b>הפניות</b></p><p>הרשומות המלאות בטופס ABNT NBR 6023:2018 נמצאות בבלוקים של דף זה; מ 25 בתא, אלה ניגשו להם ברשת נושאות <i>נגשו ב</i>, כמו התקן דורש, והשאר לא, כמו התקן קובע.</p>
</div>
</details>

</div>

<div class="chap">

<div class="ico-col"><span class="ico"><svg viewBox="0 0 48 48" aria-hidden="true" style="width:36px;height:36px"><circle cx="24" cy="24" r="16" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/><path d="M31 17l-4 10-10 4 4-10z" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg></span></div>

<a id="roadmap"></a>

## מפת דרכים: מה אנחנו בונים

מפת הדרכים מחזיקה בכיוונים הגדולים, אלה שהפלטפורמה מצביעה לכיוון ולא בנתה עדיין. כשחלק יוצא מכאן, היא נעלמת מרשימה זו ומופיעה בדף של היכולת תואמת, עם התאריך. מפת דרכים שנעה היא הוכחה היחידה של קצב שלא ניתן לכתוב עם תואר. שום דבר למטה לא משלח, וליגה פריט כאן צריך להשפיע על החלטה שלך היום.
כלום בדף זה לא משלח. ליגה פריט כאן צריך להשפיע על החלטה שלך היום, וליגה אחד בצוות שלנו צריך להציג אחד מהם בזמן הווה. מה משלח הוא ב [טיול מוצר](/), עם מה זה ערנטיית, והגבול של מה קיים בנוגע [אמון](trust).

## תיקייה אדום וביקורת משא ומתן

השוואה בין טיוטה נגד שינויים הצדדים, מראה מה כל צד שינה, איפה הסיכון זז, ומה כוונה בטקסט חושפת. מנוע ההשוואה שמונח זה כבר קיים ורץ היום על גרסאות מסמך. מה חסר הוא שכבה משפטית: הבנה שסעיף שונה אינו פשוט פסקה שונה.

**למה זה בדרך ומה זה מימי:** זה הכיוון עם הפוטנציאל הגדול ביותר ליצור קטגוריה משלה, וזה בדיוק למה זה הקלה למכור מוקדם מדי. זה לא קיים.

## סוכנים מתמחים על גוף שלך

סוכנים עם טווח שלהם, בנויים על הידע כבר בכספת שלך: חונך שמלמד מחומר אמיתי של החברה שלך, בן הלוואי מעבר לתהליך חדש, מעריך שבודק כושר תוך מצטט המקור הוא השתמש.

**מה כבר עומד מתחת:** הגוף, שושלת, הסוכן השיחה, וציטוט מקור. **מה חסר:** התמחות מרמת משימה, עם גבול וכללי משלה לסוכן.

## מצע לצי שולט סוכנים

הצעד הבא מהקודם, והמגיע רחב ביותר. כל חלק של החברה יזיל את הכספת עם מסמכיו, וסוכנים החלק זה כבר משתמש בעת חוק שאלה על החברה לבקש הכספת, לפי קובץ או פרוטוקול. אחד משלט משטח תחתון במקום כלים AI שוברים שליגה מישהו מבקורים.

**למה זה דרך ומה זה בעלות הבטחה:** אמצעי ההתקבלות הוא בטון וכבר קיים בחלק, מכיוון הכספת נשמר וניתן לצריכה מבחוץ. מה חסר פיקוד צי, וזה לא בנוי.

## דברים שקיימים וזה אנחנו עדיין לא יכול להראות לך

אלה פערי הוכחה, לא תכונות חסרות. היכולת שם; ההוכחה ציבורית אינה, וכל זה היא שיחת בדיקה ביראות, לא פריט דף.

- **הוכחה שנידית כספת.** הכספת קיימת והוא טקסט בעברית עם קישורים; מה חסר הוא הדגמה שפורסמה שאחרים יכולים לשחזר ללא דיבור אלינו. עד אז, זה שיחת בדיקה ביראות, לא תשובה דף.
- **מספיקות של התיעוד לביקורת רשמית.** התיעוד קיים וממסגרת כהוכחת בקרה. אם זה סוגר דרישה ביקורת ספציפית בסקטור שלך הוא שאלה תשובה נו לאחד לאחד, לא תביעה דף.
- **סקאל מעל מה אנחנו מדדנו.** כרכים במאות אלפי או מיליוני מסמכות לא נחזקו. זה פרויקט גיבוב לפני זה קנייה.

## דברים שלא קיימים עדיין

אלה תכונות חסרות, וקבצים אותם באזור רך היה אומר לך הם שם ואנחנו פשוט לא יכול להראות לך. הם לא שם.

- **בדיקת נראות יליד.** המערכת מדדות מבנה וסופרים אלמנטים; זה לא תראה דף גמור. בודק נראות בתוך המוצר לא קיים.
- **מחיקה שמגיעה לעותקי גיבוי.** היום מחיקה היא שלם במערכות חיות ולא מגיעה לגיבוי בתוך חלון השמירה. נתיב הטכני הוגדר ולא בנוי עדיין. ההיקף המדויק בנוגע [פרטיות וריבונות](privacy).
- **הסרת התוכן והשבתת החשבון, בפעולה אחת דרך הממשק.** היום מחיקה מסמך קיימת וליקחות נגזרים עם זה; עשיית הכל בבת אחת לא קיימת עדיין, וסגירה מטופלת לבקשה. השם הוא תכוונת: זה מחק את התוכן והשבתת החשבון, מכיוון השובל של מי גישה המערכת נשאר.

## איך דף זה מתבדק

פריט יוצא מכאן כאשר זה קיים ונמדד, לא כאשר זה כמעט מוכן. כאשר זה יוצא, היא נכנסת בדף יכולת עם מה זה ערנטיי ואיפה זה עוצר. אם תעקוב SazAI קצת, דף זה היא איפה קצב מראה.

## איפה הגבול עובר

<h3 class="sub">שלוש גבול קורא טכני בדיקות ראשונה, כאמור לפני הבדיקה</h3>

**גבול הספק.** שושלת עוקב כל קטע טקסט עד שהוא יוצא לדגם שפה ונדלקת מחדש כאשר זה חוזר. ליגה טבלה שלנו מתעדת מה קרה לצד אחר; מי שואל *הוכחה מה עשו עם הטקסט שלי בתוך הדגם* מקבל תנאי שמירה של הספק זה חוזה, ובהתקנה של שלך הספק הוא בחירה שלך. דף בנוגע [ריבונות](privacy) אומר איפה זה עוצר.

**פטור הרישיון Copyleft.** ליגה ספרייה AGPL נכנסת למנוע, וזה כתוב בקובץ תלות כהחלטה פרויקט מתועדת. זה הערה, לא שער: שום דבר שוברת בנייה אם מישהו זה תעלמות. אומר זה יותר חזק מאשר התעמלה זה שער, מכיוון מישהו פותח את הקובץ רואה בעשרה שניות.

**הסוכנים.** מערכת זו בנוי לפי צוות סוכנים עם טווח הכרז וברשת ביקורת, והתקשורת ביניהם היא תרגול, לא קבלה: זה ליגה החלטה כתובה שמנהל הערוץ, וכשלים מצבו נמדד לפי אנחנו השבוע. זה בצד ימין של הספר-רייז, וזה איפה זה הולך.

הכל הדף זה קובע יש פקודה או מסמך מאחוריה, ומה כן זה קובע כדי כיוון. אם משהו כאן לא יכול להיות מעתיק בהערכה שלך, זה בעל פגם שלנו וחברה הרוצה לדעת לפני עשית. המוצר שיצא ראשון פלטפורמה זו היא מה [אתה רואה כאשר מסמך בא בתוך](see).

### מה הפירמידה הזאת לא מחזיקה

פירמידה כנעה אומר מה נשאר בחוץ.

**נתונים וממצאים:**

- הפניות חמישה כתורה באפס הנדסה חנויות: W3C **PROV** ZAHARIA וכו., **מערכות AI מתחזוקות** (BAIR, 2024) XU וכו., **GraphRAG** (SIGIR, 2024) **מודל נתיב** ספרות **CommonMark/GFM**. הם עיצבו החשיבה; ליגה החלטה מתועדת בא מהם.
- בדיקות: תרגול חזק, שומרים שמסרבים בבנייה, דוחות מתוארכים; שיטה חיצונית הצהרה: כלום. אמור באותם מילים, עם שום שכן סביר.
- והממצא שמחזיק הפירמידה כולה, נמדד על החלטות עם חלופה בראש: בתוך אחד עשר של אחד עשר, מה החליט היה עקרון הנדסה, לא הפניה חיצונית. התקן תמיכה; הבחירה היא שלנו, וזה כתוב למטה.

</div>

*דמויות נמדדו לפי 2026-09-01 על קבוצות שגדלות: מי חוזר המדידה מחר צריך לצפות מספרים גדולים יותר, לא אותם.*

<script type="module">
// IF THE #stars CANVAS EVER MORPHS INTO THIS GRAPH (Dev UX / Dev CO), REMOVE THIS FIGURE: two
// objects doing one job on one page is how a surface rots, quietly, because both look right.
// THE VAULT GRAPH, BORN AS STARS. Geometry in SVG, words in HTML. The layout is seeded, so the
// same picture renders every time; hubs are the real hubs of sazai.vault; satellites are counted
// per section, not drawn one to one. First reveal on intersection: points scatter like the
// starfield, then settle into the graph and the labels fade in. Hover lights a hub's edges;
// click (or Enter) opens the same scene full-screen; Escape closes. Reduced motion: no drift.
const fig=document.getElementById('vault-graph'); if(fig){
const svg=fig.querySelector('svg'),E=fig.querySelector('.edges'),N=fig.querySelector('.nodes'),L=fig.querySelector('.labels');
// no namespace literal: the house serves zero external references, and insertAdjacentHTML inside the <svg> inherits the SVG namespace on its own
const el=(t,a,parent)=>{parent.insertAdjacentHTML('beforeend','<'+t+' '+Object.entries(a).map(([k,v])=>k+'="'+v+'"').join(' ')+'/>');return parent.lastElementChild};
let seed=20260828; const rnd=()=>{seed=(seed*1664525+1013904223)%4294967296;return seed/4294967296};
const H=[ // real hubs of sazai.vault; n = satellites drawn, proportional, not exact
 {id:'index',l:'00-INDEX',x:400,y:250,c:'var(--dark)',r:9,n:6},
 {id:'adrs',l:'ADRs Hub',x:300,y:120,c:'var(--hue-reprocess)',r:8,n:59},
 {id:'agents',l:'Agents Hub',x:250,y:330,c:'var(--hue-analysis)',r:8,n:30},
 {id:'km',l:'Knowledge Map',x:560,y:130,c:'var(--hue-output)',r:7,n:18},
 {id:'product',l:'MOC-Product',x:600,y:300,c:'var(--hue-output)',r:7,n:26},
 {id:'strategy',l:'MOC-Strategy',x:520,y:410,c:'var(--hue-upload)',r:7,n:28},
 {id:'ops',l:'MOC-Operations',x:130,y:200,c:'var(--gray)',r:6,n:14},
 {id:'people',l:'MOC-People',x:150,y:440,c:'var(--hue-analysis)',r:6,n:10},
 {id:'pitch',l:'MOC-Pitch',x:690,y:440,c:'var(--hue-upload)',r:6,n:12},
 {id:'personas',l:'Personas',x:410,y:470,c:'var(--hue-reprocess)',r:6,n:7},
 {id:'sessions',l:'Sessions',x:700,y:200,c:'var(--gray)',r:5,n:9},
];
const X=[['index','adrs'],['index','agents'],['index','km'],['index','product'],['index','strategy'],['index','ops'],['index','people'],['index','pitch'],['index','personas'],['index','sessions'],['adrs','km'],['adrs','agents'],['agents','ops'],['agents','people'],['product','km'],['product','strategy'],['strategy','pitch'],['strategy','personas'],['pitch','personas'],['sessions','agents'],['sessions','adrs']];
const nodes=[],edges=[];
for(const h of H){const hub={...h,hub:true,sx:h.x,sy:h.y,ph:rnd()*6.28};nodes.push(hub);
  for(let i=0;i<h.n;i++){const a=rnd()*6.28,d=34+rnd()*(h.n>20?110:70);const s={id:h.id+i,x:h.x+Math.cos(a)*d,y:h.y+Math.sin(a)*d,c:h.c,r:1.6+rnd()*1.6,hub:false,of:hub,ph:rnd()*6.28};s.sx=s.x;s.sy=s.y;nodes.push(s);edges.push([hub,s]);
    if(rnd()<.12){const o=nodes[Math.floor(rnd()*nodes.length)];if(o&&o!==s)edges.push([s,o]);}}}
const byId=Object.fromEntries(nodes.filter(n=>n.hub).map(n=>[n.id,n]));
for(const [a,b] of X)edges.push([byId[a],byId[b]]);
for(const n of nodes){n.el=el('circle',{r:n.r,fill:n.c,opacity:n.hub?1:.75},N);n.el.style.color=n.c;
  n.rx=rnd()*800;n.ry=rnd()*520;n.t=0; // scatter origin, for the reveal
  if(n.hub){const sp=document.createElement('span');sp.textContent=n.l;sp.dataset.hub=n.id;L.appendChild(sp);n.lab=sp;
    n.el.classList.add('hub');n.el.dataset.hub=n.id;}}
for(const e of edges){e.el=el('line',{stroke:'var(--lightgray)','stroke-width':e[0].hub&&e[1].hub?1:.6,opacity:.55},E);}
const reduce=matchMedia('(prefers-reduced-motion: reduce)').matches;
let t0=null,revealed=false,lit=null;
function place(){const now=performance.now();for(const n of nodes){
  const k=reduce?1:Math.min(1,(now-(t0||now))/1600),ease=1-Math.pow(1-k,3);
  const dx=reduce?0:Math.sin(now/1900+n.ph)*(n.hub?2.2:3.6),dy=reduce?0:Math.cos(now/2300+n.ph)*(n.hub?2.2:3.6);
  n.x=n.rx+(n.sx-n.rx)*ease+dx;n.y=n.ry+(n.sy-n.ry)*ease+dy;
  n.el.setAttribute('cx',n.x);n.el.setAttribute('cy',n.y);
  if(n.hub){const pulse=reduce?1:1+Math.sin(now/1400+n.ph)*.08;n.el.setAttribute('r',n.r*pulse*ease+ .5);
    n.lab.style.left=(n.x/800*100)+'%';n.lab.style.top=(n.y/520*100)+'%';}else n.el.setAttribute('r',n.r*(.4+.6*ease));}
  for(const e of edges){e.el.setAttribute('x1',e[0].x);e.el.setAttribute('y1',e[0].y);e.el.setAttribute('x2',e[1].x);e.el.setAttribute('y2',e[1].y);}
  if(!revealed&&(reduce||now-t0>1500)){revealed=true;fig.classList.add('ready');}
  if(!reduce||!revealed)requestAnimationFrame(place);}
function light(id){lit=id;fig.classList.toggle('lit',!!id);
  for(const e of edges){const on=id&&(e[0].id===id||e[1].id===id||(e[0].of&&e[0].of.id===id&&e[1].hub===false&&e[1].of===e[0].of));
    e.el.setAttribute('opacity',id?(on?1:.12):.55);e.el.setAttribute('stroke',on?byId[id].c:'var(--lightgray)');}
  for(const n of nodes){const on=!id||n.id===id||(n.of&&n.of.id===id);n.el.setAttribute('opacity',on?(n.hub?1:.85):.18);}}
fig.addEventListener('mouseover',e=>{const h=e.target.closest('[data-hub]');if(h)light(h.dataset.hub)});
fig.addEventListener('mouseout',e=>{if(e.target.closest('[data-hub]'))light(null)});
// THE EXPANDED SCENE IS A MODAL (ADR-047 A10.4 #15): the figure moves into an sz-modal beside it, inside the same
// chapter so the .chap .graph.full rules still match, and comes back on close. The dialog brings the top layer, the
// blurred page behind (A10.2) and Esc; moved BEFORE open, the figure is inside the modal, so no hole is cut for it.
const ph=document.createElement('div');let modal=null;
const restore=()=>{if(!fig.classList.contains('full'))return;fig.classList.remove('full');ph.replaceWith(fig);document.body.style.overflow='';fig.focus({preventScroll:true})};
const expand=()=>{if(!modal){modal=document.createElement('sz-modal');modal.setAttribute('size','full');modal.setAttribute('bare','');modal.setAttribute('label',fig.getAttribute('aria-label')||'');modal.addEventListener('sz-close',restore)}
  ph.style.height=fig.offsetHeight+'px';fig.replaceWith(ph);ph.after(modal);modal.appendChild(fig);fig.classList.add('full');document.body.style.overflow='hidden';modal.open();fig.focus({preventScroll:true})};
const toggle=()=>{if(fig.classList.contains('full')){modal.close();return}customElements.whenDefined('sz-modal').then(expand)};
fig.addEventListener('click',e=>{if(!e.target.closest('[data-hub]')||fig.classList.contains('full'))toggle()});
fig.addEventListener('keydown',e=>{if(e.key==='Enter'||e.key===' '){e.preventDefault();toggle()}});
// START ON SIGHT. IntersectionObserver is the primary trigger; a geometry check on load and on the
// first scroll is the fallback, so a viewport that never reports intersection (measured: an
// automated background tab delivers neither IO nor rAF) still gets the reveal on the next paint.
let started=false;const start=()=>{if(started)return;started=true;t0=performance.now();requestAnimationFrame(place)};
const inView=()=>{const r=fig.getBoundingClientRect();return r.top<innerHeight*.8&&r.bottom>innerHeight*.2};
const io=new IntersectionObserver((en)=>{if(en.some(x=>x.isIntersecting)){start();io.disconnect()}},{threshold:.35});io.observe(fig);
if(inView())start();else addEventListener('scroll',()=>{if(inView())start()},{passive:true});
}
</script>

<style>

/* CHAPTER NUMERALS, EDITORIAL. The number is the chapter's mark, not a KPI: it enters large,
   in the domain hue, beside an uppercase kicker that says what it counts. The house h2 follows
   untouched. These rules move to marketing.css (and the connectome port) when the page lands;
   they live in the body for the refine loop. */
/* ICON COLUMN (Ramés, 2026-08-28): the chapter icon sits left of the title AND its subtitle; the
   subtitle takes the old kicker voice: small, uppercase, quiet. */
/* THE ICON IS A SIBLING OF THE H2, NEVER INSIDE IT, AND THAT IS AN ANCHOR DECISION RATHER THAN
   A STYLE ONE. Quartz slugs a heading from its TEXT CONTENT, and any inline element in the
   heading contributes an empty token. Measured on a probe page, all six forms: `<sz-icon>`
   before the words gives `id="-forma-a-inline-antes"`, a `<span>` behaves identically, the icon
   AFTER the words gives a TRAILING hyphen, and the `{#explicit-id}` syntax is NOT supported
   here: it is slugged as literal text. Only a heading with no markup at all comes out clean.
   AN ANCHOR IS A URL AND A WRONG URL IS PERMANENT, so the icon leaves the heading. The visual
   is unchanged: `.ch` is zero-height and the icon is absolutely placed into the padding column
   the h2 already reserves. */
/* ============================================================================
   THE CHAPTER IS A PANEL, AND THAT ALSO RETIRES THREE MAGIC NUMBERS.

   THE DIAGNOSIS WAS AN INVERTED HIERARCHY, not a missing divider. Rendered, the page read
   heading / floating prose / CONTAINED FIGURE / floating prose: the figure carried a border,
   a fill and a blur while the chapter that owns it carried nothing, so the strongest container
   on the page was a child of the section rather than the section. Prose did not read loose so
   much as OUT-RANKED.

   Now each chapter is a real element, which fixes the ranking AND the alignment at once:

   1. THE CHAPTER IS THE SURFACE. Soft ground, hairline border, radius, generous padding.
   2. THE FIGURE GIVES BACK ITS FILL and keeps only its outline, so it reads as an object
      INSIDE the panel instead of a competing surface. The blur goes with the fill: a backdrop
      filter over a transparent box is cost with no picture.
   3. THE ICON SITS IN ITS OWN GRID COLUMN, vertically centred on the title block by the
      layout rather than by an offset. Everything before this was a magic number chasing a
      MARGIN COLLAPSE: `.ch` was a zero-height div and the h2's top margin collapsed through
      it, so the icon's 18px raise was EMERGENT, and every spacing change moved it. Measured,
      three times: padding opened a 2.4rem gap; a margin dropped it 19px; a margin on the
      previous paragraph did the same. The wrapper removes the collapse from the problem.
   ============================================================================ */
article .chap{position:relative;display:grid;grid-template-columns:3.4rem 1fr;
  gap:0 0;align-items:start;
  border:1px solid color-mix(in srgb,var(--lightgray) 85%,transparent);border-radius:14px;
  background:transparent;
  padding:1.7rem 1.9rem 1.5rem;margin:1.6rem 0}
/* THE GLASS IS A VEIL, NOT A FILTER ON THE PANEL, AND THAT IS A MEASURED CORRECTION.
   `blur(4px)` is the house's own value, read off the served page from `div.search-container`
   and `div.global-graph-outer`, the only two elements that already carry a backdrop filter.
   PUT IT ON `.chap` DIRECTLY AND THE COMPARE MODAL BREAKS: `backdrop-filter` makes the element
   a containing block for `position:fixed` DESCENDANTS, and the modal lives inside this panel.
   Measured before and after: the scrim went from the viewport (1440x757) to the panel's own box
   (788x569). So the veil goes on a pseudo-element at `z-index:-1`, which blurs what is behind
   the panel while leaving `.chap` an ordinary containing block. IT IS THE HOUSE'S OWN ANSWER
   TOO: `sz-search-field` solves the identical problem with a `.veil` behind its pill. */
article .chap::before{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;
  /* `--surface` AND NOT `--light`, MEASURED RATHER THAN CHOSEN BY NAME. In the dark theme
     `--light` resolves to #09090b, which is EXACTLY the body background: a 40% mix of the
     background over the background is the background, and the panel measured invisible on the
     rendered pixels (inside 9,9,10 against outside 9,9,11: a delta of zero). Blur cannot
     rescue it either, because a backdrop filter over a flat surface has nothing to blur: THE
     FILL IS WHAT MAKES A PANEL EXIST and the blur is only its texture. `--surface` is #18181b,
     the house's own raised colour, the one `sz-search-field` puts behind its pill. */
  background:color-mix(in srgb,var(--surface) 72%,transparent);
  backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);pointer-events:none}
article .chap .ico-col{grid-column:1;grid-row:1 / span 2;align-self:center;
  display:flex;align-items:center;justify-content:flex-start;padding-top:.15rem}
article .chap .ico-col sz-icon,article .chap .ico-col .ico{display:inline-flex}
article .chap .ico-col .ico svg{width:36px;height:36px}
article .chap > h2{grid-column:2;grid-row:1;padding-left:0;margin:0}
article .chap > h3.sub{grid-column:2;grid-row:2;padding-left:0;margin:2px 0 0;line-height:1.15}
/* THE ANCHOR ICON WAS INFLATING THE LINE BOX, AND MY OWN CHANGE PUT IT THERE. Promoting the
   subtitle from `<p>` to `<h3>` for the SEO reading also gave it the `a[role=anchor]` Quartz
   adds to every heading: 15px tall, inline, on the baseline. Measured, the h3 box went to 26px
   for a 16px line, and that surplus is what read as too much air between title and subtitle.
   Capping the anchor to the text's own em takes the inflation out without removing the anchor,
   so the heading keeps the link it earned by being a heading. */
article .chap h2 a[role=anchor],article .chap h3.sub a[role=anchor]{
  display:inline-flex;align-items:center;height:1em;line-height:1;vertical-align:middle}
article .chap > *:not(.ico-col):not(h2):not(h3.sub){grid-column:1 / -1}
/* THE SPACE BELONGS TO THE FIRST PROSE PARAGRAPH, AND `:first-of-type` GAVE IT TO THE SUBTITLE.
   The first `<p>` inside a panel is `p.sub`, so this rule matched the subtitle instead of the
   prose: same specificity as the `.sub` rule and later in the block, so it won, and the
   subtitle inherited a 16px top margin nobody wrote for it. @rames spotted it on the rendered
   page before any probe did. Targeting the paragraph that FOLLOWS the subtitle says what was
   meant and cannot drift onto a sibling again. */
article .chap > h3.sub + p{margin-top:1rem}
article .chap > *:last-child{margin-bottom:0}
/* the figure is an object inside the panel, never a second surface */
article .chap .viz{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;
  border-color:color-mix(in srgb,var(--lightgray) 65%,transparent)}
/* ============================================================================
   HINT TEXT ON A TERM, AND THE RULE IT KEEPS: THE HOVER IS NEVER THE ONLY COPY.

   @copy-chief's rule applied literally: the explanation lives in the SENTENCE, where all three
   readers reach it (the person, the buyer's research agent, our agent reading the .md). The
   attribute is the SHORT FORM of that same sentence, so the hover adds convenience and never
   carries meaning the prose lacks. His measured reason is this page's own defect: the
   aria-label versus <text> divergence came from two copies of the same words in two encodings,
   and only one of them ever got translated.

   NO SCRIPT. Hover, keyboard focus and tap all resolve through :hover and :focus-visible, so
   there is nothing to upgrade, nothing that can trap focus, and it works before any module
   loads. `tabindex=0` makes the term reachable by keyboard and gives a tap somewhere to land.
   The term is marked as a TERM and not as a link: dotted underline, body colour, no pointer,
   because the page carries four real links and a fifth affordance that looked the same
   would lie.
   ============================================================================ */
article dfn[data-hint]{font-style:italic;position:relative;border-bottom:1px dotted var(--gray);
  cursor:help;outline:none}
article dfn[data-hint]::after{content:attr(data-hint);position:absolute;left:0;top:calc(100% + .5rem);
  z-index:30;width:min(30rem,72vw);padding:.7rem .85rem;border:1px solid var(--lightgray);
  border-radius:10px;background:var(--light);color:var(--darkgray);
  font-style:normal;font-size:var(--fs-xs,.76rem);line-height:1.45;letter-spacing:0;
  box-shadow:0 8px 24px rgb(0 0 0 / .28);opacity:0;visibility:hidden;transition:opacity .12s ease}
article dfn[data-hint]:hover::after,article dfn[data-hint]:focus-visible::after{opacity:1;visibility:visible}
article dfn[data-hint]:focus-visible{border-bottom-color:var(--secondary)}
/* THE SUBTITLE IS AN h3 AND ITS LOOK IS UNCHANGED. @sophia's SEO reading: the H2s lost their
   keywords when they became short labels, and the sentences that carry them became a styled
   paragraph with no heading weight. Promoting the element gives the weight back without moving
   a pixel: every typographic value below is the one the `<p>` already had. */
article h3.sub{font-size:var(--fs-xs,.74rem);font-weight:var(--fw-normal,400);letter-spacing:.08em;text-transform:uppercase;color:var(--gray);line-height:1.15}
/* COMPARE, in the vault's vocabulary: original, the declared relation, the edition; the button opens the component. */
article .duo .act{grid-column:1/-1;text-align:center;margin-top:.4rem}
article .duo sz-compare{display:block;height:0;overflow:hidden}
/* THE SAME BLUR THE SEARCH OVERLAY USES (Quartz .search-container: backdrop-filter blur(4px)),
   applied to the content boxes over a translucent ground so the starfield lifts them. Moves to
   marketing.css .viz when the page lands. */
article .duo.four{grid-template-columns:repeat(4,1fr)}
article .duo.strip{grid-template-columns:auto auto 1fr}
article .duo .out4{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem}
article .duo .out4 span{display:block}
article .duo .out4 svg{width:40px;height:40px;margin:0 auto .3rem}
article .duo.four .side svg{width:44px;color:var(--hue-analysis)}
article .duo.xray .side svg{color:var(--hue-upload)}
@media (max-width:640px){article .duo.four{grid-template-columns:1fr 1fr}}
/* THE MODAL MUST BE ABOVE THE PAGE CHROME, AND THE HOUSE HAS NO LAYER SCALE TO SAY SO. Measured
   on the served page: the compare scrim is z-index 50 (sz-compare), the consent notice 60
   (sz-consent), the search field host 10000 (chrome CSS). A dialog the reader opened that
   renders UNDER the search bar is a defect; this lifts it through the part the component
   exposes for exactly that. 10001 is a magic number chasing another one, declared as such:
   the durable fix is NOT a z-scale: sz-modal already solved this in-house by building on the
   native <dialog> and its top layer, which no z-index can sit above. sz-compare following it
   onto <dialog> retires this rule; that is a component change, not a page style. */
article sz-compare::part(modal){z-index:10001}
@media (max-width:640px){article .duo.strip{grid-template-columns:1fr}article .duo .out4{grid-template-columns:1fr 1fr}}
/* THE CLOSE MIRRORS THE OPEN: one vault in the middle, two readers on the sides. Geometry only;
   every word is HTML. */
article .duo{display:grid;grid-template-columns:1fr auto 1fr;gap:1rem;align-items:center;text-align:center;font-size:var(--fs-xs,.74rem);color:var(--gray)}
article .duo svg{display:block;height:auto;margin:0 auto .3rem}
article .duo .side svg{width:56px}
article .duo .mid svg{width:96px}
article .duo b{display:block;color:var(--dark);font-size:var(--fs-sm,.86rem)}
@media (max-width:640px){article .duo{grid-template-columns:1fr}}

/* ============================================================================
   TWO OBJECTS THIS PAGE NEEDED AND `see` DID NOT.

   1. THE CURVE, ON A LOG SCALE, BECAUSE A LINEAR ONE HIDES THE ARGUMENT. The claim is one
      order of magnitude per format: 3600h, 48h, 4h, one session. Drawn linearly the last
      three bars are invisible and the fourth point, THE ONE CARRYING THE STRONGEST PROOF,
      reads as merely small. Log widths make the collapse legible, and the caption says the
      scale out loud so nobody reads it as linear.

      AND THE FOURTH ROW BREAKS THE VISUAL FAMILY ON PURPOSE. The three OOXML formats share a
      hue and a solid bar; PDF gets a different hue and an outlined bar. **THE BREAK IS THE
      ARGUMENT**: the engine did not get faster at PowerPoint, it became format-agnostic, and
      a fourth bar in the same family would have said the opposite.

   2. RECEIPT AND PRACTICE MUST NOT LOOK ALIKE, and that is a composition rule rather than a
      label. A receipt is a thing already true and carries its evidence on the same line, so
      it is solid, filled, and reads as closed. A practice is declared direction with no
      present-tense verb, so it is outlined, muted, and reads as open. A reader who never
      gets to the words should still be able to see which column is which.

   3. THE BOUNDS ARE IN THE FLOW, NOT IN SMALL PRINT. `see` had none of these. A bound that
      has to be read as a footnote is a bound that gets skipped, and both of this page's
      bounds are the kind a competent reader tests FIRST. So they sit inside the chapter, at
      the same measure as the prose, in a treatment that is quieter than the claim but not
      smaller than it.
   ============================================================================ */
article .curve{display:flex;flex-direction:column;gap:.55rem}
article .curve .row{display:grid;grid-template-columns:4.2rem 1fr 7.5rem;align-items:center;gap:.8rem}
article .curve .row b{font-size:var(--fs-sm,.86rem);color:var(--text)}
article .curve .track{display:block;height:10px;border-radius:5px;background:color-mix(in srgb,var(--lightgray) 45%,transparent)}
article .curve .bar{display:block;height:100%;border-radius:5px}
article .curve .ooxml .bar{background:var(--hue-analysis)}
article .curve .other .bar{background:transparent;border:1.5px solid var(--hue-output)}
article .curve .other b{color:var(--hue-output)}
article .curve em{font-style:normal;font-size:var(--fs-xs,.76rem);color:var(--gray);text-align:right}
article .curve .other em{color:var(--hue-output)}
article .ledger{display:grid;grid-template-columns:1fr 1fr;gap:1.4rem}
article .ledger h4{margin:0 0 .6rem;font-size:var(--fs-xs,.74rem);letter-spacing:.08em;text-transform:uppercase;font-weight:var(--fw-normal,400);color:var(--gray)}
article .ledger .item{margin-bottom:.7rem}
article .ledger .item b{display:block;font-size:var(--fs-sm,.88rem)}
article .ledger .item span{display:block;font-size:var(--fs-xs,.76rem);color:var(--gray);line-height:1.4;margin-top:.1rem}
article .ledger .receipts .item{border-left:2px solid var(--hue-output);padding-left:.7rem}
article .ledger .practices .item{border-left:2px dashed color-mix(in srgb,var(--gray) 55%,transparent);padding-left:.7rem}
article .ledger .practices .item b{color:var(--gray);font-weight:var(--fw-normal,400)}
article p.claim{margin:1rem 0 0;color:var(--text);font-size:var(--fs-sm,.95rem);line-height:1.55}
article .bound{margin:1.1rem 0 0;padding:.85rem 1rem;border-left:2px solid color-mix(in srgb,var(--gray) 40%,transparent);
  background:color-mix(in srgb,var(--surface) 45%,transparent);border-radius:0 8px 8px 0}
article .bound p{margin:0 0 .5rem;font-size:var(--fs-xs,.82rem);line-height:1.5;color:var(--gray)}
article .bound p:last-child{margin-bottom:0}
@media (max-width:640px){article .ledger{grid-template-columns:1fr}article .curve .row{grid-template-columns:3.4rem 1fr}article .curve em{grid-column:1/-1;text-align:left}}

/* THE VAULT GRAPH: born as stars, settles into the map. Geometry in SVG, words in HTML spans over
   it; `.stage` binds the two so labels track the drawing in both modes. Placed LAST so it wins
   over the panel's `.chap .viz` reset, and scoped to `.chap` so its specificity matches hers. */
article .chap .graph{position:relative;padding:.6rem;cursor:zoom-in;outline:none}
article .chap .graph .stage{position:relative;width:100%;aspect-ratio:800/520}
article .chap .graph .stage svg{display:block;width:100%;height:100%}
article .chap .graph .labels{position:absolute;inset:0;pointer-events:none}
article .chap .graph .labels span{position:absolute;transform:translate(-50%,10px);font-size:var(--fs-xs,.72rem);color:var(--dark);white-space:nowrap;opacity:0;transition:opacity .7s ease;text-shadow:0 0 6px var(--light),0 0 2px var(--light);pointer-events:auto}
article .chap .graph.ready .labels span{opacity:1}
article .chap .graph .nodes .hub{cursor:pointer;transition:opacity .25s}
article .chap .graph .edges line{transition:opacity .25s,stroke .25s}
article .chap .graph figcaption{margin-top:.4rem}
article .chap .graph:focus-visible{box-shadow:0 0 0 2px var(--secondary)}
article .chap .graph.full{flex:1;min-width:0;margin:0;border:0;border-radius:0;padding:3vh 4vw;background:transparent;cursor:zoom-out;display:flex;flex-direction:column;align-items:center;justify-content:center}
article .chap .graph.full .stage{width:min(92vw,calc(84vh * 800 / 520))}
article .chap .graph.full .labels span{font-size:1rem}
article .chap .graph.full figcaption{text-align:center;margin-top:1rem;max-width:70ch}
</style>
