Verified Digital Agents → Samples → Genesis extraction

Genesis From Card — Extracted Governance Inputs

Sample artefact — synthetic data (Northwind Bank)

Produced by C2MD extract_governance_inputs. How this skill works →

DOCUMENT STATUS — DEMO DATA · NOT FOR REGULATORY RELIANCE.

Input — the agent's own card

{
  "name": "Northwind Credit Decision Assistant",
  "description": "Evaluates consumer loan applications and returns an
                  approve / decline / refer recommendation with a reason
                  code, using applicant-supplied financial data and
                  internal repayment history.",
  "provider": { "organization": "Northwind Bank" },
  "skills": [
    { "id": "evaluate_application", "tags": ["credit", "underwriting"] },
    { "id": "return_decision",      "tags": ["decision", "reason-code"] },
    { "id": "escalate_to_human",    "tags": ["oversight"] }
  ]
}

Output — proposed inputs, for review

InputProposedDerived fromConfidence
data_categories [financial, identity, behavioural] "applicant-supplied financial data", "internal repayment history" High
autonomy_level assistive Card returns a recommendation and declares escalate_to_human; it does not declare a capability that commits the decision. Medium — see below
industry banking Provider organisation and skill tags credit, underwriting. High
Why autonomy_level is only medium confidence — and why that matters most. The card says "recommendation", but a recommendation that is accepted automatically downstream is, in substance, a decision. The card cannot show what happens after it returns. This is precisely the field a human must confirm or correct, and precisely why the output is a proposal rather than a setting.

The human step

A reviewer confirms or corrects each value. In this example the reviewer corrected the autonomy level:

autonomy_level: assistive → assistive   (confirmed)
  reviewer note: "'refer' path routes to a credit officer with authority
  to overturn; no auto-accept downstream. Confirmed assistive."

data_categories: [financial, identity, behavioural]   (confirmed)
industry: banking                                     (confirmed)

The ratification handoff

Those confirmed values are what ACP raises for sealed ratification:

ACP  → raise_hitl_item
        class: governance_ratification
        statement binds each value as field=value tokens:
          autonomy_level=assistive
          data_categories=financial,identity,behavioural

HITL → routes to the authorised band (governance_owner)
     → records the asserted actor separately from the
       authenticated account
     → seals a hitl_decision to Witness

ACP  → activation gate resolves the item LIVE and refuses unless it is
       resolved, approved, sealed (not pending), the sealed statement
       binds every ratified value, and the deciding actor holds
       authority under CODEOWNERS.
The gate fails loud. If HITL is unreachable, if the seal is still pending, or if the actor lacks authority, activation is refused. A ratification that cannot be resolved is never treated as a pass — which is what makes "who approved this governance, and can you prove it" answerable rather than assumed.

Resulting manifest

{
  "schema": "acp.ratification/2",
  "ratified": [
    { "field": "autonomy_level",  "value": "assistive" },
    { "field": "data_categories", "value": "financial,identity,behavioural" }
  ],
  "hitl": { "caller_id": "clr_…", "item_id": "itm_…" }
}

The manifest references the HITL item rather than embedding a record — the seal stays where seals live, and the git artefact carries a pointer to it.