agent-evidence-vectors v0.37.0

Refusal-reason-priority vectors

Cases for refusal-reason-priority/v1: one attestation response judged against the refusal vocabulary of draft-li-rttp-iqa-addressing-02 (RTTP and IQA addressing). Section 8.1 fixes five reason values and says the reason is the first value in the list whose condition applies, so a refusal is auditable only when the emitted code is that first one. The records were filed by the draft's author, ShaoBao Li (Lee) of Aicent Stack, in issue 453 on this repository, from two families he publishes: aicent-grant-ref and aicent-lease-boundary.

Checked with Probity

For anyone who implements the vocabulary, or who writes a conformance check over refusal reasons and wants one that scores the first applicable code, not any applicable one.

pip install agent-evidence-vectors
agent-evidence-vectors --corpus vectors-refusal-reason-priority
python3 corpora/vectors-refusal-reason-priority/check_vectors.py --verifier './verifier'

A verifier takes record.json --json, prints {"decision": ..., "reason": ...} and exits 0 for conformant, 1 for nonconformant and 2 for ambiguous. In the GitHub Action, set corpus: vectors-refusal-reason-priority.

What the cases force

The reader applies ten checks in order and names the first that fails: contract_id_missing, contract_id_unknown, reason_member_absent, reason_outside_closed_set (a granted value, a sixth value), answer_outside_both_boundary_readings, refusal_without_condition (no condition, no reason), condition_ignored (a permit over stale evidence read through a diagnostic read), later_value_emitted (the priority), observation_backfilled and evidence_renewed_by_diagnostic_read. Pairs share their facts and differ in the code: a checker that accepts any applicable value fails exactly the later-code member of each pair. Counts are in MANIFEST.json.

Three questions the draft leaves open

At the lease instant, section 6.1 makes the boundary a declared convention. A permit under a declared inclusive boundary and evidence_expired under a declared exclusive one are both conformant, and frame acceptance in section 7.2 does not decide reliance. Three members are ambiguous and list their readings: no boundary declared, and a declaration that contradicts the answer in either direction. The author scores the contradiction nonconformant and discloses the reading as strict, because the sentence asks for a declaration with SHOULD and states no consequence. The corpus keeps his expected value in authorExpected and leaves the member open.

Source and credit

Each member carries source (the family case id), rule, and the sentence of the draft it rests on. Expected values are taken from the author only where they anchor to a published sentence. MANIFEST.json pins the retrieved text of the draft at sha256 02491c5a59d1e7471be04e8e0d4933dfc22ce19f9b054ead0aa449d6b4485044 and names the provenance as Aicent Stack, issue 453. The families' sealed pages stay citations: aicent-grant-ref and aicent-lease-boundary. Members derived here beyond the author's records say derived from and use the same sentences. The draft is Informational and can change; a later revision overrides this reading.

What it does not test

Value formats, identifier syntax, and whether an implementation finds the boundary instant from the observation time and lease expiry; the facts are given. Every member is synthetic. Regenerate with python3 corpora/vectors-refusal-reason-priority/gen_vectors.py.

Record format: draft-gilda-audit-agent-audit-record-03, Section 4 (an in-toto Statement carried in a DSSE envelope).