ep-qualify
v0.1.2
Published
Thin offline CLI for fail-closed EMILIA Gate Qualification v2 evaluation. Prints QUALIFIED, NOT_QUALIFIED, or INDETERMINATE and exits 0 only for QUALIFIED; it does not authorize, invoke providers, or mutate state.
Maintainers
Readme
ep-qualify
ep-qualify is a thin, offline command-line interface over EMILIA Gate Qualification v2's evaluateQualification. It verifies and evaluates a supplied qualification graph without fetching evidence, invoking a model or provider, reserving or consuming anything, or mutating storage.
Usage
npx ep-qualify qualification.jsonUse - to read from standard input:
ep-qualify - < qualification.jsonThe input must be exactly one JSON object with both fields:
{
"bundle": {},
"context": {}
}bundle is the complete Gate Qualification v2 evidence graph. context supplies the expected candidate, assignment, policy, protected-request and status-authority bindings, freshness limits, minimum model-pinning strength, and explicit trust policies used by evaluateQualification.
The CLI never infers trusted keys from the bundle and supplies no trust defaults. The caller is responsible for obtaining and pinning the context.trust policy independently; placing keys in this input does not by itself establish their provenance. The CLI also does not fetch current time or status: evaluation is relative to the supplied context.now and status observation.
Input is limited to 8 MiB, decoded as strict UTF-8, checked with @emilia-protocol/verify/strict-json, and rejected on malformed JSON, duplicate object member names, or excessive JSON nesting before evaluation.
Output and exit status
Every evaluation prints exactly two lines (the JSON below is abridged):
QUALIFIED
{"decision":"QUALIFIED","reason":"qualified","verification":"VERIFIED","acceptance":"ACCEPTED"}The second line is the complete machine-readable decision returned by the evaluator. Input and CLI failures produce an INDETERMINATE decision with a machine-readable reason.
QUALIFIEDmeans the supplied evidence graph verifies, is accepted under the supplied trust policy, is bound to the supplied context, and is current as observed. Exit status:0.NOT_QUALIFIEDis a closed refusal when the evaluator has a definitive disqualifying result, such as revocation. Exit status:1.INDETERMINATEmeans qualification could not be established, including stale, malformed, incomplete, untrusted, or unverifiable input. Exit status:1.
QUALIFIED is a verification result, not an authorization decision. It does not grant permission, establish legality or business appropriateness, invoke an action, or claim that an action was reserved, consumed, or executed.
Development
npm testThe CLI tests mint a complete signed fixture and cover valid qualification, signed-artifact tampering, stale and revoked status, indeterminate evaluation, malformed and duplicate-key input, the input-size bound, immutable input bytes, and absence of implicit trust.
