[{"data":1,"prerenderedAt":601},["ShallowReactive",2],{"navigation_docs":3,"-meta-conventions":176,"-meta-conventions-surround":598},[4,32,161],{"title":5,"path":6,"stem":7,"children":8},"Platform","\u002Fplatform","1.platform",[9,12,17,22,27],{"title":5,"path":6,"stem":10,"icon":11},"1.platform\u002Findex","i-lucide-layers",{"title":13,"path":14,"stem":15,"icon":16},"Principles","\u002Fplatform\u002Fprinciples","1.platform\u002F1.principles","i-lucide-compass",{"title":18,"path":19,"stem":20,"icon":21},"Authentik","\u002Fplatform\u002Fauthentik","1.platform\u002F2.authentik","i-lucide-key-round",{"title":23,"path":24,"stem":25,"icon":26},"Entitlements","\u002Fplatform\u002Fentitlements","1.platform\u002F3.entitlements","i-lucide-shield-check",{"title":28,"path":29,"stem":30,"icon":31},"Networking","\u002Fplatform\u002Fnetworking","1.platform\u002F4.networking","i-lucide-network",{"title":33,"path":34,"stem":35,"children":36},"Sigrun","\u002Fsigrun","2.sigrun",[37,40,61,86,116,141],{"title":33,"path":34,"stem":38,"icon":39},"2.sigrun\u002Findex","i-lucide-bot",{"title":41,"path":42,"stem":43,"children":44,"page":60},"Overview","\u002Fsigrun\u002Foverview","2.sigrun\u002F1.overview",[45,50,55],{"title":46,"path":47,"stem":48,"icon":49},"Constraints","\u002Fsigrun\u002Foverview\u002Fconstraints","2.sigrun\u002F1.overview\u002Fconstraints","i-lucide-ruler",{"title":51,"path":52,"stem":53,"icon":54},"Context","\u002Fsigrun\u002Foverview\u002Fcontext","2.sigrun\u002F1.overview\u002Fcontext","i-lucide-map",{"title":56,"path":57,"stem":58,"icon":59},"Goals","\u002Fsigrun\u002Foverview\u002Fgoals","2.sigrun\u002F1.overview\u002Fgoals","i-lucide-target",false,{"title":62,"path":63,"stem":64,"children":65,"page":60},"Runtime","\u002Fsigrun\u002Fruntime","2.sigrun\u002F2.runtime",[66,71,76,81],{"title":67,"path":68,"stem":69,"icon":70},"Chat request","\u002Fsigrun\u002Fruntime\u002Fchat-request","2.sigrun\u002F2.runtime\u002Fchat-request","i-lucide-message-circle",{"title":72,"path":73,"stem":74,"icon":75},"Ingestion pipeline","\u002Fsigrun\u002Fruntime\u002Fingestion-pipeline","2.sigrun\u002F2.runtime\u002Fingestion-pipeline","i-lucide-download-cloud",{"title":77,"path":78,"stem":79,"icon":80},"Retrieval","\u002Fsigrun\u002Fruntime\u002Fretrieval","2.sigrun\u002F2.runtime\u002Fretrieval","i-lucide-search",{"title":82,"path":83,"stem":84,"icon":85},"Streaming","\u002Fsigrun\u002Fruntime\u002Fstreaming","2.sigrun\u002F2.runtime\u002Fstreaming","i-lucide-radio",{"title":87,"path":88,"stem":89,"children":90,"page":60},"Components","\u002Fsigrun\u002Fcomponents","2.sigrun\u002F3.components",[91,96,101,106,111],{"title":92,"path":93,"stem":94,"icon":95},"Agents","\u002Fsigrun\u002Fcomponents\u002Fagents","2.sigrun\u002F3.components\u002Fagents","i-lucide-users",{"title":97,"path":98,"stem":99,"icon":100},"Frontend","\u002Fsigrun\u002Fcomponents\u002Ffrontend","2.sigrun\u002F3.components\u002Ffrontend","i-lucide-monitor",{"title":102,"path":103,"stem":104,"icon":105},"Knowledge base","\u002Fsigrun\u002Fcomponents\u002Fknowledge-base","2.sigrun\u002F3.components\u002Fknowledge-base","i-lucide-book-open",{"title":107,"path":108,"stem":109,"icon":110},"LangGraph","\u002Fsigrun\u002Fcomponents\u002Flanggraph","2.sigrun\u002F3.components\u002Flanggraph","i-lucide-workflow",{"title":112,"path":113,"stem":114,"icon":115},"svc-sigrun","\u002Fsigrun\u002Fcomponents\u002Fsvc-sigrun","2.sigrun\u002F3.components\u002Fsvc-sigrun","i-lucide-server",{"title":117,"path":118,"stem":119,"children":120,"page":60},"Integrations","\u002Fsigrun\u002Fintegrations","2.sigrun\u002F4.integrations",[121,126,131,136],{"title":122,"path":123,"stem":124,"icon":125},"Ansuz KB contract","\u002Fsigrun\u002Fintegrations\u002Fansuz-kb-contract","2.sigrun\u002F4.integrations\u002Fansuz-kb-contract","i-lucide-file-check",{"title":127,"path":128,"stem":129,"icon":130},"Authentik OIDC","\u002Fsigrun\u002Fintegrations\u002Fauthentik-oidc","2.sigrun\u002F4.integrations\u002Fauthentik-oidc","i-lucide-fingerprint",{"title":132,"path":133,"stem":134,"icon":135},"Billing entitlements","\u002Fsigrun\u002Fintegrations\u002Fbilling-entitlements","2.sigrun\u002F4.integrations\u002Fbilling-entitlements","i-lucide-credit-card",{"title":137,"path":138,"stem":139,"icon":140},"Twilio WhatsApp","\u002Fsigrun\u002Fintegrations\u002Ftwilio-whatsapp","2.sigrun\u002F4.integrations\u002Ftwilio-whatsapp","i-lucide-message-square",{"title":142,"path":143,"stem":144,"children":145,"page":60},"Deployment","\u002Fsigrun\u002Fdeployment","2.sigrun\u002F5.deployment",[146,151,156],{"title":147,"path":148,"stem":149,"icon":150},"CI\u002FCD","\u002Fsigrun\u002Fdeployment\u002Fci-cd","2.sigrun\u002F5.deployment\u002Fci-cd","i-lucide-git-branch",{"title":152,"path":153,"stem":154,"icon":155},"Containers","\u002Fsigrun\u002Fdeployment\u002Fcontainers","2.sigrun\u002F5.deployment\u002Fcontainers","i-lucide-container",{"title":157,"path":158,"stem":159,"icon":160},"Topology","\u002Fsigrun\u002Fdeployment\u002Ftopology","2.sigrun\u002F5.deployment\u002Ftopology","i-lucide-globe",{"title":162,"path":163,"stem":164,"children":165,"page":60},"Meta","\u002Fmeta","4.meta",[166,171],{"title":167,"path":168,"stem":169,"icon":170},"ADR template","\u002Fmeta\u002Fadr-template","4.meta\u002Fadr-template","i-lucide-file-text",{"title":172,"path":173,"stem":174,"icon":175},"Conventions","\u002Fmeta\u002Fconventions","4.meta\u002Fconventions","i-lucide-book",{"id":177,"title":172,"body":178,"description":591,"extension":592,"links":593,"meta":594,"navigation":595,"path":173,"seo":596,"stem":174,"__hash__":597},"docs\u002F4.meta\u002Fconventions.md",{"type":179,"value":180,"toc":575},"minimark",[181,185,189,194,197,201,204,274,301,305,316,319,322,326,329,340,351,354,358,361,389,393,396,401,404,434,438,442,453,462,473,477,484,488,491,521,524,528,535,539,554,571],[182,183,172],"h1",{"id":184},"conventions",[186,187,188],"p",{},"All doc authors in this repo follow these rules. They are short, opinionated, and load-bearing. If a rule here conflicts with something you're tempted to do, the rule wins unless you open an ADR to change it.",[190,191,193],"h2",{"id":192},"language","Language",[186,195,196],{},"English for every architecture and operations page. Spanish is reserved for Ansuz-produced KB content and user-facing product copy.",[190,198,200],{"id":199},"page-frontmatter","Page frontmatter",[186,202,203],{},"Every page declares:",[205,206,211],"pre",{"className":207,"code":208,"language":209,"meta":210,"style":210},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\ntitle: \u003Cshort nav label>\ndescription: \u003Cone-sentence summary, used for SEO and sidebar previews>\nnavigation:\n  icon: i-lucide-\u003Cicon-name>\n---\n","yaml","",[212,213,214,223,238,249,258,269],"code",{"__ignoreMap":210},[215,216,219],"span",{"class":217,"line":218},"line",1,[215,220,222],{"class":221},"sBMFI","---\n",[215,224,226,230,234],{"class":217,"line":225},2,[215,227,229],{"class":228},"swJcz","title",[215,231,233],{"class":232},"sMK4o",":",[215,235,237],{"class":236},"sfazB"," \u003Cshort nav label>\n",[215,239,241,244,246],{"class":217,"line":240},3,[215,242,243],{"class":228},"description",[215,245,233],{"class":232},[215,247,248],{"class":236}," \u003Cone-sentence summary, used for SEO and sidebar previews>\n",[215,250,252,255],{"class":217,"line":251},4,[215,253,254],{"class":228},"navigation",[215,256,257],{"class":232},":\n",[215,259,261,264,266],{"class":217,"line":260},5,[215,262,263],{"class":228},"  icon",[215,265,233],{"class":232},[215,267,268],{"class":236}," i-lucide-\u003Cicon-name>\n",[215,270,272],{"class":217,"line":271},6,[215,273,222],{"class":221},[186,275,276,278,279,281,282,285,286,289,290,293,294,293,297,300],{},[212,277,229],{}," and ",[212,280,243],{}," are required. ",[212,283,284],{},"navigation.icon"," is optional but strongly preferred — it lightens the sidebar. Icons must come from the Lucide set (",[212,287,288],{},"i-lucide-*","). Additional Docus frontmatter fields (",[212,291,292],{},"seo",", ",[212,295,296],{},"navigation.title",[212,298,299],{},"hidden",") are fine when they serve a purpose.",[190,302,304],{"id":303},"page-structure","Page structure",[186,306,307,308,311,312,315],{},"Every page opens with a single paragraph summarizing what it covers, placed between the ",[212,309,310],{},"H1"," and the first ",[212,313,314],{},"##",". Prose is active voice, present tense: \"Sigrun validates the token,\" not \"The token will be validated.\"",[186,317,318],{},"Avoid version numbers in prose unless they are load-bearing. Link to the source-of-truth manifest (pyproject.toml, package.json) instead.",[186,320,321],{},"Code blocks carry language tags. Use filename labels when the filename clarifies context.",[190,323,325],{"id":324},"cross-linking","Cross-linking",[186,327,328],{},"Root-relative paths only:",[205,330,334],{"className":331,"code":332,"language":333,"meta":210,"style":210},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Ingestion pipeline](\u002Fsigrun\u002Fruntime\u002Fingestion-pipeline)\n","markdown",[212,335,336],{"__ignoreMap":210},[215,337,338],{"class":217,"line":218},[215,339,332],{},[186,341,342,343,346,347,350],{},"Never ",[212,344,345],{},"..\u002F"," relative paths — they break when pages move. Never include the ",[212,348,349],{},".md"," extension — Docus routes strip it.",[186,352,353],{},"Links to source code use the full repo URL with a deep file path. Line anchors are fine for stable symbols; avoid them for volatile code.",[190,355,357],{"id":356},"callouts-mdc-components","Callouts (MDC components)",[186,359,360],{},"Reserve callouts for things a reader would miss in flat text. Don't decorate prose.",[362,363,364,371,377,383],"ul",{},[365,366,367,370],"li",{},[212,368,369],{},"::note"," — neutral context.",[365,372,373,376],{},[212,374,375],{},"::tip"," — actionable shortcut.",[365,378,379,382],{},[212,380,381],{},"::warning"," — something that will bite you (stale data, footguns).",[365,384,385,388],{},[212,386,387],{},"::caution"," — destructive if ignored (data loss, security).",[190,390,392],{"id":391},"diagrams","Diagrams",[186,394,395],{},"Every runtime, deployment, and integration page includes at least one diagram. Every diagram is referenced from prose — no drop-and-walk. No ASCII art, whiteboard photos, or unsourced PNGs; if a diagram exists, its source exists in-repo.",[397,398,400],"h3",{"id":399},"mermaid","Mermaid",[186,402,403],{},"Flows, sequence diagrams, simple ERs. Fenced inline:",[205,405,407],{"className":331,"code":406,"language":333,"meta":210,"style":210},"```mermaid\nsequenceDiagram\n  User ->> Sigrun: POST \u002Fchat\n  Sigrun -->> User: SSE stream\n```\n",[212,408,409,414,419,424,429],{"__ignoreMap":210},[215,410,411],{"class":217,"line":218},[215,412,413],{},"```mermaid\n",[215,415,416],{"class":217,"line":225},[215,417,418],{},"sequenceDiagram\n",[215,420,421],{"class":217,"line":240},[215,422,423],{},"  User ->> Sigrun: POST \u002Fchat\n",[215,425,426],{"class":217,"line":251},[215,427,428],{},"  Sigrun -->> User: SSE stream\n",[215,430,431],{"class":217,"line":260},[215,432,433],{},"```\n",[435,436,437],"note",{},"Rendering tooling for Mermaid is not yet wired. Authoring the fenced blocks today is correct — they'll render once the transformer lands.",[397,439,441],{"id":440},"plantuml","PlantUML",[186,443,444,445,448,449,452],{},"Structural (C4 L1\u002FL2) and deployment diagrams. Source at ",[212,446,447],{},"content\u002Fassets\u002Fdiagrams\u002F\u003Cproduct>\u002F\u003Cname>.puml",", pre-rendered SVG committed alongside as ",[212,450,451],{},"\u003Cname>.svg",". Embed with:",[205,454,456],{"className":331,"code":455,"language":333,"meta":210,"style":210},"![Sigrun topology](\u002Fassets\u002Fdiagrams\u002Fsigrun\u002Ftopology.svg)\n",[212,457,458],{"__ignoreMap":210},[215,459,460],{"class":217,"line":218},[215,461,455],{},[435,463,464,465,468,469,472],{},"Render script and pre-commit hook are not yet wired. For now, render ",[212,466,467],{},".puml"," files manually with ",[212,470,471],{},"plantuml -tsvg"," and commit both files together.",[397,474,476],{"id":475},"when-to-reach-for-plantuml","When to reach for PlantUML",[186,478,479,480,483],{},"Prefer Mermaid. Reach for PlantUML only when its layout control actually matters: C4 diagrams that use ",[212,481,482],{},"C4-PlantUML",", deployment diagrams with node stacks, or component maps with explicit swimlanes.",[190,485,487],{"id":486},"folder-structure","Folder structure",[186,489,490],{},"The repo is organized by concern:",[362,492,493,499,509,515],{},[365,494,495,498],{},[212,496,497],{},"content\u002F1.platform\u002F"," — cross-cutting primitives, consumed by ≥2 products.",[365,500,501,504,505,508],{},[212,502,503],{},"content\u002F\u003CN>.\u003Cproduct>\u002F"," — per-product slices. New products copy the ",[212,506,507],{},"2.sigrun\u002F"," shape.",[365,510,511,514],{},[212,512,513],{},"content\u002F4.meta\u002F"," — conventions, templates.",[365,516,517,520],{},[212,518,519],{},"content\u002Fassets\u002Fdiagrams\u002F"," — PlantUML sources and rendered SVGs.",[186,522,523],{},"Numeric prefixes order the sidebar; Docus strips them from routes.",[397,525,527],{"id":526},"promoting-to-platform","Promoting to platform",[186,529,530,531,534],{},"A concern stays per-product until at least two products actually use it. Only then does it move to ",[212,532,533],{},"1.platform\u002F",". Resist the urge to preemptively generalize.",[190,536,538],{"id":537},"adrs","ADRs",[186,540,541,542,545,546,549,550,553],{},"Per-product ADRs live at ",[212,543,544],{},"content\u002F\u003Cproduct>\u002F\u003CN>.decisions\u002FYYYY-MM-DD-\u003Cslug>.md",". Cross-cutting ADRs live at ",[212,547,548],{},"content\u002F1.platform\u002F5.decisions\u002FYYYY-MM-DD-\u003Cslug>.md",". Use the template at ",[551,552,168],"a",{"href":168},".",[186,555,556,557,293,560,293,563,566,567,570],{},"Status values: ",[212,558,559],{},"proposed",[212,561,562],{},"accepted",[212,564,565],{},"superseded-by \u003Clink>",". ",[212,568,569],{},"superseded-by"," carries a root-relative link to the replacing ADR so the chain stays navigable.",[572,573,574],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":210,"searchDepth":225,"depth":225,"links":576},[577,578,579,580,581,582,587,590],{"id":192,"depth":225,"text":193},{"id":199,"depth":225,"text":200},{"id":303,"depth":225,"text":304},{"id":324,"depth":225,"text":325},{"id":356,"depth":225,"text":357},{"id":391,"depth":225,"text":392,"children":583},[584,585,586],{"id":399,"depth":240,"text":400},{"id":440,"depth":240,"text":441},{"id":475,"depth":240,"text":476},{"id":486,"depth":225,"text":487,"children":588},[589],{"id":526,"depth":240,"text":527},{"id":537,"depth":225,"text":538},"Writing style, frontmatter, diagrams, cross-linking, and ADR format for ValkymIA internal docs.","md",null,{},{"icon":175},{"title":172,"description":591},"5ABocNiPmfGj1P5Bpp5TKO-5BdE046eR94Fl3YDm5ZE",[599,593],{"title":167,"path":168,"stem":169,"description":600,"icon":170,"children":-1},"Copy this template for every architecture decision record.",1776491031798]