Sign in
abstract agent · revenue-operations · 14 processes · plugin 1.0.0

Data steward

data-steward v1

Owns what a record must contain before anything counts it, and the definitions everything else reports against. It writes what an object means, which fields a record may not be saved without, what values those fields take, what makes two records the same real thing, and where each field's value comes from, and it names the one system a number is read from. When two records are merged it settles the winning value field by field, and when a rule starts failing it traces the bad values back to the form, the import, the integration or the person that wrote them. It publishes each definition at a version and leaves the version it replaced readable, so a report can name the version it was computed under.

The abstract agent

What it is granted, and what it hands to a person

This diagram shows which systems the agent may reach, which processes it works in, and what it hands to a person. Everything drawn here is written down in the document, and an abstract agent is worth having only if both edges of it are.

WORKS INref/rev/answer-a-data-questionref/rev/build-a-reportref/rev/build-the-roll-upGRANTEDthe data dictionarywrite — every definition lands at a version, dthe CRMwrite — required fields, allowed values, and tthe reporting layerread — what counts off the object, so a changethe integrationsread — which systems the object is copied intothe consent recordread — what may be held, field by field, and fthe import toolingread — what an import writes, when the trail lthe standards storeread — the measure definitions in force, so a THE ABSTRACT AGENTdata-stewardv1owns what a record must…HANDS TO A PERSONthe signature on a…a person decidesa field the consent record…a person decidesa report that cannot…a person decideswhether a source keeps…a person decidesnobody owning the…a person decidesMUST FOLLOWcollect-and-reportdecide-and-announceapprovalassessmentdebrief

Runs collect-and-report to list every field an object carries and how full each one is, and assessment to trace failing values back to the system that wrote them. Convenes decide-and-announce on what an object means, on the fields a record may not be saved without, and on who fixes the records already failing and by when. Requests the approval in which the object owner signs a version, having seen the failing count and the list of what breaks downstream. Convenes the debrief that closes a definition or a failure. Takes the uniqueness key from the deduper agent, the field sources from the enrichment-operator agent, what may be held from the consent-manager agent, the rules and the failing count from the data-quality-check agent, and the usage and breakage lists from the analytics agent.

The plugin

What is in the package

14 skills and the systems they need, written to version 1.1.0 of the Agent Plugins standard. Nothing in these files names a product. The package says which systems the agent needs and what it does with each one, and you say which of your systems fills each role when you set it up.

data-steward · 19 files · 1.0.0
com.agentcatalog.agent/NOT.mdWhat the agent does not do, and when it asks a person.
# Where this abstract agent stops

Does not write the rules that enforce a definition or run them, which is
the data-quality-check agent. Does not decide what a measure counts,
which is the standards-keeper agent writing the rule, with this agent
naming the one system it is read from and the boundaries it is cut at.
Does not find or merge duplicates, which is the deduper agent, and this
agent only settles the fields once a merge has been confirmed. Does not
fill an empty field from an outside source, which is the
enrichment-operator agent. Does not sign a definition, and does not
filter a report to hide the records that fail a rule.

## What always goes to a person

- the signature on a definition, always. This agent puts the version in
  front of the object owner with the failing count and the breakage list
  attached, and a person signs.
- a field the consent record does not allow, back to the required list,
  and the person who asked is told which field was refused and why
- a report that cannot survive the change, to the report's owner, who
  either narrows the change or accepts the break in writing before the
  definition is signed
- whether a source keeps writing while it is being fixed, to whoever may
  stop the flow, with how many records a day it is still writing
- nobody owning the backfill, and the failing count goes on being
  reported on its cadence until an owner and a date exist
com.agentcatalog.agent/RECORDS.mdThe records the agent must leave behind.
# The records this abstract agent must leave

This is the contract. An agent implementing `data-steward` leaves the
following behind, on every run.

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

An agent that leaves less than this does not implement `data-steward`,
whatever else it does well.
com.agentcatalog.agent/SERVERS.mdThe systems the agent needs, by role rather than by product.
# The systems this abstract agent needs

Seven systems, named by role rather than by product. The access level is
the most this work needs, and a deployment that grants more is granting
more than the job requires.

| Role | Access | What the access is for |
|---|---|---|
| the data dictionary | write | Every definition lands at a version, dated, with the person who signed it, and the version it replaces stays readable at its own number. |
| the CRM | write | Required fields, allowed values, and the corrections to records already wrong. |
| the reporting layer | read | What counts off the object, so a change is read against the reports before it is signed. |
| the integrations | read | Which systems the object is copied into. |
| the consent record | read | What may be held, field by field, and for how long. |
| the import tooling | read | What an import writes, when the trail leads there. |
| the standards store | read | The measure definitions in force, so a record definition does not contradict one. |

