{"id":"311d28b5-6929-47dd-a782-cacdcdfa9430","shortId":"aHPWBj","kind":"skill","title":"legacy-wire-name-compat-translation","tagline":"Translate renamed internal identifiers back to their legacy wire names at serialization boundaries so patch-level consumers keep working until the planned version cutoff.","description":"# SKILL: Legacy Wire Name Compat Translation\n**Domain:** wire-compatibility\n**Trigger:** Apply when an internal tool, command, or capability identifier has been renamed, but existing SDK or UI consumers still depend on the old wire name and cannot safely break on a patch release.\n**Source Pattern:** Distilled from reviewed remote-control, bridge transport, and capability-advertising implementations.\n\n## Core Method\nKeep the renamed identifier as the canonical internal name, then insert a narrow compatibility translator at the wire boundary that maps the new internal identifier back to the legacy external name before emitting payloads. Scope the translation to the specific renamed symbols that already escaped into client contracts, and keep it in place only until the explicitly planned version boundary where a breaking change is allowed. This preserves internal clarity and forward migration work without surprising patch-level consumers that still parse the legacy wire label.\n\n## Key Rules\n- Translate at serialization time, not throughout business logic; the new identifier should remain canonical inside the codebase.\n- Limit the mapping to the externally contracted names that actually changed, so unrelated identifiers keep flowing through untouched.\n- Reuse one compatibility helper anywhere the wire payload is emitted, otherwise different event types or transports will drift and expose mixed names.\n- Tie the shim to an explicit removal boundary such as the next minor or major release, and document that boundary next to the translator so the temporary contract does not become accidental forever behavior.\n- Preserve stable wire names across both discovery and result surfaces when clients observe both; partial translation still breaks consumers that correlate the same capability across messages.\n\n## Example Application\nIf a product renames an internal tool from `Task` to `Agent`, keep `Agent` as the implementation name but translate it back to `Task` in init and result payloads until the next planned minor release. SDK clients that were built against the old wire contract continue to function, while the codebase and future migration work use the new canonical identifier internally.\n\n## Anti-Patterns (What NOT to do)\n- Do not immediately emit the renamed identifier on a patch release just because the internal refactor is complete; external wire contracts have a different compatibility bar than internal names.\n- Do not scatter if old name branches across core logic to preserve compatibility; isolate the translation at the boundary.\n- Do not update only one payload type and leave others on the new name; mixed-wire naming is still a contract break for consumers that join data across events.","tags":["legacy","wire","name","compat","translation","cskill","agents","ychampion","agent-skills","ai-agents","cli","coding-agents"],"capabilities":["skill","source-ychampion","skill-legacy-wire-name-compat-translation","topic-agent-skills","topic-ai-agents","topic-cli","topic-coding-agents","topic-context-engineering","topic-developer-tools","topic-mcp","topic-multi-agent","topic-terminal-ui"],"categories":["cskill-agents"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/ychampion/cskill-agents/legacy-wire-name-compat-translation","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add ychampion/cskill-agents","source_repo":"https://github.com/ychampion/cskill-agents","install_from":"skills.sh"}},"qualityScore":"0.467","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 34 github stars · SKILL.md body (2,730 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T06:56:50.110Z","embedding":null,"createdAt":"2026-04-18T22:20:34.900Z","updatedAt":"2026-04-22T06:56:50.110Z","lastSeenAt":"2026-04-22T06:56:50.110Z","tsv":"'accident':270 'across':277,297,404,444 'actual':208 'advertis':89 'agent':311,313 'allow':158 'alreadi':136 'anti':362 'anti-pattern':361 'anywher':221 'appli':43 'applic':300 'back':11,118,321 'bar':393 'becom':269 'behavior':272 'boundari':19,111,152,246,258,415 'branch':403 'break':71,155,290,438 'bridg':84 'built':339 'busi':188 'cannot':69 'canon':99,195,358 'capability-advertis':87 'capabl':50,88,296 'chang':156,209 'clariti':162 'client':139,284,336 'codebas':198,350 'command':48 'compat':5,36,41,106,219,392,409 'complet':385 'consum':24,60,172,291,440 'continu':345 'contract':140,205,266,344,388,437 'control':83 'core':91,405 'correl':293 'cutoff':31 'data':443 'depend':62 'differ':228,391 'discoveri':279 'distil':78 'document':256 'domain':38 'drift':234 'emit':125,226,371 'escap':137 'event':229,445 'exampl':299 'exist':56 'explicit':149,244 'expos':236 'extern':122,204,386 'flow':214 'forev':271 'forward':164 'function':347 'futur':352 'helper':220 'identifi':10,51,96,117,192,212,359,374 'immedi':370 'implement':90,316 'init':325 'insert':103 'insid':196 'intern':9,46,100,116,161,306,360,382,395 'isol':410 'join':442 'keep':25,93,142,213,312 'key':180 'label':179 'leav':424 'legaci':2,14,33,121,177 'legacy-wire-name-compat-transl':1 'level':23,171 'limit':199 'logic':189,406 'major':253 'map':113,201 'messag':298 'method':92 'migrat':165,353 'minor':251,333 'mix':237,431 'mixed-wir':430 'name':4,16,35,67,101,123,206,238,276,317,396,402,429,433 'narrow':105 'new':115,191,357,428 'next':250,259,331 'observ':285 'old':65,342,401 'one':218,420 'other':425 'otherwis':227 'pars':175 'partial':287 'patch':22,74,170,377 'patch-level':21,169 'pattern':77,363 'payload':126,224,328,421 'place':145 'plan':29,150,332 'preserv':160,273,408 'product':303 'refactor':383 'releas':75,254,334,378 'remain':194 'remot':82 'remote-control':81 'remov':245 'renam':8,54,95,133,304,373 'result':281,327 'reus':217 'review':80 'rule':181 'safe':70 'scatter':399 'scope':127 'sdk':57,335 'serial':18,184 'shim':241 'skill':32 'skill-legacy-wire-name-compat-translation' 'sourc':76 'source-ychampion' 'specif':132 'stabl':274 'still':61,174,289,435 'surfac':282 'surpris':168 'symbol':134 'task':309,323 'temporari':265 'throughout':187 'tie':239 'time':185 'tool':47,307 'topic-agent-skills' 'topic-ai-agents' 'topic-cli' 'topic-coding-agents' 'topic-context-engineering' 'topic-developer-tools' 'topic-mcp' 'topic-multi-agent' 'topic-terminal-ui' 'translat':6,7,37,107,129,182,262,288,319,412 'transport':85,232 'trigger':42 'type':230,422 'ui':59 'unrel':211 'untouch':216 'updat':418 'use':355 'version':30,151 'wire':3,15,34,40,66,110,178,223,275,343,387,432 'wire-compat':39 'without':167 'work':26,166,354","prices":[{"id":"e4d0d61d-28af-4ba1-b646-0819b076bdb1","listingId":"311d28b5-6929-47dd-a782-cacdcdfa9430","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"ychampion","category":"cskill-agents","install_from":"skills.sh"},"createdAt":"2026-04-18T22:20:34.900Z"}],"sources":[{"listingId":"311d28b5-6929-47dd-a782-cacdcdfa9430","source":"github","sourceId":"ychampion/cskill-agents/legacy-wire-name-compat-translation","sourceUrl":"https://github.com/ychampion/cskill-agents/tree/main/skills/legacy-wire-name-compat-translation","isPrimary":false,"firstSeenAt":"2026-04-18T22:20:34.900Z","lastSeenAt":"2026-04-22T06:56:50.110Z"}],"details":{"listingId":"311d28b5-6929-47dd-a782-cacdcdfa9430","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"ychampion","slug":"legacy-wire-name-compat-translation","github":{"repo":"ychampion/cskill-agents","stars":34,"topics":["agent-skills","ai-agents","cli","coding-agents","context-engineering","developer-tools","mcp","multi-agent","terminal-ui"],"license":"mit","html_url":"https://github.com/ychampion/cskill-agents","pushed_at":"2026-04-04T14:13:23Z","description":"Agent skills for coding CLIs, multi-agent runtimes, context engines, MCP extensions, and terminal tooling. Instead of using claude code's source code, give your agent skills to create your own!","skill_md_sha":"0be8e5f43ff01b89c38700cf94bb12754925d8d4","skill_md_path":"skills/legacy-wire-name-compat-translation/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/ychampion/cskill-agents/tree/main/skills/legacy-wire-name-compat-translation"},"layout":"multi","source":"github","category":"cskill-agents","frontmatter":{"name":"legacy-wire-name-compat-translation","description":"Translate renamed internal identifiers back to their legacy wire names at serialization boundaries so patch-level consumers keep working until the planned version cutoff."},"skills_sh_url":"https://skills.sh/ychampion/cskill-agents/legacy-wire-name-compat-translation"},"updatedAt":"2026-04-22T06:56:50.110Z"}}