PageSourceSearch

https://docs.controlzero.ai/assets/js/ad9ebc75.dae43833.js

js controlzero.ai collected 2026-10-05 13:55:10 UTC 4,401 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkcontrolzero_docs||=[]).push([[5527],{29061(e,r,o){o.r(r),o.d(r,{assets:()=>i,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>c});const a=JSON.parse('{"id":"errors/E1705-hitl-no-approver","title":"E1705. Approvals: no separate approver available","description":"Severity HITLNoApproverAvailable (subclass of PolicyDeniedError).","source":"@site/docs/errors/E1705-hitl-no-approver.md","sourceDirName":"errors","slug":"/errors/E1705-hitl-no-approver","permalink":"/docs/errors/E1705-hitl-no-approver","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"id":"E1705-hitl-no-approver","title":"E1705. Approvals: no separate approver available","sidebar_label":"E1705"}}');var n=o(74848),t=o(28453);const s={id:"E1705-hitl-no-approver",title:"E1705. Approvals: no separate approver available",sidebar_label:"E1705"},l="E1705. Approvals: no separate approver available",i={},c=[{value:"What happened",id:"what-happened",level:2},{value:"Why it matters",id:"why-it-matters",level:2},{value:"How to fix",id:"how-to-fix",level:2},{value:"Catching this error",id:"catching-this-error",level:2},{value:"See also",id:"see-also",level:2}];function h(e){const r={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"e1705-approvals-no-separate-approver-available",children:"E1705. Approvals: no separate approver available"})}),"\n",(0,n.jsxs)(r.blockquote,{children:["\n",(0,n.jsxs)(r.p,{children:["Severity: ",(0,n.jsx)(r.strong,{children:"ERROR"}),". Class: ",(0,n.jsx)(r.code,{children:"HITLNoApproverAvailable"})," (subclass of ",(0,n.jsx)(r.code,{children:"PolicyDeniedError"}),")."]}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"what-happened",children:"What happened"}),"\n",(0,n.jsx)(r.p,{children:"Org has only one user (Free or Solo tier, or a one-seat Teams org). The approval workflow refuses to enable because there's no separate human to approve."}),"\n",(0,n.jsx)(r.h2,{id:"why-it-matters",children:"Why it matters"}),"\n",(0,n.jsx)(r.p,{children:"Self-approval is governance theater. If the requestor and the only approver are the same person, the workflow adds friction without governance."}),"\n",(0,n.jsx)(r.h2,{id:"how-to-fix",children:"How to fix"}),"\n",(0,n.jsxs)(r.p,{children:["Invite a teammate, OR upgrade to Teams ($199/mo + $29/seat), OR stop calling\n",(0,n.jsx)(r.code,{children:"request_approval()"})," on a solo org. Free + Solo tier users see the toggle\ndisabled in ",(0,n.jsx)(r.code,{children:"/settings/hitl"}),"."]}),"\n",(0,n.jsxs)(r.p,{children:["Removing ",(0,n.jsx)(r.code,{children:"escalate_on_deny: true"})," will NOT change this error. That tag is\ncurrently inert (",(0,n.jsx)(r.a,{href:"https://github.com/maruthiprithivi/control_zero/issues/2391",children:"#2391"}),")\nand never raises a request, so it cannot be what reached the approver check --\nan explicit ",(0,n.jsx)(r.code,{children:"request_approval()"})," call is."]}),"\n",(0,n.jsx)(r.h2,{id:"catching-this-error",children:"Catching this error"}),"\n",(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"except PolicyDeniedError"})," catches this. Approval refusal becomes a hard deny."]}),"\n",(0,n.jsx)(r.h2,{id:"see-also",children:"See also"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"../concepts/hitl-approval",children:"Approval Workflow"}),". The parent concept"]}),"\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"../sdk/hitl-callback",children:"SDK: Approval callback"}),". The ",(0,n.jsx)(r.code,{children:"request_approval"})," + ",(0,n.jsx)(r.code,{children:"wait"})," API"]}),"\n",(0,n.jsx)(r.li,{children:(0,n.jsx)(r.a,{href:"./",children:"Errors index"})}),"\n"]})]})}function p(e={}){const{wrapper:r}={...(0,t.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},28453(e,r,o){o.d(r,{R:()=>s,x:()=>l});var a=o(96540);const n={},t=a.createContext(n);function s(e){const r=a.useContext(t);return a.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function l(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),a.createElement(t.Provider,{value:r},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.