A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live
project.a-provider-capability-cites-its-evidence@1
A provider capability is declared once, with the citation it was verified from
What it is
- URI
majordomus://rule/project.a-provider-capability-cites-its-evidence@1- Kind
rule- Identity
project.a-provider-capability-cites-its-evidence@1- Path
.ai/repo/rules/project/a-provider-capability-cites-its-evidence.v1.md- Provenance
- declared
- Media type
text/markdown- As a capability
- rule.project.a-provider-capability-cites-its-evidence@1
Front matter
{
"id": "project.a-provider-capability-cites-its-evidence",
"version": 1,
"kind": "rule",
"title": "A provider capability is declared once, with the citation it was verified from",
"description": "Every provider this distribution declares says what it can do about the session lifecycle and about prompt capture, in one declaration every surface projects; every cell of it carries the evidence it was verified from; and no surface states a capability the declaration does not carry or withholds a provider the declaration names.",
"statement": "Every declared provider carries an episode capability and a prompt capability with a non-empty citation for each; every surface that reports provider capability is a projection of that one declaration; and a provider the declaration names is reported by every such surface, never omitted.",
"status": "active",
"class": "blocking",
"depends_on": [
"project.interfaces-are-projections@1",
"project.empty-is-not-failure@1"
],
"tags": [
"providers",
"session",
"capability",
"evidence"
],
"x-majordomus": {
"tests": [
"test/cases/200_generic_mcp_episode.sh",
"scripts/provider-evidence-check"
]
}
}Content
---
id: project.a-provider-capability-cites-its-evidence
version: 1
kind: rule
title: A provider capability is declared once, with the citation it was verified from
description: Every provider this distribution declares says what it can do about the session lifecycle and about prompt capture, in one declaration every surface projects; every cell of it carries the evidence it was verified from; and no surface states a capability the declaration does not carry or withholds a provider the declaration names.
statement: Every declared provider carries an episode capability and a prompt capability with a non-empty citation for each; every surface that reports provider capability is a projection of that one declaration; and a provider the declaration names is reported by every such surface, never omitted.
status: active
class: blocking
depends_on: [project.interfaces-are-projections@1, project.empty-is-not-failure@1]
tags: [providers, session, capability, evidence]
x-majordomus:
tests: [test/cases/200_generic_mcp_episode.sh, scripts/provider-evidence-check]
---
# Rationale
A tool that says what somebody else's product can do is making a claim about a third party,
and this repository made two of them wrong at once.
`majordomus capture status` looped over the providers with a line in an internal shell
table. That table had one line. `share/providers.yaml` declares six providers, so five of
them were not reported as unsupported — they were not reported at all, and the vocabulary's
own word for them, `unsupported`, was unreachable for any provider a person could name. A
reader asking whether Codex could capture prompts here got silence, and silence reads as
no.
The silence was also out of date. The comment above that table stated that a provider
absent from it "has no documented event that hands the person's prompt to a command before
the model runs". By 2026-09-11 both Codex CLI and Gemini CLI had shipped complete hook
systems — `SessionStart`, `SessionEnd`, a pre-compaction event and a prompt hook that fires
before the model — and this tool went on implying, by omission, that they had none.
Both failures have one cause: the declaration had no place to write down *where the answer
came from*. A capability asserted with no citation cannot be checked against the world, so
nothing checks it, so it rots quietly in whichever direction the world moved. A capability
that carries its citation can be re-verified by anybody in a minute, and a cell nobody can
cite is a cell nobody should have written.
The second half of the rule is the ordinary projection argument this repository applies
everywhere else. One declaration, every surface a reader of it: the command line, the HTTP
route, the MCP tool and resource, the generated documents and the site. A provider added by
editing six surfaces is a provider six surfaces will eventually disagree about.
# Required behaviour
`share/providers.yaml` is the one declaration. Each provider entry carries an `offers:`
block with four keys:
- `episode` — `hooks` (the provider fires its own session events), `connection` (it fires
none, and the MCP connection is the boundary), or `none` (nothing can draw one);
- `prompts` — `hook` (it hands the raw prompt to a command before the model runs) or `none`;
- `episode_evidence` and `prompts_evidence` — where each of the two was verified: a vendor
documentation URL, or the statement that no such documentation exists together with what
was searched for it and when.
Both evidence strings are **required and non-empty**, for every value including `none`. An
absence verified is a finding; an absence assumed is a guess wearing a finding's clothes,
and the two must not look alike.
A word outside either vocabulary fails the read of the whole file, naming it. It is never
treated as `none`.
Every surface that reports what a provider can do is a projection of this declaration and
holds no second account of it. Every surface that enumerates providers enumerates **all** of
them: a provider the declaration names is reported with its state, never omitted for being
in a state the reporter finds uninteresting.
The capability is not the wiring and is never reported as if it were. What a provider can
do comes from this declaration; what this repository has done about it is computed from the
tree; and a provider that documents an event this distribution ships no adapter for is
`unadapted` — a gap in the tool, named as one — never `unsupported`, which is a statement
about the provider.
# Failure behaviour
`scripts/provider-evidence-check` exits non-zero naming each provider, each aspect and each
reason: a missing `offers` block, an empty citation, a value outside the vocabulary, or a
provider the declaration names that `majordomus capture status` does not report. The
repository's CI runs it as a gate; it is not advisory.
# Verification
`scripts/provider-evidence-check` over the committed tree, run by CI.
`test/cases/200_generic_mcp_episode.sh` proves that `capture status` reports every declared
provider with its capability and its evidence, that a provider with no adapter is
`unadapted` rather than `unsupported`, and that the whole connection lifecycle the
`connection` capability claims actually runs over the real transport.
`apps/majordomus-cli/src/share.rs`'s own suite proves that a word outside the vocabulary
fails the read rather than degrading.