Skip to content

Make the Relay → Notary → programme decision boundary normative for 1.0 #417

Description

@jeremi

What happened

The current 1.0 documentation and golden authoring examples contradict each other about where programme decisions belong.

Some pages correctly state that Registry Notary returns evidence and that the consuming programme owns eligibility, entitlement, payment, and action decisions:

  • docs/site/src/content/docs/explanation/dpi-safeguards-alignment.mdx says Notary does not decide eligibility.
  • docs/site/src/content/docs/explanation/evidence-issuance.mdx says the issuing programme converts verified evidence into an entitlement, payment, or benefit.
  • docs/site/src/content/docs/explanation/integration-patterns.mdx says the social-protection MIS owns the eligibility decision.

Other current guidance directly teaches the opposite:

  • docs/site/src/content/docs/explanation/disclosure-modes-and-computed-answers.mdx models an eligibility threshold as a CEL predicate inside Notary.
  • docs/site/src/content/docs/explanation/records-stay-home.mdx tells authors to derive an eligibility decision with an expression rule.
  • products/notary/docs/source-claim-modeling-guide.md tells authors to use CEL for purpose-specific predicates without defining the downstream programme boundary.
  • products/notary/docs/notary-capability-matrix.md presents voucher and permit eligibility as supported Notary scenarios.
  • Project-authoring fixtures and the snapshot tutorial use household-eligible and benefits-eligible, which reinforce Notary as an eligibility engine.

The result is a recurring architecture error: source adaptation, evidence semantics, and programme policy are collapsed into one "policy" concept.

Required 1.0 boundary

Make this flow normative and use it consistently:

Source system
  -> Registry Relay: source-specific acquisition and typed normalization
  -> Registry Notary: atomic, precise, reusable evidence statements
  -> Consuming programme: eligibility, prioritization, workflow, and action

The three policy categories must be distinguished:

  1. Relay source-access and adaptation policy.
  2. Notary evidence, authorization, and disclosure policy.
  3. Consuming programme eligibility and action policy.

A Notary claim may be evaluated under purpose-bound authorization while retaining evidence semantics that can be reused by multiple programmes. CEL may derive evidence predicates, but it must not be documented as a general-purpose programme eligibility engine.

One explicit exception is required: Notary may attest a decision already made by an authoritative source. Such a claim must be described and named as a source-owned decision, not as a decision computed by Registry Notary.

DHIS2 proving flow

Use the public-demo-compatible DHIS2 child-health flow as the worked proof:

  • DHIS2 remains the system of record.
  • Relay performs bounded, same-origin DHIS2 acquisition and normalizes declared typed outputs.
  • Notary exposes reusable evidence claims such as programme enrollment active, BCG birth dose recorded, OPV birth dose recorded, and measles dose recorded.
  • The consuming programme computes actions such as outreach required or follow-up priority.
  • true, false, null, no-match, ambiguity, and source failure retain distinct reviewed semantics. Missing evidence must not silently become a negative fact.
  • Public demo connectivity is optional. Offline fixtures remain the deterministic acceptance path, with a governed live compatibility check when credentials and a reachable instance are available.

Acceptance criteria

  • Add one normative evidence-versus-decision boundary to the main architecture and source/claim modeling guidance.
  • Define Relay output, Notary evidence claim, programme decision, and source-owned decision in the glossary.
  • Rework contradictory eligibility language in disclosure modes, records-stay-home, the Notary capability matrix, and the self-attestation guide.
  • Add "not an eligibility engine" to the primary when-to-use/non-goals page.
  • Add a claim-design test to authoring guidance: a claim states evidence, is precise about absence/unknown, and can be reused without importing a consuming programme's decision rules.
  • Replace or explicitly qualify household-eligible and benefits-eligible examples and golden fixtures.
  • Update the DHIS2 starter or add a dedicated beta example so Relay outputs, Notary evidence claims, and consuming programme decisions are visibly separate.
  • Add focused tests covering the DHIS2 offline journey and failure semantics.
  • Verify the full generated-project flow with repository-native locked checks.
  • Perform a documentation review for cross-page consistency and a security review of auth, source authority, minimization, disclosure, audit, and no-match behavior.
  • Record any live DHIS2 demo-server compatibility evidence separately from deterministic offline acceptance.

Non-goals

  • Do not add DHIS2-specific dispatch to Relay. The existing product-neutral script capability remains the execution mechanism.
  • Do not put programme eligibility, outreach, payment, referral, or case-workflow state inside Notary.
  • Do not make the beta depend on the uptime, credentials, or data stability of a public DHIS2 demo server.
  • Do not broaden source access or disclose raw DHIS2 records merely to simplify the demonstration.

Why this blocks 1.0

This is a developer-facing architecture and safety boundary. Shipping contradictory guidance and golden examples would cause adopters to encode programme policy in Notary, reduce claim reuse, overload evidence semantics, and make future integrations such as DHIS2 and OpenCRVS inconsistent.

Metadata

Metadata

Assignees

No one assigned

    Labels

    1.0-blockerBlocks the 1.0 release intent.area:docsDocumentation site ownership.area:notaryRegistry Notary ownership.area:registryctlregistryctl ownership.area:relayRegistry Relay ownership.bugSomething isn't workingdocumentationImprovements or additions to documentationtriage:needs-implementationNeeds implementation.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions