Authority policy and uncertainty vocabulary
Horologium never guesses when two sources disagree. This page documents what an authority conclusion means when you read one, and — just as important — what it does not promise.
What this is not
There is no global "Code beats Jira" rule, no confidence percentage, and no overall integrity score. A conflict between two claims stays open and visible until either a written policy rule resolves it, or a human decision does. Shipping no policy at all is a deliberate default, not a placeholder for one — it means every disagreement stays exactly as visible as it would be with no automation at all.
Reading a conclusion
GET /v1/findings/{id}/authority explains one claim_conflict or
documentation_conflict finding's authority conclusion, if one has been
computed:
{
"issue_key": "iss_...",
"outcome": "chosen",
"rule_id": "rule-tracker-most-recent",
"chosen_claim_id": "clm_...",
"policy_revision": "pol_...",
"cited_claim_ids": ["clm_...", "clm_..."],
"cited_evidence_ids": ["evd_..."],
"rationale": "Automated authority resolution: rule rule-tracker-most-recent chose claim clm_... under policy revision pol_....",
"decided_at": "2026-08-25T09:15:00Z"
}
outcome is one of two values:
-
chosen— a rule matched, was not markedrequires_review, and covered the disagreement (at least one claim's evidence belongs to a ranked source class).chosen_claim_idnames which claim;rule_idandpolicy_revisionname exactly which rule and which version of the policy document decided it. -
no_authority— no automated conclusion was reached.reasonis always present and is one of:Reason Meaning no_rule_matchesNo rule in the active policy scopes to this predicate/product/target/reality-layer/time combination. The default policy is empty, so this is the common case until an operator writes a rule. ambiguous_rulesTwo or more rules matched with equal specificity — an authoring error in the policy document, refused rather than guessed. requires_reviewA rule matched and would have chosen a claim, but is marked requires_review: true— it never applies unattended; a humandecision(decide:human, ADR-0021) is required first.chosen_source_not_coveringA rule matched, but none of the disagreeing claims' evidence belongs to any of its ranked_sourcesclasses — the rule doesn't actually apply to this specific disagreement, even though its scope matched.rule_expiredThe matching rule's own ranked_sourcesis empty — the documented convention for retiring a rule while keeping itsrationalefor audit.
cited_claim_ids always lists every claim in the disagreement, regardless
of outcome — a no_authority conclusion still names exactly what it is
declining to resolve. cited_evidence_ids is populated only for chosen
(the winning claim's own evidence).
A 404 from this endpoint means one of: no finding with that ID, the
finding's kind has no authority resolution (only claim_conflict/
documentation_conflict get one), or no decision has been recorded for
it yet.
What "no_authority" does not mean
It does not mean the system failed, and it does not mean the disagreement is unimportant. It means: given the policy as written today, no rule tells the system which claim to prefer. The finding stays open, both claims stay visible with their own evidence, and nothing is silently picked. Writing a rule that covers this case — and reviewing whether it should — is an operator decision, not something Horologium infers on its own.
Coverage: what "no false completeness" means
Separately from authority, every snapshot records whether collection was
complete: snapshot.coverage_complete is true only when every in-scope
source reported success this run (ADR-0017's T8 transition) — one
successfully-connected source never makes an otherwise-incomplete run
look complete. GET /v1/sources/{id} exposes a source's own
access_state (ok, unauthorized, forbidden_scope, unreachable,
not_configured, never_collected) so "configured but never reachable"
and "reachable but the last attempt failed" are always distinguishable,
not collapsed into one "missing" bucket.