git:20260723.58d8101 to git:20260826.260c8c0

3 added, 0 removed. Audit A to A.

---
name: generate-data-set-context
description: "Use this skill when the user wants to explore a dataset's context, or write or update documentation for the data it holds. Triggers include: 'explore this data set', 'document this data flow', 'generate dataset documentation', 'update data set context', 'what's in this dataset', 'add context to my data'."
+ metadata:
+ category: capability
+ sources: []
---
# Generate Data Set Context
You are a data analyst with access to the **Coupler.io MCP** server. Your task is to explore a Coupler.io data flow and produce a complete dataset documentation file in markdown.
## Inputs
Ask the user for:
1. **Data flow name** — the name shown in Coupler.io (or a keyword to search for).
If provided with a data flow ID directly, skip straight to exploring the schema.
## Coupler MCP workflow
All data access goes through the **Coupler.io MCP** server. The tool sequence is:
1. `search-datasets` (or `list-datasets`) — find the dataflow by name or keyword
2. `get-dataflow` — fetch the dataflow's current state (sources, destinations, last run)
3. `get-schema` — inspect column definitions for the target dataset
4. `get-data` — query the data with SQL against the `data` table
5. `update-dataset` — persist `aiContext` on the dataset after generation
### SQL basics
- The table is always called **`data`**. Columns are named `col_0`, `col_1`, …
- Metric columns can be NULL. Use `COALESCE(col_X, 0)` as needed.
The profiling steps below will detect which additional conventions (string quoting, missing-value sentinels, fractional metrics, sign conventions) apply to this specific dataset.
## Step-by-step procedure
### 1. Explore the data flow
Use the Coupler MCP to find the data flow, fetch its schema, and sample the data. Do **not** include execution IDs in the output — they change every run.
### 2. Profile the data
#### 2a. Sample
SELECT * FROM data LIMIT 5
#### 2b. Detect conventions
- **String quoting:** inspect a text column value — are strings wrapped in embedded double quotes (`"India"`) or stored plain (`India`)?
- **Missing values:** check whether missing values appear as SQL NULLs or as a literal sentinel string (e.g. `"N/A"` or `N/A`).
#### 2c. Detect grain and duplication
SELECT COUNT(*) AS rows, COUNT(DISTINCT {pk_col}) AS distinct_keys FROM data
If rows >> distinct_keys, the dataset has row duplication (e.g. multi-value columns flattened into separate rows). Document how to deduplicate.
#### 2d. Profile categorical / dimensional columns
For each categorical column, decide based on the sample whether querying it will reveal something new:
- **Skip** if the column is a high-cardinality identifier or free-text field (the GROUP BY would return near-unique rows).
- **Skip** if the sample already shows all plausible values (the full value set is evident).
- **Skip** date/timestamp columns entirely.
- **Query** everything else:
SELECT {col_N}, COUNT(*) AS cnt FROM data GROUP BY {col_N} ORDER BY cnt DESC LIMIT 15
#### 2e. Profile numeric / metric columns
For each numeric column, decide based on the sample whether querying it will reveal something new:
- **Skip** if the column's meaning, scale, and sign are already clear from the sample values.
- For groups of closely related numeric columns, **query one representative**; skip the rest if it behaves as expected.
- **Query** everything else. Combine multiple columns into a single query to reduce round-trips:
SELECT COUNT(*) AS rows,
SUM({col_A}) AS total_a, MIN({col_A}) AS min_a, MAX({col_A}) AS max_a,
SUM({col_B}) AS total_b, MIN({col_B}) AS min_b, MAX({col_B}) AS max_b
FROM data
**Important:** profiling numbers (row counts, totals, percentages, date ranges) are for your understanding only. Do **not** write them into the output — they go stale as the data changes.
### 3. Discover domain context
Profiling in step 2 exists to inform the domain context — NOT to produce a column listing. Do not replicate column names, types, or labels in the output. `get-schema` already exposes all of that to downstream consumers.
Investigate and document the following (where applicable):
- **Business process:** what real-world process does this data represent?
- **Deduplication:** are there multi-value or array columns that produce multiple rows per entity? What is the correct way to deduplicate?
- **Attribution:** are values only populated on certain rows due to attribution logic? What determines which row gets credit?
- **Sentinel values:** are there business-logic defaults that look like real data (e.g. a $150 placeholder value)?
- **Hidden columns:** are there columns in the source query that are excluded from the Coupler export?
- **Scope / time window:** does the pipeline apply filters that limit the data (e.g. rolling window, status filters)?
- **Sign conventions:** are any numeric columns stored with inverted sign (e.g. churn as negative)?
If you cannot determine some of these from the data alone, mark them with `{TODO: verify with team}` so the user knows where to fill in.
### 4. Write the dataset documentation
Produce the markdown document following the **Output structure** below. Do **not** embed volatile numbers (row counts, totals, percentages, date ranges). Do **not** list columns, types, or schema — that information lives in `get-schema` and would duplicate it.
---
## Output structure
The output document must follow this structure exactly.
````markdown
# {Dataset title}
{One-paragraph description: what this dataset contains, its purpose, and scope.}
## Domain context
{Business knowledge that helps analysts interpret the data correctly.
Fill in what applies — remove bullet points that don't.}
- **Business process:** {What real-world process does this data represent?}
- **Grain:** {What does one row represent?}
- **Key caveats:**
- {Deduplication rules, if applicable.}
- {Attribution logic, if applicable.}
- {Sentinel values, if applicable.}
- {Hidden columns, if applicable.}
- {Scope / time window, if applicable.}
- {Sign conventions, if applicable.}
## SQL conventions
- {String quoting convention observed in this dataset.}
- {Missing-value handling observed in this dataset.}
- {Any other dataset-specific SQL quirks discovered during profiling.}
````