In Civ3, I haven't seen any indication that India is aggressive; the bug in Civ1 is not present in Civ3, or at least I haven't seen any evidence of it in 20 years.
Based on the gamerant.com excerpt, I think Sid is just being coy about how the bug works, if anything trying to perpetuate the legend - "it's almost fun to keep mysterious." The traditional mathematical underflow explanation makes a lot of sense, and is consistent with his statement that "the negative stat is not true". They way it would work is that the aggression is an 8-bit unsigned integer, with possible values from 0 through 255 (inclusive). The aggression levels were likely either 0-4 or 1-5 by default, and in various places in the code there were checks of aggression, such as:
Code:
if (civ.aggression > 3)
build nuke
end if
Or
Code:
chanceOfBuildingNuke = 2 * civ.aggression
chanceOfDeclaringWar = 3 * civ.aggression
These would be straightforward ways to make an aggressive civ be more likely to declare war or build a nuke, and to have a minimum aggression level required for building nukes.
If there were modifiers that lowered aggression levels based on player actions or other happenings in the game, the original 0-4 or 1-5 range could be exceeded. Let's say you refused a tribute demand from a civ with aggression 5, maybe that bumps their aggression up to 6 and makes them more likely to declare war.
Conversely, if Gandhi was the lowest-aggression civ with a rating of 0 on a 0-4 scale, and making peace causes aggression to (perhaps temporarily) drop by 2, then his aggression would go to -2, but because the value can only be in the range 0-255, underflow happens, and his aggression gets set to 254.
At this point he would be above any threshold for building nukes, and if there were blocks like the second code block above where aggression is a multiplier on certain actions, his likelihood of taking those actions would be off the charts.
The negative stat is indeed not true, the bug is because the stat is a much higher positive value than anyone ever anticipated.
This is also the sort of bug that would be easy to create as a programmer. The people writing the code that uses aggression to impact AI behavior assume it's in a 0-4 or 1-5 range, and the people writing the code that modifies the aggression forget that it's a signed byte and not an unsigned one (which allows negatives). What's more surprising is that it wasn't caught in QA testing, but it may have been a last-minute change, and it might take a few games to notice the change, especially since it doesn't mean Gandhi conquers the world every time, he might wind up being conquered himself far more often.
Sid noticeably didn't put forward any alternative explanation, so by Occam's razor I'm going to say most likely the traditional explanation is correct, and it's just a good way to keep people talking about it to claim that isn't the case and cite a minor technical oversight (the existence of negative values) in some explanations of it.