Whoever builds an agent from this plugin writes the `mcp.json` that
points these roles at their own systems. Nothing here names a product,
so the same package works whatever you already run.
plugin.jsonThe manifest. It lists the skills and the systems the agent needs.
{
  "$schema": "https://agent-plugins.org/schemas/1.1.0/plugin.schema.json",
  "name": "data-steward",
  "version": "1.0.0",
  "description": "The data-steward abstract agent. Owns what a record must contain before anything counts it, and the definitions everything else reports against.",
  "author": {
    "name": "AgentCatalog",
    "url": "https://agentcatalog.com"
  },
  "homepage": "https://agentcatalog.com/abstract-agents/data-steward",
  "repository": "https://github.com/jeffrschneider/agentcatalog",
  "license": "CC-BY-4.0",
  "keywords": [
    "abstract-agent",
    "reference",
    "revenue-operations",
    "define-a-record",
    "enforce-pipeline-hygiene",
    "fix-a-data-quality-failure",
    "abstract"
  ],
  "extensions": {
    "com.agentcatalog.agent": {
      "agent": "data-steward",
      "agentVersion": 1,
      "department": "revenue-operations",
      "abstract": true,
      "works": "Runs collect-and-report to list every field an object carries and how full each one is, and assessment to trace failing values back to the system that wrote them. Convenes decide-and-announce on what an object means, on the fields a record may not be saved without, and on who fixes the records already failing and by when. Requests the approval in which the object owner signs a version, having seen the failing count and the list of what breaks downstream. Convenes the debrief that closes a definition or a failure. Takes the uniqueness key from the deduper agent, the field sources from the enrichment-operator agent, what may be held from the consent-manager agent, the rules and the failing count from the data-quality-check agent, and the usage and breakage lists from the analytics agent.",
      "servers": [
        {
          "name": "the data dictionary",
          "role": "data-dictionary",
          "access": "write",
          "needs": "Every definition lands at a version, dated, with the person who signed it, and the version it replaces stays readable at its own number."
        },
        {
          "name": "the CRM",
          "role": "crm",
          "access": "write",
          "needs": "Required fields, allowed values, and the corrections to records already wrong."
        },
        {
          "name": "the reporting layer",
          "role": "reporting-layer",
          "access": "read",
          "needs": "What counts off the object, so a change is read against the reports before it is signed."
        },
        {
          "name": "the integrations",
          "role": "integrations",
          "access": "read",
          "needs": "Which systems the object is copied into."
        },
        {
          "name": "the consent record",
          "role": "consent-record",
          "access": "read",
          "needs": "What may be held, field by field, and for how long."
        },
        {
          "name": "the import tooling",
          "role": "import-tooling",
          "access": "read",
          "needs": "What an import writes, when the trail leads there."
        },
        {
          "name": "the standards store",
          "role": "standards-store",
          "access": "read",
          "needs": "The measure definitions in force, so a record definition does not contradict one."
        }
      ],
      "records": [
        "Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from.",
        "Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed.",
        "Per correction: the old value, the new value and the reason, for every record touched.",
        "Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed.",
        "Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated."
      ],
      "escalates": [
        "the signature on a definition, always. This agent puts the version in front of the object owner with the failing count and the breakage list attached, and a person signs.",
        "a field the consent record does not allow, back to the required list, and the person who asked is told which field was refused and why",
        "a report that cannot survive the change, to the report's owner, who either narrows the change or accepts the break in writing before the definition is signed",
        "whether a source keeps writing while it is being fixed, to whoever may stop the flow, with how many records a day it is still writing",
        "nobody owning the backfill, and the failing count goes on being reported on its cadence until an owner and a date exist"
      ],
      "not": [
        "Does not write the rules that enforce a definition or run them, which is the data-quality-check agent.",
        "Does not decide what a measure counts, which is the standards-keeper agent writing the rule, with this agent naming the one system it is read from and the boundaries it is cut at.",
        "Does not find or merge duplicates, which is the deduper agent, and this agent only settles the fields once a merge has been confirmed.",
        "Does not fill an empty field from an outside source, which is the enrichment-operator agent.",
        "Does not sign a definition, and does not filter a report to hide the records that fail a rule."
      ],
      "processes": [
        {
          "process": "ref/rev/answer-a-data-question",
          "activities": [
            "Say What Was Left Out"
          ]
        },
        {
          "process": "ref/rev/build-a-report",
          "activities": [
            "Check the Data Is There",
            "Choose the Cut and the Cadence",
            "Set Who May See It"
          ]
        },
        {
          "process": "ref/rev/build-the-roll-up",
          "activities": [
            "Fix the Cut-Off",
            "Pull the Open Deals at the Cut-Off",
            "Convert to One Currency",
            "Reconcile the Cuts Against the Extract",
            "Have a Second Pair of Eyes Check It"
          ]
        },
        {
          "process": "ref/rev/dedupe-and-merge",
          "activities": [
            "Pull What Each Record Holds",
            "Choose the Surviving Record",
            "Settle Every Field",
            "Keep What the Loser Held",
            "Undo the Merge"
          ]
        },
        {
          "process": "ref/rev/define-a-measure",
          "activities": [
            "Name the Source of Record",
            "Set the Boundaries"
          ]
        },
        {
          "process": "ref/rev/define-a-record",
          "activities": [
            "Take in the Definition Request",
            "Read How the Record Is Used Today",
            "Write What the Object Means",
            "List the Fields It Carries",
            "Decide the Required Fields",
            "Fix the Allowed Values",
            "Set the Uniqueness Key",
            "Say Where Each Field Comes From",
            "Sign the Definition",
            "Publish the Definition",
            "Set the Backfill Deadline",
            "Record What Was Learned"
          ]
        },
        {
          "process": "ref/rev/enforce-pipeline-hygiene",
          "activities": [
            "Read the Rules as Written",
            "Pull the Open Deals",
            "Check the Amount Against What Is Priced",
            "Check Owner, Territory and Team",
            "Find the Duplicates and the Splits",
            "Fix What the Record Can Fix",
            "Mark the Deals That Stay Wrong",
            "Amend the Rules from What Recurred"
          ]
        },
        {
          "process": "ref/rev/enrich-a-record",
          "activities": [
            "Read the Field Definitions",
            "Set Which Source Wins",
            "Leave Typed Values Alone"
          ]
        },
        {
          "process": "ref/rev/fix-a-data-quality-failure",
          "activities": [
            "Trace It to Its Source",
            "Name Who Owns the Source",
            "Decide Whether to Stop the Flow",
            "Fix It at the Source",
            "Correct the Records Already Wrong",
            "Tighten the Rule",
            "Close the Failure",
            "Record What Was Learned"
          ]
        },
        {
          "process": "ref/rev/fix-a-misroute",
          "activities": [
            "Find Why the Rule Sent It Wrong",
            "Fix the Record"
          ]
        },
        {
          "process": "ref/rev/publish-the-forecast-view",
          "activities": [
            "Decide What Each Audience Sees",
            "Check Every Figure Ties to the Roll-Up",
            "Check Who May See Which Cut",
            "Record Corrections as New Versions"
          ]
        },
        {
          "process": "ref/rev/retire-a-report",
          "activities": [
            "Read What Each One Costs",
            "Find What Depends on Each One",
            "Freeze the Report",
            "Switch Off the Feeds"
          ]
        },
        {
          "process": "ref/rev/watch-the-response-clock",
          "activities": [
            "Read Where the Times Come From",
            "Check the Timestamps Hold Up",
            "Keep the Period"
          ]
        },
        {
          "process": "ref/rev/write-a-routing-rule",
          "activities": [
            "Read the Fields the Rule Will Use",
            "Check the Data Holds Up",
            "Implement the Rule"
          ]
        }
      ]
    }
  }
}
README.mdWhat the package is, and why it carries no mcp.json.
# data-steward

