Voice ForgeTHE DOCUMENTATION
v2.9.1
SOURCE REFERENCE Generated from the current pluginskills/voice-forge/references/derive.md

Derive a profile in another language

Start a profile in a new language from a profile you already trained, so you do not begin from zero. Example: explainer-es has many rules; explainer-en starts with the ones that travel to English.

A derived profile is a starting point, not a finished voice. It is marked stage: provisional. Its rules are transferred until training in the new language confirms them. Say this to the user plainly, every time it matters.

1. Create it

Run python3 <skill>/scripts/vf.py derive --from <source> --to <target>. The target name ends in the new language (-en or -es). It never overwrites: if the target exists, it stops.

It reads each source rule's transfer label, or uses the section default when the rule has none:

Label What derive does
any Copies the rule; it needs a translation
adapt Copies the rule; the idea stays, but wording, examples or numbers must change
es-only, en-only Leaves it out and lists it in Notes as "not transferred"

Section defaults: architecture, argument, paragraphs, discourse and evidence are any; sentences, vocabulary, voice and constraints are adapt. A rule with auto: angle-quotes is es-only.

Every copied rule gets an adapt line, status: approved TODO and evidence: transferred from <source> <ID>@<fingerprint>. The profile fails validation until each rule is adapted and approved. The auto checks no-dashes and max-paragraph-sentences stay, because they work the same in every language. All other auto checks are dropped and noted in the adapt line.

2. Adapt the rules with the user

Show the list of left out rules first, in one short message: "These stay in <source> only: ... Agree?" A rule the user wants after all can be added later as a stated rule (see manage-rules.md).

Then go through the copied rules, a few at a time:

  1. Translate the values: the instruction, applies, except and check. Keep the meaning. The labels stay in English because the scripts read them: field names, IDs, section headings, PASS and VIOLATION, and keywords such as all prose and none (or their Spanish forms todo el texto and ninguna).
  2. For adapt rules, change what does not fit: example phrases ("in recent years" becomes «en los últimos años»), pronouns and address (tú or usted). A number that came from measuring texts in the other language does not transfer. Do not guess a new one. Drop that auto check and keep the rule as a tendency the reviewer judges; once the user has texts in the new language, measure.py stats gives a real number to propose.
  3. Show the whole block. Ask yes, no or reword. On yes, set status: approved <today> and delete the adapt line. On no, delete the rule and add a Notes line - not transferred: <source> <ID> (user said no): <instruction>.
  4. Keep transfer, evidence and the ID as they are.

Also translate section 1 (the brief), register and audience in the front matter, the Notes, and the topic descriptions in topics.md (slugs may stay). Ask the user to check them. Then run vf.py validate --profile <target> and vf.py save -m "derive <target> from <source>".

3. Train it

Training still matters. In Train mode, a provisional profile's passages apply its transferred rules first, so each round tests them (see train.md). When a round confirms a transferred rule and the user agrees, add the round ID to that rule's evidence: it becomes confirmed. A contradicted rule gets reworded or dropped, with the user's yes, as usual.

vf.py status shows the progress: "PROVISIONAL: 7 of 12 transferred rules confirmed by training."

4. Make it official

When the user is happy, run vf.py make-official --profile <target>. It refuses while some rules are still only transferred, unless the user asks for --force.

5. Bring in later changes from the source

vf.py derive --to <target> --update writes rules.update.md with rules added or changed in the source since the copy. It never changes rules.md. For each block, adapt it as in step 2. Add a new rule with the next free ID (vf.py next-id, then vf.py rule add). For a changed rule, replace the target's rule (vf.py rule replace), keeping the target's ID and using the new fingerprint. Delete rules.update.md when done.

← Back to the reference library

Find your next step