This, perhaps, is the most relevant page in the entire documentation. Sound changes are all about sound change rules, of course, and in this chapter I will talk about them.
a/e/_#
This is a very basic rule that contains the three required pieces of information: the Original, the New, and a Position.
In this version of VSCA the number of symbols (a symbol is either a polygraph or a monograph) in the Original and New fields must be the same. There is one exception, though: the New field may be empty. This way you can remove sounds from the original language.
fsx//_#
Here, the fricatives "f", "s", and "x" disappear at the end of a word.
Note that at the moment when VSCA checks if the numbers of symbols in either field are equal, variables are counted as one symbol. What happens if the variable in your Original doesn't represent the same number of actual symbols as the variable in your New is more or less predictable, but in general this is discouraged.
See also Variables for a more detailed discussion of variables.
In this version you can't suddenly have symbols appear between two other symbols. The rule /h/a_a to insert an "h" between two "a"s does not (yet) work. You could work-around this with a rule like [aa]/[aha]/_. This immediately brings us to the topic of polygraphs, which are completely covered in the page on symbols.
An Exception field is more or less the same as a Position field, except it serves the opposite goal: it tells VSCA when a rule should not apply.
For example, if you want to change a long o with a short one before a consonant cluster, but not before nk, your rule will look like this. Assume that C is a variable that represents all your consonants.
[o:]/o/_CC UNLESS _nk
You can combine multiple exceptions in one rule. Same example, except that you don't want to change the long o before a geminate cluster either:
[o:]/o/_CC UNLESS _nk OR _C+
And even this crazy thing works:
a/e/_# UNLESS i_ OR s_ OR mb_ OR #t
Let me break that down, just to be clear. This rule says: "replace a word-final a with an e, unless it is preceded by an i or an s or by the cluster mb or unless the word starts with a t".
All that, in just one simple rule.
As of version 0.4, you can specify optional symbols in Position fields (and therefore in Exception fields, and technically also in polygraphs in variable values, Original fields, and New fields, although I don't know what the purpose of that would be since you have alternatives anyway).
For example, the following ruleset nasalises vowels before an "n" or an "mn":
V=aeiou NV=[<V>~] V/<NV>/_(m)n
Note that pluses (see Variables) inside parens don't work. I see no reason why you would need it, but for completeness sake I just want to cover this fact.
However, pluses inside polygraphs inside parens work fine, so this ruleset does what you'd expect it to do.
V=aeiou NV=[<V>~] N=mn V/<NV>/_([N+])n
That immediately answers another question: you can put variables inside parens, yes.
V=aeiou NV=[<V>~] N=mn V/<NV>/_(N)n
Also note that this feature is pretty experimental. I've tested it a bit but I can't guarantee if it works entirely properly. Anyway, feel free to play around with it and tell me if something's wrong. I did not receive any complaints for the implementation in 0.4, and with 0.5 it's still the same implementation, but I still suspect to see misbehaviour in this part of the VSCA in the near future. I can't really understand why it would work perfect :)
VSCA - Anything. Anywhere. Anytime