
Ingest Triage
When you're ingesting semantic layer bundles and hit naming collisions, this handles the classification and resolution automatically. It distinguishes between harmless duplicates (same content, skip the write), expression-only changes (silent replace), and the messier cases like definitional contradictions where the same metric name means different things across sources. The disambiguation logic is opinionated: it renames all variants with domain suffixes, writes a unified wiki page explaining each, and flags for human review. The re-ingest versus same-ingest distinction is smart, treating a re-upload as user intent to replace while treating within-bundle conflicts as ambiguous. Stage 4 reconciliation adds cross-bundle sweeps and eviction decisions. The canonical pins feature lets you lock in prior decisions on contested keys.
- GitHub stars
- 1.1K
- last updated
- Jun 11, 2026
Install
$ npx -y skills add kaelio/ktx --skill ingest_triage --agent claude-codeInstalls into .claude/skills of the current project.
Files
Ingest Triage - conflict classification and resolution
This skill is loaded in two contexts:
- By a Stage 3 WorkUnit agent when
sl_discover, deterministic projection output, existing project memory, or prior provenance overlaps with what the current WorkUnit is about to write. - By the Stage 4 reconciliation agent for cross-WorkUnit sweeps, accepted patch overlap, and eviction decisions.
Apply the rules below before every write that could collide with an existing artifact.
Decision tree
-
Is this the same artifact I'm producing now, or a different one with the same name? Read both. If names match and content matches (modulo whitespace): no conflict - skip the write, the prior one stands.
-
If content differs, is it an expression-only change (e.g. a different
sql:body for the same measure name, same grain, same columns)? Re-ingest change (expression-only): silently replace viasl_edit_source. No flag.
Sponsors
Details
- Repository
- github.com/kaelio/ktx
- License
- Apache-2.0
- First seen
- Jun 11, 2026