This is an abstract agent, published as an Agent Plugin. An abstract
agent is a job description rather than an implementation. It says what
the work is, which systems it needs and at what access, what it must
leave behind, and where it stops. Any agent that leaves the records can
implement it.

The plugin carries fourteen skills, no `mcp.json`, and everything the
abstract agent owes under `com.agentcatalog.agent/`.

## Why there is no mcp.json

A conformant server entry in `mcp.json` has to declare a transport and
then either a `command` to launch or a `url` to connect to. An abstract
agent has neither, because it does not know which product holds your
records. Writing placeholder URLs would produce a plugin that loads and
then fails to connect, which is worse than one that says nothing.

Section 6.2 makes a missing component location not an error, so the file
is absent and the systems this abstract agent needs are declared instead
under `extensions["com.agentcatalog.agent"].servers`, as a role, an
access level and what the access is for. Whoever builds an agent from
this plugin writes the `mcp.json` that points those roles at their own
systems, so nothing here depends on a particular supplier.

## Why the obligations are in an extension

The specification defines two component types, skills and MCP servers,
and both describe what a plugin can do. An abstract agent's contract is
mostly the other half: the records it must leave, what it escalates, and
what it must not do. There is no portable field for any of that, so it
lives in a reverse-domain namespace as section 8 requires, in the
manifest and in the directory of the same name.

## Where this abstract agent is used

`ref/rev/answer-a-data-question`, `ref/rev/build-a-report`,
`ref/rev/build-the-roll-up`, `ref/rev/dedupe-and-merge`,
`ref/rev/define-a-measure`, `ref/rev/define-a-record`, and 8 more. The
list is generated from the activity tables of the processes that name
it.

https://agentcatalog.com/abstract-agents/data-steward
skills/fix-the-boundary-a-number-is-cut-at/SKILL.mdFixes the edges a number is cut at, and keeps them fixed. Use it when running `ref/rev/build-a-report` and 3 other reference processes.
---
name: fix-the-boundary-a-number-is-cut-at
description: Fixes the edges a number is cut at, and keeps them fixed. Use it when running `ref/rev/build-a-report` and 3 other reference processes.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Fix the boundary a number is cut at

## What it does

Fixes the edges a number is cut at, and keeps them fixed. That is what a
measure counts in and out, the cut-off a set of figures is pulled at,
the period a clock runs over, and the slice and the cadence a report is
read on.

## Where it happens

The agent does this in four activities across four reference processes.
Each one names the activity as that process words it.

- **Choose the Cut and the Cadence**
  - `ref/rev/build-a-report`, activity 6 -
    [Build a Report](../../../../processes/revenue-operations/build-a-report.md)
- **Fix the Cut-Off**
  - `ref/rev/build-the-roll-up`, activity 2 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Keep the Period**
  - `ref/rev/watch-the-response-clock`, activity 16 -
    [Watch the Response Clock](../../../../processes/revenue-operations/watch-the-response-clock.md)
