[{"data":1,"prerenderedAt":952},["ShallowReactive",2],{"navigation_docs":3,"-docs-operations-console":356,"-docs-operations-console-surround":947},[4,8,34,64,90,139,157,171,193,227,241,266,312,334],{"title":5,"path":6,"stem":7},"Documentation","\u002Fdocs","docs\u002Findex",{"title":9,"path":10,"stem":11,"children":12},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started\u002Findex",[13,14,18,22,26,30],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F01.getting-started\u002F01.introduction",{"title":19,"path":20,"stem":21},"Concepts","\u002Fdocs\u002Fgetting-started\u002Fconcepts","docs\u002F01.getting-started\u002F02.concepts",{"title":23,"path":24,"stem":25},"Quickstart (5 minutes)","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F01.getting-started\u002F03.quickstart",{"title":27,"path":28,"stem":29},"Local development","\u002Fdocs\u002Fgetting-started\u002Flocal-development","docs\u002F01.getting-started\u002F04.local-development",{"title":31,"path":32,"stem":33},"FAQ","\u002Fdocs\u002Fgetting-started\u002Ffaq","docs\u002F01.getting-started\u002F05.faq",{"title":35,"path":36,"stem":37,"children":38},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002F02.architecture\u002Findex",[39,40,44,48,52,56,60],{"title":35,"path":36,"stem":37},{"title":41,"path":42,"stem":43},"Architecture overview","\u002Fdocs\u002Farchitecture\u002Foverview","docs\u002F02.architecture\u002F01.overview",{"title":45,"path":46,"stem":47},"Services","\u002Fdocs\u002Farchitecture\u002Fservices","docs\u002F02.architecture\u002F02.services",{"title":49,"path":50,"stem":51},"Request lifecycle","\u002Fdocs\u002Farchitecture\u002Frequest-lifecycle","docs\u002F02.architecture\u002F03.request-lifecycle",{"title":53,"path":54,"stem":55},"Data model","\u002Fdocs\u002Farchitecture\u002Fdata-model","docs\u002F02.architecture\u002F04.data-model",{"title":57,"path":58,"stem":59},"Status and evidence","\u002Fdocs\u002Farchitecture\u002Fstatus-and-evidence","docs\u002F02.architecture\u002F05.status-and-evidence",{"title":61,"path":62,"stem":63},"Target architecture and authority","\u002Fdocs\u002Farchitecture\u002Ftarget-architecture","docs\u002F02.architecture\u002F06.target-architecture",{"title":65,"path":66,"stem":67,"children":68},"Auth","\u002Fdocs\u002Fauth","docs\u002F03.auth\u002Findex",[69,70,74,78,82,86],{"title":65,"path":66,"stem":67},{"title":71,"path":72,"stem":73},"Overview","\u002Fdocs\u002Fauth\u002Foverview","docs\u002F03.auth\u002F01.overview",{"title":75,"path":76,"stem":77},"Organization and agent model","\u002Fdocs\u002Fauth\u002Forg-project-model","docs\u002F03.auth\u002F02.org-project-model",{"title":79,"path":80,"stem":81},"Issuing API keys","\u002Fdocs\u002Fauth\u002Fissuing-api-keys","docs\u002F03.auth\u002F03.issuing-api-keys",{"title":83,"path":84,"stem":85},"Multi-tenant RLS","\u002Fdocs\u002Fauth\u002Fmulti-tenant-rls","docs\u002F03.auth\u002F04.multi-tenant-rls",{"title":87,"path":88,"stem":89},"Operator sessions and step-up","\u002Fdocs\u002Fauth\u002Foperator-sessions","docs\u002F03.auth\u002F05.operator-sessions",{"title":91,"path":92,"stem":93,"children":94},"Proxy","\u002Fdocs\u002Fproxy","docs\u002F04.proxy\u002Findex",[95,96,99,103,107,111,115,119,123,127,131,135],{"title":91,"path":92,"stem":93},{"title":71,"path":97,"stem":98},"\u002Fdocs\u002Fproxy\u002Foverview","docs\u002F04.proxy\u002F01.overview",{"title":100,"path":101,"stem":102},"Authentication","\u002Fdocs\u002Fproxy\u002Fauthentication","docs\u002F04.proxy\u002F02.authentication",{"title":104,"path":105,"stem":106},"Request routing","\u002Fdocs\u002Fproxy\u002Frequest-routing","docs\u002F04.proxy\u002F03.request-routing",{"title":108,"path":109,"stem":110},"Sessions","\u002Fdocs\u002Fproxy\u002Fsessions","docs\u002F04.proxy\u002F04.sessions",{"title":112,"path":113,"stem":114},"Directives","\u002Fdocs\u002Fproxy\u002Fdirectives","docs\u002F04.proxy\u002F05.directives",{"title":116,"path":117,"stem":118},"Idempotency and budgets","\u002Fdocs\u002Fproxy\u002Fidempotency-and-budgets","docs\u002F04.proxy\u002F06.idempotency-and-budgets",{"title":120,"path":121,"stem":122},"Rate limiting","\u002Fdocs\u002Fproxy\u002Frate-limiting","docs\u002F04.proxy\u002F07.rate-limiting",{"title":124,"path":125,"stem":126},"Provider adapters","\u002Fdocs\u002Fproxy\u002Fprovider-adapters","docs\u002F04.proxy\u002F08.provider-adapters",{"title":128,"path":129,"stem":130},"Auth caching","\u002Fdocs\u002Fproxy\u002Fauth-caching","docs\u002F04.proxy\u002F09.auth-caching",{"title":132,"path":133,"stem":134},"Configuration","\u002Fdocs\u002Fproxy\u002Fconfiguration","docs\u002F04.proxy\u002F10.configuration",{"title":136,"path":137,"stem":138},"Provider routing and resilience","\u002Fdocs\u002Fproxy\u002Fprovider-routing-and-resilience","docs\u002F04.proxy\u002F11.provider-routing-and-resilience",{"title":140,"path":141,"stem":142,"children":143},"Memory","\u002Fdocs\u002Fmemory","docs\u002F05.memory\u002Findex",[144,145,149,153],{"title":140,"path":141,"stem":142},{"title":146,"path":147,"stem":148},"Memory overview","\u002Fdocs\u002Fmemory\u002Foverview","docs\u002F05.memory\u002F01.overview",{"title":150,"path":151,"stem":152},"Write path","\u002Fdocs\u002Fmemory\u002Fwrite-path","docs\u002F05.memory\u002F02.write-path",{"title":154,"path":155,"stem":156},"Search and lifecycle","\u002Fdocs\u002Fmemory\u002Fsearch-and-lifecycle","docs\u002F05.memory\u002F03.search-and-lifecycle",{"title":158,"path":159,"stem":160,"children":161},"Context","\u002Fdocs\u002Fcontext","docs\u002F06.context\u002Findex",[162,163,167],{"title":158,"path":159,"stem":160},{"title":164,"path":165,"stem":166},"Assembly pipeline","\u002Fdocs\u002Fcontext\u002Foverview","docs\u002F06.context\u002F01.overview",{"title":168,"path":169,"stem":170},"Ranking and packing","\u002Fdocs\u002Fcontext\u002Franking-and-packing","docs\u002F06.context\u002F02.ranking-and-packing",{"title":172,"path":173,"stem":174,"children":175},"Intelligence","\u002Fdocs\u002Fintelligence","docs\u002F07.intelligence\u002Findex",[176,177,181,185,189],{"title":172,"path":173,"stem":174},{"title":178,"path":179,"stem":180},"Workers","\u002Fdocs\u002Fintelligence\u002Fworkers","docs\u002F07.intelligence\u002F01.workers",{"title":182,"path":183,"stem":184},"Extraction","\u002Fdocs\u002Fintelligence\u002Fextraction","docs\u002F07.intelligence\u002F02.extraction",{"title":186,"path":187,"stem":188},"Embedder","\u002Fdocs\u002Fintelligence\u002Fembedder","docs\u002F07.intelligence\u002F03.embedder",{"title":190,"path":191,"stem":192},"Extraction evaluation","\u002Fdocs\u002Fintelligence\u002Fevaluation","docs\u002F07.intelligence\u002F04.evaluation",{"title":194,"path":195,"stem":196,"children":197},"API reference","\u002Fdocs\u002Fapi-reference","docs\u002F08.api-reference\u002Findex",[198,199,203,207,211,215,219,223],{"title":194,"path":195,"stem":196},{"title":200,"path":201,"stem":202},"Chat completions","\u002Fdocs\u002Fapi-reference\u002Fchat-completions","docs\u002F08.api-reference\u002F01.chat-completions",{"title":204,"path":205,"stem":206},"Responses","\u002Fdocs\u002Fapi-reference\u002Fresponses","docs\u002F08.api-reference\u002F02.responses",{"title":208,"path":209,"stem":210},"Errors","\u002Fdocs\u002Fapi-reference\u002Ferrors","docs\u002F08.api-reference\u002F03.errors",{"title":212,"path":213,"stem":214},"Health and metrics","\u002Fdocs\u002Fapi-reference\u002Fproxy-health","docs\u002F08.api-reference\u002F04.proxy-health",{"title":216,"path":217,"stem":218},"HTTP route inventory","\u002Fdocs\u002Fapi-reference\u002Fhttp-routes","docs\u002F08.api-reference\u002F05.http-routes",{"title":220,"path":221,"stem":222},"Management API","\u002Fdocs\u002Fapi-reference\u002Fmanagement-api","docs\u002F08.api-reference\u002F06.management-api",{"title":224,"path":225,"stem":226},"Auth gRPC (ValidateToken, ValidateAgent)","\u002Fdocs\u002Fapi-reference\u002Fauth-grpc","docs\u002F08.api-reference\u002F07.auth-grpc",{"title":228,"path":229,"stem":230,"children":231},"MCP","\u002Fdocs\u002Fmcp","docs\u002F09.mcp\u002Findex",[232,233,237],{"title":228,"path":229,"stem":230},{"title":234,"path":235,"stem":236},"Memory server","\u002Fdocs\u002Fmcp\u002Fmemory-server","docs\u002F09.mcp\u002F01.memory-server",{"title":238,"path":239,"stem":240},"Operator gateway","\u002Fdocs\u002Fmcp\u002Foperator-gateway","docs\u002F09.mcp\u002F02.operator-gateway",{"title":242,"path":243,"stem":244,"children":245},"Security","\u002Fdocs\u002Fsecurity","docs\u002F10.security\u002Findex",[246,247,251,254,258,262],{"title":242,"path":243,"stem":244},{"title":248,"path":249,"stem":250},"Security overview","\u002Fdocs\u002Fsecurity\u002Foverview","docs\u002F10.security\u002F01.overview",{"title":100,"path":252,"stem":253},"\u002Fdocs\u002Fsecurity\u002Fauthentication","docs\u002F10.security\u002F02.authentication",{"title":255,"path":256,"stem":257},"Tenant isolation","\u002Fdocs\u002Fsecurity\u002Ftenant-isolation","docs\u002F10.security\u002F03.tenant-isolation",{"title":259,"path":260,"stem":261},"Secrets and keys","\u002Fdocs\u002Fsecurity\u002Fsecrets-and-keys","docs\u002F10.security\u002F04.secrets-and-keys",{"title":263,"path":264,"stem":265},"Prompt injection","\u002Fdocs\u002Fsecurity\u002Fprompt-injection","docs\u002F10.security\u002F05.prompt-injection",{"title":267,"path":268,"stem":269,"children":270},"Operations","\u002Fdocs\u002Foperations","docs\u002F11.operations\u002Findex",[271,272,276,280,284,288,292,296,300,304,308],{"title":267,"path":268,"stem":269},{"title":273,"path":274,"stem":275},"Observability","\u002Fdocs\u002Foperations\u002Fobservability","docs\u002F11.operations\u002F01.observability",{"title":277,"path":278,"stem":279},"Traces and ClickHouse","\u002Fdocs\u002Foperations\u002Ftraces-and-clickhouse","docs\u002F11.operations\u002F02.traces-and-clickhouse",{"title":281,"path":282,"stem":283},"Health checks","\u002Fdocs\u002Foperations\u002Fhealth-checks","docs\u002F11.operations\u002F03.health-checks",{"title":285,"path":286,"stem":287},"Incident response","\u002Fdocs\u002Foperations\u002Fincident-response","docs\u002F11.operations\u002F04.incident-response",{"title":289,"path":290,"stem":291},"Troubleshooting","\u002Fdocs\u002Foperations\u002Ftroubleshooting","docs\u002F11.operations\u002F05.troubleshooting",{"title":293,"path":294,"stem":295},"Billing and budgets","\u002Fdocs\u002Foperations\u002Fbilling-and-budgets","docs\u002F11.operations\u002F06.billing-and-budgets",{"title":297,"path":298,"stem":299},"Evidence and relay","\u002Fdocs\u002Foperations\u002Fevidence-and-relay","docs\u002F11.operations\u002F07.evidence-and-relay",{"title":301,"path":302,"stem":303},"Console","\u002Fdocs\u002Foperations\u002Fconsole","docs\u002F11.operations\u002F08.console",{"title":305,"path":306,"stem":307},"Failure modes and recovery","\u002Fdocs\u002Foperations\u002Ffailure-and-recovery","docs\u002F11.operations\u002F09.failure-and-recovery",{"title":309,"path":310,"stem":311},"Data lifecycle and deletion","\u002Fdocs\u002Foperations\u002Fdata-lifecycle-and-deletion","docs\u002F11.operations\u002F10.data-lifecycle-and-deletion",{"title":313,"path":314,"stem":315,"children":316},"Deployment","\u002Fdocs\u002Fdeployment","docs\u002F12.deployment\u002Findex",[317,318,322,326,330],{"title":313,"path":314,"stem":315},{"title":319,"path":320,"stem":321},"Docker Compose (dev)","\u002Fdocs\u002Fdeployment\u002Fdocker-compose","docs\u002F12.deployment\u002F01.docker-compose",{"title":323,"path":324,"stem":325},"Environment variables","\u002Fdocs\u002Fdeployment\u002Fenvironment-variables","docs\u002F12.deployment\u002F02.environment-variables",{"title":327,"path":328,"stem":329},"Kubernetes","\u002Fdocs\u002Fdeployment\u002Fkubernetes","docs\u002F12.deployment\u002F03.kubernetes",{"title":331,"path":332,"stem":333},"Production readiness","\u002Fdocs\u002Fdeployment\u002Fproduction-readiness","docs\u002F12.deployment\u002F04.production-readiness",{"title":335,"path":336,"stem":337,"children":338},"Reference","\u002Fdocs\u002Freference","docs\u002F13.reference\u002Findex",[339,340,344,348,352],{"title":335,"path":336,"stem":337},{"title":341,"path":342,"stem":343},"Glossary","\u002Fdocs\u002Freference\u002Fglossary","docs\u002F13.reference\u002F01.glossary",{"title":345,"path":346,"stem":347},"Roadmap and gates","\u002Fdocs\u002Freference\u002Froadmap","docs\u002F13.reference\u002F02.roadmap",{"title":349,"path":350,"stem":351},"Architecture decisions","\u002Fdocs\u002Freference\u002Fadr","docs\u002F13.reference\u002F03.adr",{"title":353,"path":354,"stem":355},"Compatibility and versioning","\u002Fdocs\u002Freference\u002Fcompatibility","docs\u002F13.reference\u002F04.compatibility",{"id":357,"title":301,"audience":358,"author":359,"authorUrl":359,"body":360,"coverIndex":359,"coverLabel":359,"coverTone":359,"date":359,"decisionStatus":359,"description":938,"excerpt":359,"extension":939,"featured":940,"historical":940,"meta":941,"navigation":942,"path":302,"readingTime":359,"scope":943,"seo":944,"sourceOfTruth":945,"status":379,"stem":303,"tags":359,"verifiedDate":380,"__hash__":946},"docs\u002Fdocs\u002F11.operations\u002F08.console.md","operator",null,{"type":361,"value":362,"toc":929},"minimark",[363,375,381,384,389,480,484,578,581,585,626,663,677,680,762,765,769,806,812,861,864,868,888,891,895,925],[364,365,366,370,371,374],"p",{},[367,368,369],"code",{},"services\u002Fconsole"," is the canonical operator application. ",[367,372,373],{},"services\u002Fdashboard"," is a temporary compatibility shell and must not become a second Track D product.",[376,377],"page-status",{"note":378,"status":379,"verified":380},"Presentation and two read slices are mounted; login and mutations are deferred","PROVISIONAL","2026-10-21",[364,382,383],{},"A route existing in the Console is not evidence that its data is live. The shell deliberately renders preview fixtures or explicit unavailable states for surfaces without an owning API contract.",[385,386,388],"h2",{"id":387},"surface-status","Surface status",[390,391,392,408],"table",{},[393,394,395],"thead",{},[396,397,398,402,405],"tr",{},[399,400,401],"th",{},"Surface",[399,403,404],{},"Status",[399,406,407],{},"Boundary",[409,410,411,423,438,448,458,469],"tbody",{},[396,412,413,417,420],{},[414,415,416],"td",{},"Shell, navigation, themes, responsive layout, cards, charts, tables, dialogs",[414,418,419],{},"Implemented presentation",[414,421,422],{},"May use fixtures; presentation is not a data claim",[396,424,425,432,435],{},[414,426,427,428,431],{},"Server-only transport, request-time ",[367,429,430],{},"no-store",", opt-in live mode",[414,433,434],{},"Mounted-but-provisional",[414,436,437],{},"Server may call only the configured upstream origin",[396,439,440,443,445],{},[414,441,442],{},"D1 context\u002Foverview and platform health\u002Fevent stream",[414,444,434],{},[414,446,447],{},"Read-only; hosted session\u002Forigin\u002Freconnect evidence open",[396,449,450,453,455],{},[414,451,452],{},"D2 Explore trace metadata list\u002Fdetail",[414,454,434],{},[414,456,457],{},"Live mode plus read-only flag; no raw prompts or tool args",[396,459,460,463,466],{},[414,461,462],{},"Login, signup, TOTP enrollment, token issuance, invites, mutations",[414,464,465],{},"Deferred",[414,467,468],{},"AuthService owns these flows; no demo credentials",[396,470,471,474,477],{},[414,472,473],{},"Sessions, memories, directives, incidents, drift, analytics, billing, settings, replay, export",[414,475,476],{},"Preview\u002Fdeferred",[414,478,479],{},"Owning APIs, permissions, audit, and acceptance are not claimed",[385,481,483],{"id":482},"route-map","Route map",[390,485,486,496],{},[393,487,488],{},[396,489,490,493],{},[399,491,492],{},"Route family",[399,494,495],{},"Current behavior",[409,497,498,512,528,547,568],{},[396,499,500,509],{},[414,501,502,505,506],{},[367,503,504],{},"\u002Fdashboard",", ",[367,507,508],{},"\u002Fdashboard\u002Foverview",[414,510,511],{},"Overview workbench; D1 live only when configured",[396,513,514,525],{},[414,515,516,505,519,505,522],{},[367,517,518],{},"\u002Fdashboard\u002Fexplore",[367,520,521],{},"\u002Fdashboard\u002Fexplore\u002Ft\u002F{traceId}",[367,523,524],{},"\u002Fdashboard\u002Fexplore\u002Fr\u002F{runId}",[414,526,527],{},"Metadata trace list, multi-run trace view, and run detail",[396,529,530,544],{},[414,531,532,505,535,505,538,505,541],{},[367,533,534],{},"\u002Fdashboard\u002Fagents",[367,536,537],{},"\u002Fdashboard\u002Fdirectives",[367,539,540],{},"\u002Fdashboard\u002Fsessions",[367,542,543],{},"\u002Fdashboard\u002Fmemories",[414,545,546],{},"Preview presentation; list\u002Fdetail routes exist but are not accepted live products",[396,548,549,566],{},[414,550,551,505,554,505,557,505,560,505,563],{},[367,552,553],{},"\u002Fdashboard\u002Fincidents",[367,555,556],{},"\u002Fdashboard\u002Fdrift",[367,558,559],{},"\u002Fdashboard\u002Fanalytics",[367,561,562],{},"\u002Fdashboard\u002Fbilling",[367,564,565],{},"\u002Fdashboard\u002Fsettings",[414,567,476],{},[396,569,570,575],{},[414,571,572],{},[367,573,574],{},"\u002Fdeferred",[414,576,577],{},"Explicit unavailable surface",[364,579,580],{},"The route tree is intentionally broader than the accepted data plane. Use the surface table, not the presence of a page, to determine whether a view is live.",[385,582,584],{"id":583},"data-boundary","Data boundary",[586,587,592],"pre",{"className":588,"code":589,"language":590,"meta":591,"style":591},"language-mermaid shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","flowchart LR\n  Browser[\"Browser\"] -->|same-origin request| Console[\"Next.js server\"]\n  Console -->|allowlisted path + cookie| API[\"IBEX_OPERATOR_API_ORIGIN\"]\n  API --> PG[(PostgreSQL)]\n  API --> Bus[(Redis event stream)]\n","mermaid","",[367,593,594,602,608,614,620],{"__ignoreMap":591},[595,596,599],"span",{"class":597,"line":598},"line",1,[595,600,601],{},"flowchart LR\n",[595,603,605],{"class":597,"line":604},2,[595,606,607],{},"  Browser[\"Browser\"] -->|same-origin request| Console[\"Next.js server\"]\n",[595,609,611],{"class":597,"line":610},3,[595,612,613],{},"  Console -->|allowlisted path + cookie| API[\"IBEX_OPERATOR_API_ORIGIN\"]\n",[595,615,617],{"class":597,"line":616},4,[595,618,619],{},"  API --> PG[(PostgreSQL)]\n",[595,621,623],{"class":597,"line":622},5,[595,624,625],{},"  API --> Bus[(Redis event stream)]\n",[627,628,629,633,636,639,642,649,660],"ul",{},[630,631,632],"li",{},"Browser code never receives upstream credentials or tenant authority.",[630,634,635],{},"The server builds URLs from a fixed path allowlist, not a request-supplied URL.",[630,637,638],{},"The upstream origin must be an origin only: no path, query, fragment, or userinfo. HTTP and HTTPS are accepted for the origin; a request carrying a session cookie requires HTTPS.",[630,640,641],{},"Redirects are disabled, JSON responses are parsed against runtime schemas, and the default request timeout is 5 seconds.",[630,643,644,645,648],{},"Responses use ",[367,646,647],{},"Cache-Control: no-store",".",[630,650,651,652,655,656,659],{},"The SSE bridge is same-origin checked, forwards only the configured access cookie, allowlists ",[367,653,654],{},"\u002Fv1\u002Foperator\u002Fevents\u002Fstream",", caps ",[367,657,658],{},"Last-Event-ID"," to digits, and streams with buffering disabled.",[630,661,662],{},"Hostile memory, Markdown, HTML, links, prompts, and tool content must remain inert or sanitized.",[364,664,665,668,669,672,673,676],{},[367,666,667],{},"CONSOLE_DATA_MODE=preview|live"," is not authentication. ",[367,670,671],{},"CONSOLE_READ_ONLY=1"," is required for the current D2 live slice. Presentation flags are never authority. Legacy ",[367,674,675],{},"OPERATOR_WEB_*"," names are migration aliases only.",[385,678,132],{"id":679},"configuration",[390,681,682,692],{},[393,683,684],{},[396,685,686,689],{},[399,687,688],{},"Variable",[399,690,691],{},"Meaning",[409,693,694,711,725,735,748],{},[396,695,696,701],{},[414,697,698],{},[367,699,700],{},"CONSOLE_DATA_MODE",[414,702,703,706,707,710],{},[367,704,705],{},"preview"," or opt-in ",[367,708,709],{},"live","; not authentication",[396,712,713,718],{},[414,714,715],{},[367,716,717],{},"CONSOLE_READ_ONLY",[414,719,720,721,724],{},"Must remain ",[367,722,723],{},"1"," for the current live slice",[396,726,727,732],{},[414,728,729],{},[367,730,731],{},"IBEX_OPERATOR_API_ORIGIN",[414,733,734],{},"Server-only approved upstream origin",[396,736,737,742],{},[414,738,739],{},[367,740,741],{},"IBEX_OPERATOR_SESSION_COOKIE_NAME",[414,743,744,745],{},"Optional access-cookie name; default ",[367,746,747],{},"ibex_session",[396,749,750,759],{},[414,751,752,755,756],{},[367,753,754],{},"CONSOLE_PREVIEW"," \u002F ",[367,757,758],{},"NEXT_PUBLIC_CONSOLE_PREVIEW",[414,760,761],{},"Presentation flags; never tenant authority",[364,763,764],{},"Never put a bearer token, AuthService secret, organization ID, or arbitrary upstream URL authority in browser-exposed configuration. Browser preferences may use local\u002Fsession storage or a non-auth layout cookie; none is a credential store.",[385,766,768],{"id":767},"run-locally","Run locally",[586,770,774],{"className":771,"code":772,"language":773,"meta":591,"style":591},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","pnpm install --frozen-lockfile --ignore-scripts\npnpm --filter @ibex\u002Fconsole dev\n","bash",[367,775,776,793],{"__ignoreMap":591},[595,777,778,782,786,790],{"class":597,"line":598},[595,779,781],{"class":780},"sYn-s","pnpm",[595,783,785],{"class":784},"sTbE_"," install",[595,787,789],{"class":788},"sz9Cv"," --frozen-lockfile",[595,791,792],{"class":788}," --ignore-scripts\n",[595,794,795,797,800,803],{"class":597,"line":604},[595,796,781],{"class":780},[595,798,799],{"class":788}," --filter",[595,801,802],{"class":784}," @ibex\u002Fconsole",[595,804,805],{"class":784}," dev\n",[364,807,808,809,811],{},"Open ",[367,810,504],{},". Preview mode is explicitly opt-in and is disabled in production. For verification:",[586,813,815],{"className":771,"code":814,"language":773,"meta":591,"style":591},"pnpm --filter @ibex\u002Fconsole test\npnpm --filter @ibex\u002Fconsole typecheck\npnpm --filter @ibex\u002Fconsole lint\npnpm --filter @ibex\u002Fconsole build\n",[367,816,817,828,839,850],{"__ignoreMap":591},[595,818,819,821,823,825],{"class":597,"line":598},[595,820,781],{"class":780},[595,822,799],{"class":788},[595,824,802],{"class":784},[595,826,827],{"class":784}," test\n",[595,829,830,832,834,836],{"class":597,"line":604},[595,831,781],{"class":780},[595,833,799],{"class":788},[595,835,802],{"class":784},[595,837,838],{"class":784}," typecheck\n",[595,840,841,843,845,847],{"class":597,"line":610},[595,842,781],{"class":780},[595,844,799],{"class":788},[595,846,802],{"class":784},[595,848,849],{"class":784}," lint\n",[595,851,852,854,856,858],{"class":597,"line":616},[595,853,781],{"class":780},[595,855,799],{"class":788},[595,857,802],{"class":784},[595,859,860],{"class":784}," build\n",[364,862,863],{},"The browser end-to-end specs include boundary checks and the D1 live slice; a passing local run is not hosted deployment evidence.",[385,865,867],{"id":866},"readiness-gaps","Readiness gaps",[627,869,870,873,876,879,882,885],{},[630,871,872],{},"No login route or demo credentials.",[630,874,875],{},"AuthService-backed sessions, secure-cookie policy, MFA, CSRF-protected mutations, and exact credentialed CORS are not accepted end to end.",[630,877,878],{},"Deployment origin, rollback, reconnect, and availability evidence are missing.",[630,880,881],{},"Two-tenant negative evidence for the live slice is incomplete.",[630,883,884],{},"Raw trace content, replay, export, and operator actions have no accepted owning API contract.",[630,886,887],{},"Preview fixture coverage is not a substitute for live contract tests.",[364,889,890],{},"Any expansion beyond the current slice must add an owning API contract, tenant-negative tests, redaction\u002Fhostile-content tests, accessibility checks, performance evidence, and a rollback plan before changing the surface status.",[385,892,894],{"id":893},"related","Related",[627,896,897,904,909,915,920],{},[630,898,899,903],{},[900,901,902],"a",{"href":88},"Operator sessions"," — cookie, RS256, CSRF, and step-up mechanics",[630,905,906,908],{},[900,907,220],{"href":221}," — D1\u002FD2 route contracts",[630,910,911,914],{},[900,912,913],{"href":62},"Console and operator topology"," — target boundaries",[630,916,917,919],{},[900,918,277],{"href":278}," — analytics versus canonical metadata",[630,921,922,924],{},[900,923,255],{"href":256}," — cross-tenant read rules",[926,927,928],"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 .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}",{"title":591,"searchDepth":604,"depth":604,"links":930},[931,932,933,934,935,936,937],{"id":387,"depth":604,"text":388},{"id":482,"depth":604,"text":483},{"id":583,"depth":604,"text":584},{"id":679,"depth":604,"text":132},{"id":767,"depth":604,"text":768},{"id":866,"depth":604,"text":867},{"id":893,"depth":604,"text":894},"The canonical operator application, its live data allowlist, and the surfaces that are still preview-only.","md",false,{},true,"provisional",{"title":301,"description":938},"services\u002Fconsole\u002FREADME.md; services\u002Fconsole\u002Fsrc\u002Flib\u002Fapi\u002Ftransport.ts; services\u002Fconsole\u002Fsrc\u002Fapp\u002Fapi\u002Foperator\u002Fevents\u002Fstream\u002Froute.ts","4g8pJ-H2g7AwXqPUlCoUgEvzqjlGGd2FuJfQMHTGC_Q",[948,950],{"title":297,"path":298,"stem":299,"description":949,"children":-1},"The PostgreSQL outbox, claim and fence protocol, delivery classes, and the recovery limits of the relay daemon.",{"title":305,"path":306,"stem":307,"description":951,"children":-1},"Which dependencies may degrade, which must fail closed, and what recovery evidence is still missing.",1792875079049]