Skip to content

alignmentFailClosed

alignmentFailClosed(cause, options?): AlignmentDecision

Defined in: packages/core/src/core/shell/alignment.ts:857

[[EXT-133]] — the fail-closed decision for a SPECIFIC cause, carrying the provider’s own account when there was one.

What this changes is what a human is told, and nothing else. kind stays escalate and the caller contract above is untouched: the classifier’s action still stands on every one of these. The prefix is kept verbatim at the head of every reason, because isAlignmentFailClosed — and therefore both call sites’ entire behaviour — keys on that prefix and not on the prose after it, which is what makes varying the tail safe.

Why the tail must vary. A checker that could not be REACHED and a checker that looked at the command and DECLINED are different events with opposite remedies — one is a broken configuration the user can fix, the other is the gate working — and ALIGNMENT_FAIL_CLOSED rendered all four causes, plus every provider rejection, as one sentence that named none of them. That is the silence [[EXT-133]] was filed about: the failure is invisible because it fails in the SAFE direction, so it is read as a check that declined rather than one that never ran, and the natural response to a gate that seems to decline everything is to turn the rung down.

Deliberately mirrors failClosedVerdict in ./rater.js, down to the shape of the table, because the two gates fail in the same four ways and a reader comparing an archive’s rater and checker records should not have to learn two vocabularies.

AlignmentFailClosedCause

RaterCallFailure

number

AlignmentDecision