Skip to content
Back to skills

Kpi Contract Builder

ASecurity

Help a human turn a named-but-planned retail KPI into a governed, owner-ready project metric-contract by driving the shipped kpi_contracts engine (spec 124). On first contact, when no approved decisions exist yet, it assesses source answerability, lists the exact Decision Store decisions to get approved via business-knowledge-interview, and renders a preview with per-field provenance -- writing no YAML. Once the approved kpi_definition / policy_ruling decisions, a named eligible owner, and co...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
datagosql

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 29, 2026

npx -y skills add Kemetra/Seshat-BI --skill kpi-contract-builder --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Kpi Contract Builder?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Kpi Contract Builder
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kemetra-kpi-contract-builder/badge)](https://www.skillsdirectory.com/skills/kemetra-kpi-contract-builder)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: kpi-contract-builder
description: >-
  Help a human turn a named-but-planned retail KPI into a governed, owner-ready
  project metric-contract by driving the shipped kpi_contracts engine (spec 124).
  On first contact, when no approved decisions exist yet, it assesses source
  answerability, lists the exact Decision Store decisions to get approved via
  business-knowledge-interview, and renders a preview with per-field provenance
  -- writing no YAML. Once the approved kpi_definition / policy_ruling decisions,
  a named eligible owner, and committed source evidence exist, it drives
  draft_project_metric_contract (a gold-blocked contract) and, after the gold
  binding is materialized, finalize_project_metric_contract. Use when someone
  asks to draft, author, or start a metric contract for a planned KPI in the
  Seshat BI repo. It never invents business meaning, DAX, SQL, gold columns,
  approvals, owners, a confidence score, or a registry entry; it never promotes
  a KPI to Seeded and never self-grants an approval.
---

# kpi-contract-builder

This skill is the agent-facing front door to the shipped `kpi_contracts` stage.
It does NOT reimplement contract authoring: the shipped `kpi_contracts` engine and
its `kpi_answerability` scorecard already exist (spec 124). This skill DRIVES
them and adds the first-contact assessment the engine deliberately refuses to do.

## When to use

- Someone asks to draft / author / start a metric contract for a KPI that the
  registry marks `planned` (no seeded contract yet), or for a user-supplied
  custom KPI.
- You are at the `kpi_contracts` flow stage (downstream of
  `business-knowledge-interview`, upstream of silver/gold model planning).

Do NOT use it to define DAX (`retail generate`), to check a PBIP model
(`retail semantic-check`), or to run the interview itself
(`business-knowledge-interview`).

## The two-trip flow

The shipped `draft_project_metric_contract` REQUIRES an approved decision, a named
owner, and committed source evidence; without them it raises
`ContractDraftRefused`. So the flow has two trips.

### Trip 1 -- Assess & preview (the common first-contact case; writes nothing)

1. Identify the KPI. Registry-known -> resolve its `generic_kpi_ref: KPI-MC-NN`
   from the `retail-kpi-knowledge` registry (`custom: false`).
   User-supplied -> `custom: true`, no ref, no suggested id.
2. Read the source-coverage signal (read-only). NOTE: for a `lifecycle: planned`
   registry entry -- the primary case for this skill -- `derive_answerability`
   short-circuits to `Planned` before it inspects source roles, mapped concepts,
   domain, or evidence, so its status alone CANNOT tell you which fields are
   present. For a planned KPI, take the coverage signal from the registry entry's
   own `blockers` and `source_roles` / `required_concepts` metadata (and a
   committed source profile / source-map, if present) -- that is what surfaces a
   `binds_to` gap. Use `derive_answerability` /
   `render_answerability_artifact` only for its designed purpose (a coverage
   scorecard for SEEDED KPIs); consume it read-only, never persist or re-decide it
   -- contract authoring is a separate concern.
3. Check the Decision Store for the required `kpi_definition` + applicable
   `policy_ruling` decisions. If any is missing/unapproved, do NOT call the
   engine (it will raise).
4. Render a PREVIEW: the contract's business body (clean; no provenance inside
   values) + a `field_provenance` block + the gap list.
5. Emit the decision-gap list: the exact `kpi_definition` / `policy_ruling`
   decisions to get approved (route to `business-knowledge-interview`) and the
   owner to name. STOP. Write no YAML.

### Trip 2 -- Draft & finalize (only when preconditions hold)

6. When an approved `kpi_definition` (+ every applicable approved `policy_ruling`)
   and a named eligible owner exist, build a `ContractDraftRequest` and call
   `draft_project_metric_contract`. The result is a contract with
   `readiness.status: blocked` and the reason `physical gold binding is not
   materialized` -- this is correct and expected until gold exists.
7. On explicit human confirmation, write the returned contract to
   `mappings/<table>/metrics/<Name>.yaml`.
8. After the gold binding is materialized and validated, call
   `finalize_project_metric_contract` with a `FinalizationContext` (pass
   `repo_root` so each referenced decision's approval evidence is re-verified);
   it promotes to `readiness.status: pass` ONLY when every precondition
   (binding, decisions scoped to this KPI via `scope.kpis`, fresh evidence, and
   a `named_human_approval` equal to the eligible approver of a referenced
   `kpi_definition`) holds. The skill never sets `pass` itself.

## field_provenance (preview only; five-value origin vocabulary)

Rendered by this skill in the PREVIEW to show where each field came from. It is
NOT written into the persisted contract (which uses the engine's `decision_refs`
/ `source_evidence`). It is NEVER inserted inside a business value.

    field_provenance:
      formula_intent: { origin: knowledge,   ref: "KPI-MC-02/net-sales.md", resolved: true }
      binds_to:       { origin: profile,     ref: "source-profile.md#net_amount", resolved: false }
      grain:          { origin: human,       ref: "interview 2026-07-13", resolved: true }
      cost_method:    { origin: gap,         ref: "", resolved: false }

Origin is exactly one of: `knowledge` (transcribed from a generic
retail-kpi-knowledge contract), `profile` (proposed from the read-only source
profile -- never self-justifying), `human` (a recorded answer / approved
decision reference), `provisional` (a live unapproved answer shown in preview
only), `gap` (un-inferable). `provisional` and `gap` are never `resolved: true`;
either on a required field means the drafted contract stays `readiness.status:
blocked`.

## Hard stops

- Never self-grant an approval. The `owner` is REQUIRED at draft time
  (`draft_project_metric_contract` refuses an empty owner and persists the one you
  supply) -- so a named eligible owner must be identified before Trip 2; that is a
  human answer, not an agent invention. What the skill never fills is `approvals`
  and never sets `readiness.status: pass` -- promotion to `pass` is the named-human
  step performed by `finalize_project_metric_contract`.
- Never fabricate a confidence score or percentage.
- Never write DAX / SQL / a silver or bronze binding into any field.
- Never mutate `registry.yaml`; never suggest a `KPI-MC` id for a custom KPI;
  never promote a KPI from Planned to Seeded.
- For a `planned` KPI, contribute identity / concepts / roles / blockers only --
  never an invented `formula_intent`.

Files in this skill

  • SKILL.md6.4 KB
  • walkthrough.md3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…