[{"data":1,"prerenderedAt":439},["ShallowReactive",2],{"navigation_docs":3,"-meta-adr-template":176,"-meta-adr-template-surround":434},[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":167,"body":178,"description":427,"extension":428,"links":429,"meta":430,"navigation":431,"path":168,"seo":432,"stem":169,"__hash__":433},"docs\u002F4.meta\u002Fadr-template.md",{"type":179,"value":180,"toc":422},"minimark",[181,185,202,207,276,280,394,398,418],[182,183,167],"h1",{"id":184},"adr-template",[186,187,188,189,193,194,197,198,201],"p",{},"Copy this template into ",[190,191,192],"code",{},"content\u002F\u003Cproduct>\u002F\u003CN>.decisions\u002F"," or ",[190,195,196],{},"content\u002F1.platform\u002F5.decisions\u002F"," with a filename of the form ",[190,199,200],{},"YYYY-MM-DD-\u003Cslug>.md",". Fill in every section — an ADR with missing sections is worse than no ADR.",[203,204,206],"h2",{"id":205},"frontmatter-block","Frontmatter block",[208,209,214],"pre",{"className":210,"code":211,"language":212,"meta":213,"style":213},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\ntitle: \u003Cdecision — imperative or noun phrase, not a question>\ndescription: \u003Cone-line summary, used in the decisions index>\nnavigation:\n  icon: i-lucide-file-text\n---\n","yaml","",[190,215,216,225,240,251,260,271],{"__ignoreMap":213},[217,218,221],"span",{"class":219,"line":220},"line",1,[217,222,224],{"class":223},"sBMFI","---\n",[217,226,228,232,236],{"class":219,"line":227},2,[217,229,231],{"class":230},"swJcz","title",[217,233,235],{"class":234},"sMK4o",":",[217,237,239],{"class":238},"sfazB"," \u003Cdecision — imperative or noun phrase, not a question>\n",[217,241,243,246,248],{"class":219,"line":242},3,[217,244,245],{"class":230},"description",[217,247,235],{"class":234},[217,249,250],{"class":238}," \u003Cone-line summary, used in the decisions index>\n",[217,252,254,257],{"class":219,"line":253},4,[217,255,256],{"class":230},"navigation",[217,258,259],{"class":234},":\n",[217,261,263,266,268],{"class":219,"line":262},5,[217,264,265],{"class":230},"  icon",[217,267,235],{"class":234},[217,269,270],{"class":238}," i-lucide-file-text\n",[217,272,274],{"class":219,"line":273},6,[217,275,224],{"class":223},[203,277,279],{"id":278},"body-template","Body template",[208,281,285],{"className":282,"code":283,"language":284,"meta":213,"style":213},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# \u003Cdecision>\n\n**Status:** proposed | accepted | superseded-by [\u003Cnew decision>](\u002F\u003Cpath>\u002F\u003Cslug>)\n**Date:** YYYY-MM-DD\n\n## Context\n\nWhat forces are at play? What constraints, requirements, or existing decisions frame this choice? Keep this grounded in facts — no speculation, no \"we might want.\"\n\n## Decision\n\nThe decision itself, in declarative form. \"We use X because Y.\" One paragraph ideally.\n\n## Consequences\n\nWhat becomes easier. What becomes harder. What new obligations the decision creates. Be honest about downsides.\n\n## Alternatives considered\n\nEach alternative: one sentence naming it, one or two sentences on why it was rejected. No straw men — only alternatives that were genuinely on the table.\n","markdown",[190,286,287,292,298,303,308,312,317,322,328,333,339,344,350,355,361,366,372,377,383,388],{"__ignoreMap":213},[217,288,289],{"class":219,"line":220},[217,290,291],{},"# \u003Cdecision>\n",[217,293,294],{"class":219,"line":227},[217,295,297],{"emptyLinePlaceholder":296},true,"\n",[217,299,300],{"class":219,"line":242},[217,301,302],{},"**Status:** proposed | accepted | superseded-by [\u003Cnew decision>](\u002F\u003Cpath>\u002F\u003Cslug>)\n",[217,304,305],{"class":219,"line":253},[217,306,307],{},"**Date:** YYYY-MM-DD\n",[217,309,310],{"class":219,"line":262},[217,311,297],{"emptyLinePlaceholder":296},[217,313,314],{"class":219,"line":273},[217,315,316],{},"## Context\n",[217,318,320],{"class":219,"line":319},7,[217,321,297],{"emptyLinePlaceholder":296},[217,323,325],{"class":219,"line":324},8,[217,326,327],{},"What forces are at play? What constraints, requirements, or existing decisions frame this choice? Keep this grounded in facts — no speculation, no \"we might want.\"\n",[217,329,331],{"class":219,"line":330},9,[217,332,297],{"emptyLinePlaceholder":296},[217,334,336],{"class":219,"line":335},10,[217,337,338],{},"## Decision\n",[217,340,342],{"class":219,"line":341},11,[217,343,297],{"emptyLinePlaceholder":296},[217,345,347],{"class":219,"line":346},12,[217,348,349],{},"The decision itself, in declarative form. \"We use X because Y.\" One paragraph ideally.\n",[217,351,353],{"class":219,"line":352},13,[217,354,297],{"emptyLinePlaceholder":296},[217,356,358],{"class":219,"line":357},14,[217,359,360],{},"## Consequences\n",[217,362,364],{"class":219,"line":363},15,[217,365,297],{"emptyLinePlaceholder":296},[217,367,369],{"class":219,"line":368},16,[217,370,371],{},"What becomes easier. What becomes harder. What new obligations the decision creates. Be honest about downsides.\n",[217,373,375],{"class":219,"line":374},17,[217,376,297],{"emptyLinePlaceholder":296},[217,378,380],{"class":219,"line":379},18,[217,381,382],{},"## Alternatives considered\n",[217,384,386],{"class":219,"line":385},19,[217,387,297],{"emptyLinePlaceholder":296},[217,389,391],{"class":219,"line":390},20,[217,392,393],{},"Each alternative: one sentence naming it, one or two sentences on why it was rejected. No straw men — only alternatives that were genuinely on the table.\n",[203,395,397],{"id":396},"writing-rules","Writing rules",[399,400,401,409,412,415],"ul",{},[402,403,404,405,408],"li",{},"Status transitions: an accepted ADR is never edited in place. To revise, write a new ADR that supersedes it and flip the old one's status to ",[190,406,407],{},"superseded-by"," with a link to the replacement.",[402,410,411],{},"Keep ADRs short — usually under 300 words. If it's longer, the decision is probably too big; split it.",[402,413,414],{},"Link to code, specs, or other ADRs whenever a claim rests on them. Root-relative for internal, absolute URL for external.",[402,416,417],{},"Dates are the day the decision was made, not the day the doc was written (if they differ, add a note).",[419,420,421],"style",{},"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);}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}",{"title":213,"searchDepth":227,"depth":227,"links":423},[424,425,426],{"id":205,"depth":227,"text":206},{"id":278,"depth":227,"text":279},{"id":396,"depth":227,"text":397},"Copy this template for every architecture decision record.","md",null,{},{"icon":170},{"title":167,"description":427},"vOzqsKIX3kEvvWliZDZ9SdZkNtDqzmYLh7S2sg_58QY",[435,437],{"title":157,"path":158,"stem":159,"description":436,"icon":160,"children":-1},"Deployment diagram — PCTs, Cloudflare tunnels, DB host, Valkey, Ollama placement.",{"title":172,"path":173,"stem":174,"description":438,"icon":175,"children":-1},"Writing style, frontmatter, diagrams, cross-linking, and ADR format for ValkymIA internal docs.",1776491031798]