Coverage
"Is this organisation covered for this repository?" — one question, a frozen set of eight answers, computed by a pure, versioned function over published documents only.
The eight answers
This enumeration is frozen. Answers are additive-only: a future version may explain more, never rename these.
The complete coverage answer set, in precedence order
| Answer | Meaning |
|---|---|
yes-via-pass | An active Pass covers every registered repository, including this one. |
yes-via-project | An active Project entitlement whose scope contains this repository. |
yes-via-portfolio | An active Portfolio entitlement whose scope is the organisation that owns this repository. |
yes-via-waiver | The repository granted this organisation a gratis, public waiver. Waivers are checked before any entitlement short-circuit, so a waived organisation is reachable even with no account and no verified domain. |
yes-via-donation | Retired: never returned. It answered for a Donation Entitlement, a direct-donation route that was dropped before it opened. It stays in the frozen set so that a client switching over all eight keeps working. |
lapsed-in-grace | The term ended but the 30-day grace window has not. Carries the period end and the grace end so a late invoice is visibly not a violation yet. |
no-entitlement-required-under-threshold | The organisation self-certified as below the threshold and that certification has not expired. Carries the certification date. |
no | No current entitlement, no waiver, no valid threshold certification. Absence of a record answers "no" — never an error, so a scanner can read it. |
How the answer is computed
- Only published documents are inputs. The company's signed entitlement record, the repository record, and the public waiver list. No database is consulted, which is why the endpoint cannot be made slow or expensive by traffic.
- Time is a parameter, not a clock read. The function is deterministic: the same inputs and the same instant always produce the same answer, and the answer echoes the instant it used so you can re-derive it.
- Grace and lapse are derived from dates, never published as statuses.
A published status of
activeplus an expired period is exactly whatlapsed-in-graceis computed from. - A suspended entitlement answers
noimmediately — a chargeback is not a grace period. - A repository with no published record is answered only for a Pass.
An organisation holding a Pass inside its term gets
yes-via-pass, with the reasonpass-any-workand the stateno-record. For every other organisation it is an error, not an answer (repo_not_registered). No record means only that nothing is published under that id: the repository may be registered and not yet published, or not under the licence at all. A repository that quit or was delisted still computes: entitlements and vesting stand regardless of what the repository did.
The walkthrough, on one lookup
The walkthrough needs a registered repository and a verified domain to work through, and this build has no verified domain yet: organisation verification has not opened. Until it does, look an organisation up by its company identifier instead.
The domain index, as published
Domain-verified organisations are indexed by domain so a scanner can resolve a company
without knowing its identifier. The index is a published artifact: /entitlements/domain-index.json. It carries domains and identifiers and
nothing else — no names, no contacts, no amounts.
A domain in the index resolves to its organisation's identifier whether or not the organisation asked to be named, because coverage is answerable either way; a name appears only on the list of covered organisations, and only on request.
The index is empty in this build: organisation verification has not opened, so no
organisation has a verified domain to key it by. An empty index answers no for every domain, which is correct rather than broken. Every
organisation is resolved by its identifier instead, and a lookup by name is a POST,
never a query string.
Organisation names never go in a URL
When the endpoint activates, a lookup by domain will be a POST. Only opaque company identifiers are accepted in a GET query string, because a GET carrying a third party's name would land that name in shareable links, proxy logs, and shared caches. The same rule governs every form on this site.
The source is published
The function and its test vectors publish in the specification repository, and the deployed bundle's module hash is checked against that published copy in continuous integration. If the two disagree, the deploy fails. See algorithms and schedule versions.