ApprovalRefusalLift
ApprovalRefusalLift = {
description:string;origin:"session"|"persisted";outcome:"lifted";stillConfigured:boolean;stillSaved:boolean; } | {description:string;outcome:"configured"; } | {count:number;index:number;outcome:"unknown"; }
Defined in: _worktrees/docs-release/gaunt-sloth/packages/core/src/config/shell-policy.ts:1327
[[EXT-107]] — what /approvals undeny <n> did, so the notice describes what actually happened
rather than what was asked for.
stillConfigured is the case that would otherwise mislead: a command can be refused by a saved
entry and by a line in approvals.deny, and lifting the first leaves the second refusing it.
Reporting the removal without saying so would tell the user they had lifted a refusal that is
still in force.
stillSaved is the same failure one layer down ([[EXT-149]]): the lift is real for this session
and the file rewrite that was meant to make it permanent did not land, so the entry returns in the
next session. It is the difference between lifted and lifted for good, and the store is the
only thing that knows which happened.
Union Members
Section titled “Union Members”Type Literal
Section titled “Type Literal”{ description: string; origin: "session" | "persisted"; outcome: "lifted"; stillConfigured: boolean; stillSaved: boolean; }
description
Section titled “description”description:
string
origin
Section titled “origin”origin:
"session"|"persisted"
outcome
Section titled “outcome”outcome:
"lifted"
stillConfigured
Section titled “stillConfigured”stillConfigured:
boolean
Whether the user’s own approvals.deny still matches this entry.
stillSaved
Section titled “stillSaved”stillSaved:
boolean
Whether the project’s saved-refusals file still holds this entry — true only when the removal could not be written, which is what brings it back in the next session.
Type Literal
Section titled “Type Literal”{ description: string; outcome: "configured"; }
Type Literal
Section titled “Type Literal”{ count: number; index: number; outcome: "unknown"; }