[{"data":1,"prerenderedAt":524},["ShallowReactive",2],{"navigation_docs":3,"-docs-configuration-system-admin-access":158,"-docs-configuration-system-admin-access-surround":519},[4,15,74,98,113],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10],{"title":11,"path":12,"stem":13,"icon":14},"Zeeq Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"children":19,"page":6},"Key Features","\u002Fdocs\u002Fkey-features","docs\u002F3.key-features",[20,25,30,35,40,45,50,55,59,64,69],{"title":21,"path":22,"stem":23,"icon":24},"Membership Invitations","\u002Fdocs\u002Fkey-features\u002Fmembership-invitations","docs\u002F3.key-features\u002F1.membership-invitations","i-hugeicons-cube",{"title":26,"path":27,"stem":28,"icon":29},"Command Palette","\u002Fdocs\u002Fkey-features\u002Fcommand-palette","docs\u002F3.key-features\u002F10.command-palette","i-hugeicons-search-01",{"title":31,"path":32,"stem":33,"icon":34},"Library Import and Export","\u002Fdocs\u002Fkey-features\u002Flibrary-import-export","docs\u002F3.key-features\u002F11.library-import-export","i-lucide-package-open",{"title":36,"path":37,"stem":38,"icon":39},"LLM Settings Configuration","\u002Fdocs\u002Fkey-features\u002Fllm-settings-configuration","docs\u002F3.key-features\u002F2.llm-settings-configuration","i-hugeicons-ai-magic",{"title":41,"path":42,"stem":43,"icon":44},"Agent Code Review Findings","\u002Fdocs\u002Fkey-features\u002Fagent-code-review-findings","docs\u002F3.key-features\u002F3.agent-code-review-findings","i-lucide-list-checks",{"title":46,"path":47,"stem":48,"icon":49},"Credentials & API Tokens","\u002Fdocs\u002Fkey-features\u002Fcredentials","docs\u002F3.key-features\u002F4.credentials","i-hugeicons-key-01",{"title":51,"path":52,"stem":53,"icon":54},"Manual Document Libraries","\u002Fdocs\u002Fkey-features\u002Fmanual-document-libraries","docs\u002F3.key-features\u002F5.manual-document-libraries","i-lucide-library-big",{"title":56,"path":57,"stem":58,"icon":29},"Snippet Search","\u002Fdocs\u002Fkey-features\u002Fsnippet-search","docs\u002F3.key-features\u002F6.snippet-search",{"title":60,"path":61,"stem":62,"icon":63},"Shared Prompt Fragment","\u002Fdocs\u002Fkey-features\u002Fshared-prompt-fragment","docs\u002F3.key-features\u002F7.shared-prompt-fragment","i-lucide-notebook-pen",{"title":65,"path":66,"stem":67,"icon":68},"Code Review Sources & Telemetry","\u002Fdocs\u002Fkey-features\u002Fcode-review-sources","docs\u002F3.key-features\u002F8.code-review-sources","i-hugeicons-book-01",{"title":70,"path":71,"stem":72,"icon":73},"Excluding Documents from Code Reviews","\u002Fdocs\u002Fkey-features\u002Fcode-review-document-exclusion","docs\u002F3.key-features\u002F9.code-review-document-exclusion","i-lucide-eye-off",{"title":75,"path":76,"stem":77,"children":78,"page":6},"Runtime Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F5.configuration",[79,84,89,93],{"title":80,"path":81,"stem":82,"icon":83},"Google Cloud Configuration","\u002Fdocs\u002Fconfiguration\u002Fgcp-runtime","docs\u002F5.configuration\u002F1.gcp-runtime","i-hugeicons-google",{"title":85,"path":86,"stem":87,"icon":88},"GitHub Configuration","\u002Fdocs\u002Fconfiguration\u002Fgithub-configuration","docs\u002F5.configuration\u002F2.github-configuration","i-hugeicons-github",{"title":90,"path":91,"stem":92},"Local OpenIddict Certificates","\u002Fdocs\u002Fconfiguration\u002Flocal-openiddict-certificates","docs\u002F5.configuration\u002F3.local-openiddict-certificates",{"title":94,"path":95,"stem":96,"icon":97},"System Admin Access","\u002Fdocs\u002Fconfiguration\u002Fsystem-admin-access","docs\u002F5.configuration\u002F4.system-admin-access","i-hugeicons-shield-01",{"title":99,"path":100,"stem":101,"children":102,"page":6},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F6.metrics",[103,108],{"title":104,"path":105,"stem":106,"icon":107},"Metrics Dashboard","\u002Fdocs\u002Fmetrics\u002Fmetrics-dashboard","docs\u002F6.metrics\u002F1.metrics-dashboard","i-hugeicons-analytics-01",{"title":109,"path":110,"stem":111,"icon":112},"Metrics Pipeline","\u002Fdocs\u002Fmetrics\u002Fmetrics-pipeline","docs\u002F6.metrics\u002F2.metrics-pipeline","i-hugeicons-database-02",{"title":114,"path":115,"stem":116,"children":117,"page":6},"Design and Architecture","\u002Fdocs\u002Farchitecture","docs\u002F9.architecture",[118,123,128,133,137,141,145,150,154],{"title":119,"path":120,"stem":121,"icon":122},"Caching","\u002Fdocs\u002Farchitecture\u002Fcaching","docs\u002F9.architecture\u002F1.caching","i-lucide-database",{"title":124,"path":125,"stem":126,"icon":127},"Messaging and Queueing","\u002Fdocs\u002Farchitecture\u002Fmessaging-and-queueing","docs\u002F9.architecture\u002F2.messaging-and-queueing","i-lucide-message-square",{"title":129,"path":130,"stem":131,"icon":132},"GitHub Comment Rendering","\u002Fdocs\u002Farchitecture\u002Fgithub-comment-rendering","docs\u002F9.architecture\u002F3.github-comment-rendering","i-lucide-github",{"title":134,"path":135,"stem":136},"GitHub Integration","\u002Fdocs\u002Farchitecture\u002Fgithub-integration","docs\u002F9.architecture\u002F4.github-integration",{"title":138,"path":139,"stem":140},"LLM Settings and Secret Storage","\u002Fdocs\u002Farchitecture\u002Fllm-settings-and-secret-storage","docs\u002F9.architecture\u002F5.llm-settings-and-secret-storage",{"title":142,"path":143,"stem":144},"Organization Activation and Routes","\u002Fdocs\u002Farchitecture\u002Forganization-activation-and-routes","docs\u002F9.architecture\u002F6.organization-activation-and-routes",{"title":146,"path":147,"stem":148,"icon":149},"MCP Uploaded-Diff Code Reviews","\u002Fdocs\u002Farchitecture\u002Fmcp-uploaded-diff-code-reviews","docs\u002F9.architecture\u002F7.mcp-uploaded-diff-code-reviews","i-lucide-file-search",{"title":151,"path":152,"stem":153},"Repository Content Ingest","\u002Fdocs\u002Farchitecture\u002Frepository-content-ingest","docs\u002F9.architecture\u002F8.repository-content-ingest",{"title":155,"path":156,"stem":157},"Telemetry Ingest","\u002Fdocs\u002Farchitecture\u002Ftelemetry-ingest","docs\u002F9.architecture\u002F9.telemetry-ingest",{"id":159,"title":94,"body":160,"description":512,"extension":513,"links":514,"meta":515,"navigation":516,"path":95,"seo":517,"stem":96,"__hash__":518},"docs\u002Fdocs\u002F5.configuration\u002F4.system-admin-access.md",{"type":161,"value":162,"toc":506},"minimark",[163,180,185,191,198,318,321,350,368,372,378,384,391,404,408,411,419,426,439,443,450,453,489,492,495,502],[164,165,166,167,171,172,175,176,179],"p",{},"System-admin access is for Zeeq operators who need platform-level diagnostics and future operational tools. It is separate from organization roles such as ",[168,169,170],"code",{},"owner",", ",[168,173,174],{},"admin",", and ",[168,177,178],{},"member",".",[181,182,184],"h2",{"id":183},"configuration","Configuration",[164,186,187,188,179],{},"System admins are configured with ",[168,189,190],{},"Platform:SystemAdminSubjects",[164,192,193,194,197],{},"Each entry is a ",[168,195,196],{},"provider:subject"," identity key:",[199,200,205],"pre",{"className":201,"code":202,"language":203,"meta":204,"style":204},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"AppSettings\": {\n    \"Platform\": {\n      \"SystemAdminSubjects\": [\n        \"google:108234567890123456789\",\n        \"corp-idp:a1b2c3d4-...\"\n      ]\n    }\n  }\n}\n","json","",[168,206,207,216,235,251,268,283,294,300,306,312],{"__ignoreMap":204},[208,209,212],"span",{"class":210,"line":211},"line",1,[208,213,215],{"class":214},"sMK4o","{\n",[208,217,219,222,226,229,232],{"class":210,"line":218},2,[208,220,221],{"class":214},"  \"",[208,223,225],{"class":224},"spNyl","AppSettings",[208,227,228],{"class":214},"\"",[208,230,231],{"class":214},":",[208,233,234],{"class":214}," {\n",[208,236,238,241,245,247,249],{"class":210,"line":237},3,[208,239,240],{"class":214},"    \"",[208,242,244],{"class":243},"sBMFI","Platform",[208,246,228],{"class":214},[208,248,231],{"class":214},[208,250,234],{"class":214},[208,252,254,257,261,263,265],{"class":210,"line":253},4,[208,255,256],{"class":214},"      \"",[208,258,260],{"class":259},"sbssI","SystemAdminSubjects",[208,262,228],{"class":214},[208,264,231],{"class":214},[208,266,267],{"class":214}," [\n",[208,269,271,274,278,280],{"class":210,"line":270},5,[208,272,273],{"class":214},"        \"",[208,275,277],{"class":276},"sfazB","google:108234567890123456789",[208,279,228],{"class":214},[208,281,282],{"class":214},",\n",[208,284,286,288,291],{"class":210,"line":285},6,[208,287,273],{"class":214},[208,289,290],{"class":276},"corp-idp:a1b2c3d4-...",[208,292,293],{"class":214},"\"\n",[208,295,297],{"class":210,"line":296},7,[208,298,299],{"class":214},"      ]\n",[208,301,303],{"class":210,"line":302},8,[208,304,305],{"class":214},"    }\n",[208,307,309],{"class":210,"line":308},9,[208,310,311],{"class":214},"  }\n",[208,313,315],{"class":210,"line":314},10,[208,316,317],{"class":214},"}\n",[164,319,320],{},"For Cloud Run or other environment-variable based deployments, bind the array with indexed names:",[199,322,326],{"className":323,"code":324,"language":325,"meta":204,"style":204},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","AppSettings__Platform__SystemAdminSubjects__0=google:108234567890123456789\nAppSettings__Platform__SystemAdminSubjects__1=corp-idp:a1b2c3d4-...\n","bash",[168,327,328,340],{"__ignoreMap":204},[208,329,330,334,337],{"class":210,"line":211},[208,331,333],{"class":332},"sTEyZ","AppSettings__Platform__SystemAdminSubjects__0",[208,335,336],{"class":214},"=",[208,338,339],{"class":276},"google:108234567890123456789\n",[208,341,342,345,347],{"class":210,"line":218},[208,343,344],{"class":332},"AppSettings__Platform__SystemAdminSubjects__1",[208,346,336],{"class":214},[208,348,349],{"class":276},"corp-idp:a1b2c3d4-...\n",[164,351,352,353,356,357,360,361,364,365,367],{},"Operators can find their current ",[168,354,355],{},"provider"," and ",[168,358,359],{},"providerSubject"," in ",[168,362,363],{},"GET \u002Fapi\u002Fv1\u002Fme",". Join them with ",[168,366,231],{}," to produce the configured value.",[181,369,371],{"id":370},"security-rules","Security Rules",[164,373,374,375,377],{},"System-admin status is evaluated live on every request from the configured ",[168,376,196],{}," allow-list. Adding or removing an entry takes effect on the user's next request; a revoked user does not need to sign out for access to be removed.",[164,379,380,381,383],{},"Do not configure admin access by email. Email can be unverified, provider-chosen, or reused across providers. Only ",[168,382,196],{}," is treated as the stable IdP-verified identity key.",[164,385,386,387,390],{},"Use trusted providers for deployed environments. Do not add ",[168,388,389],{},"mock:"," entries outside local development.",[164,392,393,394,397,398,401,402,179],{},"The role value ",[168,395,396],{},"system-admin"," is reserved. Zeeq may attach it to browser cookie claims as a compatibility signal, but admin authorization and ",[168,399,400],{},"\u002Fapi\u002Fv1\u002Fme.isSystemAdmin"," do not trust that claim. Organization roles must never issue ",[168,403,396],{},[181,405,407],{"id":406},"admin-api-behavior","Admin API Behavior",[164,409,410],{},"Admin APIs live under:",[199,412,417],{"className":413,"code":415,"language":416,"meta":204},[414],"language-text","\u002Fapi\u002Fv1\u002Fadmin\u002F**\n","text",[168,418,415],{"__ignoreMap":204},[164,420,421,422,425],{},"Unauthenticated and non-admin callers receive ",[168,423,424],{},"404",". This cloaks the admin surface without changing authorization behavior for non-admin routes.",[164,427,428,429,431,432,435,436,179],{},"The Vue app uses ",[168,430,400],{}," to show the System navigation group. Non-admin users who manually browse to ",[168,433,434],{},"\u002Fsystem\u002Fdiagnostics"," are redirected to ",[168,437,438],{},"\u002F",[181,440,442],{"id":441},"system-diagnostics","System Diagnostics",[164,444,445,446,179],{},"System admins can open ",[447,448,449],"strong",{},"System > Diagnostics",[164,451,452],{},"The page currently has two checks:",[454,455,456,469],"table",{},[457,458,459],"thead",{},[460,461,462,466],"tr",{},[463,464,465],"th",{},"Diagnostic",[463,467,468],{},"Purpose",[470,471,472,481],"tbody",{},[460,473,474,478],{},[475,476,477],"td",{},"Message delivery",[475,479,480],{},"Publishes a system message and waits up to 30 seconds for the consumer to write a cache marker.",[460,482,483,486],{},[475,484,485],{},"LLM key configuration",[475,487,488],{},"Calls the app-level default Fast LLM client with a bounded prompt and timeout.",[164,490,491],{},"The LLM diagnostic returns generated joke text on success. Treat that value as untrusted model output; the web app renders it as plain text only.",[164,493,494],{},"Diagnostics are not rate-limited in this slice. That is an accepted trade-off because the endpoints are system-admin-only.",[164,496,497,498,501],{},"Existing development-only anonymous diagnostics under ",[168,499,500],{},"\u002Fapi\u002Fv1\u002Fdiagnostics\u002F**"," remain separate and are mapped only in Development.",[503,504,505],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":204,"searchDepth":218,"depth":218,"links":507},[508,509,510,511],{"id":183,"depth":218,"text":184},{"id":370,"depth":218,"text":371},{"id":406,"depth":218,"text":407},{"id":441,"depth":218,"text":442},"Configure system-admin operators and use the admin diagnostics surface.","md",null,{},{"icon":97},{"title":94,"description":512},"IgHwiokztVMRknUoLRpP4o7Y-RzRuFtgG0ziiH2BgVo",[520,522],{"title":90,"path":91,"stem":92,"description":521,"children":-1},"How development OpenIddict certificates are persisted locally so DCR\u002FMCP client tokens survive server restarts.",{"title":104,"path":105,"stem":106,"description":523,"icon":107,"children":-1},"The home page tabbed dashboard for tool usage, code reviews, knowledge reads, and review performance.",1784297365800]