In a correct gene interpretation, if you splice out the introns, and read the bases from the start to the stop codon, the number of bases should be a multiple of three, and there should be no in-frame stop codons (TAA, TAG, or TGA) before the real stop codon. Each of the codon models in this HMM, denoted by "ccc", use higher order Markov models in their states so that, e.g., the probability of the base in the last position of the codon depends on the previous two bases in the input sequence. The probability distributions are set so that the probability of a TAA, TAG, or TGA in such a codon model is zero.
For any input DNA, this HMM assures that for every path, if you splice out bases considered to be in introns, the number of bases between the ATG state in the start codon model and the stop codon in the stop codon model is a multiple of three. However, it turns out that this model can sometimes still mistakenly allow a nonzero probability path for an input sequence that has an in-frame stop codon. Explain how this could happen. What would you propose to fix this, if anything? If you doubt this is possible, try to construct an input for the genefinder described in this article, HMMgene web server, that it interprets as having an in-frame stop codon. I haven't tried this, but I suspect you will need lots of good codons after the in-frame stop codon to tempt it to go on interpreting bases as coding.)