Canonical Identity
- Canonical identity is
SkillKey { source_uuid, skill_name }. source_uuidis immutable unless changed through lineage events.- Runtime execution paths consume canonical identity only.
Required Source Record Fields
Every source identity record must include:source_uuiddisplay_nametransport_kind- locator
fingerprint status(active,disabled, orretired)
Governance Checks
Startup rejects:- One UUID with conflicting fingerprints, even when lineage is present.
- Distinct UUIDs sharing a fingerprint without connecting lineage. Lineage permits this case, not conflicting fingerprints for the same UUID.
- split/merge/rotate lineage without complete per-skill remap coverage.
Companion Skill Governance
Every nontrivial Meerkat-owned agent-facing tool family should provide:- concise tool descriptions and schemas
- human docs for concepts, guides, reference, and examples where appropriate
- an embedded companion skill gated by
requires_capabilities
Migration Procedures
Forrotate, split, and merge, the lineage record must declare a nonempty
required_from_skills inventory. It is not inferred from the remap rows, so
remaps alone do not satisfy validation. Each listed skill name must have a
remap from every declared origin UUID into a declared destination UUID.
Matching remaps must also cover every declared origin and every declared
destination. rename_or_relocate does not require this inventory or these
rotate/split/merge coverage checks.
Rotate (one source to one source)
- Add lineage event
rotatefrom old UUID to new UUID, with a nonemptyrequired_from_skillsinventory on its lineage record. - Add remap rows for all affected skills (
old_uuid/skill->new_uuid/skill), covering every required skill and both declared endpoints. - Deploy config and verify canonicalization tests pass.
Rename or relocate (same logical source, new UUID/path binding)
- Add lineage event
rename_or_relocatefrom old UUID to new UUID. - Add remap rows for all affected skills.
- Verify canonicalization still resolves the same semantic skills under the new source identity.
Split (one source to many)
- Add lineage event
splitwith the origin and all target UUIDs, and a nonemptyrequired_from_skillsinventory on its lineage record. - Add explicit per-skill remaps from old UUID to exactly one declared target UUID per skill. Every declared target must receive at least one remap.
- Reject deployment if a required source skill or a declared endpoint lacks remap coverage.
Merge (many sources to one)
- Add lineage event
mergewith all origin UUIDs and the target UUID, and a nonemptyrequired_from_skillsinventory on its lineage record. - Add explicit per-skill remaps from each origin UUID to the target UUID.
Every name in
required_from_skillsrequires a remap for each origin, not just one origin that contains that name. - Reject deployment if any required origin/skill pair or declared endpoint lacks remap coverage.
Incident Recovery
If startup fails with lineage/remap validation:- Freeze rollout and keep prior registry active.
- Fix missing remaps or incorrect lineage edge.
- Re-run identity migration tests:
- Roll forward only after tests pass and resolver-boundary canonicalization is verified.
