| name | transfer-reconciliation |
| description | Lightweight post-transfer reconciliation example — verify tool-reported row count parity and run a small target-side sanity check without re-scanning the source. |
| tags | ["data-engineering","migration","validation","reconciliation"] |
| version | 1.0.0 |
| user_invocable | false |
| disable_model_invocation | false |
| allowed_agents | ["gen_job"] |
| kind | validator |
| severity | blocking |
| mode | llm |
| targets | [{"type":"transfer"}] |
Transfer Reconciliation
Use this skill at the end of a transfer_query_result run. It is intentionally
lightweight: the built-in layer already compares tool-reported source and
target row counts, so this skill only demonstrates a small target-side sanity
check. Project-specific or strict source-vs-target checks should live in a
project/user validator skill.
When this skill fires
ValidationHook triggers this skill automatically at the end of any gen_job
agent run that produced one or more TransferTarget deliverables. When the
run stayed intra-database (no transfer_query_result calls), this skill is
not invoked.
You never call this skill directly. The hook starts a read-only sub-agent
whose only job is to execute the checks below against the run's transfer
targets and emit a structured JSON report.
What you receive
The hook hands you a SessionTarget containing one or more
TransferTarget records. Each record carries only:
source.name — the source connector key (route execute_sql here for
source-side probes only when a project-specific validator explicitly needs
them).
target.datasource / target.database / target.db_schema /
target.table — the target coordinates.
source_row_count, transferred_row_count — tool-reported counts
(authoritative for check 1).
Default validator behavior must avoid expensive source re-scans. Do not infer
or search for the original source table; many transfers are derived queries,
joins, or aggregations. Treat source_row_count / transferred_row_count as
the source-side evidence.
Core workflow
For every TransferTarget in the session, run only these example checks:
- Row count parity — report whether tool-reported
source_row_count and
transferred_row_count match. This should normally already be present in
the precheck context from the built-in layer; summarize it instead of
querying the source.
- Target row count — run one target-side
COUNT(*) query using
TransferTarget.target.datasource and the target table coordinate. Compare
it with transferred_row_count.