We have tested your model with Gurobi 3.0.1 on two different Mac OS X systems as well as other platforms and we get an optimal solution with objective 12. We are not aware of any constraint violations. The only thing we know is that the notation "$ empty column" is not standard and may be not read correctly. You could try to remove that. If that still fails, post some more details about the solution and the specific violations, and we can investigate further. Thanks.
When solving an integer program, Gurobi uses branch-and-bound, which solves linear programming subproblems. However, solving a linear program involves fixed-precision floating-point arithmetic. So Gurobi may return values like 1.52656e-16 or 1.99999999875 for integer variables. This is not a bug. Gurobi uses the tolerance parameter IntFeasTol to determine whether a variable is "close enough" to an integer value to be considered integer feasible. More details about the IntFeasTol parameter can be found in:
http://www.gurobi.com/doc/30/refman/node489.html
Additionally, for various reasons, Gurobi does not try to round these values back to integer variables. So when you need to review the solution from an integer program, keep in mind that the X attribute for an integer variable may not be exactly integer, but it will be within IntFeasTol of an integer value. This appears to be the issue in this case.
Finally, be careful of rounding when a model has very large coefficients. For example, if both x and y are integer variables, the constraint:
y = 1e8 x
could be satisfied by y = 1 and x = 1e-8, if IntFeasTol = 1e-5. This is the danger of working with very large numbers. (Though this wasn't an issue in this case).
I'm not sure of the context you're considering, but my guess is that you may be confusing two separate issues. A feasible solution will be feasible with respect to FeasibilityTol unless Gurobi reports otherwise. Generally, you may obtain an infeasible solution when there are numerical issues with the model, such as a particularly large range of model coefficients. In this case, the Python code will indicate the constraints that are violated. Although this is always a possibility, it is rather uncommon.