<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>TrueRuslan Engineering Notes</title>
  <id>https://trueruslan.ru/feed.xml</id>
  <link href="https://trueruslan.ru/feed.xml" rel="self"/>
  <link href="https://trueruslan.ru/landing/notes.html"/>
  <updated>2026-07-23T00:00:00Z</updated>
  <entry>
    <title>Почему успешный ответ LLM ещё не означает успешный контракт</title>
    <id>https://trueruslan.ru/landing/notes/llm-output-is-a-protocol-boundary.html</id>
    <link href="https://trueruslan.ru/landing/notes/llm-output-is-a-protocol-boundary.html"/>
    <published>2026-07-23T00:00:00Z</published>
    <updated>2026-07-23T00:00:00Z</updated>
    <summary>Почему structured output модели нужно обрабатывать как внешний protocol boundary: strict JSON, type validation, no coercion, bounded fallback и отдельная authorization граница.</summary>
    <category term="AI"/>
    <category term="Protocols"/>
    <category term="Validation"/>
    <category term="Reliability"/>
  </entry>
  <entry>
    <title>Почему green CI не означает verified product</title>
    <id>https://trueruslan.ru/landing/notes/green-ci-is-not-product-verification.html</id>
    <link href="https://trueruslan.ru/landing/notes/green-ci-is-not-product-verification.html"/>
    <published>2026-07-22T00:00:00Z</published>
    <updated>2026-07-22T00:00:00Z</updated>
    <summary>Как Project Evidence Layer разделил automated и manual proof, bounded scope и freshness, чтобы зелёный pipeline не превращался в слишком широкий product claim.</summary>
    <category term="CI"/>
    <category term="Evidence"/>
    <category term="Reliability"/>
    <category term="Verification"/>
  </entry>
  <entry>
    <title>Как IntersectionObserver спрятал огромную таблицу</title>
    <id>https://trueruslan.ru/landing/notes/intersection-observer-giant-table.html</id>
    <link href="https://trueruslan.ru/landing/notes/intersection-observer-giant-table.html"/>
    <published>2026-07-22T00:00:00Z</published>
    <updated>2026-07-22T00:00:00Z</updated>
    <summary>Разбор реальной UI-регрессии: почему reveal-анимация с threshold 0.08 не срабатывала на очень высокой bibliography table и как этот баг привёл к более сильной архитектуре.</summary>
    <category term="Browser"/>
    <category term="IntersectionObserver"/>
    <category term="Regression"/>
    <category term="UI"/>
  </entry>
  <entry>
    <title>Почему build-time data недостаточно без no-JS representation</title>
    <id>https://trueruslan.ru/landing/notes/static-first-sources-no-js.html</id>
    <link href="https://trueruslan.ru/landing/notes/static-first-sources-no-js.html"/>
    <published>2026-07-22T00:00:00Z</published>
    <updated>2026-07-22T00:00:00Z</updated>
    <summary>Как migration Sources Registry обнаружила пустой React root без JavaScript и почему semantic fallback стал частью static-first architecture.</summary>
    <category term="Static-first"/>
    <category term="No-JS"/>
    <category term="Diplodoc"/>
    <category term="Architecture"/>
  </entry>
  <entry>
    <title>Почему я отделил landing page от Diplodoc runtime</title>
    <id>https://trueruslan.ru/landing/notes/portfolio-runtime-boundary.html</id>
    <link href="https://trueruslan.ru/landing/notes/portfolio-runtime-boundary.html"/>
    <published>2026-07-20T00:00:00Z</published>
    <updated>2026-07-21T00:00:00Z</updated>
    <summary>Ретроспектива о том, почему лёгкая standalone-главная оказалась надёжнее попыток заставить простой первый экран платить стоимость полного documentation runtime.</summary>
    <category term="Performance"/>
    <category term="Hydration"/>
    <category term="Diplodoc"/>
  </entry>
  <entry>
    <title>Проектирование server-authoritative AI NPC pipeline</title>
    <id>https://trueruslan.ru/landing/notes/server-authoritative-ai-npcs.html</id>
    <link href="https://trueruslan.ru/landing/notes/server-authoritative-ai-npcs.html"/>
    <published>2026-07-20T00:00:00Z</published>
    <updated>2026-07-21T00:00:00Z</updated>
    <summary>Архитектурные границы LivingWorld: session ownership, voice/text ingress, provider orchestration, memory, cancellation и авторизация действий модели.</summary>
    <category term="AI agents"/>
    <category term="Voice"/>
    <category term="Security"/>
    <category term="Architecture"/>
  </entry>
  <entry>
    <title>Quality gates для статического инженерного сайта</title>
    <id>https://trueruslan.ru/landing/notes/static-site-quality-gates.html</id>
    <link href="https://trueruslan.ru/landing/notes/static-site-quality-gates.html"/>
    <published>2026-07-20T00:00:00Z</published>
    <updated>2026-07-21T00:00:00Z</updated>
    <summary>Как вокруг обычной статической сборки появились generated-site integrity, browser smoke, Axe, Lighthouse, cross-browser и visual regression проверки.</summary>
    <category term="CI"/>
    <category term="Reliability"/>
    <category term="Playwright"/>
    <category term="Lighthouse"/>
  </entry>
</feed>
