kaelio/historic_sql_table_digest
Convert one changed historic-SQL table usage bucket into typed table usage evidence for deterministic _schema projection.
npx skills add https://github.com/Kaelio/ktx --skill historic_sql_table_digest
Use this skill when the WorkUnit raw file is one tables/<schema>.<name>.json file from the historic-sql adapter.
read_raw_file for the single tables/<schema>.<name>.json raw file.manifest.json only if the table JSON omits the dialect or the WorkUnit notes are unclear.emit_historic_sql_evidence exactly once with kind: "table_usage".Before writing a wiki page or SL source on any topic:
discover_data({query: "<topic>"}) - see what wikis, SL sources, and rawtables already exist. Prefer updating existing pages over creating new ones.
Before emitting any schema.table or schema.table.column into a wiki body,
SL source, tables: frontmatter, sl_refs, or emit_unmapped_fallback:
entity_details({connectionId, targets: [{display: "<identifier>"}]}) -confirm the identifier resolves; inspect native types, FK/PK, and
sampleValues.
check whether they appear in entity_details sampleValues for the relevant
column. If sampleValues is short or the sample may have missed real values,
run a sql_execution probe with the same warehouse connection id:
sql_execution({connectionId, sql: "SELECT DISTINCT <col> FROM <ref> LIMIT 50"}).
sql_execution({connectionId, sql: "SELECT 1 FROM <ref> LIMIT 0"}).If it errors, the identifier is fictional.
[unverified - from <rawPath>] in the wiki body,citing the exact raw path that mentioned it.
emit_unmapped_fallback with no_physical_table, includethe failing probe error in clarification.
<schema>.<table> placeholder strings from these instructionsinto output.
Call emit_historic_sql_evidence with this shape:
{
"kind": "table_usage",
"table": "public.orders",
"usage": {
"narrative": "Orders are repeatedly queried for paid/refunded lifecycle analysis and customer-level rollups.",
"frequencyTier": "high",
"commonFilters": ["status", "created_at"],
"commonGroupBys": ["status"],
"commonJoins": [{ "table": "public.customers", "on": ["customer_id"] }],
"staleSince": null
}
}
The usage object must match tableUsageOutputSchema.
columnsByClause.where as common filters.columnsByClause.groupBy as common group-bys.observedJoins as common joins.stats.executionsBucket, stats.distinctUsersBucket, and stats.recencyBucket to choose frequencyTier.frequencyTier: "high" only when executions and distinct users are both broad.frequencyTier: "mid" for repeated team usage that is not broad enough for high.frequencyTier: "low" for low-volume but present usage.frequencyTier: "unused" only when the table input explicitly says the table is stale or has no recent templates.narrative short and concrete.Take kaelio/historic_sql_table_digest from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.