- **Set the Boundaries**
  - `ref/rev/define-a-measure`, activity 7 -
    [Define a Measure](../../../../processes/revenue-operations/define-a-measure.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/publish-a-definition-at-a-version/SKILL.mdPuts the version in front of the object owner with the failing count and the breakage list attached, publishes it once a person signs, and sets the date by which the records already failing must be put right. Use it when running `ref/rev/define-a-record`.
---
name: publish-a-definition-at-a-version
description: Puts the version in front of the object owner with the failing count and the breakage list attached, publishes it once a person signs, and sets the date by which the records already failing must be put right. Use it when running `ref/rev/define-a-record`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Publish a definition at a version

## What it does

Puts the version in front of the object owner with the failing count and
the breakage list attached, publishes it once a person signs, and sets
the date by which the records already failing must be put right. The
version it replaces stays readable at its own number.

## Where it happens

The agent does this in three activities across one reference process.
Each one names the activity as that process words it.

- **Publish the Definition**
  - `ref/rev/define-a-record`, activity 14 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
- **Set the Backfill Deadline**
  - `ref/rev/define-a-record`, activity 16 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
- **Sign the Definition**
  - `ref/rev/define-a-record`, activity 13 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/put-a-rule-in-place-and-tighten-it/SKILL.mdPuts a rule into the system once the fields behind it hold up, and changes it when the same thing keeps coming back. Use it when running `ref/rev/enforce-pipeline-hygiene`, `ref/rev/fix-a-data-quality-failure` and `ref/rev/write-a-routing-rule`.
---
name: put-a-rule-in-place-and-tighten-it
description: Puts a rule into the system once the fields behind it hold up, and changes it when the same thing keeps coming back. Use it when running `ref/rev/enforce-pipeline-hygiene`, `ref/rev/fix-a-data-quality-failure` and `ref/rev/write-a-routing-rule`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Put a rule in place and tighten it

## What it does

Puts a rule into the system once the fields behind it hold up, and
changes it when the same thing keeps coming back. A rule that has to be
tightened or amended lands at a new version with the reason written
down.

## Where it happens

The agent does this in three activities across three reference
processes. Each one names the activity as that process words it.

- **Amend the Rules from What Recurred**
  - `ref/rev/enforce-pipeline-hygiene`, activity 17 -
    [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md)
- **Implement the Rule**
  - `ref/rev/write-a-routing-rule`, activity 13 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Tighten the Rule**
  - `ref/rev/fix-a-data-quality-failure`, activity 14 -
    [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/put-right-a-record-a-rule-placed-wrong/SKILL.mdWorks out why a rule sent a record to the wrong place, and puts the record itself right. Use it when running `ref/rev/fix-a-misroute`.
---
name: put-right-a-record-a-rule-placed-wrong
description: Works out why a rule sent a record to the wrong place, and puts the record itself right. Use it when running `ref/rev/fix-a-misroute`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Put right a record a rule placed wrong

## What it does

Works out why a rule sent a record to the wrong place, and puts the
record itself right.

## Where it happens

The agent does this in two activities across one reference process. Each
one names the activity as that process words it.

- **Find Why the Rule Sent It Wrong**
  - `ref/rev/fix-a-misroute`, activity 8 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)
- **Fix the Record**
  - `ref/rev/fix-a-misroute`, activity 10 -
    [Fix a Misroute](../../../../processes/revenue-operations/fix-a-misroute.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/retire-a-report/SKILL.mdReads what each report costs and what depends on it, freezes it so it stops moving, and switches off the feeds behind it. Use it when running `ref/rev/retire-a-report`.
---
name: retire-a-report
description: Reads what each report costs and what depends on it, freezes it so it stops moving, and switches off the feeds behind it. Use it when running `ref/rev/retire-a-report`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Retire a report

## What it does

Reads what each report costs and what depends on it, freezes it so it
stops moving, and switches off the feeds behind it.

## Where it happens

The agent does this in four activities across one reference process.
Each one names the activity as that process words it.

- **Find What Depends on Each One**
  - `ref/rev/retire-a-report`, activity 7 -
    [Retire a Report](../../../../processes/revenue-operations/retire-a-report.md)
- **Freeze the Report**
  - `ref/rev/retire-a-report`, activity 11 -
    [Retire a Report](../../../../processes/revenue-operations/retire-a-report.md)
- **Read What Each One Costs**
  - `ref/rev/retire-a-report`, activity 3 -
    [Retire a Report](../../../../processes/revenue-operations/retire-a-report.md)
- **Switch Off the Feeds**
  - `ref/rev/retire-a-report`, activity 13 -
    [Retire a Report](../../../../processes/revenue-operations/retire-a-report.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/say-what-changed-and-what-was-left-out/SKILL.mdRecords a correction as a new version rather than editing the figure that already went out, and says plainly what an answer left out. Use it when running `ref/rev/answer-a-data-question` and `ref/rev/publish-the-forecast-view`.
---
name: say-what-changed-and-what-was-left-out
description: Records a correction as a new version rather than editing the figure that already went out, and says plainly what an answer left out. Use it when running `ref/rev/answer-a-data-question` and `ref/rev/publish-the-forecast-view`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Say what changed and what was left out

## What it does

Records a correction as a new version rather than editing the figure
that already went out, and says plainly what an answer left out. A
report can then name the version it was computed under.

## Where it happens

The agent does this in two activities across two reference processes.
Each one names the activity as that process words it.

- **Record Corrections as New Versions**
  - `ref/rev/publish-the-forecast-view`, activity 15 -
    [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md)
- **Say What Was Left Out**
  - `ref/rev/answer-a-data-question`, activity 8 -
    [Answer a Data Question](../../../../processes/revenue-operations/answer-a-data-question.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/say-where-each-value-comes-from/SKILL.mdSays where every field's value comes from, which source wins when two disagree, and the one system a number is read from. Use it when running `ref/rev/define-a-measure`, `ref/rev/define-a-record` and `ref/rev/enrich-a-record`.
---
name: say-where-each-value-comes-from
description: Says where every field's value comes from, which source wins when two disagree, and the one system a number is read from. Use it when running `ref/rev/define-a-measure`, `ref/rev/define-a-record` and `ref/rev/enrich-a-record`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Say where each value comes from

## What it does

Says where every field's value comes from, which source wins when two
disagree, and the one system a number is read from. A value a person
typed is left where it is.

## Where it happens

The agent does this in five activities across three reference processes.
Each one names the activity as that process words it.

- **Leave Typed Values Alone**
  - `ref/rev/enrich-a-record`, activity 10 -
    [Enrich a Record](../../../../processes/revenue-operations/enrich-a-record.md)
- **Name the Source of Record**
  - `ref/rev/define-a-measure`, activity 6 -
    [Define a Measure](../../../../processes/revenue-operations/define-a-measure.md)
- **Read the Field Definitions**
  - `ref/rev/enrich-a-record`, activity 2 -
    [Enrich a Record](../../../../processes/revenue-operations/enrich-a-record.md)
- **Say Where Each Field Comes From**
  - `ref/rev/define-a-record`, activity 8 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
- **Set Which Source Wins**
  - `ref/rev/enrich-a-record`, activity 7 -
    [Enrich a Record](../../../../processes/revenue-operations/enrich-a-record.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/say-who-may-see-which-cut/SKILL.mdDecides what each audience sees, sets who may see a report at all, and checks the cuts going out against that before they go. Use it when running `ref/rev/build-a-report` and `ref/rev/publish-the-forecast-view`.
---
name: say-who-may-see-which-cut
description: Decides what each audience sees, sets who may see a report at all, and checks the cuts going out against that before they go. Use it when running `ref/rev/build-a-report` and `ref/rev/publish-the-forecast-view`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Say who may see which cut

## What it does

Decides what each audience sees, sets who may see a report at all, and
checks the cuts going out against that before they go.

## Where it happens

The agent does this in three activities across two reference processes.
Each one names the activity as that process words it.

- **Check Who May See Which Cut**
  - `ref/rev/publish-the-forecast-view`, activity 10 -
    [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md)
- **Decide What Each Audience Sees**
  - `ref/rev/publish-the-forecast-view`, activity 3 -
    [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md)
- **Set Who May See It**
  - `ref/rev/build-a-report`, activity 10 -
    [Build a Report](../../../../processes/revenue-operations/build-a-report.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/settle-a-merge-field-by-field/SKILL.mdOnce somebody has confirmed two records are one thing, pulls what each one holds, settles which record survives and which value wins on every field, and stores what did not survive against the survivor. Use it when running `ref/rev/dedupe-and-merge`.
---
name: settle-a-merge-field-by-field
description: Once somebody has confirmed two records are one thing, pulls what each one holds, settles which record survives and which value wins on every field, and stores what did not survive against the survivor. Use it when running `ref/rev/dedupe-and-merge`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Settle a merge field by field

## What it does

Once somebody has confirmed two records are one thing, pulls what each
one holds, settles which record survives and which value wins on every
field, and stores what did not survive against the survivor. That store
is the only reason a merge can be taken back at all.

## Where it happens

The agent does this in five activities across one reference process.
Each one names the activity as that process words it.

- **Choose the Surviving Record**
  - `ref/rev/dedupe-and-merge`, activity 7 -
    [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md)
- **Keep What the Loser Held**
  - `ref/rev/dedupe-and-merge`, activity 9 -
    [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md)
- **Pull What Each Record Holds**
  - `ref/rev/dedupe-and-merge`, activity 3 -
    [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md)
- **Settle Every Field**
  - `ref/rev/dedupe-and-merge`, activity 8 -
    [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md)
- **Undo the Merge**
  - `ref/rev/dedupe-and-merge`, activity 16 -
    [Dedupe and Merge](../../../../processes/revenue-operations/dedupe-and-merge.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/sweep-the-open-records-against-the-rules/SKILL.mdReads the rules as they are written, pulls the open records, and checks each one against what is priced, against who owns it and which territory and team it sits in, and against whether it is a duplicate or a split. Use it when running `ref/rev/enforce-pipeline-hygiene`.
---
name: sweep-the-open-records-against-the-rules
description: Reads the rules as they are written, pulls the open records, and checks each one against what is priced, against who owns it and which territory and team it sits in, and against whether it is a duplicate or a split. Use it when running `ref/rev/enforce-pipeline-hygiene`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Sweep the open records against the rules

## What it does

Reads the rules as they are written, pulls the open records, and checks
each one against what is priced, against who owns it and which territory
and team it sits in, and against whether it is a duplicate or a split.
Fixes what the record can fix and marks what stays wrong rather than
quietly passing it.

## Where it happens

The agent does this in seven activities across one reference process.
Each one names the activity as that process words it.

- **Check Owner, Territory and Team**
  - `ref/rev/enforce-pipeline-hygiene`, activity 9 -
    [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md)
- **Check the Amount Against What Is Priced**
  - `ref/rev/enforce-pipeline-hygiene`, activity 8 -
    [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md)
- **Find the Duplicates and the Splits**
  - `ref/rev/enforce-pipeline-hygiene`, activity 10 -
    [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md)
- **Fix What the Record Can Fix**
  - `ref/rev/enforce-pipeline-hygiene`, activity 13 -
    [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md)
- **Mark the Deals That Stay Wrong**
  - `ref/rev/enforce-pipeline-hygiene`, activity 15 -
    [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md)
- **Pull the Open Deals**
  - `ref/rev/enforce-pipeline-hygiene`, activity 4 -
    [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md)
- **Read the Rules as Written**
  - `ref/rev/enforce-pipeline-hygiene`, activity 2 -
    [Enforce Pipeline Hygiene](../../../../processes/revenue-operations/enforce-pipeline-hygiene.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/test-whether-the-data-carries-what-is-being-built/SKILL.md"Reads the fields a report, a rule or a clock is about to rest on and says whether they hold up: how full each one is, where the times come from, and whether the timestamps can carry the measure being asked of them. Use it when running `ref/rev/build-a-report`, `ref/rev/watch-the-response-clock` and `ref/rev/write-a-routing-rule`."
---
name: test-whether-the-data-carries-what-is-being-built
description: "Reads the fields a report, a rule or a clock is about to rest on and says whether they hold up: how full each one is, where the times come from, and whether the timestamps can carry the measure being asked of them. Use it when running `ref/rev/build-a-report`, `ref/rev/watch-the-response-clock` and `ref/rev/write-a-routing-rule`."
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Test whether the data carries what is being built

## What it does

Reads the fields a report, a rule or a clock is about to rest on and
says whether they hold up: how full each one is, where the times come
from, and whether the timestamps can carry the measure being asked of
them.

## Where it happens

The agent does this in five activities across three reference processes.
Each one names the activity as that process words it.

- **Check the Data Holds Up**
  - `ref/rev/write-a-routing-rule`, activity 5 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)
- **Check the Data Is There**
  - `ref/rev/build-a-report`, activity 5 -
    [Build a Report](../../../../processes/revenue-operations/build-a-report.md)
- **Check the Timestamps Hold Up**
  - `ref/rev/watch-the-response-clock`, activity 4 -
    [Watch the Response Clock](../../../../processes/revenue-operations/watch-the-response-clock.md)
- **Read Where the Times Come From**
  - `ref/rev/watch-the-response-clock`, activity 3 -
    [Watch the Response Clock](../../../../processes/revenue-operations/watch-the-response-clock.md)
- **Read the Fields the Rule Will Use**
  - `ref/rev/write-a-routing-rule`, activity 4 -
    [Write a Routing Rule](../../../../processes/revenue-operations/write-a-routing-rule.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/tie-the-figures-back-to-one-extract/SKILL.mdPulls the open records at the cut-off, converts them to one currency, reconciles every cut against the extract they came from, and has a second person check it before anything goes out. Use it when running `ref/rev/build-the-roll-up` and `ref/rev/publish-the-forecast-view`.
---
name: tie-the-figures-back-to-one-extract
description: Pulls the open records at the cut-off, converts them to one currency, reconciles every cut against the extract they came from, and has a second person check it before anything goes out. Use it when running `ref/rev/build-the-roll-up` and `ref/rev/publish-the-forecast-view`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Tie the figures back to one extract

## What it does

Pulls the open records at the cut-off, converts them to one currency,
reconciles every cut against the extract they came from, and has a
second person check it before anything goes out. Every figure published
has to tie back to the roll-up.

## Where it happens

The agent does this in five activities across two reference processes.
Each one names the activity as that process words it.

- **Check Every Figure Ties to the Roll-Up**
  - `ref/rev/publish-the-forecast-view`, activity 9 -
    [Publish the Forecast View](../../../../processes/revenue-operations/publish-the-forecast-view.md)
- **Convert to One Currency**
  - `ref/rev/build-the-roll-up`, activity 6 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Have a Second Pair of Eyes Check It**
  - `ref/rev/build-the-roll-up`, activity 15 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Pull the Open Deals at the Cut-Off**
  - `ref/rev/build-the-roll-up`, activity 4 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)
- **Reconcile the Cuts Against the Extract**
  - `ref/rev/build-the-roll-up`, activity 9 -
    [Build the Roll-Up](../../../../processes/revenue-operations/build-the-roll-up.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/trace-bad-values-back-to-what-wrote-them/SKILL.mdFollows failing values back to the form, the import, the link or the person that wrote them, names who owns that source, and gets a decision on whether it keeps writing while it is being fixed. Use it when running `ref/rev/define-a-record` and `ref/rev/fix-a-data-quality-failure`.
---
name: trace-bad-values-back-to-what-wrote-them
description: Follows failing values back to the form, the import, the link or the person that wrote them, names who owns that source, and gets a decision on whether it keeps writing while it is being fixed. Use it when running `ref/rev/define-a-record` and `ref/rev/fix-a-data-quality-failure`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Trace bad values back to what wrote them

## What it does

Follows failing values back to the form, the import, the link or the
person that wrote them, names who owns that source, and gets a decision
on whether it keeps writing while it is being fixed. Then the source is
put right, the records already wrong are corrected, and the failure
closes. A trail that runs cold closes as unexplained rather than as
fixed.

## Where it happens

The agent does this in seven activities across two reference processes.
Each one names the activity as that process words it.

- **Close the Failure**
  - `ref/rev/fix-a-data-quality-failure`, activity 15 -
    [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md)
- **Correct the Records Already Wrong**
  - `ref/rev/fix-a-data-quality-failure`, activity 10 -
    [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md)
- **Decide Whether to Stop the Flow**
  - `ref/rev/fix-a-data-quality-failure`, activity 7 -
    [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md)
- **Fix It at the Source**
  - `ref/rev/fix-a-data-quality-failure`, activity 8 -
    [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md)
- **Name Who Owns the Source**
  - `ref/rev/fix-a-data-quality-failure`, activity 6 -
    [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md)
- **Record What Was Learned**
  - `ref/rev/define-a-record`, activity 17 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
  - `ref/rev/fix-a-data-quality-failure`, activity 16 -
    [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md)
- **Trace It to Its Source**
  - `ref/rev/fix-a-data-quality-failure`, activity 5 -
    [Fix a Data Quality Failure](../../../../processes/revenue-operations/fix-a-data-quality-failure.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
skills/write-what-a-record-must-contain/SKILL.mdTakes in a request to define an object, reads who uses it today and what counts off it, and writes what the object means and what it is not. Use it when running `ref/rev/define-a-record`.
---
name: write-what-a-record-must-contain
description: Takes in a request to define an object, reads who uses it today and what counts off it, and writes what the object means and what it is not. Use it when running `ref/rev/define-a-record`.
license: CC-BY-4.0
metadata:
  agent: data-steward
  agent-version: "1"
---

# Write what a record must contain

## What it does

Takes in a request to define an object, reads who uses it today and what
counts off it, and writes what the object means and what it is not. Then
the fields it carries, the ones a record may not be saved without, the
values each of those takes, and the fields that make two records the
same real thing.

## Where it happens

The agent does this in seven activities across one reference process.
Each one names the activity as that process words it.

- **Decide the Required Fields**
  - `ref/rev/define-a-record`, activity 5 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
- **Fix the Allowed Values**
  - `ref/rev/define-a-record`, activity 6 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
- **List the Fields It Carries**
  - `ref/rev/define-a-record`, activity 4 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
- **Read How the Record Is Used Today**
  - `ref/rev/define-a-record`, activity 2 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
- **Set the Uniqueness Key**
  - `ref/rev/define-a-record`, activity 7 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
- **Take in the Definition Request**
  - `ref/rev/define-a-record`, activity 1 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)
- **Write What the Object Means**
  - `ref/rev/define-a-record`, activity 3 -
    [Define a Record](../../../../processes/revenue-operations/define-a-record.md)

## What to record

Per definition: the request and who made it, who reads the object today
and what counts off it, the sentence saying what the object is and what
it is not, every field with its fill rate and whether anything reads it,
the required list with the reason each field is required, the allowed
values with what each one means, the uniqueness key written as fields
rather than as a feeling, and where every field's value comes from. Then
the count of records already held that would fail, the reports and
integrations that read a changed field, the signed version with its
signer and date, and the backfill deadline with its owner and the count
still failing when the run closed. Per correction: the old value, the
new value and the reason, for every record touched. Per failure: the
source named with the evidence that it was that one, and a failure that
could not be traced recorded as unexplained rather than as fixed. Per
merge: the surviving id with the reason it was chosen, the winning value
per field naming the record it came from, and every value that did not
survive, stored against the survivor and dated.

That contract covers every activity this abstract agent takes on, and it
is repeated in `com.agentcatalog.agent/RECORDS.md`. What the abstract
agent does not do is in `com.agentcatalog.agent/NOT.md`.
mcp.jsonNot in the package.

Every server entry in an mcp.json needs either a command to run or a url to connect to, and the package cannot know either of those until somebody points it at their own systems. So the file is left out, the systems the agent needs are named by role in plugin.json, and you write the mcp.json when you set it up.

Setting it up

Point it at your systems

To run an agent built from this package, write an mcp.json that says which of your systems fills each role. The package names these 7 roles, and the access level beside each one is the most the work needs.

data-dictionary · writecrm · writereporting-layer · readintegrations · readconsent-record · readimport-tooling · readstandards-store · read
mcp.json You write this file. It is not part of the package.
{
  "$schema": "https://agent-plugins.org/schemas/1.1.0/mcp.schema.json",
  "mcpServers": {
    "data-dictionary": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/data-dictionary"
    },
    "crm": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/crm"
    },
    "reporting-layer": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/reporting-layer"
    },
    "integrations": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/integrations"
    },
    "consent-record": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/consent-record"
    },
    "import-tooling": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/import-tooling"
    },
    "standards-store": {
      "type": "streamable-http",
      "url": "https://mcp.yourcompany.com/standards-store"
    }
  }
}

The hostnames here are a placeholder for your own. Whichever product holds each of these systems, the agent you build is yours and nobody else has to be involved in running it.

Where it works

14 processes, 63 activities

The highlighted activities are the ones this abstract agent does. The other activities in each process belong to other abstract agents or to people.

Answer a Data Questionref/rev/answer-a-data-question · 14 activities
1234567891011121314

Say What Was Left Out

Build a Reportref/rev/build-a-report · 14 activities
1234567891011121314

Check the Data Is There · Choose the Cut and the Cadence · Set Who May See It

Build the Roll-Upref/rev/build-the-roll-up · 17 activities
1234567891011121314151617

Fix the Cut-Off · Pull the Open Deals at the Cut-Off · Convert to One Currency · Reconcile the Cuts Against the Extract · Have a Second Pair of Eyes Check It

Dedupe and Mergeref/rev/dedupe-and-merge · 17 activities
1234567891011121314151617

Pull What Each Record Holds · Choose the Surviving Record · Settle Every Field · Keep What the Loser Held · Undo the Merge

Define a Measureref/rev/define-a-measure · 16 activities
12345678910111213141516

Name the Source of Record · Set the Boundaries

Define a Recordref/rev/define-a-record · 17 activities
1234567891011121314151617

Take in the Definition Request · Read How the Record Is Used Today · Write What the Object Means · List the Fields It Carries · Decide the Required Fields · Fix the Allowed Values · Set the Uniqueness Key · Say Where Each Field Comes From · Sign the Definition · Publish the Definition · Set the Backfill Deadline · Record What Was Learned

Enforce Pipeline Hygieneref/rev/enforce-pipeline-hygiene · 17 activities
1234567891011121314151617

Read the Rules as Written · Pull the Open Deals · Check the Amount Against What Is Priced · Check Owner, Territory and Team · Find the Duplicates and the Splits · Fix What the Record Can Fix · Mark the Deals That Stay Wrong · Amend the Rules from What Recurred

Enrich a Recordref/rev/enrich-a-record · 16 activities
12345678910111213141516

Read the Field Definitions · Set Which Source Wins · Leave Typed Values Alone

Fix a Data Quality Failureref/rev/fix-a-data-quality-failure · 16 activities
12345678910111213141516

Trace It to Its Source · Name Who Owns the Source · Decide Whether to Stop the Flow · Fix It at the Source · Correct the Records Already Wrong · Tighten the Rule · Close the Failure · Record What Was Learned

Fix a Misrouteref/rev/fix-a-misroute · 15 activities
123456789101112131415

Find Why the Rule Sent It Wrong · Fix the Record

Publish the Forecast Viewref/rev/publish-the-forecast-view · 16 activities
12345678910111213141516

Decide What Each Audience Sees · Check Every Figure Ties to the Roll-Up · Check Who May See Which Cut · Record Corrections as New Versions

Retire a Reportref/rev/retire-a-report · 16 activities
12345678910111213141516

Read What Each One Costs · Find What Depends on Each One · Freeze the Report · Switch Off the Feeds

Watch the Response Clockref/rev/watch-the-response-clock · 16 activities
12345678910111213141516

Read Where the Times Come From · Check the Timestamps Hold Up · Keep the Period

Write a Routing Ruleref/rev/write-a-routing-rule · 17 activities
1234567891011121314151617

Read the Fields the Rule Will Use · Check the Data Holds Up · Implement the Rule

The records it leaves

What it writes down

Per definition: the request and who made it, who reads the object today and what counts off it, the sentence saying what the object is and what it is not, every field with its fill rate and whether anything reads it, the required list with the reason each field is required, the allowed values with what each one means, the uniqueness key written as fields rather than as a feeling, and where every field's value comes from. Then the count of records already held that would fail, the reports and integrations that read a changed field, the signed version with its signer and date, and the backfill deadline with its owner and the count still failing when the run closed. Per correction: the old value, the new value and the reason, for every record touched. Per failure: the source named with the evidence that it was that one, and a failure that could not be traced recorded as unexplained rather than as fixed. Per merge: the surviving id with the reason it was chosen, the winning value per field naming the record it came from, and every value that did not survive, stored against the survivor and dated.

Where it stops

What it will not do

Does not write the rules that enforce a definition or run them, which is the data-quality-check agent. Does not decide what a measure counts, which is the standards-keeper agent writing the rule, with this agent naming the one system it is read from and the boundaries it is cut at. Does not find or merge duplicates, which is the deduper agent, and this agent only settles the fields once a merge has been confirmed. Does not fill an empty field from an outside source, which is the enrichment-operator agent. Does not sign a definition, and does not filter a report to hide the records that fail a rule.

These limits are written into the job on purpose, so that everyone adopting the process knows which decisions stay with a person.

Agents built from this plugin

Who has built one, and how far each one got

Nobody has built one yet. The catalog says so rather than leaving the section off, because an empty list is a fact about the document.

declare it implements: data-steward v1 One line in your agent's manifest. The catalog checks it against the records your runs actually leave.
A guess, not a claim

The closest things in the catalog, by description

Nobody above has claimed any of these. This is the nearest match by wording between the job written above and what publishers wrote about their own listings, closest first, and wording is not evidence: some of these will be wrong, and a job with nothing suitable still gets whatever was nearest. The publishers have never heard of this abstract agent and have promised nothing about it. What a claim looks like is in the table above, and it is signed.

Might be reached for

Not workers. These are capability that whatever does the job would use, which is a different relationship and kept in its own column for that reason.

  • sql-steward MCP server · pawansingh3889.github.io · run it yourself · mirrored from the MCP registry The agent never writes SQL: queries compile from a semantic layer you control, PII refused first.
  • CivicDataForge Public-Records Data MCP server · equinoxaifinance-rgb.github.io · hosted · mirrored from the MCP registry Seven official-record tools for property compliance, healthcare integrity, and facility safety.
  • verified-feed MCP server · dropwatchhq.com · hosted · mirrored from the MCP registry Contradiction-verified, freshness-SLA'd signed feed: per-record status + as-of date + receipt.