It seems that the wedge product does not allow (yet) collecting scalar terms
Example
{f,g}::DifferentialForm(degree=0).
{V, W}::DifferentialForm(degree=1).
foo := f V ^ g W;
canonicalise(foo);
sort_product(foo);
collect_factors(foo);
In the above example all the simplification algorithms return the original foo
expression, while the expected result is $f g V \wedge W$.