Marmot-TS
    Preparing search index...

    Type Alias CommitLegalityOutcome

    CommitLegalityOutcome:
        | { kind: "legal" }
        | { kind: "violation"; violation: CommitIntegrityViolation }
        | { detail: string; kind: "undecidable" }

    The tri-state result of validateCommitAccountIdentityProofs and validateCommitLegality (Phase 9, D-03): a commit's legality against a candidate parent is not always a yes/no answer.

    • legal — every check passed; the commit may be applied.
    • violation — a definite, terminal rejection. The calling seam decides its own disposition for this (throw, rejected, or drop the candidate edge) — this type stays seam-agnostic.
    • undecidable — authorization could not be evaluated against this candidate parent (most commonly: a changed leaf could not be attributed to any Add, Update proposal, or the committer, because the caller had no proposal list or committer index to classify it with). Per refs/marmot/foundation/errors.md (lines 63-68), a Commit whose authorization cannot be evaluated against a candidate parent MUST map to the seam's own deferral idiom — never to a terminal rejection. detail is a pubkey-free diagnostic string (D-06).

    A definite violation always outranks undecidable: every producer of this union checks every changed leaf before reporting undecidable, so a commit that is provably illegal is rejected rather than pooled, even when it also carries an unattributable leaf.