1) i only skimmed this quickly, but i don't think the changes to SweetSpotSimilarity are back compatible ... setLengthNormFactors has a new arg list.
2) ditto for the public "Info" constructor in MemoryIndex.java
3) as long as we are adding a new lengthNorm method that has access to new data about the stream, would it also make sense to pass in fieldState.position? and/or a new count of hte number of times getPositionIncrementGap(fieldInfo.name) is called? Those also seem like they could be useful, and should be just as cheap to keep track of as numOverlap and length. (this occured to me because of recent threads on solr-user asking about lengthNorm and multivalued fields ... there may only be one fieldNorm per field name, but with stats like that we could at least do some interesting things based on the average length of each field value.
4) independent of #3, we may want to consider making FieldInvertState a public class and passing it directly to lengthNorm ... that way lengthNorm can utilize whatever data it wants, and we can add more available data later without changing the API again. We could even deprecate lengthNorm entirely and add a new FieldInvertState.norm property that a new Similarity.computeNorm(FieldInvertState) could set directly so it could choose to ignore the doc & field boosts altogether if it wanted to.