C.W.K.
Stream
Lesson 05 of 05 · published

Originals, Clones, and the Sunset Window

~9 min · policy, originals, clones

Level 0Silent
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"The clone is the default. The original stays selectable. Neither is ever silently swapped for the other."

Four Profiles, Not Two With Costumes

The family has four voice profiles: two clones — cwk and pippa — and the two more natural original voices they were cloned from, michael and joanne. The important design call is that all four are independent profiles, not a clone with its original hidden behind it as an alias. Speak exposes all four. A clone is the default because it's the one being matured; the original is kept explicitly selectable through its sunset window.

Why Keep the Original Selectable at All

A clone matures over time; early on, the original often still sounds more natural. Deleting the original the moment a clone exists would throw away the better voice to honor a plan. Instead the original stays reachable as its own profile, and the choice between clone and original is always explicit — never a silent substitution in either direction. The sunset is a window, not a switch flipped overnight.

Accounts Don't Rescue Each Other

The primary account is canonical and binds all four profiles; the secondary account currently binds only the two clones. Settings can make the secondary the persisted active account for all new synthesis. But an account never silently covers for another: if the active account lacks the exact binding, the request fails loud (Track 3, lesson 4) rather than quietly borrowing from the other account. Explicit everywhere — which profile, which account, clone or original.

Code

Defaults that never hide the alternative·python
# Four INDEPENDENT profiles. Clones are the defaults; originals are their
# more-natural predecessors, kept selectable through a sunset window.
PROFILES = {
    "cwk":     Profile(clone_of="michael", default=True),
    "pippa":   Profile(clone_of="joanne",  default=True),
    "michael": Profile(original=True),   # a separate profile, NOT an alias of cwk
    "joanne":  Profile(original=True),   # a separate profile, NOT an alias of pippa
}

# Primary binds all four. Secondary currently binds only the two clones.
# An original never silently stands in for its clone, and no account
# silently stands in for another -- every selection is explicit.

External links

Exercise

Think of a migration where a new version was meant to replace an old one — a v2 API, a new editor, a rebuilt component. Was the old one kept selectable during a sunset window, or hard-cut on a date? If it was hard-cut, name one case where the old one was still the better choice at cutover time. Design the window you'd have used instead.
Hint
The right question isn't 'is the new one ready?' but 'is the new one better than the old one, for this specific use, today?' A window lets that answer differ per use; a hard cutover forces one answer for everyone.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.